diff --git a/NGitLab/Models/ContainerExpirationPolicy.cs b/NGitLab/Models/ContainerExpirationPolicy.cs new file mode 100644 index 00000000..56d2f7f7 --- /dev/null +++ b/NGitLab/Models/ContainerExpirationPolicy.cs @@ -0,0 +1,26 @@ +using System; +using System.Text.Json.Serialization; + +public class ContainerExpirationPolicy +{ + [JsonPropertyName("cadence")] + public string Cadence { get; set; } + + [JsonPropertyName("enabled")] + public bool Enabled { get; set; } + + [JsonPropertyName("keep_n")] + public long KeepN { get; set; } + + [JsonPropertyName("older_than")] + public string OlderThan { get; set; } + + [JsonPropertyName("name_regex")] + public string NameRegex { get; set; } + + [JsonPropertyName("name_regex_keep")] + public string NameRegexKeep { get; set; } + + [JsonPropertyName("next_run_at")] + public DateTime? NextRunAt { get; set; } +} \ No newline at end of file diff --git a/NGitLab/Models/Project.cs b/NGitLab/Models/Project.cs index 86bf3d63..5e327f8b 100644 --- a/NGitLab/Models/Project.cs +++ b/NGitLab/Models/Project.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Diagnostics; using System.Text.Json.Serialization; @@ -29,14 +29,14 @@ public class Project public bool JobEnabled { get; set; } [JsonPropertyName("builds_access_level")] - public string BuildsAccessLevel { get; set; } + public RepositoryAccessLevel BuildsAccessLevel { get; set; } [JsonPropertyName("snippets_enabled")] [Obsolete("Deprecated by GitLab. Use SnippetsAccessLevel instead")] public bool SnippetsEnabled { get; set; } [JsonPropertyName("snippets_access_level")] - public string SnippetsAccessLevel { get; set; } + public RepositoryAccessLevel SnippetsAccessLevel { get; set; } [JsonPropertyName("resolve_outdated_diff_discussions")] public bool ResolveOutdatedDiffDiscussions { get; set; } @@ -67,7 +67,7 @@ public class Project public bool IssuesEnabled { get; set; } [JsonPropertyName("issues_access_level")] - public string IssuesAccessLevel { get; set; } + public RepositoryAccessLevel IssuesAccessLevel { get; set; } [JsonPropertyName("merge_pipelines_enabled")] public bool MergePipelinesEnabled { get; set; } @@ -77,7 +77,7 @@ public class Project public bool MergeRequestsEnabled { get; set; } [JsonPropertyName("merge_requests_access_level")] - public string MergeRequestsAccessLevel { get; set; } + public RepositoryAccessLevel MergeRequestsAccessLevel { get; set; } [JsonPropertyName("merge_trains_enabled")] public bool MergeTrainsEnabled { get; set; } @@ -96,7 +96,7 @@ public class Project public bool WikiEnabled { get; set; } [JsonPropertyName("wiki_access_level")] - public string WikiAccessLevel { get; set; } + public RepositoryAccessLevel WikiAccessLevel { get; set; } [JsonPropertyName("created_at")] public DateTime CreatedAt { get; set; } @@ -220,11 +220,176 @@ public class Project public ProjectPermissions Permissions { get; set; } [JsonPropertyName("releases_access_level")] - public ReleasesAccessLevel ReleasesAccessLevel { get; set; } + public RepositoryAccessLevel ReleasesAccessLevel { get; set; } + + [JsonPropertyName("requirements_access_level")] + public RepositoryAccessLevel RequirementsAccessLevel { get; set; } [JsonPropertyName("mr_default_target_self")] public bool? MrDefaultTargetSelf { get; set; } [JsonPropertyName("ci_default_git_depth")] public int? CiDefaultGitDepth { get; set; } + + [JsonPropertyName("readme_url")] + public string ReadmeUrl { get; set; } + + [JsonPropertyName("container_registry_image_prefix")] + public string ContainerRegistryImagePrefix { get; set; } + + [JsonPropertyName("marked_for_deletion_at")] + public DateTime? MarkedForDeletionAt { get; set; } + + [JsonPropertyName("marked_for_deletion_on")] + public DateTime? MarkedForDeletionOn { get; set; } + + [JsonPropertyName("packages_enabled")] + public bool PackagesEnabled { get; set; } + + [JsonPropertyName("container_expiration_policy")] + public ContainerExpirationPolicy ContainerExpirationPolicy { get; set; } + + [JsonPropertyName("repository_object_format")] + public string RepositoryObjectFormat { get; set; } + + [JsonPropertyName("service_desk_enabled")] + public bool ServiceDeskEnabled { get; set; } + + [JsonPropertyName("service_desk_address")] + public string ServiceDeskAddress { get; set; } + + [JsonPropertyName("can_create_merge_request_in")] + public bool CanCreateMergeRequestIn { get; set; } + + [JsonPropertyName("pages_access_level")] + public RepositoryAccessLevel PagesAccessLevel { get; set; } + + [JsonPropertyName("analytics_access_level")] + public RepositoryAccessLevel AnalyticsAccessLevel { get; set; } + + [JsonPropertyName("container_registry_access_level")] + public RepositoryAccessLevel ContainerRegistryAccessLevel { get; set; } + + [JsonPropertyName("security_and_compliance_access_level")] + public RepositoryAccessLevel SecurityAndComplianceAccessLevel { get; set; } + + [JsonPropertyName("environments_access_level")] + public RepositoryAccessLevel EnvironmentsAccessLevel { get; set; } + + [JsonPropertyName("feature_flags_access_level")] + public RepositoryAccessLevel FeatureFlagsAccessLevel { get; set; } + + [JsonPropertyName("infrastructure_access_level")] + public RepositoryAccessLevel InfrastructureAccessLevel { get; set; } + + [JsonPropertyName("monitor_access_level")] + public RepositoryAccessLevel MonitorAccessLevel { get; set; } + + [JsonPropertyName("model_experiments_access_level")] + public RepositoryAccessLevel ModelExperimentsAccessLevel { get; set; } + + [JsonPropertyName("model_registry_access_level")] + public RepositoryAccessLevel ModelRegistryAccessLevel { get; set; } + + [JsonPropertyName("emails_disabled")] + public bool? EmailsDisabled { get; set; } + + [JsonPropertyName("emails_enabled")] + public bool? EmailsEnabled { get; set; } + + [JsonPropertyName("import_url")] + public string ImportUrl { get; set; } + + [JsonPropertyName("import_type")] + public string ImportType { get; set; } + + [JsonPropertyName("description_html")] + public string DescriptionHtml { get; set; } + + [JsonPropertyName("updated_at")] + public DateTime UpdatedAt { get; set; } + + [JsonPropertyName("ci_delete_pipelines_in_seconds")] + public long? CiDeletePipelinesInSeconds { get; set; } + + [JsonPropertyName("ci_forward_deployment_enabled")] + public bool CiForwardDeploymentEnabled { get; set; } + + [JsonPropertyName("ci_forward_deployment_rollback_allowed")] + public bool CiForwardDeploymentRollbackAllowed { get; set; } + + [JsonPropertyName("ci_job_token_scope_enabled")] + public bool CiJobTokenScopeEnabled { get; set; } + + [JsonPropertyName("ci_separated_caches")] + public bool CiSeparatedCaches { get; set; } + + [JsonPropertyName("ci_allow_fork_pipelines_to_run_in_parent_project")] + public bool CiAllowForkPipelinesToRunInParentProject { get; set; } + + [JsonPropertyName("ci_id_token_sub_claim_components")] + public string[] CiIdTokenSubClaimComponents { get; set; } + + [JsonPropertyName("build_git_strategy")] + public string BuildGitStrategy { get; set; } + + [JsonPropertyName("keep_latest_artifact")] + public bool KeepLatestArtifact { get; set; } + + [JsonPropertyName("restrict_user_defined_variables")] + public bool RestrictUserDefinedVariables { get; set; } + + [JsonPropertyName("ci_pipeline_variables_minimum_override_role")] + public string CiPipelineVariablesMinimumOverrideRole { get; set; } + + [JsonPropertyName("runner_token_expiration_interval")] + public long? RunnerTokenExpirationInterval { get; set; } + + [JsonPropertyName("auto_cancel_pending_pipelines")] + public string AutoCancelPendingPipelines { get; set; } + + [JsonPropertyName("auto_devops_enabled")] + public bool AutoDevopsEnabled { get; set; } + + [JsonPropertyName("auto_devops_deploy_strategy")] + public string AutoDevopsDeployStrategy { get; set; } + + [JsonPropertyName("ci_push_repository_for_job_token_allowed")] + public bool CiPushRepositoryForJobTokenAllowed { get; set; } + + [JsonPropertyName("ci_config_path")] + public string CiConfigPath { get; set; } + + [JsonPropertyName("allow_merge_on_skipped_pipeline")] + public bool? AllowMergeOnSkippedPipeline { get; set; } + + [JsonPropertyName("remove_source_branch_after_merge")] + public bool RemoveSourceBranchAfterMerge { get; set; } + + [JsonPropertyName("merge_request_title_regex")] + public string MergeRequestTitleRegex { get; set; } + + [JsonPropertyName("enforce_auth_checks_on_uploads")] + public bool EnforceAuthChecksOnUploads { get; set; } + + [JsonPropertyName("suggestion_commit_message")] + public string SuggestionCommitMessage { get; set; } + + [JsonPropertyName("merge_commit_template")] + public string MergeCommitTemplate { get; set; } + + [JsonPropertyName("squash_commit_template")] + public string SquashCommitTemplate { get; set; } + + [JsonPropertyName("issue_branch_template")] + public string IssueBranchTemplate { get; set; } + + [JsonPropertyName("warn_about_potentially_unwanted_characters")] + public bool WarnAboutPotentiallyUnwantedCharacters { get; set; } + + [JsonPropertyName("autoclose_referenced_issues")] + public bool AutocloseReferencedIssues { get; set; } + + [JsonPropertyName("max_artifacts_size")] + public long? MaxArtifactsSize { get; set; } } diff --git a/NGitLab/Models/RepositoryAccessLevel.cs b/NGitLab/Models/RepositoryAccessLevel.cs index 90819aec..9485ee8a 100644 --- a/NGitLab/Models/RepositoryAccessLevel.cs +++ b/NGitLab/Models/RepositoryAccessLevel.cs @@ -4,5 +4,6 @@ public enum RepositoryAccessLevel { Disabled, Private, - Enabled, + Enabled, + Public // Only valid for pages_access_level }