All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.gitlab.ProjectArgs Maven / Gradle / Ivy

There is a newer version: 8.7.1
Show newest version
// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.gitlab;

import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.gitlab.inputs.ProjectContainerExpirationPolicyArgs;
import com.pulumi.gitlab.inputs.ProjectPushRulesArgs;
import java.lang.Boolean;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class ProjectArgs extends com.pulumi.resources.ResourceArgs {

    public static final ProjectArgs Empty = new ProjectArgs();

    /**
     * Set to true if you want to treat skipped pipelines as if they finished with success.
     * 
     */
    @Import(name="allowMergeOnSkippedPipeline")
    private @Nullable Output allowMergeOnSkippedPipeline;

    /**
     * @return Set to true if you want to treat skipped pipelines as if they finished with success.
     * 
     */
    public Optional> allowMergeOnSkippedPipeline() {
        return Optional.ofNullable(this.allowMergeOnSkippedPipeline);
    }

    /**
     * Set whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only.
     * 
     */
    @Import(name="allowPipelineTriggerApproveDeployment")
    private @Nullable Output allowPipelineTriggerApproveDeployment;

    /**
     * @return Set whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only.
     * 
     */
    public Optional> allowPipelineTriggerApproveDeployment() {
        return Optional.ofNullable(this.allowPipelineTriggerApproveDeployment);
    }

    /**
     * Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="analyticsAccessLevel")
    private @Nullable Output analyticsAccessLevel;

    /**
     * @return Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> analyticsAccessLevel() {
        return Optional.ofNullable(this.analyticsAccessLevel);
    }

    /**
     * Number of merge request approvals required for merging. Default is 0.
     * This field **does not** work well in combination with the `gitlab.ProjectApprovalRule` resource
     * and is most likely gonna be deprecated in a future GitLab version (see [this upstream epic](https://gitlab.com/groups/gitlab-org/-/epics/7572)).
     * In the meantime we recommend against using this attribute and use `gitlab.ProjectApprovalRule` instead.
     * 
     */
    @Import(name="approvalsBeforeMerge")
    private @Nullable Output approvalsBeforeMerge;

    /**
     * @return Number of merge request approvals required for merging. Default is 0.
     * This field **does not** work well in combination with the `gitlab.ProjectApprovalRule` resource
     * and is most likely gonna be deprecated in a future GitLab version (see [this upstream epic](https://gitlab.com/groups/gitlab-org/-/epics/7572)).
     * In the meantime we recommend against using this attribute and use `gitlab.ProjectApprovalRule` instead.
     * 
     */
    public Optional> approvalsBeforeMerge() {
        return Optional.ofNullable(this.approvalsBeforeMerge);
    }

    /**
     * Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
     * 
     */
    @Import(name="archiveOnDestroy")
    private @Nullable Output archiveOnDestroy;

    /**
     * @return Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
     * 
     */
    public Optional> archiveOnDestroy() {
        return Optional.ofNullable(this.archiveOnDestroy);
    }

    /**
     * Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
     * 
     */
    @Import(name="archived")
    private @Nullable Output archived;

    /**
     * @return Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
     * 
     */
    public Optional> archived() {
        return Optional.ofNullable(this.archived);
    }

    /**
     * Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
     * 
     */
    @Import(name="autoCancelPendingPipelines")
    private @Nullable Output autoCancelPendingPipelines;

    /**
     * @return Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
     * 
     */
    public Optional> autoCancelPendingPipelines() {
        return Optional.ofNullable(this.autoCancelPendingPipelines);
    }

    /**
     * Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
     * 
     */
    @Import(name="autoDevopsDeployStrategy")
    private @Nullable Output autoDevopsDeployStrategy;

    /**
     * @return Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
     * 
     */
    public Optional> autoDevopsDeployStrategy() {
        return Optional.ofNullable(this.autoDevopsDeployStrategy);
    }

    /**
     * Enable Auto DevOps for this project.
     * 
     */
    @Import(name="autoDevopsEnabled")
    private @Nullable Output autoDevopsEnabled;

    /**
     * @return Enable Auto DevOps for this project.
     * 
     */
    public Optional> autoDevopsEnabled() {
        return Optional.ofNullable(this.autoDevopsEnabled);
    }

    /**
     * Set whether auto-closing referenced issues on default branch.
     * 
     */
    @Import(name="autocloseReferencedIssues")
    private @Nullable Output autocloseReferencedIssues;

    /**
     * @return Set whether auto-closing referenced issues on default branch.
     * 
     */
    public Optional> autocloseReferencedIssues() {
        return Optional.ofNullable(this.autocloseReferencedIssues);
    }

    /**
     * A local path to the avatar image to upload. **Note**: not available for imported resources.
     * 
     */
    @Import(name="avatar")
    private @Nullable Output avatar;

    /**
     * @return A local path to the avatar image to upload. **Note**: not available for imported resources.
     * 
     */
    public Optional> avatar() {
        return Optional.ofNullable(this.avatar);
    }

    /**
     * The hash of the avatar image. Use `filesha256("path/to/avatar.png")` whenever possible. **Note**: this is used to trigger an update of the avatar. If it's not given, but an avatar is given, the avatar will be updated each time.
     * 
     */
    @Import(name="avatarHash")
    private @Nullable Output avatarHash;

    /**
     * @return The hash of the avatar image. Use `filesha256("path/to/avatar.png")` whenever possible. **Note**: this is used to trigger an update of the avatar. If it's not given, but an avatar is given, the avatar will be updated each time.
     * 
     */
    public Optional> avatarHash() {
        return Optional.ofNullable(this.avatarHash);
    }

    /**
     * Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
     * 
     * @deprecated
     * build_coverage_regex is removed in GitLab 15.0.
     * 
     */
    @Deprecated /* build_coverage_regex is removed in GitLab 15.0. */
    @Import(name="buildCoverageRegex")
    private @Nullable Output buildCoverageRegex;

    /**
     * @return Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
     * 
     * @deprecated
     * build_coverage_regex is removed in GitLab 15.0.
     * 
     */
    @Deprecated /* build_coverage_regex is removed in GitLab 15.0. */
    public Optional> buildCoverageRegex() {
        return Optional.ofNullable(this.buildCoverageRegex);
    }

    /**
     * The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
     * 
     */
    @Import(name="buildGitStrategy")
    private @Nullable Output buildGitStrategy;

    /**
     * @return The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
     * 
     */
    public Optional> buildGitStrategy() {
        return Optional.ofNullable(this.buildGitStrategy);
    }

    /**
     * The maximum amount of time, in seconds, that a job can run.
     * 
     */
    @Import(name="buildTimeout")
    private @Nullable Output buildTimeout;

    /**
     * @return The maximum amount of time, in seconds, that a job can run.
     * 
     */
    public Optional> buildTimeout() {
        return Optional.ofNullable(this.buildTimeout);
    }

    /**
     * Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="buildsAccessLevel")
    private @Nullable Output buildsAccessLevel;

    /**
     * @return Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> buildsAccessLevel() {
        return Optional.ofNullable(this.buildsAccessLevel);
    }

    /**
     * Custom Path to CI config file.
     * 
     */
    @Import(name="ciConfigPath")
    private @Nullable Output ciConfigPath;

    /**
     * @return Custom Path to CI config file.
     * 
     */
    public Optional> ciConfigPath() {
        return Optional.ofNullable(this.ciConfigPath);
    }

    /**
     * Default number of revisions for shallow cloning.
     * 
     */
    @Import(name="ciDefaultGitDepth")
    private @Nullable Output ciDefaultGitDepth;

    /**
     * @return Default number of revisions for shallow cloning.
     * 
     */
    public Optional> ciDefaultGitDepth() {
        return Optional.ofNullable(this.ciDefaultGitDepth);
    }

    /**
     * When a new deployment job starts, skip older deployment jobs that are still pending.
     * 
     */
    @Import(name="ciForwardDeploymentEnabled")
    private @Nullable Output ciForwardDeploymentEnabled;

    /**
     * @return When a new deployment job starts, skip older deployment jobs that are still pending.
     * 
     */
    public Optional> ciForwardDeploymentEnabled() {
        return Optional.ofNullable(this.ciForwardDeploymentEnabled);
    }

    /**
     * The role required to cancel a pipeline or job. Introduced in GitLab 16.8. Premium and Ultimate only. Valid values are `developer`, `maintainer`, `no one`
     * 
     */
    @Import(name="ciRestrictPipelineCancellationRole")
    private @Nullable Output ciRestrictPipelineCancellationRole;

    /**
     * @return The role required to cancel a pipeline or job. Introduced in GitLab 16.8. Premium and Ultimate only. Valid values are `developer`, `maintainer`, `no one`
     * 
     */
    public Optional> ciRestrictPipelineCancellationRole() {
        return Optional.ofNullable(this.ciRestrictPipelineCancellationRole);
    }

    /**
     * Use separate caches for protected branches.
     * 
     */
    @Import(name="ciSeparatedCaches")
    private @Nullable Output ciSeparatedCaches;

    /**
     * @return Use separate caches for protected branches.
     * 
     */
    public Optional> ciSeparatedCaches() {
        return Optional.ofNullable(this.ciSeparatedCaches);
    }

    /**
     * Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
     * 
     */
    @Import(name="containerExpirationPolicy")
    private @Nullable Output containerExpirationPolicy;

    /**
     * @return Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
     * 
     */
    public Optional> containerExpirationPolicy() {
        return Optional.ofNullable(this.containerExpirationPolicy);
    }

    /**
     * Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="containerRegistryAccessLevel")
    private @Nullable Output containerRegistryAccessLevel;

    /**
     * @return Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> containerRegistryAccessLevel() {
        return Optional.ofNullable(this.containerRegistryAccessLevel);
    }

    /**
     * Enable container registry for the project.
     * 
     * @deprecated
     * Use `container_registry_access_level` instead.
     * 
     */
    @Deprecated /* Use `container_registry_access_level` instead. */
    @Import(name="containerRegistryEnabled")
    private @Nullable Output containerRegistryEnabled;

    /**
     * @return Enable container registry for the project.
     * 
     * @deprecated
     * Use `container_registry_access_level` instead.
     * 
     */
    @Deprecated /* Use `container_registry_access_level` instead. */
    public Optional> containerRegistryEnabled() {
        return Optional.ofNullable(this.containerRegistryEnabled);
    }

    /**
     * The default branch for the project.
     * 
     */
    @Import(name="defaultBranch")
    private @Nullable Output defaultBranch;

    /**
     * @return The default branch for the project.
     * 
     */
    public Optional> defaultBranch() {
        return Optional.ofNullable(this.defaultBranch);
    }

    /**
     * A description of the project.
     * 
     */
    @Import(name="description")
    private @Nullable Output description;

    /**
     * @return A description of the project.
     * 
     */
    public Optional> description() {
        return Optional.ofNullable(this.description);
    }

    /**
     * Enable email notifications.
     * 
     */
    @Import(name="emailsEnabled")
    private @Nullable Output emailsEnabled;

    /**
     * @return Enable email notifications.
     * 
     */
    public Optional> emailsEnabled() {
        return Optional.ofNullable(this.emailsEnabled);
    }

    /**
     * Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="environmentsAccessLevel")
    private @Nullable Output environmentsAccessLevel;

    /**
     * @return Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> environmentsAccessLevel() {
        return Optional.ofNullable(this.environmentsAccessLevel);
    }

    /**
     * The classification label for the project.
     * 
     */
    @Import(name="externalAuthorizationClassificationLabel")
    private @Nullable Output externalAuthorizationClassificationLabel;

    /**
     * @return The classification label for the project.
     * 
     */
    public Optional> externalAuthorizationClassificationLabel() {
        return Optional.ofNullable(this.externalAuthorizationClassificationLabel);
    }

    /**
     * Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="featureFlagsAccessLevel")
    private @Nullable Output featureFlagsAccessLevel;

    /**
     * @return Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> featureFlagsAccessLevel() {
        return Optional.ofNullable(this.featureFlagsAccessLevel);
    }

    /**
     * The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
     * 
     */
    @Import(name="forkedFromProjectId")
    private @Nullable Output forkedFromProjectId;

    /**
     * @return The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
     * 
     */
    public Optional> forkedFromProjectId() {
        return Optional.ofNullable(this.forkedFromProjectId);
    }

    /**
     * Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="forkingAccessLevel")
    private @Nullable Output forkingAccessLevel;

    /**
     * @return Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> forkingAccessLevel() {
        return Optional.ofNullable(this.forkingAccessLevel);
    }

    /**
     * Enable group runners for this project.
     * 
     */
    @Import(name="groupRunnersEnabled")
    private @Nullable Output groupRunnersEnabled;

    /**
     * @return Enable group runners for this project.
     * 
     */
    public Optional> groupRunnersEnabled() {
        return Optional.ofNullable(this.groupRunnersEnabled);
    }

    /**
     * For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires use*custom*template to be true (enterprise edition).
     * 
     */
    @Import(name="groupWithProjectTemplatesId")
    private @Nullable Output groupWithProjectTemplatesId;

    /**
     * @return For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires use*custom*template to be true (enterprise edition).
     * 
     */
    public Optional> groupWithProjectTemplatesId() {
        return Optional.ofNullable(this.groupWithProjectTemplatesId);
    }

    /**
     * Git URL to a repository to be imported. Together with `mirror = true` it will setup a Pull Mirror. This can also be used together with `forked_from_project_id` to setup a Pull Mirror for a fork. The fork takes precedence over the import. Make sure to provide the credentials in `import_url_username` and `import_url_password`. GitLab never returns the credentials, thus the provider cannot detect configuration drift in the credentials. They can also not be imported using `pulumi import`. See the examples section for how to properly use it.
     * 
     */
    @Import(name="importUrl")
    private @Nullable Output importUrl;

    /**
     * @return Git URL to a repository to be imported. Together with `mirror = true` it will setup a Pull Mirror. This can also be used together with `forked_from_project_id` to setup a Pull Mirror for a fork. The fork takes precedence over the import. Make sure to provide the credentials in `import_url_username` and `import_url_password`. GitLab never returns the credentials, thus the provider cannot detect configuration drift in the credentials. They can also not be imported using `pulumi import`. See the examples section for how to properly use it.
     * 
     */
    public Optional> importUrl() {
        return Optional.ofNullable(this.importUrl);
    }

    /**
     * The password for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`. See the examples section for how to properly use it.
     * 
     */
    @Import(name="importUrlPassword")
    private @Nullable Output importUrlPassword;

    /**
     * @return The password for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`. See the examples section for how to properly use it.
     * 
     */
    public Optional> importUrlPassword() {
        return Optional.ofNullable(this.importUrlPassword);
    }

    /**
     * The username for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`.  See the examples section for how to properly use it.
     * 
     */
    @Import(name="importUrlUsername")
    private @Nullable Output importUrlUsername;

    /**
     * @return The username for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`.  See the examples section for how to properly use it.
     * 
     */
    public Optional> importUrlUsername() {
        return Optional.ofNullable(this.importUrlUsername);
    }

    /**
     * Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="infrastructureAccessLevel")
    private @Nullable Output infrastructureAccessLevel;

    /**
     * @return Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> infrastructureAccessLevel() {
        return Optional.ofNullable(this.infrastructureAccessLevel);
    }

    /**
     * Create main branch with first commit containing a README.md file. Must be set to `true` if importing an uninitialized project with a different `default_branch`.
     * 
     */
    @Import(name="initializeWithReadme")
    private @Nullable Output initializeWithReadme;

    /**
     * @return Create main branch with first commit containing a README.md file. Must be set to `true` if importing an uninitialized project with a different `default_branch`.
     * 
     */
    public Optional> initializeWithReadme() {
        return Optional.ofNullable(this.initializeWithReadme);
    }

    /**
     * Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="issuesAccessLevel")
    private @Nullable Output issuesAccessLevel;

    /**
     * @return Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> issuesAccessLevel() {
        return Optional.ofNullable(this.issuesAccessLevel);
    }

    /**
     * Enable issue tracking for the project.
     * 
     */
    @Import(name="issuesEnabled")
    private @Nullable Output issuesEnabled;

    /**
     * @return Enable issue tracking for the project.
     * 
     */
    public Optional> issuesEnabled() {
        return Optional.ofNullable(this.issuesEnabled);
    }

    /**
     * Sets the template for new issues in the project.
     * 
     */
    @Import(name="issuesTemplate")
    private @Nullable Output issuesTemplate;

    /**
     * @return Sets the template for new issues in the project.
     * 
     */
    public Optional> issuesTemplate() {
        return Optional.ofNullable(this.issuesTemplate);
    }

    /**
     * Disable or enable the ability to keep the latest artifact for this project.
     * 
     */
    @Import(name="keepLatestArtifact")
    private @Nullable Output keepLatestArtifact;

    /**
     * @return Disable or enable the ability to keep the latest artifact for this project.
     * 
     */
    public Optional> keepLatestArtifact() {
        return Optional.ofNullable(this.keepLatestArtifact);
    }

    /**
     * Enable LFS for the project.
     * 
     */
    @Import(name="lfsEnabled")
    private @Nullable Output lfsEnabled;

    /**
     * @return Enable LFS for the project.
     * 
     */
    public Optional> lfsEnabled() {
        return Optional.ofNullable(this.lfsEnabled);
    }

    /**
     * Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
     * 
     */
    @Import(name="mergeCommitTemplate")
    private @Nullable Output mergeCommitTemplate;

    /**
     * @return Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
     * 
     */
    public Optional> mergeCommitTemplate() {
        return Optional.ofNullable(this.mergeCommitTemplate);
    }

    /**
     * Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
     * 
     */
    @Import(name="mergeMethod")
    private @Nullable Output mergeMethod;

    /**
     * @return Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
     * 
     */
    public Optional> mergeMethod() {
        return Optional.ofNullable(this.mergeMethod);
    }

    /**
     * Enable or disable merge pipelines.
     * 
     */
    @Import(name="mergePipelinesEnabled")
    private @Nullable Output mergePipelinesEnabled;

    /**
     * @return Enable or disable merge pipelines.
     * 
     */
    public Optional> mergePipelinesEnabled() {
        return Optional.ofNullable(this.mergePipelinesEnabled);
    }

    /**
     * Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="mergeRequestsAccessLevel")
    private @Nullable Output mergeRequestsAccessLevel;

    /**
     * @return Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> mergeRequestsAccessLevel() {
        return Optional.ofNullable(this.mergeRequestsAccessLevel);
    }

    /**
     * Enable merge requests for the project.
     * 
     */
    @Import(name="mergeRequestsEnabled")
    private @Nullable Output mergeRequestsEnabled;

    /**
     * @return Enable merge requests for the project.
     * 
     */
    public Optional> mergeRequestsEnabled() {
        return Optional.ofNullable(this.mergeRequestsEnabled);
    }

    /**
     * Sets the template for new merge requests in the project.
     * 
     */
    @Import(name="mergeRequestsTemplate")
    private @Nullable Output mergeRequestsTemplate;

    /**
     * @return Sets the template for new merge requests in the project.
     * 
     */
    public Optional> mergeRequestsTemplate() {
        return Optional.ofNullable(this.mergeRequestsTemplate);
    }

    /**
     * Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
     * 
     */
    @Import(name="mergeTrainsEnabled")
    private @Nullable Output mergeTrainsEnabled;

    /**
     * @return Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
     * 
     */
    public Optional> mergeTrainsEnabled() {
        return Optional.ofNullable(this.mergeTrainsEnabled);
    }

    /**
     * Enable project pull mirror.
     * 
     */
    @Import(name="mirror")
    private @Nullable Output mirror;

    /**
     * @return Enable project pull mirror.
     * 
     */
    public Optional> mirror() {
        return Optional.ofNullable(this.mirror);
    }

    /**
     * Enable overwrite diverged branches for a mirrored project.
     * 
     */
    @Import(name="mirrorOverwritesDivergedBranches")
    private @Nullable Output mirrorOverwritesDivergedBranches;

    /**
     * @return Enable overwrite diverged branches for a mirrored project.
     * 
     */
    public Optional> mirrorOverwritesDivergedBranches() {
        return Optional.ofNullable(this.mirrorOverwritesDivergedBranches);
    }

    /**
     * Enable trigger builds on pushes for a mirrored project.
     * 
     */
    @Import(name="mirrorTriggerBuilds")
    private @Nullable Output mirrorTriggerBuilds;

    /**
     * @return Enable trigger builds on pushes for a mirrored project.
     * 
     */
    public Optional> mirrorTriggerBuilds() {
        return Optional.ofNullable(this.mirrorTriggerBuilds);
    }

    /**
     * Set visibility of machine learning model experiments. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="modelExperimentsAccessLevel")
    private @Nullable Output modelExperimentsAccessLevel;

    /**
     * @return Set visibility of machine learning model experiments. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> modelExperimentsAccessLevel() {
        return Optional.ofNullable(this.modelExperimentsAccessLevel);
    }

    /**
     * Set visibility of machine learning model registry. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="modelRegistryAccessLevel")
    private @Nullable Output modelRegistryAccessLevel;

    /**
     * @return Set visibility of machine learning model registry. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> modelRegistryAccessLevel() {
        return Optional.ofNullable(this.modelRegistryAccessLevel);
    }

    /**
     * Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="monitorAccessLevel")
    private @Nullable Output monitorAccessLevel;

    /**
     * @return Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> monitorAccessLevel() {
        return Optional.ofNullable(this.monitorAccessLevel);
    }

    /**
     * For forked projects, target merge requests to this project. If false, the target will be the upstream project.
     * 
     */
    @Import(name="mrDefaultTargetSelf")
    private @Nullable Output mrDefaultTargetSelf;

    /**
     * @return For forked projects, target merge requests to this project. If false, the target will be the upstream project.
     * 
     */
    public Optional> mrDefaultTargetSelf() {
        return Optional.ofNullable(this.mrDefaultTargetSelf);
    }

    /**
     * The name of the project.
     * 
     */
    @Import(name="name")
    private @Nullable Output name;

    /**
     * @return The name of the project.
     * 
     */
    public Optional> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * The namespace (group or user) of the project. Defaults to your user.
     * 
     */
    @Import(name="namespaceId")
    private @Nullable Output namespaceId;

    /**
     * @return The namespace (group or user) of the project. Defaults to your user.
     * 
     */
    public Optional> namespaceId() {
        return Optional.ofNullable(this.namespaceId);
    }

    /**
     * Set to true if you want allow merges only if all discussions are resolved.
     * 
     */
    @Import(name="onlyAllowMergeIfAllDiscussionsAreResolved")
    private @Nullable Output onlyAllowMergeIfAllDiscussionsAreResolved;

    /**
     * @return Set to true if you want allow merges only if all discussions are resolved.
     * 
     */
    public Optional> onlyAllowMergeIfAllDiscussionsAreResolved() {
        return Optional.ofNullable(this.onlyAllowMergeIfAllDiscussionsAreResolved);
    }

    /**
     * Set to true if you want allow merges only if a pipeline succeeds.
     * 
     */
    @Import(name="onlyAllowMergeIfPipelineSucceeds")
    private @Nullable Output onlyAllowMergeIfPipelineSucceeds;

    /**
     * @return Set to true if you want allow merges only if a pipeline succeeds.
     * 
     */
    public Optional> onlyAllowMergeIfPipelineSucceeds() {
        return Optional.ofNullable(this.onlyAllowMergeIfPipelineSucceeds);
    }

    /**
     * Enable only mirror protected branches for a mirrored project.
     * 
     */
    @Import(name="onlyMirrorProtectedBranches")
    private @Nullable Output onlyMirrorProtectedBranches;

    /**
     * @return Enable only mirror protected branches for a mirrored project.
     * 
     */
    public Optional> onlyMirrorProtectedBranches() {
        return Optional.ofNullable(this.onlyMirrorProtectedBranches);
    }

    /**
     * Enable packages repository for the project.
     * 
     */
    @Import(name="packagesEnabled")
    private @Nullable Output packagesEnabled;

    /**
     * @return Enable packages repository for the project.
     * 
     */
    public Optional> packagesEnabled() {
        return Optional.ofNullable(this.packagesEnabled);
    }

    /**
     * Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
     * 
     */
    @Import(name="pagesAccessLevel")
    private @Nullable Output pagesAccessLevel;

    /**
     * @return Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
     * 
     */
    public Optional> pagesAccessLevel() {
        return Optional.ofNullable(this.pagesAccessLevel);
    }

    /**
     * The path of the repository.
     * 
     */
    @Import(name="path")
    private @Nullable Output path;

    /**
     * @return The path of the repository.
     * 
     */
    public Optional> path() {
        return Optional.ofNullable(this.path);
    }

    /**
     * Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
     * 
     * @deprecated
     * Deprecated in favor of `builds_access_level`
     * 
     */
    @Deprecated /* Deprecated in favor of `builds_access_level` */
    @Import(name="pipelinesEnabled")
    private @Nullable Output pipelinesEnabled;

    /**
     * @return Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
     * 
     * @deprecated
     * Deprecated in favor of `builds_access_level`
     * 
     */
    @Deprecated /* Deprecated in favor of `builds_access_level` */
    public Optional> pipelinesEnabled() {
        return Optional.ofNullable(this.pipelinesEnabled);
    }

    /**
     * Whether Secret Push Detection is enabled. Requires GitLab Ultimate and at least GitLab 17.3.
     * 
     */
    @Import(name="preReceiveSecretDetectionEnabled")
    private @Nullable Output preReceiveSecretDetectionEnabled;

    /**
     * @return Whether Secret Push Detection is enabled. Requires GitLab Ultimate and at least GitLab 17.3.
     * 
     */
    public Optional> preReceiveSecretDetectionEnabled() {
        return Optional.ofNullable(this.preReceiveSecretDetectionEnabled);
    }

    /**
     * Show link to create/view merge request when pushing from the command line
     * 
     */
    @Import(name="printingMergeRequestLinkEnabled")
    private @Nullable Output printingMergeRequestLinkEnabled;

    /**
     * @return Show link to create/view merge request when pushing from the command line
     * 
     */
    public Optional> printingMergeRequestLinkEnabled() {
        return Optional.ofNullable(this.printingMergeRequestLinkEnabled);
    }

    /**
     * If true, jobs can be viewed by non-project members.
     * 
     * @deprecated
     * The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider.
     * 
     */
    @Deprecated /* The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider. */
    @Import(name="publicBuilds")
    private @Nullable Output publicBuilds;

    /**
     * @return If true, jobs can be viewed by non-project members.
     * 
     * @deprecated
     * The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider.
     * 
     */
    @Deprecated /* The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider. */
    public Optional> publicBuilds() {
        return Optional.ofNullable(this.publicBuilds);
    }

    /**
     * If true, jobs can be viewed by non-project members.
     * 
     */
    @Import(name="publicJobs")
    private @Nullable Output publicJobs;

    /**
     * @return If true, jobs can be viewed by non-project members.
     * 
     */
    public Optional> publicJobs() {
        return Optional.ofNullable(this.publicJobs);
    }

    /**
     * Push rules for the project.
     * 
     */
    @Import(name="pushRules")
    private @Nullable Output pushRules;

    /**
     * @return Push rules for the project.
     * 
     */
    public Optional> pushRules() {
        return Optional.ofNullable(this.pushRules);
    }

    /**
     * Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="releasesAccessLevel")
    private @Nullable Output releasesAccessLevel;

    /**
     * @return Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> releasesAccessLevel() {
        return Optional.ofNullable(this.releasesAccessLevel);
    }

    /**
     * Enable `Delete source branch` option by default for all new merge requests.
     * 
     */
    @Import(name="removeSourceBranchAfterMerge")
    private @Nullable Output removeSourceBranchAfterMerge;

    /**
     * @return Enable `Delete source branch` option by default for all new merge requests.
     * 
     */
    public Optional> removeSourceBranchAfterMerge() {
        return Optional.ofNullable(this.removeSourceBranchAfterMerge);
    }

    /**
     * Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="repositoryAccessLevel")
    private @Nullable Output repositoryAccessLevel;

    /**
     * @return Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> repositoryAccessLevel() {
        return Optional.ofNullable(this.repositoryAccessLevel);
    }

    /**
     * Which storage shard the repository is on. (administrator only)
     * 
     */
    @Import(name="repositoryStorage")
    private @Nullable Output repositoryStorage;

    /**
     * @return Which storage shard the repository is on. (administrator only)
     * 
     */
    public Optional> repositoryStorage() {
        return Optional.ofNullable(this.repositoryStorage);
    }

    /**
     * Allow users to request member access.
     * 
     */
    @Import(name="requestAccessEnabled")
    private @Nullable Output requestAccessEnabled;

    /**
     * @return Allow users to request member access.
     * 
     */
    public Optional> requestAccessEnabled() {
        return Optional.ofNullable(this.requestAccessEnabled);
    }

    /**
     * Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="requirementsAccessLevel")
    private @Nullable Output requirementsAccessLevel;

    /**
     * @return Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> requirementsAccessLevel() {
        return Optional.ofNullable(this.requirementsAccessLevel);
    }

    /**
     * Automatically resolve merge request diffs discussions on lines changed with a push.
     * 
     */
    @Import(name="resolveOutdatedDiffDiscussions")
    private @Nullable Output resolveOutdatedDiffDiscussions;

    /**
     * @return Automatically resolve merge request diffs discussions on lines changed with a push.
     * 
     */
    public Optional> resolveOutdatedDiffDiscussions() {
        return Optional.ofNullable(this.resolveOutdatedDiffDiscussions);
    }

    /**
     * Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
     * 
     */
    @Import(name="restrictUserDefinedVariables")
    private @Nullable Output restrictUserDefinedVariables;

    /**
     * @return Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
     * 
     */
    public Optional> restrictUserDefinedVariables() {
        return Optional.ofNullable(this.restrictUserDefinedVariables);
    }

    /**
     * Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="securityAndComplianceAccessLevel")
    private @Nullable Output securityAndComplianceAccessLevel;

    /**
     * @return Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> securityAndComplianceAccessLevel() {
        return Optional.ofNullable(this.securityAndComplianceAccessLevel);
    }

    /**
     * Enable shared runners for this project.
     * 
     */
    @Import(name="sharedRunnersEnabled")
    private @Nullable Output sharedRunnersEnabled;

    /**
     * @return Enable shared runners for this project.
     * 
     */
    public Optional> sharedRunnersEnabled() {
        return Optional.ofNullable(this.sharedRunnersEnabled);
    }

    /**
     * If `true`, the default behavior to wait for the default branch protection to be created is skipped.
     * This is necessary if the current user is not an admin and the default branch protection is disabled on an instance-level.
     * There is currently no known way to determine if the default branch protection is disabled on an instance-level for non-admin users.
     * This attribute is only used during resource creation, thus changes are suppressed and the attribute cannot be imported.
     * 
     */
    @Import(name="skipWaitForDefaultBranchProtection")
    private @Nullable Output skipWaitForDefaultBranchProtection;

    /**
     * @return If `true`, the default behavior to wait for the default branch protection to be created is skipped.
     * This is necessary if the current user is not an admin and the default branch protection is disabled on an instance-level.
     * There is currently no known way to determine if the default branch protection is disabled on an instance-level for non-admin users.
     * This attribute is only used during resource creation, thus changes are suppressed and the attribute cannot be imported.
     * 
     */
    public Optional> skipWaitForDefaultBranchProtection() {
        return Optional.ofNullable(this.skipWaitForDefaultBranchProtection);
    }

    /**
     * Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="snippetsAccessLevel")
    private @Nullable Output snippetsAccessLevel;

    /**
     * @return Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> snippetsAccessLevel() {
        return Optional.ofNullable(this.snippetsAccessLevel);
    }

    /**
     * Enable snippets for the project.
     * 
     */
    @Import(name="snippetsEnabled")
    private @Nullable Output snippetsEnabled;

    /**
     * @return Enable snippets for the project.
     * 
     */
    public Optional> snippetsEnabled() {
        return Optional.ofNullable(this.snippetsEnabled);
    }

    /**
     * Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
     * 
     */
    @Import(name="squashCommitTemplate")
    private @Nullable Output squashCommitTemplate;

    /**
     * @return Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
     * 
     */
    public Optional> squashCommitTemplate() {
        return Optional.ofNullable(this.squashCommitTemplate);
    }

    /**
     * Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
     * 
     */
    @Import(name="squashOption")
    private @Nullable Output squashOption;

    /**
     * @return Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
     * 
     */
    public Optional> squashOption() {
        return Optional.ofNullable(this.squashOption);
    }

    /**
     * The commit message used to apply merge request suggestions.
     * 
     */
    @Import(name="suggestionCommitMessage")
    private @Nullable Output suggestionCommitMessage;

    /**
     * @return The commit message used to apply merge request suggestions.
     * 
     */
    public Optional> suggestionCommitMessage() {
        return Optional.ofNullable(this.suggestionCommitMessage);
    }

    /**
     * The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
     * 
     */
    @Import(name="tags")
    private @Nullable Output> tags;

    /**
     * @return The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
     * 
     */
    public Optional>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * When used without use*custom*template, name of a built-in project template. When used with use*custom*template, name of a custom project template. This option is mutually exclusive with `template_project_id`.
     * 
     */
    @Import(name="templateName")
    private @Nullable Output templateName;

    /**
     * @return When used without use*custom*template, name of a built-in project template. When used with use*custom*template, name of a custom project template. This option is mutually exclusive with `template_project_id`.
     * 
     */
    public Optional> templateName() {
        return Optional.ofNullable(this.templateName);
    }

    /**
     * When used with use*custom*template, project ID of a custom project template. This is preferable to using template*name since template*name may be ambiguous (enterprise edition). This option is mutually exclusive with `template_name`. See `gitlab.GroupProjectFileTemplate` to set a project as a template project. If a project has not been set as a template, using it here will result in an error.
     * 
     */
    @Import(name="templateProjectId")
    private @Nullable Output templateProjectId;

    /**
     * @return When used with use*custom*template, project ID of a custom project template. This is preferable to using template*name since template*name may be ambiguous (enterprise edition). This option is mutually exclusive with `template_name`. See `gitlab.GroupProjectFileTemplate` to set a project as a template project. If a project has not been set as a template, using it here will result in an error.
     * 
     */
    public Optional> templateProjectId() {
        return Optional.ofNullable(this.templateProjectId);
    }

    /**
     * The list of topics for the project.
     * 
     */
    @Import(name="topics")
    private @Nullable Output> topics;

    /**
     * @return The list of topics for the project.
     * 
     */
    public Optional>> topics() {
        return Optional.ofNullable(this.topics);
    }

    /**
     * Use either custom instance or group (with group*with*project*templates*id) project template (enterprise edition).
     * 	> When using a custom template, [Group Tokens won't work](https://docs.gitlab.com/15.7/ee/user/project/settings/import_export_troubleshooting.html#import-using-the-rest-api-fails-when-using-a-group-access-token). You must use a real user's Personal Access Token.
     * 
     */
    @Import(name="useCustomTemplate")
    private @Nullable Output useCustomTemplate;

    /**
     * @return Use either custom instance or group (with group*with*project*templates*id) project template (enterprise edition).
     * 	> When using a custom template, [Group Tokens won't work](https://docs.gitlab.com/15.7/ee/user/project/settings/import_export_troubleshooting.html#import-using-the-rest-api-fails-when-using-a-group-access-token). You must use a real user's Personal Access Token.
     * 
     */
    public Optional> useCustomTemplate() {
        return Optional.ofNullable(this.useCustomTemplate);
    }

    /**
     * Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
     * 
     */
    @Import(name="visibilityLevel")
    private @Nullable Output visibilityLevel;

    /**
     * @return Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
     * 
     */
    public Optional> visibilityLevel() {
        return Optional.ofNullable(this.visibilityLevel);
    }

    /**
     * Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    @Import(name="wikiAccessLevel")
    private @Nullable Output wikiAccessLevel;

    /**
     * @return Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
     * 
     */
    public Optional> wikiAccessLevel() {
        return Optional.ofNullable(this.wikiAccessLevel);
    }

    /**
     * Enable wiki for the project.
     * 
     */
    @Import(name="wikiEnabled")
    private @Nullable Output wikiEnabled;

    /**
     * @return Enable wiki for the project.
     * 
     */
    public Optional> wikiEnabled() {
        return Optional.ofNullable(this.wikiEnabled);
    }

    private ProjectArgs() {}

    private ProjectArgs(ProjectArgs $) {
        this.allowMergeOnSkippedPipeline = $.allowMergeOnSkippedPipeline;
        this.allowPipelineTriggerApproveDeployment = $.allowPipelineTriggerApproveDeployment;
        this.analyticsAccessLevel = $.analyticsAccessLevel;
        this.approvalsBeforeMerge = $.approvalsBeforeMerge;
        this.archiveOnDestroy = $.archiveOnDestroy;
        this.archived = $.archived;
        this.autoCancelPendingPipelines = $.autoCancelPendingPipelines;
        this.autoDevopsDeployStrategy = $.autoDevopsDeployStrategy;
        this.autoDevopsEnabled = $.autoDevopsEnabled;
        this.autocloseReferencedIssues = $.autocloseReferencedIssues;
        this.avatar = $.avatar;
        this.avatarHash = $.avatarHash;
        this.buildCoverageRegex = $.buildCoverageRegex;
        this.buildGitStrategy = $.buildGitStrategy;
        this.buildTimeout = $.buildTimeout;
        this.buildsAccessLevel = $.buildsAccessLevel;
        this.ciConfigPath = $.ciConfigPath;
        this.ciDefaultGitDepth = $.ciDefaultGitDepth;
        this.ciForwardDeploymentEnabled = $.ciForwardDeploymentEnabled;
        this.ciRestrictPipelineCancellationRole = $.ciRestrictPipelineCancellationRole;
        this.ciSeparatedCaches = $.ciSeparatedCaches;
        this.containerExpirationPolicy = $.containerExpirationPolicy;
        this.containerRegistryAccessLevel = $.containerRegistryAccessLevel;
        this.containerRegistryEnabled = $.containerRegistryEnabled;
        this.defaultBranch = $.defaultBranch;
        this.description = $.description;
        this.emailsEnabled = $.emailsEnabled;
        this.environmentsAccessLevel = $.environmentsAccessLevel;
        this.externalAuthorizationClassificationLabel = $.externalAuthorizationClassificationLabel;
        this.featureFlagsAccessLevel = $.featureFlagsAccessLevel;
        this.forkedFromProjectId = $.forkedFromProjectId;
        this.forkingAccessLevel = $.forkingAccessLevel;
        this.groupRunnersEnabled = $.groupRunnersEnabled;
        this.groupWithProjectTemplatesId = $.groupWithProjectTemplatesId;
        this.importUrl = $.importUrl;
        this.importUrlPassword = $.importUrlPassword;
        this.importUrlUsername = $.importUrlUsername;
        this.infrastructureAccessLevel = $.infrastructureAccessLevel;
        this.initializeWithReadme = $.initializeWithReadme;
        this.issuesAccessLevel = $.issuesAccessLevel;
        this.issuesEnabled = $.issuesEnabled;
        this.issuesTemplate = $.issuesTemplate;
        this.keepLatestArtifact = $.keepLatestArtifact;
        this.lfsEnabled = $.lfsEnabled;
        this.mergeCommitTemplate = $.mergeCommitTemplate;
        this.mergeMethod = $.mergeMethod;
        this.mergePipelinesEnabled = $.mergePipelinesEnabled;
        this.mergeRequestsAccessLevel = $.mergeRequestsAccessLevel;
        this.mergeRequestsEnabled = $.mergeRequestsEnabled;
        this.mergeRequestsTemplate = $.mergeRequestsTemplate;
        this.mergeTrainsEnabled = $.mergeTrainsEnabled;
        this.mirror = $.mirror;
        this.mirrorOverwritesDivergedBranches = $.mirrorOverwritesDivergedBranches;
        this.mirrorTriggerBuilds = $.mirrorTriggerBuilds;
        this.modelExperimentsAccessLevel = $.modelExperimentsAccessLevel;
        this.modelRegistryAccessLevel = $.modelRegistryAccessLevel;
        this.monitorAccessLevel = $.monitorAccessLevel;
        this.mrDefaultTargetSelf = $.mrDefaultTargetSelf;
        this.name = $.name;
        this.namespaceId = $.namespaceId;
        this.onlyAllowMergeIfAllDiscussionsAreResolved = $.onlyAllowMergeIfAllDiscussionsAreResolved;
        this.onlyAllowMergeIfPipelineSucceeds = $.onlyAllowMergeIfPipelineSucceeds;
        this.onlyMirrorProtectedBranches = $.onlyMirrorProtectedBranches;
        this.packagesEnabled = $.packagesEnabled;
        this.pagesAccessLevel = $.pagesAccessLevel;
        this.path = $.path;
        this.pipelinesEnabled = $.pipelinesEnabled;
        this.preReceiveSecretDetectionEnabled = $.preReceiveSecretDetectionEnabled;
        this.printingMergeRequestLinkEnabled = $.printingMergeRequestLinkEnabled;
        this.publicBuilds = $.publicBuilds;
        this.publicJobs = $.publicJobs;
        this.pushRules = $.pushRules;
        this.releasesAccessLevel = $.releasesAccessLevel;
        this.removeSourceBranchAfterMerge = $.removeSourceBranchAfterMerge;
        this.repositoryAccessLevel = $.repositoryAccessLevel;
        this.repositoryStorage = $.repositoryStorage;
        this.requestAccessEnabled = $.requestAccessEnabled;
        this.requirementsAccessLevel = $.requirementsAccessLevel;
        this.resolveOutdatedDiffDiscussions = $.resolveOutdatedDiffDiscussions;
        this.restrictUserDefinedVariables = $.restrictUserDefinedVariables;
        this.securityAndComplianceAccessLevel = $.securityAndComplianceAccessLevel;
        this.sharedRunnersEnabled = $.sharedRunnersEnabled;
        this.skipWaitForDefaultBranchProtection = $.skipWaitForDefaultBranchProtection;
        this.snippetsAccessLevel = $.snippetsAccessLevel;
        this.snippetsEnabled = $.snippetsEnabled;
        this.squashCommitTemplate = $.squashCommitTemplate;
        this.squashOption = $.squashOption;
        this.suggestionCommitMessage = $.suggestionCommitMessage;
        this.tags = $.tags;
        this.templateName = $.templateName;
        this.templateProjectId = $.templateProjectId;
        this.topics = $.topics;
        this.useCustomTemplate = $.useCustomTemplate;
        this.visibilityLevel = $.visibilityLevel;
        this.wikiAccessLevel = $.wikiAccessLevel;
        this.wikiEnabled = $.wikiEnabled;
    }

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(ProjectArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private ProjectArgs $;

        public Builder() {
            $ = new ProjectArgs();
        }

        public Builder(ProjectArgs defaults) {
            $ = new ProjectArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param allowMergeOnSkippedPipeline Set to true if you want to treat skipped pipelines as if they finished with success.
         * 
         * @return builder
         * 
         */
        public Builder allowMergeOnSkippedPipeline(@Nullable Output allowMergeOnSkippedPipeline) {
            $.allowMergeOnSkippedPipeline = allowMergeOnSkippedPipeline;
            return this;
        }

        /**
         * @param allowMergeOnSkippedPipeline Set to true if you want to treat skipped pipelines as if they finished with success.
         * 
         * @return builder
         * 
         */
        public Builder allowMergeOnSkippedPipeline(Boolean allowMergeOnSkippedPipeline) {
            return allowMergeOnSkippedPipeline(Output.of(allowMergeOnSkippedPipeline));
        }

        /**
         * @param allowPipelineTriggerApproveDeployment Set whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only.
         * 
         * @return builder
         * 
         */
        public Builder allowPipelineTriggerApproveDeployment(@Nullable Output allowPipelineTriggerApproveDeployment) {
            $.allowPipelineTriggerApproveDeployment = allowPipelineTriggerApproveDeployment;
            return this;
        }

        /**
         * @param allowPipelineTriggerApproveDeployment Set whether or not a pipeline triggerer is allowed to approve deployments. Premium and Ultimate only.
         * 
         * @return builder
         * 
         */
        public Builder allowPipelineTriggerApproveDeployment(Boolean allowPipelineTriggerApproveDeployment) {
            return allowPipelineTriggerApproveDeployment(Output.of(allowPipelineTriggerApproveDeployment));
        }

        /**
         * @param analyticsAccessLevel Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder analyticsAccessLevel(@Nullable Output analyticsAccessLevel) {
            $.analyticsAccessLevel = analyticsAccessLevel;
            return this;
        }

        /**
         * @param analyticsAccessLevel Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder analyticsAccessLevel(String analyticsAccessLevel) {
            return analyticsAccessLevel(Output.of(analyticsAccessLevel));
        }

        /**
         * @param approvalsBeforeMerge Number of merge request approvals required for merging. Default is 0.
         * This field **does not** work well in combination with the `gitlab.ProjectApprovalRule` resource
         * and is most likely gonna be deprecated in a future GitLab version (see [this upstream epic](https://gitlab.com/groups/gitlab-org/-/epics/7572)).
         * In the meantime we recommend against using this attribute and use `gitlab.ProjectApprovalRule` instead.
         * 
         * @return builder
         * 
         */
        public Builder approvalsBeforeMerge(@Nullable Output approvalsBeforeMerge) {
            $.approvalsBeforeMerge = approvalsBeforeMerge;
            return this;
        }

        /**
         * @param approvalsBeforeMerge Number of merge request approvals required for merging. Default is 0.
         * This field **does not** work well in combination with the `gitlab.ProjectApprovalRule` resource
         * and is most likely gonna be deprecated in a future GitLab version (see [this upstream epic](https://gitlab.com/groups/gitlab-org/-/epics/7572)).
         * In the meantime we recommend against using this attribute and use `gitlab.ProjectApprovalRule` instead.
         * 
         * @return builder
         * 
         */
        public Builder approvalsBeforeMerge(Integer approvalsBeforeMerge) {
            return approvalsBeforeMerge(Output.of(approvalsBeforeMerge));
        }

        /**
         * @param archiveOnDestroy Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
         * 
         * @return builder
         * 
         */
        public Builder archiveOnDestroy(@Nullable Output archiveOnDestroy) {
            $.archiveOnDestroy = archiveOnDestroy;
            return this;
        }

        /**
         * @param archiveOnDestroy Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
         * 
         * @return builder
         * 
         */
        public Builder archiveOnDestroy(Boolean archiveOnDestroy) {
            return archiveOnDestroy(Output.of(archiveOnDestroy));
        }

        /**
         * @param archived Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
         * 
         * @return builder
         * 
         */
        public Builder archived(@Nullable Output archived) {
            $.archived = archived;
            return this;
        }

        /**
         * @param archived Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
         * 
         * @return builder
         * 
         */
        public Builder archived(Boolean archived) {
            return archived(Output.of(archived));
        }

        /**
         * @param autoCancelPendingPipelines Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
         * 
         * @return builder
         * 
         */
        public Builder autoCancelPendingPipelines(@Nullable Output autoCancelPendingPipelines) {
            $.autoCancelPendingPipelines = autoCancelPendingPipelines;
            return this;
        }

        /**
         * @param autoCancelPendingPipelines Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
         * 
         * @return builder
         * 
         */
        public Builder autoCancelPendingPipelines(String autoCancelPendingPipelines) {
            return autoCancelPendingPipelines(Output.of(autoCancelPendingPipelines));
        }

        /**
         * @param autoDevopsDeployStrategy Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
         * 
         * @return builder
         * 
         */
        public Builder autoDevopsDeployStrategy(@Nullable Output autoDevopsDeployStrategy) {
            $.autoDevopsDeployStrategy = autoDevopsDeployStrategy;
            return this;
        }

        /**
         * @param autoDevopsDeployStrategy Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
         * 
         * @return builder
         * 
         */
        public Builder autoDevopsDeployStrategy(String autoDevopsDeployStrategy) {
            return autoDevopsDeployStrategy(Output.of(autoDevopsDeployStrategy));
        }

        /**
         * @param autoDevopsEnabled Enable Auto DevOps for this project.
         * 
         * @return builder
         * 
         */
        public Builder autoDevopsEnabled(@Nullable Output autoDevopsEnabled) {
            $.autoDevopsEnabled = autoDevopsEnabled;
            return this;
        }

        /**
         * @param autoDevopsEnabled Enable Auto DevOps for this project.
         * 
         * @return builder
         * 
         */
        public Builder autoDevopsEnabled(Boolean autoDevopsEnabled) {
            return autoDevopsEnabled(Output.of(autoDevopsEnabled));
        }

        /**
         * @param autocloseReferencedIssues Set whether auto-closing referenced issues on default branch.
         * 
         * @return builder
         * 
         */
        public Builder autocloseReferencedIssues(@Nullable Output autocloseReferencedIssues) {
            $.autocloseReferencedIssues = autocloseReferencedIssues;
            return this;
        }

        /**
         * @param autocloseReferencedIssues Set whether auto-closing referenced issues on default branch.
         * 
         * @return builder
         * 
         */
        public Builder autocloseReferencedIssues(Boolean autocloseReferencedIssues) {
            return autocloseReferencedIssues(Output.of(autocloseReferencedIssues));
        }

        /**
         * @param avatar A local path to the avatar image to upload. **Note**: not available for imported resources.
         * 
         * @return builder
         * 
         */
        public Builder avatar(@Nullable Output avatar) {
            $.avatar = avatar;
            return this;
        }

        /**
         * @param avatar A local path to the avatar image to upload. **Note**: not available for imported resources.
         * 
         * @return builder
         * 
         */
        public Builder avatar(String avatar) {
            return avatar(Output.of(avatar));
        }

        /**
         * @param avatarHash The hash of the avatar image. Use `filesha256("path/to/avatar.png")` whenever possible. **Note**: this is used to trigger an update of the avatar. If it's not given, but an avatar is given, the avatar will be updated each time.
         * 
         * @return builder
         * 
         */
        public Builder avatarHash(@Nullable Output avatarHash) {
            $.avatarHash = avatarHash;
            return this;
        }

        /**
         * @param avatarHash The hash of the avatar image. Use `filesha256("path/to/avatar.png")` whenever possible. **Note**: this is used to trigger an update of the avatar. If it's not given, but an avatar is given, the avatar will be updated each time.
         * 
         * @return builder
         * 
         */
        public Builder avatarHash(String avatarHash) {
            return avatarHash(Output.of(avatarHash));
        }

        /**
         * @param buildCoverageRegex Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
         * 
         * @return builder
         * 
         * @deprecated
         * build_coverage_regex is removed in GitLab 15.0.
         * 
         */
        @Deprecated /* build_coverage_regex is removed in GitLab 15.0. */
        public Builder buildCoverageRegex(@Nullable Output buildCoverageRegex) {
            $.buildCoverageRegex = buildCoverageRegex;
            return this;
        }

        /**
         * @param buildCoverageRegex Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
         * 
         * @return builder
         * 
         * @deprecated
         * build_coverage_regex is removed in GitLab 15.0.
         * 
         */
        @Deprecated /* build_coverage_regex is removed in GitLab 15.0. */
        public Builder buildCoverageRegex(String buildCoverageRegex) {
            return buildCoverageRegex(Output.of(buildCoverageRegex));
        }

        /**
         * @param buildGitStrategy The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
         * 
         * @return builder
         * 
         */
        public Builder buildGitStrategy(@Nullable Output buildGitStrategy) {
            $.buildGitStrategy = buildGitStrategy;
            return this;
        }

        /**
         * @param buildGitStrategy The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
         * 
         * @return builder
         * 
         */
        public Builder buildGitStrategy(String buildGitStrategy) {
            return buildGitStrategy(Output.of(buildGitStrategy));
        }

        /**
         * @param buildTimeout The maximum amount of time, in seconds, that a job can run.
         * 
         * @return builder
         * 
         */
        public Builder buildTimeout(@Nullable Output buildTimeout) {
            $.buildTimeout = buildTimeout;
            return this;
        }

        /**
         * @param buildTimeout The maximum amount of time, in seconds, that a job can run.
         * 
         * @return builder
         * 
         */
        public Builder buildTimeout(Integer buildTimeout) {
            return buildTimeout(Output.of(buildTimeout));
        }

        /**
         * @param buildsAccessLevel Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder buildsAccessLevel(@Nullable Output buildsAccessLevel) {
            $.buildsAccessLevel = buildsAccessLevel;
            return this;
        }

        /**
         * @param buildsAccessLevel Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder buildsAccessLevel(String buildsAccessLevel) {
            return buildsAccessLevel(Output.of(buildsAccessLevel));
        }

        /**
         * @param ciConfigPath Custom Path to CI config file.
         * 
         * @return builder
         * 
         */
        public Builder ciConfigPath(@Nullable Output ciConfigPath) {
            $.ciConfigPath = ciConfigPath;
            return this;
        }

        /**
         * @param ciConfigPath Custom Path to CI config file.
         * 
         * @return builder
         * 
         */
        public Builder ciConfigPath(String ciConfigPath) {
            return ciConfigPath(Output.of(ciConfigPath));
        }

        /**
         * @param ciDefaultGitDepth Default number of revisions for shallow cloning.
         * 
         * @return builder
         * 
         */
        public Builder ciDefaultGitDepth(@Nullable Output ciDefaultGitDepth) {
            $.ciDefaultGitDepth = ciDefaultGitDepth;
            return this;
        }

        /**
         * @param ciDefaultGitDepth Default number of revisions for shallow cloning.
         * 
         * @return builder
         * 
         */
        public Builder ciDefaultGitDepth(Integer ciDefaultGitDepth) {
            return ciDefaultGitDepth(Output.of(ciDefaultGitDepth));
        }

        /**
         * @param ciForwardDeploymentEnabled When a new deployment job starts, skip older deployment jobs that are still pending.
         * 
         * @return builder
         * 
         */
        public Builder ciForwardDeploymentEnabled(@Nullable Output ciForwardDeploymentEnabled) {
            $.ciForwardDeploymentEnabled = ciForwardDeploymentEnabled;
            return this;
        }

        /**
         * @param ciForwardDeploymentEnabled When a new deployment job starts, skip older deployment jobs that are still pending.
         * 
         * @return builder
         * 
         */
        public Builder ciForwardDeploymentEnabled(Boolean ciForwardDeploymentEnabled) {
            return ciForwardDeploymentEnabled(Output.of(ciForwardDeploymentEnabled));
        }

        /**
         * @param ciRestrictPipelineCancellationRole The role required to cancel a pipeline or job. Introduced in GitLab 16.8. Premium and Ultimate only. Valid values are `developer`, `maintainer`, `no one`
         * 
         * @return builder
         * 
         */
        public Builder ciRestrictPipelineCancellationRole(@Nullable Output ciRestrictPipelineCancellationRole) {
            $.ciRestrictPipelineCancellationRole = ciRestrictPipelineCancellationRole;
            return this;
        }

        /**
         * @param ciRestrictPipelineCancellationRole The role required to cancel a pipeline or job. Introduced in GitLab 16.8. Premium and Ultimate only. Valid values are `developer`, `maintainer`, `no one`
         * 
         * @return builder
         * 
         */
        public Builder ciRestrictPipelineCancellationRole(String ciRestrictPipelineCancellationRole) {
            return ciRestrictPipelineCancellationRole(Output.of(ciRestrictPipelineCancellationRole));
        }

        /**
         * @param ciSeparatedCaches Use separate caches for protected branches.
         * 
         * @return builder
         * 
         */
        public Builder ciSeparatedCaches(@Nullable Output ciSeparatedCaches) {
            $.ciSeparatedCaches = ciSeparatedCaches;
            return this;
        }

        /**
         * @param ciSeparatedCaches Use separate caches for protected branches.
         * 
         * @return builder
         * 
         */
        public Builder ciSeparatedCaches(Boolean ciSeparatedCaches) {
            return ciSeparatedCaches(Output.of(ciSeparatedCaches));
        }

        /**
         * @param containerExpirationPolicy Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
         * 
         * @return builder
         * 
         */
        public Builder containerExpirationPolicy(@Nullable Output containerExpirationPolicy) {
            $.containerExpirationPolicy = containerExpirationPolicy;
            return this;
        }

        /**
         * @param containerExpirationPolicy Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
         * 
         * @return builder
         * 
         */
        public Builder containerExpirationPolicy(ProjectContainerExpirationPolicyArgs containerExpirationPolicy) {
            return containerExpirationPolicy(Output.of(containerExpirationPolicy));
        }

        /**
         * @param containerRegistryAccessLevel Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistryAccessLevel(@Nullable Output containerRegistryAccessLevel) {
            $.containerRegistryAccessLevel = containerRegistryAccessLevel;
            return this;
        }

        /**
         * @param containerRegistryAccessLevel Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder containerRegistryAccessLevel(String containerRegistryAccessLevel) {
            return containerRegistryAccessLevel(Output.of(containerRegistryAccessLevel));
        }

        /**
         * @param containerRegistryEnabled Enable container registry for the project.
         * 
         * @return builder
         * 
         * @deprecated
         * Use `container_registry_access_level` instead.
         * 
         */
        @Deprecated /* Use `container_registry_access_level` instead. */
        public Builder containerRegistryEnabled(@Nullable Output containerRegistryEnabled) {
            $.containerRegistryEnabled = containerRegistryEnabled;
            return this;
        }

        /**
         * @param containerRegistryEnabled Enable container registry for the project.
         * 
         * @return builder
         * 
         * @deprecated
         * Use `container_registry_access_level` instead.
         * 
         */
        @Deprecated /* Use `container_registry_access_level` instead. */
        public Builder containerRegistryEnabled(Boolean containerRegistryEnabled) {
            return containerRegistryEnabled(Output.of(containerRegistryEnabled));
        }

        /**
         * @param defaultBranch The default branch for the project.
         * 
         * @return builder
         * 
         */
        public Builder defaultBranch(@Nullable Output defaultBranch) {
            $.defaultBranch = defaultBranch;
            return this;
        }

        /**
         * @param defaultBranch The default branch for the project.
         * 
         * @return builder
         * 
         */
        public Builder defaultBranch(String defaultBranch) {
            return defaultBranch(Output.of(defaultBranch));
        }

        /**
         * @param description A description of the project.
         * 
         * @return builder
         * 
         */
        public Builder description(@Nullable Output description) {
            $.description = description;
            return this;
        }

        /**
         * @param description A description of the project.
         * 
         * @return builder
         * 
         */
        public Builder description(String description) {
            return description(Output.of(description));
        }

        /**
         * @param emailsEnabled Enable email notifications.
         * 
         * @return builder
         * 
         */
        public Builder emailsEnabled(@Nullable Output emailsEnabled) {
            $.emailsEnabled = emailsEnabled;
            return this;
        }

        /**
         * @param emailsEnabled Enable email notifications.
         * 
         * @return builder
         * 
         */
        public Builder emailsEnabled(Boolean emailsEnabled) {
            return emailsEnabled(Output.of(emailsEnabled));
        }

        /**
         * @param environmentsAccessLevel Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder environmentsAccessLevel(@Nullable Output environmentsAccessLevel) {
            $.environmentsAccessLevel = environmentsAccessLevel;
            return this;
        }

        /**
         * @param environmentsAccessLevel Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder environmentsAccessLevel(String environmentsAccessLevel) {
            return environmentsAccessLevel(Output.of(environmentsAccessLevel));
        }

        /**
         * @param externalAuthorizationClassificationLabel The classification label for the project.
         * 
         * @return builder
         * 
         */
        public Builder externalAuthorizationClassificationLabel(@Nullable Output externalAuthorizationClassificationLabel) {
            $.externalAuthorizationClassificationLabel = externalAuthorizationClassificationLabel;
            return this;
        }

        /**
         * @param externalAuthorizationClassificationLabel The classification label for the project.
         * 
         * @return builder
         * 
         */
        public Builder externalAuthorizationClassificationLabel(String externalAuthorizationClassificationLabel) {
            return externalAuthorizationClassificationLabel(Output.of(externalAuthorizationClassificationLabel));
        }

        /**
         * @param featureFlagsAccessLevel Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder featureFlagsAccessLevel(@Nullable Output featureFlagsAccessLevel) {
            $.featureFlagsAccessLevel = featureFlagsAccessLevel;
            return this;
        }

        /**
         * @param featureFlagsAccessLevel Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder featureFlagsAccessLevel(String featureFlagsAccessLevel) {
            return featureFlagsAccessLevel(Output.of(featureFlagsAccessLevel));
        }

        /**
         * @param forkedFromProjectId The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
         * 
         * @return builder
         * 
         */
        public Builder forkedFromProjectId(@Nullable Output forkedFromProjectId) {
            $.forkedFromProjectId = forkedFromProjectId;
            return this;
        }

        /**
         * @param forkedFromProjectId The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
         * 
         * @return builder
         * 
         */
        public Builder forkedFromProjectId(Integer forkedFromProjectId) {
            return forkedFromProjectId(Output.of(forkedFromProjectId));
        }

        /**
         * @param forkingAccessLevel Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder forkingAccessLevel(@Nullable Output forkingAccessLevel) {
            $.forkingAccessLevel = forkingAccessLevel;
            return this;
        }

        /**
         * @param forkingAccessLevel Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder forkingAccessLevel(String forkingAccessLevel) {
            return forkingAccessLevel(Output.of(forkingAccessLevel));
        }

        /**
         * @param groupRunnersEnabled Enable group runners for this project.
         * 
         * @return builder
         * 
         */
        public Builder groupRunnersEnabled(@Nullable Output groupRunnersEnabled) {
            $.groupRunnersEnabled = groupRunnersEnabled;
            return this;
        }

        /**
         * @param groupRunnersEnabled Enable group runners for this project.
         * 
         * @return builder
         * 
         */
        public Builder groupRunnersEnabled(Boolean groupRunnersEnabled) {
            return groupRunnersEnabled(Output.of(groupRunnersEnabled));
        }

        /**
         * @param groupWithProjectTemplatesId For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires use*custom*template to be true (enterprise edition).
         * 
         * @return builder
         * 
         */
        public Builder groupWithProjectTemplatesId(@Nullable Output groupWithProjectTemplatesId) {
            $.groupWithProjectTemplatesId = groupWithProjectTemplatesId;
            return this;
        }

        /**
         * @param groupWithProjectTemplatesId For group-level custom templates, specifies ID of group from which all the custom project templates are sourced. Leave empty for instance-level templates. Requires use*custom*template to be true (enterprise edition).
         * 
         * @return builder
         * 
         */
        public Builder groupWithProjectTemplatesId(Integer groupWithProjectTemplatesId) {
            return groupWithProjectTemplatesId(Output.of(groupWithProjectTemplatesId));
        }

        /**
         * @param importUrl Git URL to a repository to be imported. Together with `mirror = true` it will setup a Pull Mirror. This can also be used together with `forked_from_project_id` to setup a Pull Mirror for a fork. The fork takes precedence over the import. Make sure to provide the credentials in `import_url_username` and `import_url_password`. GitLab never returns the credentials, thus the provider cannot detect configuration drift in the credentials. They can also not be imported using `pulumi import`. See the examples section for how to properly use it.
         * 
         * @return builder
         * 
         */
        public Builder importUrl(@Nullable Output importUrl) {
            $.importUrl = importUrl;
            return this;
        }

        /**
         * @param importUrl Git URL to a repository to be imported. Together with `mirror = true` it will setup a Pull Mirror. This can also be used together with `forked_from_project_id` to setup a Pull Mirror for a fork. The fork takes precedence over the import. Make sure to provide the credentials in `import_url_username` and `import_url_password`. GitLab never returns the credentials, thus the provider cannot detect configuration drift in the credentials. They can also not be imported using `pulumi import`. See the examples section for how to properly use it.
         * 
         * @return builder
         * 
         */
        public Builder importUrl(String importUrl) {
            return importUrl(Output.of(importUrl));
        }

        /**
         * @param importUrlPassword The password for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`. See the examples section for how to properly use it.
         * 
         * @return builder
         * 
         */
        public Builder importUrlPassword(@Nullable Output importUrlPassword) {
            $.importUrlPassword = importUrlPassword;
            return this;
        }

        /**
         * @param importUrlPassword The password for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`. See the examples section for how to properly use it.
         * 
         * @return builder
         * 
         */
        public Builder importUrlPassword(String importUrlPassword) {
            return importUrlPassword(Output.of(importUrlPassword));
        }

        /**
         * @param importUrlUsername The username for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`.  See the examples section for how to properly use it.
         * 
         * @return builder
         * 
         */
        public Builder importUrlUsername(@Nullable Output importUrlUsername) {
            $.importUrlUsername = importUrlUsername;
            return this;
        }

        /**
         * @param importUrlUsername The username for the `import_url`. The value of this field is used to construct a valid `import_url` and is only related to the provider. This field cannot be imported using `pulumi import`.  See the examples section for how to properly use it.
         * 
         * @return builder
         * 
         */
        public Builder importUrlUsername(String importUrlUsername) {
            return importUrlUsername(Output.of(importUrlUsername));
        }

        /**
         * @param infrastructureAccessLevel Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder infrastructureAccessLevel(@Nullable Output infrastructureAccessLevel) {
            $.infrastructureAccessLevel = infrastructureAccessLevel;
            return this;
        }

        /**
         * @param infrastructureAccessLevel Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder infrastructureAccessLevel(String infrastructureAccessLevel) {
            return infrastructureAccessLevel(Output.of(infrastructureAccessLevel));
        }

        /**
         * @param initializeWithReadme Create main branch with first commit containing a README.md file. Must be set to `true` if importing an uninitialized project with a different `default_branch`.
         * 
         * @return builder
         * 
         */
        public Builder initializeWithReadme(@Nullable Output initializeWithReadme) {
            $.initializeWithReadme = initializeWithReadme;
            return this;
        }

        /**
         * @param initializeWithReadme Create main branch with first commit containing a README.md file. Must be set to `true` if importing an uninitialized project with a different `default_branch`.
         * 
         * @return builder
         * 
         */
        public Builder initializeWithReadme(Boolean initializeWithReadme) {
            return initializeWithReadme(Output.of(initializeWithReadme));
        }

        /**
         * @param issuesAccessLevel Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder issuesAccessLevel(@Nullable Output issuesAccessLevel) {
            $.issuesAccessLevel = issuesAccessLevel;
            return this;
        }

        /**
         * @param issuesAccessLevel Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder issuesAccessLevel(String issuesAccessLevel) {
            return issuesAccessLevel(Output.of(issuesAccessLevel));
        }

        /**
         * @param issuesEnabled Enable issue tracking for the project.
         * 
         * @return builder
         * 
         */
        public Builder issuesEnabled(@Nullable Output issuesEnabled) {
            $.issuesEnabled = issuesEnabled;
            return this;
        }

        /**
         * @param issuesEnabled Enable issue tracking for the project.
         * 
         * @return builder
         * 
         */
        public Builder issuesEnabled(Boolean issuesEnabled) {
            return issuesEnabled(Output.of(issuesEnabled));
        }

        /**
         * @param issuesTemplate Sets the template for new issues in the project.
         * 
         * @return builder
         * 
         */
        public Builder issuesTemplate(@Nullable Output issuesTemplate) {
            $.issuesTemplate = issuesTemplate;
            return this;
        }

        /**
         * @param issuesTemplate Sets the template for new issues in the project.
         * 
         * @return builder
         * 
         */
        public Builder issuesTemplate(String issuesTemplate) {
            return issuesTemplate(Output.of(issuesTemplate));
        }

        /**
         * @param keepLatestArtifact Disable or enable the ability to keep the latest artifact for this project.
         * 
         * @return builder
         * 
         */
        public Builder keepLatestArtifact(@Nullable Output keepLatestArtifact) {
            $.keepLatestArtifact = keepLatestArtifact;
            return this;
        }

        /**
         * @param keepLatestArtifact Disable or enable the ability to keep the latest artifact for this project.
         * 
         * @return builder
         * 
         */
        public Builder keepLatestArtifact(Boolean keepLatestArtifact) {
            return keepLatestArtifact(Output.of(keepLatestArtifact));
        }

        /**
         * @param lfsEnabled Enable LFS for the project.
         * 
         * @return builder
         * 
         */
        public Builder lfsEnabled(@Nullable Output lfsEnabled) {
            $.lfsEnabled = lfsEnabled;
            return this;
        }

        /**
         * @param lfsEnabled Enable LFS for the project.
         * 
         * @return builder
         * 
         */
        public Builder lfsEnabled(Boolean lfsEnabled) {
            return lfsEnabled(Output.of(lfsEnabled));
        }

        /**
         * @param mergeCommitTemplate Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
         * 
         * @return builder
         * 
         */
        public Builder mergeCommitTemplate(@Nullable Output mergeCommitTemplate) {
            $.mergeCommitTemplate = mergeCommitTemplate;
            return this;
        }

        /**
         * @param mergeCommitTemplate Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
         * 
         * @return builder
         * 
         */
        public Builder mergeCommitTemplate(String mergeCommitTemplate) {
            return mergeCommitTemplate(Output.of(mergeCommitTemplate));
        }

        /**
         * @param mergeMethod Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
         * 
         * @return builder
         * 
         */
        public Builder mergeMethod(@Nullable Output mergeMethod) {
            $.mergeMethod = mergeMethod;
            return this;
        }

        /**
         * @param mergeMethod Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
         * 
         * @return builder
         * 
         */
        public Builder mergeMethod(String mergeMethod) {
            return mergeMethod(Output.of(mergeMethod));
        }

        /**
         * @param mergePipelinesEnabled Enable or disable merge pipelines.
         * 
         * @return builder
         * 
         */
        public Builder mergePipelinesEnabled(@Nullable Output mergePipelinesEnabled) {
            $.mergePipelinesEnabled = mergePipelinesEnabled;
            return this;
        }

        /**
         * @param mergePipelinesEnabled Enable or disable merge pipelines.
         * 
         * @return builder
         * 
         */
        public Builder mergePipelinesEnabled(Boolean mergePipelinesEnabled) {
            return mergePipelinesEnabled(Output.of(mergePipelinesEnabled));
        }

        /**
         * @param mergeRequestsAccessLevel Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder mergeRequestsAccessLevel(@Nullable Output mergeRequestsAccessLevel) {
            $.mergeRequestsAccessLevel = mergeRequestsAccessLevel;
            return this;
        }

        /**
         * @param mergeRequestsAccessLevel Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder mergeRequestsAccessLevel(String mergeRequestsAccessLevel) {
            return mergeRequestsAccessLevel(Output.of(mergeRequestsAccessLevel));
        }

        /**
         * @param mergeRequestsEnabled Enable merge requests for the project.
         * 
         * @return builder
         * 
         */
        public Builder mergeRequestsEnabled(@Nullable Output mergeRequestsEnabled) {
            $.mergeRequestsEnabled = mergeRequestsEnabled;
            return this;
        }

        /**
         * @param mergeRequestsEnabled Enable merge requests for the project.
         * 
         * @return builder
         * 
         */
        public Builder mergeRequestsEnabled(Boolean mergeRequestsEnabled) {
            return mergeRequestsEnabled(Output.of(mergeRequestsEnabled));
        }

        /**
         * @param mergeRequestsTemplate Sets the template for new merge requests in the project.
         * 
         * @return builder
         * 
         */
        public Builder mergeRequestsTemplate(@Nullable Output mergeRequestsTemplate) {
            $.mergeRequestsTemplate = mergeRequestsTemplate;
            return this;
        }

        /**
         * @param mergeRequestsTemplate Sets the template for new merge requests in the project.
         * 
         * @return builder
         * 
         */
        public Builder mergeRequestsTemplate(String mergeRequestsTemplate) {
            return mergeRequestsTemplate(Output.of(mergeRequestsTemplate));
        }

        /**
         * @param mergeTrainsEnabled Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
         * 
         * @return builder
         * 
         */
        public Builder mergeTrainsEnabled(@Nullable Output mergeTrainsEnabled) {
            $.mergeTrainsEnabled = mergeTrainsEnabled;
            return this;
        }

        /**
         * @param mergeTrainsEnabled Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
         * 
         * @return builder
         * 
         */
        public Builder mergeTrainsEnabled(Boolean mergeTrainsEnabled) {
            return mergeTrainsEnabled(Output.of(mergeTrainsEnabled));
        }

        /**
         * @param mirror Enable project pull mirror.
         * 
         * @return builder
         * 
         */
        public Builder mirror(@Nullable Output mirror) {
            $.mirror = mirror;
            return this;
        }

        /**
         * @param mirror Enable project pull mirror.
         * 
         * @return builder
         * 
         */
        public Builder mirror(Boolean mirror) {
            return mirror(Output.of(mirror));
        }

        /**
         * @param mirrorOverwritesDivergedBranches Enable overwrite diverged branches for a mirrored project.
         * 
         * @return builder
         * 
         */
        public Builder mirrorOverwritesDivergedBranches(@Nullable Output mirrorOverwritesDivergedBranches) {
            $.mirrorOverwritesDivergedBranches = mirrorOverwritesDivergedBranches;
            return this;
        }

        /**
         * @param mirrorOverwritesDivergedBranches Enable overwrite diverged branches for a mirrored project.
         * 
         * @return builder
         * 
         */
        public Builder mirrorOverwritesDivergedBranches(Boolean mirrorOverwritesDivergedBranches) {
            return mirrorOverwritesDivergedBranches(Output.of(mirrorOverwritesDivergedBranches));
        }

        /**
         * @param mirrorTriggerBuilds Enable trigger builds on pushes for a mirrored project.
         * 
         * @return builder
         * 
         */
        public Builder mirrorTriggerBuilds(@Nullable Output mirrorTriggerBuilds) {
            $.mirrorTriggerBuilds = mirrorTriggerBuilds;
            return this;
        }

        /**
         * @param mirrorTriggerBuilds Enable trigger builds on pushes for a mirrored project.
         * 
         * @return builder
         * 
         */
        public Builder mirrorTriggerBuilds(Boolean mirrorTriggerBuilds) {
            return mirrorTriggerBuilds(Output.of(mirrorTriggerBuilds));
        }

        /**
         * @param modelExperimentsAccessLevel Set visibility of machine learning model experiments. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder modelExperimentsAccessLevel(@Nullable Output modelExperimentsAccessLevel) {
            $.modelExperimentsAccessLevel = modelExperimentsAccessLevel;
            return this;
        }

        /**
         * @param modelExperimentsAccessLevel Set visibility of machine learning model experiments. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder modelExperimentsAccessLevel(String modelExperimentsAccessLevel) {
            return modelExperimentsAccessLevel(Output.of(modelExperimentsAccessLevel));
        }

        /**
         * @param modelRegistryAccessLevel Set visibility of machine learning model registry. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder modelRegistryAccessLevel(@Nullable Output modelRegistryAccessLevel) {
            $.modelRegistryAccessLevel = modelRegistryAccessLevel;
            return this;
        }

        /**
         * @param modelRegistryAccessLevel Set visibility of machine learning model registry. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder modelRegistryAccessLevel(String modelRegistryAccessLevel) {
            return modelRegistryAccessLevel(Output.of(modelRegistryAccessLevel));
        }

        /**
         * @param monitorAccessLevel Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder monitorAccessLevel(@Nullable Output monitorAccessLevel) {
            $.monitorAccessLevel = monitorAccessLevel;
            return this;
        }

        /**
         * @param monitorAccessLevel Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder monitorAccessLevel(String monitorAccessLevel) {
            return monitorAccessLevel(Output.of(monitorAccessLevel));
        }

        /**
         * @param mrDefaultTargetSelf For forked projects, target merge requests to this project. If false, the target will be the upstream project.
         * 
         * @return builder
         * 
         */
        public Builder mrDefaultTargetSelf(@Nullable Output mrDefaultTargetSelf) {
            $.mrDefaultTargetSelf = mrDefaultTargetSelf;
            return this;
        }

        /**
         * @param mrDefaultTargetSelf For forked projects, target merge requests to this project. If false, the target will be the upstream project.
         * 
         * @return builder
         * 
         */
        public Builder mrDefaultTargetSelf(Boolean mrDefaultTargetSelf) {
            return mrDefaultTargetSelf(Output.of(mrDefaultTargetSelf));
        }

        /**
         * @param name The name of the project.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name of the project.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param namespaceId The namespace (group or user) of the project. Defaults to your user.
         * 
         * @return builder
         * 
         */
        public Builder namespaceId(@Nullable Output namespaceId) {
            $.namespaceId = namespaceId;
            return this;
        }

        /**
         * @param namespaceId The namespace (group or user) of the project. Defaults to your user.
         * 
         * @return builder
         * 
         */
        public Builder namespaceId(Integer namespaceId) {
            return namespaceId(Output.of(namespaceId));
        }

        /**
         * @param onlyAllowMergeIfAllDiscussionsAreResolved Set to true if you want allow merges only if all discussions are resolved.
         * 
         * @return builder
         * 
         */
        public Builder onlyAllowMergeIfAllDiscussionsAreResolved(@Nullable Output onlyAllowMergeIfAllDiscussionsAreResolved) {
            $.onlyAllowMergeIfAllDiscussionsAreResolved = onlyAllowMergeIfAllDiscussionsAreResolved;
            return this;
        }

        /**
         * @param onlyAllowMergeIfAllDiscussionsAreResolved Set to true if you want allow merges only if all discussions are resolved.
         * 
         * @return builder
         * 
         */
        public Builder onlyAllowMergeIfAllDiscussionsAreResolved(Boolean onlyAllowMergeIfAllDiscussionsAreResolved) {
            return onlyAllowMergeIfAllDiscussionsAreResolved(Output.of(onlyAllowMergeIfAllDiscussionsAreResolved));
        }

        /**
         * @param onlyAllowMergeIfPipelineSucceeds Set to true if you want allow merges only if a pipeline succeeds.
         * 
         * @return builder
         * 
         */
        public Builder onlyAllowMergeIfPipelineSucceeds(@Nullable Output onlyAllowMergeIfPipelineSucceeds) {
            $.onlyAllowMergeIfPipelineSucceeds = onlyAllowMergeIfPipelineSucceeds;
            return this;
        }

        /**
         * @param onlyAllowMergeIfPipelineSucceeds Set to true if you want allow merges only if a pipeline succeeds.
         * 
         * @return builder
         * 
         */
        public Builder onlyAllowMergeIfPipelineSucceeds(Boolean onlyAllowMergeIfPipelineSucceeds) {
            return onlyAllowMergeIfPipelineSucceeds(Output.of(onlyAllowMergeIfPipelineSucceeds));
        }

        /**
         * @param onlyMirrorProtectedBranches Enable only mirror protected branches for a mirrored project.
         * 
         * @return builder
         * 
         */
        public Builder onlyMirrorProtectedBranches(@Nullable Output onlyMirrorProtectedBranches) {
            $.onlyMirrorProtectedBranches = onlyMirrorProtectedBranches;
            return this;
        }

        /**
         * @param onlyMirrorProtectedBranches Enable only mirror protected branches for a mirrored project.
         * 
         * @return builder
         * 
         */
        public Builder onlyMirrorProtectedBranches(Boolean onlyMirrorProtectedBranches) {
            return onlyMirrorProtectedBranches(Output.of(onlyMirrorProtectedBranches));
        }

        /**
         * @param packagesEnabled Enable packages repository for the project.
         * 
         * @return builder
         * 
         */
        public Builder packagesEnabled(@Nullable Output packagesEnabled) {
            $.packagesEnabled = packagesEnabled;
            return this;
        }

        /**
         * @param packagesEnabled Enable packages repository for the project.
         * 
         * @return builder
         * 
         */
        public Builder packagesEnabled(Boolean packagesEnabled) {
            return packagesEnabled(Output.of(packagesEnabled));
        }

        /**
         * @param pagesAccessLevel Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
         * 
         * @return builder
         * 
         */
        public Builder pagesAccessLevel(@Nullable Output pagesAccessLevel) {
            $.pagesAccessLevel = pagesAccessLevel;
            return this;
        }

        /**
         * @param pagesAccessLevel Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
         * 
         * @return builder
         * 
         */
        public Builder pagesAccessLevel(String pagesAccessLevel) {
            return pagesAccessLevel(Output.of(pagesAccessLevel));
        }

        /**
         * @param path The path of the repository.
         * 
         * @return builder
         * 
         */
        public Builder path(@Nullable Output path) {
            $.path = path;
            return this;
        }

        /**
         * @param path The path of the repository.
         * 
         * @return builder
         * 
         */
        public Builder path(String path) {
            return path(Output.of(path));
        }

        /**
         * @param pipelinesEnabled Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
         * 
         * @return builder
         * 
         * @deprecated
         * Deprecated in favor of `builds_access_level`
         * 
         */
        @Deprecated /* Deprecated in favor of `builds_access_level` */
        public Builder pipelinesEnabled(@Nullable Output pipelinesEnabled) {
            $.pipelinesEnabled = pipelinesEnabled;
            return this;
        }

        /**
         * @param pipelinesEnabled Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
         * 
         * @return builder
         * 
         * @deprecated
         * Deprecated in favor of `builds_access_level`
         * 
         */
        @Deprecated /* Deprecated in favor of `builds_access_level` */
        public Builder pipelinesEnabled(Boolean pipelinesEnabled) {
            return pipelinesEnabled(Output.of(pipelinesEnabled));
        }

        /**
         * @param preReceiveSecretDetectionEnabled Whether Secret Push Detection is enabled. Requires GitLab Ultimate and at least GitLab 17.3.
         * 
         * @return builder
         * 
         */
        public Builder preReceiveSecretDetectionEnabled(@Nullable Output preReceiveSecretDetectionEnabled) {
            $.preReceiveSecretDetectionEnabled = preReceiveSecretDetectionEnabled;
            return this;
        }

        /**
         * @param preReceiveSecretDetectionEnabled Whether Secret Push Detection is enabled. Requires GitLab Ultimate and at least GitLab 17.3.
         * 
         * @return builder
         * 
         */
        public Builder preReceiveSecretDetectionEnabled(Boolean preReceiveSecretDetectionEnabled) {
            return preReceiveSecretDetectionEnabled(Output.of(preReceiveSecretDetectionEnabled));
        }

        /**
         * @param printingMergeRequestLinkEnabled Show link to create/view merge request when pushing from the command line
         * 
         * @return builder
         * 
         */
        public Builder printingMergeRequestLinkEnabled(@Nullable Output printingMergeRequestLinkEnabled) {
            $.printingMergeRequestLinkEnabled = printingMergeRequestLinkEnabled;
            return this;
        }

        /**
         * @param printingMergeRequestLinkEnabled Show link to create/view merge request when pushing from the command line
         * 
         * @return builder
         * 
         */
        public Builder printingMergeRequestLinkEnabled(Boolean printingMergeRequestLinkEnabled) {
            return printingMergeRequestLinkEnabled(Output.of(printingMergeRequestLinkEnabled));
        }

        /**
         * @param publicBuilds If true, jobs can be viewed by non-project members.
         * 
         * @return builder
         * 
         * @deprecated
         * The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider.
         * 
         */
        @Deprecated /* The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider. */
        public Builder publicBuilds(@Nullable Output publicBuilds) {
            $.publicBuilds = publicBuilds;
            return this;
        }

        /**
         * @param publicBuilds If true, jobs can be viewed by non-project members.
         * 
         * @return builder
         * 
         * @deprecated
         * The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider.
         * 
         */
        @Deprecated /* The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in the next major version of the provider. */
        public Builder publicBuilds(Boolean publicBuilds) {
            return publicBuilds(Output.of(publicBuilds));
        }

        /**
         * @param publicJobs If true, jobs can be viewed by non-project members.
         * 
         * @return builder
         * 
         */
        public Builder publicJobs(@Nullable Output publicJobs) {
            $.publicJobs = publicJobs;
            return this;
        }

        /**
         * @param publicJobs If true, jobs can be viewed by non-project members.
         * 
         * @return builder
         * 
         */
        public Builder publicJobs(Boolean publicJobs) {
            return publicJobs(Output.of(publicJobs));
        }

        /**
         * @param pushRules Push rules for the project.
         * 
         * @return builder
         * 
         */
        public Builder pushRules(@Nullable Output pushRules) {
            $.pushRules = pushRules;
            return this;
        }

        /**
         * @param pushRules Push rules for the project.
         * 
         * @return builder
         * 
         */
        public Builder pushRules(ProjectPushRulesArgs pushRules) {
            return pushRules(Output.of(pushRules));
        }

        /**
         * @param releasesAccessLevel Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder releasesAccessLevel(@Nullable Output releasesAccessLevel) {
            $.releasesAccessLevel = releasesAccessLevel;
            return this;
        }

        /**
         * @param releasesAccessLevel Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder releasesAccessLevel(String releasesAccessLevel) {
            return releasesAccessLevel(Output.of(releasesAccessLevel));
        }

        /**
         * @param removeSourceBranchAfterMerge Enable `Delete source branch` option by default for all new merge requests.
         * 
         * @return builder
         * 
         */
        public Builder removeSourceBranchAfterMerge(@Nullable Output removeSourceBranchAfterMerge) {
            $.removeSourceBranchAfterMerge = removeSourceBranchAfterMerge;
            return this;
        }

        /**
         * @param removeSourceBranchAfterMerge Enable `Delete source branch` option by default for all new merge requests.
         * 
         * @return builder
         * 
         */
        public Builder removeSourceBranchAfterMerge(Boolean removeSourceBranchAfterMerge) {
            return removeSourceBranchAfterMerge(Output.of(removeSourceBranchAfterMerge));
        }

        /**
         * @param repositoryAccessLevel Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder repositoryAccessLevel(@Nullable Output repositoryAccessLevel) {
            $.repositoryAccessLevel = repositoryAccessLevel;
            return this;
        }

        /**
         * @param repositoryAccessLevel Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder repositoryAccessLevel(String repositoryAccessLevel) {
            return repositoryAccessLevel(Output.of(repositoryAccessLevel));
        }

        /**
         * @param repositoryStorage Which storage shard the repository is on. (administrator only)
         * 
         * @return builder
         * 
         */
        public Builder repositoryStorage(@Nullable Output repositoryStorage) {
            $.repositoryStorage = repositoryStorage;
            return this;
        }

        /**
         * @param repositoryStorage Which storage shard the repository is on. (administrator only)
         * 
         * @return builder
         * 
         */
        public Builder repositoryStorage(String repositoryStorage) {
            return repositoryStorage(Output.of(repositoryStorage));
        }

        /**
         * @param requestAccessEnabled Allow users to request member access.
         * 
         * @return builder
         * 
         */
        public Builder requestAccessEnabled(@Nullable Output requestAccessEnabled) {
            $.requestAccessEnabled = requestAccessEnabled;
            return this;
        }

        /**
         * @param requestAccessEnabled Allow users to request member access.
         * 
         * @return builder
         * 
         */
        public Builder requestAccessEnabled(Boolean requestAccessEnabled) {
            return requestAccessEnabled(Output.of(requestAccessEnabled));
        }

        /**
         * @param requirementsAccessLevel Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder requirementsAccessLevel(@Nullable Output requirementsAccessLevel) {
            $.requirementsAccessLevel = requirementsAccessLevel;
            return this;
        }

        /**
         * @param requirementsAccessLevel Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder requirementsAccessLevel(String requirementsAccessLevel) {
            return requirementsAccessLevel(Output.of(requirementsAccessLevel));
        }

        /**
         * @param resolveOutdatedDiffDiscussions Automatically resolve merge request diffs discussions on lines changed with a push.
         * 
         * @return builder
         * 
         */
        public Builder resolveOutdatedDiffDiscussions(@Nullable Output resolveOutdatedDiffDiscussions) {
            $.resolveOutdatedDiffDiscussions = resolveOutdatedDiffDiscussions;
            return this;
        }

        /**
         * @param resolveOutdatedDiffDiscussions Automatically resolve merge request diffs discussions on lines changed with a push.
         * 
         * @return builder
         * 
         */
        public Builder resolveOutdatedDiffDiscussions(Boolean resolveOutdatedDiffDiscussions) {
            return resolveOutdatedDiffDiscussions(Output.of(resolveOutdatedDiffDiscussions));
        }

        /**
         * @param restrictUserDefinedVariables Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
         * 
         * @return builder
         * 
         */
        public Builder restrictUserDefinedVariables(@Nullable Output restrictUserDefinedVariables) {
            $.restrictUserDefinedVariables = restrictUserDefinedVariables;
            return this;
        }

        /**
         * @param restrictUserDefinedVariables Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
         * 
         * @return builder
         * 
         */
        public Builder restrictUserDefinedVariables(Boolean restrictUserDefinedVariables) {
            return restrictUserDefinedVariables(Output.of(restrictUserDefinedVariables));
        }

        /**
         * @param securityAndComplianceAccessLevel Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder securityAndComplianceAccessLevel(@Nullable Output securityAndComplianceAccessLevel) {
            $.securityAndComplianceAccessLevel = securityAndComplianceAccessLevel;
            return this;
        }

        /**
         * @param securityAndComplianceAccessLevel Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder securityAndComplianceAccessLevel(String securityAndComplianceAccessLevel) {
            return securityAndComplianceAccessLevel(Output.of(securityAndComplianceAccessLevel));
        }

        /**
         * @param sharedRunnersEnabled Enable shared runners for this project.
         * 
         * @return builder
         * 
         */
        public Builder sharedRunnersEnabled(@Nullable Output sharedRunnersEnabled) {
            $.sharedRunnersEnabled = sharedRunnersEnabled;
            return this;
        }

        /**
         * @param sharedRunnersEnabled Enable shared runners for this project.
         * 
         * @return builder
         * 
         */
        public Builder sharedRunnersEnabled(Boolean sharedRunnersEnabled) {
            return sharedRunnersEnabled(Output.of(sharedRunnersEnabled));
        }

        /**
         * @param skipWaitForDefaultBranchProtection If `true`, the default behavior to wait for the default branch protection to be created is skipped.
         * This is necessary if the current user is not an admin and the default branch protection is disabled on an instance-level.
         * There is currently no known way to determine if the default branch protection is disabled on an instance-level for non-admin users.
         * This attribute is only used during resource creation, thus changes are suppressed and the attribute cannot be imported.
         * 
         * @return builder
         * 
         */
        public Builder skipWaitForDefaultBranchProtection(@Nullable Output skipWaitForDefaultBranchProtection) {
            $.skipWaitForDefaultBranchProtection = skipWaitForDefaultBranchProtection;
            return this;
        }

        /**
         * @param skipWaitForDefaultBranchProtection If `true`, the default behavior to wait for the default branch protection to be created is skipped.
         * This is necessary if the current user is not an admin and the default branch protection is disabled on an instance-level.
         * There is currently no known way to determine if the default branch protection is disabled on an instance-level for non-admin users.
         * This attribute is only used during resource creation, thus changes are suppressed and the attribute cannot be imported.
         * 
         * @return builder
         * 
         */
        public Builder skipWaitForDefaultBranchProtection(Boolean skipWaitForDefaultBranchProtection) {
            return skipWaitForDefaultBranchProtection(Output.of(skipWaitForDefaultBranchProtection));
        }

        /**
         * @param snippetsAccessLevel Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder snippetsAccessLevel(@Nullable Output snippetsAccessLevel) {
            $.snippetsAccessLevel = snippetsAccessLevel;
            return this;
        }

        /**
         * @param snippetsAccessLevel Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder snippetsAccessLevel(String snippetsAccessLevel) {
            return snippetsAccessLevel(Output.of(snippetsAccessLevel));
        }

        /**
         * @param snippetsEnabled Enable snippets for the project.
         * 
         * @return builder
         * 
         */
        public Builder snippetsEnabled(@Nullable Output snippetsEnabled) {
            $.snippetsEnabled = snippetsEnabled;
            return this;
        }

        /**
         * @param snippetsEnabled Enable snippets for the project.
         * 
         * @return builder
         * 
         */
        public Builder snippetsEnabled(Boolean snippetsEnabled) {
            return snippetsEnabled(Output.of(snippetsEnabled));
        }

        /**
         * @param squashCommitTemplate Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
         * 
         * @return builder
         * 
         */
        public Builder squashCommitTemplate(@Nullable Output squashCommitTemplate) {
            $.squashCommitTemplate = squashCommitTemplate;
            return this;
        }

        /**
         * @param squashCommitTemplate Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
         * 
         * @return builder
         * 
         */
        public Builder squashCommitTemplate(String squashCommitTemplate) {
            return squashCommitTemplate(Output.of(squashCommitTemplate));
        }

        /**
         * @param squashOption Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
         * 
         * @return builder
         * 
         */
        public Builder squashOption(@Nullable Output squashOption) {
            $.squashOption = squashOption;
            return this;
        }

        /**
         * @param squashOption Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
         * 
         * @return builder
         * 
         */
        public Builder squashOption(String squashOption) {
            return squashOption(Output.of(squashOption));
        }

        /**
         * @param suggestionCommitMessage The commit message used to apply merge request suggestions.
         * 
         * @return builder
         * 
         */
        public Builder suggestionCommitMessage(@Nullable Output suggestionCommitMessage) {
            $.suggestionCommitMessage = suggestionCommitMessage;
            return this;
        }

        /**
         * @param suggestionCommitMessage The commit message used to apply merge request suggestions.
         * 
         * @return builder
         * 
         */
        public Builder suggestionCommitMessage(String suggestionCommitMessage) {
            return suggestionCommitMessage(Output.of(suggestionCommitMessage));
        }

        /**
         * @param tags The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
         * 
         * @return builder
         * 
         */
        public Builder tags(List tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param tags The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
         * 
         * @return builder
         * 
         */
        public Builder tags(String... tags) {
            return tags(List.of(tags));
        }

        /**
         * @param templateName When used without use*custom*template, name of a built-in project template. When used with use*custom*template, name of a custom project template. This option is mutually exclusive with `template_project_id`.
         * 
         * @return builder
         * 
         */
        public Builder templateName(@Nullable Output templateName) {
            $.templateName = templateName;
            return this;
        }

        /**
         * @param templateName When used without use*custom*template, name of a built-in project template. When used with use*custom*template, name of a custom project template. This option is mutually exclusive with `template_project_id`.
         * 
         * @return builder
         * 
         */
        public Builder templateName(String templateName) {
            return templateName(Output.of(templateName));
        }

        /**
         * @param templateProjectId When used with use*custom*template, project ID of a custom project template. This is preferable to using template*name since template*name may be ambiguous (enterprise edition). This option is mutually exclusive with `template_name`. See `gitlab.GroupProjectFileTemplate` to set a project as a template project. If a project has not been set as a template, using it here will result in an error.
         * 
         * @return builder
         * 
         */
        public Builder templateProjectId(@Nullable Output templateProjectId) {
            $.templateProjectId = templateProjectId;
            return this;
        }

        /**
         * @param templateProjectId When used with use*custom*template, project ID of a custom project template. This is preferable to using template*name since template*name may be ambiguous (enterprise edition). This option is mutually exclusive with `template_name`. See `gitlab.GroupProjectFileTemplate` to set a project as a template project. If a project has not been set as a template, using it here will result in an error.
         * 
         * @return builder
         * 
         */
        public Builder templateProjectId(Integer templateProjectId) {
            return templateProjectId(Output.of(templateProjectId));
        }

        /**
         * @param topics The list of topics for the project.
         * 
         * @return builder
         * 
         */
        public Builder topics(@Nullable Output> topics) {
            $.topics = topics;
            return this;
        }

        /**
         * @param topics The list of topics for the project.
         * 
         * @return builder
         * 
         */
        public Builder topics(List topics) {
            return topics(Output.of(topics));
        }

        /**
         * @param topics The list of topics for the project.
         * 
         * @return builder
         * 
         */
        public Builder topics(String... topics) {
            return topics(List.of(topics));
        }

        /**
         * @param useCustomTemplate Use either custom instance or group (with group*with*project*templates*id) project template (enterprise edition).
         * 	> When using a custom template, [Group Tokens won't work](https://docs.gitlab.com/15.7/ee/user/project/settings/import_export_troubleshooting.html#import-using-the-rest-api-fails-when-using-a-group-access-token). You must use a real user's Personal Access Token.
         * 
         * @return builder
         * 
         */
        public Builder useCustomTemplate(@Nullable Output useCustomTemplate) {
            $.useCustomTemplate = useCustomTemplate;
            return this;
        }

        /**
         * @param useCustomTemplate Use either custom instance or group (with group*with*project*templates*id) project template (enterprise edition).
         * 	> When using a custom template, [Group Tokens won't work](https://docs.gitlab.com/15.7/ee/user/project/settings/import_export_troubleshooting.html#import-using-the-rest-api-fails-when-using-a-group-access-token). You must use a real user's Personal Access Token.
         * 
         * @return builder
         * 
         */
        public Builder useCustomTemplate(Boolean useCustomTemplate) {
            return useCustomTemplate(Output.of(useCustomTemplate));
        }

        /**
         * @param visibilityLevel Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
         * 
         * @return builder
         * 
         */
        public Builder visibilityLevel(@Nullable Output visibilityLevel) {
            $.visibilityLevel = visibilityLevel;
            return this;
        }

        /**
         * @param visibilityLevel Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
         * 
         * @return builder
         * 
         */
        public Builder visibilityLevel(String visibilityLevel) {
            return visibilityLevel(Output.of(visibilityLevel));
        }

        /**
         * @param wikiAccessLevel Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder wikiAccessLevel(@Nullable Output wikiAccessLevel) {
            $.wikiAccessLevel = wikiAccessLevel;
            return this;
        }

        /**
         * @param wikiAccessLevel Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
         * 
         * @return builder
         * 
         */
        public Builder wikiAccessLevel(String wikiAccessLevel) {
            return wikiAccessLevel(Output.of(wikiAccessLevel));
        }

        /**
         * @param wikiEnabled Enable wiki for the project.
         * 
         * @return builder
         * 
         */
        public Builder wikiEnabled(@Nullable Output wikiEnabled) {
            $.wikiEnabled = wikiEnabled;
            return this;
        }

        /**
         * @param wikiEnabled Enable wiki for the project.
         * 
         * @return builder
         * 
         */
        public Builder wikiEnabled(Boolean wikiEnabled) {
            return wikiEnabled(Output.of(wikiEnabled));
        }

        public ProjectArgs build() {
            return $;
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy