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

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

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 8.4.2.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.gitlab.kotlin

import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.gitlab.ProjectArgs.builder
import com.pulumi.gitlab.kotlin.inputs.ProjectContainerExpirationPolicyArgs
import com.pulumi.gitlab.kotlin.inputs.ProjectContainerExpirationPolicyArgsBuilder
import com.pulumi.gitlab.kotlin.inputs.ProjectPushRulesArgs
import com.pulumi.gitlab.kotlin.inputs.ProjectPushRulesArgsBuilder
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Deprecated
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.jvm.JvmName

/**
 * ## Example Usage
 * ## Import
 * ```sh
 * $ pulumi import gitlab:index/project:Project You can import a project state using ` `. The
 * ```
 * `id` can be whatever the [get single project api][get_single_project] takes for
 * its `:id` value, so for example:
 * ```sh
 * $ pulumi import gitlab:index/project:Project example richardc/example
 * ```
 * NOTE: the `import_url_username` and `import_url_password` cannot be imported.
 * @property allowMergeOnSkippedPipeline Set to true if you want to treat skipped pipelines as if they finished with success.
 * @property analyticsAccessLevel Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
 * @property 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.
 * @property archiveOnDestroy Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
 * @property archived Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
 * @property autoCancelPendingPipelines Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
 * @property autoDevopsDeployStrategy Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
 * @property autoDevopsEnabled Enable Auto DevOps for this project.
 * @property autocloseReferencedIssues Set whether auto-closing referenced issues on default branch.
 * @property avatar A local path to the avatar image to upload. **Note**: not available for imported resources.
 * @property 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.
 * @property buildCoverageRegex Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
 * @property buildGitStrategy The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
 * @property buildTimeout The maximum amount of time, in seconds, that a job can run.
 * @property buildsAccessLevel Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
 * @property ciConfigPath Custom Path to CI config file.
 * @property ciDefaultGitDepth Default number of revisions for shallow cloning.
 * @property ciForwardDeploymentEnabled When a new deployment job starts, skip older deployment jobs that are still pending.
 * @property 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`
 * @property ciSeparatedCaches Use separate caches for protected branches.
 * @property containerExpirationPolicy Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
 * @property containerRegistryAccessLevel Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
 * @property containerRegistryEnabled Enable container registry for the project.
 * @property defaultBranch The default branch for the project.
 * @property description A description of the project.
 * @property emailsEnabled Enable email notifications.
 * @property environmentsAccessLevel Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
 * @property externalAuthorizationClassificationLabel The classification label for the project.
 * @property featureFlagsAccessLevel Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
 * @property forkedFromProjectId The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
 * @property forkingAccessLevel Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
 * @property groupRunnersEnabled Enable group runners for this project.
 * @property 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).
 * @property 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.
 * @property 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.
 * @property 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.
 * @property infrastructureAccessLevel Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
 * @property initializeWithReadme Create main branch with first commit containing a README.md file.
 * @property issuesAccessLevel Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
 * @property issuesEnabled Enable issue tracking for the project.
 * @property issuesTemplate Sets the template for new issues in the project.
 * @property keepLatestArtifact Disable or enable the ability to keep the latest artifact for this project.
 * @property lfsEnabled Enable LFS for the project.
 * @property mergeCommitTemplate Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
 * @property mergeMethod Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
 * @property mergePipelinesEnabled Enable or disable merge pipelines.
 * @property mergeRequestsAccessLevel Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
 * @property mergeRequestsEnabled Enable merge requests for the project.
 * @property mergeRequestsTemplate Sets the template for new merge requests in the project.
 * @property mergeTrainsEnabled Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
 * @property mirror Enable project pull mirror.
 * @property mirrorOverwritesDivergedBranches Enable overwrite diverged branches for a mirrored project.
 * @property mirrorTriggerBuilds Enable trigger builds on pushes for a mirrored project.
 * @property monitorAccessLevel Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
 * @property mrDefaultTargetSelf For forked projects, target merge requests to this project. If false, the target will be the upstream project.
 * @property name The name of the project.
 * @property namespaceId The namespace (group or user) of the project. Defaults to your user.
 * @property onlyAllowMergeIfAllDiscussionsAreResolved Set to true if you want allow merges only if all discussions are resolved.
 * @property onlyAllowMergeIfPipelineSucceeds Set to true if you want allow merges only if a pipeline succeeds.
 * @property onlyMirrorProtectedBranches Enable only mirror protected branches for a mirrored project.
 * @property packagesEnabled Enable packages repository for the project.
 * @property pagesAccessLevel Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
 * @property path The path of the repository.
 * @property pipelinesEnabled Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
 * @property printingMergeRequestLinkEnabled Show link to create/view merge request when pushing from the command line
 * @property publicBuilds If true, jobs can be viewed by non-project members.
 * @property publicJobs If true, jobs can be viewed by non-project members.
 * @property pushRules Push rules for the project.
 * @property releasesAccessLevel Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
 * @property removeSourceBranchAfterMerge Enable `Delete source branch` option by default for all new merge requests.
 * @property repositoryAccessLevel Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
 * @property repositoryStorage Which storage shard the repository is on. (administrator only)
 * @property requestAccessEnabled Allow users to request member access.
 * @property requirementsAccessLevel Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
 * @property resolveOutdatedDiffDiscussions Automatically resolve merge request diffs discussions on lines changed with a push.
 * @property restrictUserDefinedVariables Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
 * @property securityAndComplianceAccessLevel Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
 * @property sharedRunnersEnabled Enable shared runners for this project.
 * @property 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.
 * @property snippetsAccessLevel Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
 * @property snippetsEnabled Enable snippets for the project.
 * @property squashCommitTemplate Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
 * @property 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]
 * @property suggestionCommitMessage The commit message used to apply merge request suggestions.
 * @property tags The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
 * @property 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`.
 * @property 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.
 * @property topics The list of topics for the project.
 * @property 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.
 * @property visibilityLevel Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
 * @property wikiAccessLevel Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
 * @property wikiEnabled Enable wiki for the project.
 */
public data class ProjectArgs(
    public val allowMergeOnSkippedPipeline: Output? = null,
    public val analyticsAccessLevel: Output? = null,
    public val approvalsBeforeMerge: Output? = null,
    public val archiveOnDestroy: Output? = null,
    public val archived: Output? = null,
    public val autoCancelPendingPipelines: Output? = null,
    public val autoDevopsDeployStrategy: Output? = null,
    public val autoDevopsEnabled: Output? = null,
    public val autocloseReferencedIssues: Output? = null,
    public val avatar: Output? = null,
    public val avatarHash: Output? = null,
    @Deprecated(
        message = """
  build_coverage_regex is removed in GitLab 15.0.
  """,
    )
    public val buildCoverageRegex: Output? = null,
    public val buildGitStrategy: Output? = null,
    public val buildTimeout: Output? = null,
    public val buildsAccessLevel: Output? = null,
    public val ciConfigPath: Output? = null,
    public val ciDefaultGitDepth: Output? = null,
    public val ciForwardDeploymentEnabled: Output? = null,
    public val ciRestrictPipelineCancellationRole: Output? = null,
    public val ciSeparatedCaches: Output? = null,
    public val containerExpirationPolicy: Output? = null,
    public val containerRegistryAccessLevel: Output? = null,
    @Deprecated(
        message = """
  Use `container_registry_access_level` instead.
  """,
    )
    public val containerRegistryEnabled: Output? = null,
    public val defaultBranch: Output? = null,
    public val description: Output? = null,
    public val emailsEnabled: Output? = null,
    public val environmentsAccessLevel: Output? = null,
    public val externalAuthorizationClassificationLabel: Output? = null,
    public val featureFlagsAccessLevel: Output? = null,
    public val forkedFromProjectId: Output? = null,
    public val forkingAccessLevel: Output? = null,
    public val groupRunnersEnabled: Output? = null,
    public val groupWithProjectTemplatesId: Output? = null,
    public val importUrl: Output? = null,
    public val importUrlPassword: Output? = null,
    public val importUrlUsername: Output? = null,
    public val infrastructureAccessLevel: Output? = null,
    public val initializeWithReadme: Output? = null,
    public val issuesAccessLevel: Output? = null,
    public val issuesEnabled: Output? = null,
    public val issuesTemplate: Output? = null,
    public val keepLatestArtifact: Output? = null,
    public val lfsEnabled: Output? = null,
    public val mergeCommitTemplate: Output? = null,
    public val mergeMethod: Output? = null,
    public val mergePipelinesEnabled: Output? = null,
    public val mergeRequestsAccessLevel: Output? = null,
    public val mergeRequestsEnabled: Output? = null,
    public val mergeRequestsTemplate: Output? = null,
    public val mergeTrainsEnabled: Output? = null,
    public val mirror: Output? = null,
    public val mirrorOverwritesDivergedBranches: Output? = null,
    public val mirrorTriggerBuilds: Output? = null,
    public val monitorAccessLevel: Output? = null,
    public val mrDefaultTargetSelf: Output? = null,
    public val name: Output? = null,
    public val namespaceId: Output? = null,
    public val onlyAllowMergeIfAllDiscussionsAreResolved: Output? = null,
    public val onlyAllowMergeIfPipelineSucceeds: Output? = null,
    public val onlyMirrorProtectedBranches: Output? = null,
    public val packagesEnabled: Output? = null,
    public val pagesAccessLevel: Output? = null,
    public val path: Output? = null,
    @Deprecated(
        message = """
  Deprecated in favor of `builds_access_level`
  """,
    )
    public val pipelinesEnabled: Output? = null,
    public val printingMergeRequestLinkEnabled: Output? = null,
    @Deprecated(
        message = """
  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 val publicBuilds: Output? = null,
    public val publicJobs: Output? = null,
    public val pushRules: Output? = null,
    public val releasesAccessLevel: Output? = null,
    public val removeSourceBranchAfterMerge: Output? = null,
    public val repositoryAccessLevel: Output? = null,
    public val repositoryStorage: Output? = null,
    public val requestAccessEnabled: Output? = null,
    public val requirementsAccessLevel: Output? = null,
    public val resolveOutdatedDiffDiscussions: Output? = null,
    public val restrictUserDefinedVariables: Output? = null,
    public val securityAndComplianceAccessLevel: Output? = null,
    public val sharedRunnersEnabled: Output? = null,
    public val skipWaitForDefaultBranchProtection: Output? = null,
    public val snippetsAccessLevel: Output? = null,
    public val snippetsEnabled: Output? = null,
    public val squashCommitTemplate: Output? = null,
    public val squashOption: Output? = null,
    public val suggestionCommitMessage: Output? = null,
    public val tags: Output>? = null,
    public val templateName: Output? = null,
    public val templateProjectId: Output? = null,
    public val topics: Output>? = null,
    public val useCustomTemplate: Output? = null,
    public val visibilityLevel: Output? = null,
    public val wikiAccessLevel: Output? = null,
    public val wikiEnabled: Output? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.gitlab.ProjectArgs = com.pulumi.gitlab.ProjectArgs.builder()
        .allowMergeOnSkippedPipeline(allowMergeOnSkippedPipeline?.applyValue({ args0 -> args0 }))
        .analyticsAccessLevel(analyticsAccessLevel?.applyValue({ args0 -> args0 }))
        .approvalsBeforeMerge(approvalsBeforeMerge?.applyValue({ args0 -> args0 }))
        .archiveOnDestroy(archiveOnDestroy?.applyValue({ args0 -> args0 }))
        .archived(archived?.applyValue({ args0 -> args0 }))
        .autoCancelPendingPipelines(autoCancelPendingPipelines?.applyValue({ args0 -> args0 }))
        .autoDevopsDeployStrategy(autoDevopsDeployStrategy?.applyValue({ args0 -> args0 }))
        .autoDevopsEnabled(autoDevopsEnabled?.applyValue({ args0 -> args0 }))
        .autocloseReferencedIssues(autocloseReferencedIssues?.applyValue({ args0 -> args0 }))
        .avatar(avatar?.applyValue({ args0 -> args0 }))
        .avatarHash(avatarHash?.applyValue({ args0 -> args0 }))
        .buildCoverageRegex(buildCoverageRegex?.applyValue({ args0 -> args0 }))
        .buildGitStrategy(buildGitStrategy?.applyValue({ args0 -> args0 }))
        .buildTimeout(buildTimeout?.applyValue({ args0 -> args0 }))
        .buildsAccessLevel(buildsAccessLevel?.applyValue({ args0 -> args0 }))
        .ciConfigPath(ciConfigPath?.applyValue({ args0 -> args0 }))
        .ciDefaultGitDepth(ciDefaultGitDepth?.applyValue({ args0 -> args0 }))
        .ciForwardDeploymentEnabled(ciForwardDeploymentEnabled?.applyValue({ args0 -> args0 }))
        .ciRestrictPipelineCancellationRole(
            ciRestrictPipelineCancellationRole?.applyValue({ args0 ->
                args0
            }),
        )
        .ciSeparatedCaches(ciSeparatedCaches?.applyValue({ args0 -> args0 }))
        .containerExpirationPolicy(
            containerExpirationPolicy?.applyValue({ args0 ->
                args0.let({ args0 ->
                    args0.toJava()
                })
            }),
        )
        .containerRegistryAccessLevel(containerRegistryAccessLevel?.applyValue({ args0 -> args0 }))
        .containerRegistryEnabled(containerRegistryEnabled?.applyValue({ args0 -> args0 }))
        .defaultBranch(defaultBranch?.applyValue({ args0 -> args0 }))
        .description(description?.applyValue({ args0 -> args0 }))
        .emailsEnabled(emailsEnabled?.applyValue({ args0 -> args0 }))
        .environmentsAccessLevel(environmentsAccessLevel?.applyValue({ args0 -> args0 }))
        .externalAuthorizationClassificationLabel(
            externalAuthorizationClassificationLabel?.applyValue({ args0 ->
                args0
            }),
        )
        .featureFlagsAccessLevel(featureFlagsAccessLevel?.applyValue({ args0 -> args0 }))
        .forkedFromProjectId(forkedFromProjectId?.applyValue({ args0 -> args0 }))
        .forkingAccessLevel(forkingAccessLevel?.applyValue({ args0 -> args0 }))
        .groupRunnersEnabled(groupRunnersEnabled?.applyValue({ args0 -> args0 }))
        .groupWithProjectTemplatesId(groupWithProjectTemplatesId?.applyValue({ args0 -> args0 }))
        .importUrl(importUrl?.applyValue({ args0 -> args0 }))
        .importUrlPassword(importUrlPassword?.applyValue({ args0 -> args0 }))
        .importUrlUsername(importUrlUsername?.applyValue({ args0 -> args0 }))
        .infrastructureAccessLevel(infrastructureAccessLevel?.applyValue({ args0 -> args0 }))
        .initializeWithReadme(initializeWithReadme?.applyValue({ args0 -> args0 }))
        .issuesAccessLevel(issuesAccessLevel?.applyValue({ args0 -> args0 }))
        .issuesEnabled(issuesEnabled?.applyValue({ args0 -> args0 }))
        .issuesTemplate(issuesTemplate?.applyValue({ args0 -> args0 }))
        .keepLatestArtifact(keepLatestArtifact?.applyValue({ args0 -> args0 }))
        .lfsEnabled(lfsEnabled?.applyValue({ args0 -> args0 }))
        .mergeCommitTemplate(mergeCommitTemplate?.applyValue({ args0 -> args0 }))
        .mergeMethod(mergeMethod?.applyValue({ args0 -> args0 }))
        .mergePipelinesEnabled(mergePipelinesEnabled?.applyValue({ args0 -> args0 }))
        .mergeRequestsAccessLevel(mergeRequestsAccessLevel?.applyValue({ args0 -> args0 }))
        .mergeRequestsEnabled(mergeRequestsEnabled?.applyValue({ args0 -> args0 }))
        .mergeRequestsTemplate(mergeRequestsTemplate?.applyValue({ args0 -> args0 }))
        .mergeTrainsEnabled(mergeTrainsEnabled?.applyValue({ args0 -> args0 }))
        .mirror(mirror?.applyValue({ args0 -> args0 }))
        .mirrorOverwritesDivergedBranches(mirrorOverwritesDivergedBranches?.applyValue({ args0 -> args0 }))
        .mirrorTriggerBuilds(mirrorTriggerBuilds?.applyValue({ args0 -> args0 }))
        .monitorAccessLevel(monitorAccessLevel?.applyValue({ args0 -> args0 }))
        .mrDefaultTargetSelf(mrDefaultTargetSelf?.applyValue({ args0 -> args0 }))
        .name(name?.applyValue({ args0 -> args0 }))
        .namespaceId(namespaceId?.applyValue({ args0 -> args0 }))
        .onlyAllowMergeIfAllDiscussionsAreResolved(
            onlyAllowMergeIfAllDiscussionsAreResolved?.applyValue({ args0 ->
                args0
            }),
        )
        .onlyAllowMergeIfPipelineSucceeds(onlyAllowMergeIfPipelineSucceeds?.applyValue({ args0 -> args0 }))
        .onlyMirrorProtectedBranches(onlyMirrorProtectedBranches?.applyValue({ args0 -> args0 }))
        .packagesEnabled(packagesEnabled?.applyValue({ args0 -> args0 }))
        .pagesAccessLevel(pagesAccessLevel?.applyValue({ args0 -> args0 }))
        .path(path?.applyValue({ args0 -> args0 }))
        .pipelinesEnabled(pipelinesEnabled?.applyValue({ args0 -> args0 }))
        .printingMergeRequestLinkEnabled(printingMergeRequestLinkEnabled?.applyValue({ args0 -> args0 }))
        .publicBuilds(publicBuilds?.applyValue({ args0 -> args0 }))
        .publicJobs(publicJobs?.applyValue({ args0 -> args0 }))
        .pushRules(pushRules?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
        .releasesAccessLevel(releasesAccessLevel?.applyValue({ args0 -> args0 }))
        .removeSourceBranchAfterMerge(removeSourceBranchAfterMerge?.applyValue({ args0 -> args0 }))
        .repositoryAccessLevel(repositoryAccessLevel?.applyValue({ args0 -> args0 }))
        .repositoryStorage(repositoryStorage?.applyValue({ args0 -> args0 }))
        .requestAccessEnabled(requestAccessEnabled?.applyValue({ args0 -> args0 }))
        .requirementsAccessLevel(requirementsAccessLevel?.applyValue({ args0 -> args0 }))
        .resolveOutdatedDiffDiscussions(resolveOutdatedDiffDiscussions?.applyValue({ args0 -> args0 }))
        .restrictUserDefinedVariables(restrictUserDefinedVariables?.applyValue({ args0 -> args0 }))
        .securityAndComplianceAccessLevel(securityAndComplianceAccessLevel?.applyValue({ args0 -> args0 }))
        .sharedRunnersEnabled(sharedRunnersEnabled?.applyValue({ args0 -> args0 }))
        .skipWaitForDefaultBranchProtection(
            skipWaitForDefaultBranchProtection?.applyValue({ args0 ->
                args0
            }),
        )
        .snippetsAccessLevel(snippetsAccessLevel?.applyValue({ args0 -> args0 }))
        .snippetsEnabled(snippetsEnabled?.applyValue({ args0 -> args0 }))
        .squashCommitTemplate(squashCommitTemplate?.applyValue({ args0 -> args0 }))
        .squashOption(squashOption?.applyValue({ args0 -> args0 }))
        .suggestionCommitMessage(suggestionCommitMessage?.applyValue({ args0 -> args0 }))
        .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
        .templateName(templateName?.applyValue({ args0 -> args0 }))
        .templateProjectId(templateProjectId?.applyValue({ args0 -> args0 }))
        .topics(topics?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
        .useCustomTemplate(useCustomTemplate?.applyValue({ args0 -> args0 }))
        .visibilityLevel(visibilityLevel?.applyValue({ args0 -> args0 }))
        .wikiAccessLevel(wikiAccessLevel?.applyValue({ args0 -> args0 }))
        .wikiEnabled(wikiEnabled?.applyValue({ args0 -> args0 })).build()
}

/**
 * Builder for [ProjectArgs].
 */
@PulumiTagMarker
public class ProjectArgsBuilder internal constructor() {
    private var allowMergeOnSkippedPipeline: Output? = null

    private var analyticsAccessLevel: Output? = null

    private var approvalsBeforeMerge: Output? = null

    private var archiveOnDestroy: Output? = null

    private var archived: Output? = null

    private var autoCancelPendingPipelines: Output? = null

    private var autoDevopsDeployStrategy: Output? = null

    private var autoDevopsEnabled: Output? = null

    private var autocloseReferencedIssues: Output? = null

    private var avatar: Output? = null

    private var avatarHash: Output? = null

    private var buildCoverageRegex: Output? = null

    private var buildGitStrategy: Output? = null

    private var buildTimeout: Output? = null

    private var buildsAccessLevel: Output? = null

    private var ciConfigPath: Output? = null

    private var ciDefaultGitDepth: Output? = null

    private var ciForwardDeploymentEnabled: Output? = null

    private var ciRestrictPipelineCancellationRole: Output? = null

    private var ciSeparatedCaches: Output? = null

    private var containerExpirationPolicy: Output? = null

    private var containerRegistryAccessLevel: Output? = null

    private var containerRegistryEnabled: Output? = null

    private var defaultBranch: Output? = null

    private var description: Output? = null

    private var emailsEnabled: Output? = null

    private var environmentsAccessLevel: Output? = null

    private var externalAuthorizationClassificationLabel: Output? = null

    private var featureFlagsAccessLevel: Output? = null

    private var forkedFromProjectId: Output? = null

    private var forkingAccessLevel: Output? = null

    private var groupRunnersEnabled: Output? = null

    private var groupWithProjectTemplatesId: Output? = null

    private var importUrl: Output? = null

    private var importUrlPassword: Output? = null

    private var importUrlUsername: Output? = null

    private var infrastructureAccessLevel: Output? = null

    private var initializeWithReadme: Output? = null

    private var issuesAccessLevel: Output? = null

    private var issuesEnabled: Output? = null

    private var issuesTemplate: Output? = null

    private var keepLatestArtifact: Output? = null

    private var lfsEnabled: Output? = null

    private var mergeCommitTemplate: Output? = null

    private var mergeMethod: Output? = null

    private var mergePipelinesEnabled: Output? = null

    private var mergeRequestsAccessLevel: Output? = null

    private var mergeRequestsEnabled: Output? = null

    private var mergeRequestsTemplate: Output? = null

    private var mergeTrainsEnabled: Output? = null

    private var mirror: Output? = null

    private var mirrorOverwritesDivergedBranches: Output? = null

    private var mirrorTriggerBuilds: Output? = null

    private var monitorAccessLevel: Output? = null

    private var mrDefaultTargetSelf: Output? = null

    private var name: Output? = null

    private var namespaceId: Output? = null

    private var onlyAllowMergeIfAllDiscussionsAreResolved: Output? = null

    private var onlyAllowMergeIfPipelineSucceeds: Output? = null

    private var onlyMirrorProtectedBranches: Output? = null

    private var packagesEnabled: Output? = null

    private var pagesAccessLevel: Output? = null

    private var path: Output? = null

    private var pipelinesEnabled: Output? = null

    private var printingMergeRequestLinkEnabled: Output? = null

    private var publicBuilds: Output? = null

    private var publicJobs: Output? = null

    private var pushRules: Output? = null

    private var releasesAccessLevel: Output? = null

    private var removeSourceBranchAfterMerge: Output? = null

    private var repositoryAccessLevel: Output? = null

    private var repositoryStorage: Output? = null

    private var requestAccessEnabled: Output? = null

    private var requirementsAccessLevel: Output? = null

    private var resolveOutdatedDiffDiscussions: Output? = null

    private var restrictUserDefinedVariables: Output? = null

    private var securityAndComplianceAccessLevel: Output? = null

    private var sharedRunnersEnabled: Output? = null

    private var skipWaitForDefaultBranchProtection: Output? = null

    private var snippetsAccessLevel: Output? = null

    private var snippetsEnabled: Output? = null

    private var squashCommitTemplate: Output? = null

    private var squashOption: Output? = null

    private var suggestionCommitMessage: Output? = null

    private var tags: Output>? = null

    private var templateName: Output? = null

    private var templateProjectId: Output? = null

    private var topics: Output>? = null

    private var useCustomTemplate: Output? = null

    private var visibilityLevel: Output? = null

    private var wikiAccessLevel: Output? = null

    private var wikiEnabled: Output? = null

    /**
     * @param value Set to true if you want to treat skipped pipelines as if they finished with success.
     */
    @JvmName("ybndgkwjvbielnwd")
    public suspend fun allowMergeOnSkippedPipeline(`value`: Output) {
        this.allowMergeOnSkippedPipeline = value
    }

    /**
     * @param value Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("cptnopopoennqgkv")
    public suspend fun analyticsAccessLevel(`value`: Output) {
        this.analyticsAccessLevel = value
    }

    /**
     * @param value 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.
     */
    @JvmName("hfnqteivkuwdujyt")
    public suspend fun approvalsBeforeMerge(`value`: Output) {
        this.approvalsBeforeMerge = value
    }

    /**
     * @param value Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
     */
    @JvmName("jebcaehtcxrknccm")
    public suspend fun archiveOnDestroy(`value`: Output) {
        this.archiveOnDestroy = value
    }

    /**
     * @param value Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
     */
    @JvmName("jukfacvsdkvxopho")
    public suspend fun archived(`value`: Output) {
        this.archived = value
    }

    /**
     * @param value Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
     */
    @JvmName("sosbfaeiiaqyhavy")
    public suspend fun autoCancelPendingPipelines(`value`: Output) {
        this.autoCancelPendingPipelines = value
    }

    /**
     * @param value Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
     */
    @JvmName("abgujdjpaempuchy")
    public suspend fun autoDevopsDeployStrategy(`value`: Output) {
        this.autoDevopsDeployStrategy = value
    }

    /**
     * @param value Enable Auto DevOps for this project.
     */
    @JvmName("tcqutifkapltgacc")
    public suspend fun autoDevopsEnabled(`value`: Output) {
        this.autoDevopsEnabled = value
    }

    /**
     * @param value Set whether auto-closing referenced issues on default branch.
     */
    @JvmName("dtwiapjwgvgddvhu")
    public suspend fun autocloseReferencedIssues(`value`: Output) {
        this.autocloseReferencedIssues = value
    }

    /**
     * @param value A local path to the avatar image to upload. **Note**: not available for imported resources.
     */
    @JvmName("noetclpktbqoenok")
    public suspend fun avatar(`value`: Output) {
        this.avatar = value
    }

    /**
     * @param value 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.
     */
    @JvmName("qjmewvtctswrlrpq")
    public suspend fun avatarHash(`value`: Output) {
        this.avatarHash = value
    }

    /**
     * @param value Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
     */
    @Deprecated(
        message = """
  build_coverage_regex is removed in GitLab 15.0.
  """,
    )
    @JvmName("eksqvhvgqtsgqrrx")
    public suspend fun buildCoverageRegex(`value`: Output) {
        this.buildCoverageRegex = value
    }

    /**
     * @param value The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
     */
    @JvmName("ywlpvfraslujrlkd")
    public suspend fun buildGitStrategy(`value`: Output) {
        this.buildGitStrategy = value
    }

    /**
     * @param value The maximum amount of time, in seconds, that a job can run.
     */
    @JvmName("djkqxrhnmaumknaf")
    public suspend fun buildTimeout(`value`: Output) {
        this.buildTimeout = value
    }

    /**
     * @param value Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("hsnqrttroonninib")
    public suspend fun buildsAccessLevel(`value`: Output) {
        this.buildsAccessLevel = value
    }

    /**
     * @param value Custom Path to CI config file.
     */
    @JvmName("vgtiymesrqgqwkvo")
    public suspend fun ciConfigPath(`value`: Output) {
        this.ciConfigPath = value
    }

    /**
     * @param value Default number of revisions for shallow cloning.
     */
    @JvmName("rwfbgqjefkpqsdql")
    public suspend fun ciDefaultGitDepth(`value`: Output) {
        this.ciDefaultGitDepth = value
    }

    /**
     * @param value When a new deployment job starts, skip older deployment jobs that are still pending.
     */
    @JvmName("rveqdlodbuiqisic")
    public suspend fun ciForwardDeploymentEnabled(`value`: Output) {
        this.ciForwardDeploymentEnabled = value
    }

    /**
     * @param value 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`
     */
    @JvmName("idekclrqemcwivha")
    public suspend fun ciRestrictPipelineCancellationRole(`value`: Output) {
        this.ciRestrictPipelineCancellationRole = value
    }

    /**
     * @param value Use separate caches for protected branches.
     */
    @JvmName("tbmclnwnmexkgsmp")
    public suspend fun ciSeparatedCaches(`value`: Output) {
        this.ciSeparatedCaches = value
    }

    /**
     * @param value Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
     */
    @JvmName("vfrvytpxmdfhmtpe")
    public suspend fun containerExpirationPolicy(`value`: Output) {
        this.containerExpirationPolicy = value
    }

    /**
     * @param value Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("jrcemshlebhtrylj")
    public suspend fun containerRegistryAccessLevel(`value`: Output) {
        this.containerRegistryAccessLevel = value
    }

    /**
     * @param value Enable container registry for the project.
     */
    @Deprecated(
        message = """
  Use `container_registry_access_level` instead.
  """,
    )
    @JvmName("ycpgpvtotxebvlap")
    public suspend fun containerRegistryEnabled(`value`: Output) {
        this.containerRegistryEnabled = value
    }

    /**
     * @param value The default branch for the project.
     */
    @JvmName("iejourvhvpyndpsa")
    public suspend fun defaultBranch(`value`: Output) {
        this.defaultBranch = value
    }

    /**
     * @param value A description of the project.
     */
    @JvmName("qcleenfybkywwqpl")
    public suspend fun description(`value`: Output) {
        this.description = value
    }

    /**
     * @param value Enable email notifications.
     */
    @JvmName("cmodmesqbircrugl")
    public suspend fun emailsEnabled(`value`: Output) {
        this.emailsEnabled = value
    }

    /**
     * @param value Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("cekefsdyuisssgal")
    public suspend fun environmentsAccessLevel(`value`: Output) {
        this.environmentsAccessLevel = value
    }

    /**
     * @param value The classification label for the project.
     */
    @JvmName("fsesxfferaapimii")
    public suspend fun externalAuthorizationClassificationLabel(`value`: Output) {
        this.externalAuthorizationClassificationLabel = value
    }

    /**
     * @param value Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("oijlrbvgeykufdcg")
    public suspend fun featureFlagsAccessLevel(`value`: Output) {
        this.featureFlagsAccessLevel = value
    }

    /**
     * @param value The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
     */
    @JvmName("vpiayqgmqgrjmhaw")
    public suspend fun forkedFromProjectId(`value`: Output) {
        this.forkedFromProjectId = value
    }

    /**
     * @param value Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("mjppltklkmsaqdra")
    public suspend fun forkingAccessLevel(`value`: Output) {
        this.forkingAccessLevel = value
    }

    /**
     * @param value Enable group runners for this project.
     */
    @JvmName("nrarbewiapqnknpi")
    public suspend fun groupRunnersEnabled(`value`: Output) {
        this.groupRunnersEnabled = value
    }

    /**
     * @param value 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).
     */
    @JvmName("ermvqhjtwsalnwhs")
    public suspend fun groupWithProjectTemplatesId(`value`: Output) {
        this.groupWithProjectTemplatesId = value
    }

    /**
     * @param value 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.
     */
    @JvmName("iwfookyvwwmvnjqb")
    public suspend fun importUrl(`value`: Output) {
        this.importUrl = value
    }

    /**
     * @param value 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.
     */
    @JvmName("jsksrhwoivcnftma")
    public suspend fun importUrlPassword(`value`: Output) {
        this.importUrlPassword = value
    }

    /**
     * @param value 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.
     */
    @JvmName("ojhlxnpwlpuorukr")
    public suspend fun importUrlUsername(`value`: Output) {
        this.importUrlUsername = value
    }

    /**
     * @param value Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("yoyyumekjkvayygs")
    public suspend fun infrastructureAccessLevel(`value`: Output) {
        this.infrastructureAccessLevel = value
    }

    /**
     * @param value Create main branch with first commit containing a README.md file.
     */
    @JvmName("ndnvtbbiulqgceqq")
    public suspend fun initializeWithReadme(`value`: Output) {
        this.initializeWithReadme = value
    }

    /**
     * @param value Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("pedpthwsaofhpqhd")
    public suspend fun issuesAccessLevel(`value`: Output) {
        this.issuesAccessLevel = value
    }

    /**
     * @param value Enable issue tracking for the project.
     */
    @JvmName("nwpsxmmnvvqitnkt")
    public suspend fun issuesEnabled(`value`: Output) {
        this.issuesEnabled = value
    }

    /**
     * @param value Sets the template for new issues in the project.
     */
    @JvmName("mtksqasyanqukqen")
    public suspend fun issuesTemplate(`value`: Output) {
        this.issuesTemplate = value
    }

    /**
     * @param value Disable or enable the ability to keep the latest artifact for this project.
     */
    @JvmName("enxuyenugwtrmbhs")
    public suspend fun keepLatestArtifact(`value`: Output) {
        this.keepLatestArtifact = value
    }

    /**
     * @param value Enable LFS for the project.
     */
    @JvmName("pmptroxbguriewjs")
    public suspend fun lfsEnabled(`value`: Output) {
        this.lfsEnabled = value
    }

    /**
     * @param value Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
     */
    @JvmName("gmvpwovtmmfqdqde")
    public suspend fun mergeCommitTemplate(`value`: Output) {
        this.mergeCommitTemplate = value
    }

    /**
     * @param value Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
     */
    @JvmName("fdycptacfydmjfoh")
    public suspend fun mergeMethod(`value`: Output) {
        this.mergeMethod = value
    }

    /**
     * @param value Enable or disable merge pipelines.
     */
    @JvmName("gacssapuutiorwsn")
    public suspend fun mergePipelinesEnabled(`value`: Output) {
        this.mergePipelinesEnabled = value
    }

    /**
     * @param value Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("blgencjqoxdblacu")
    public suspend fun mergeRequestsAccessLevel(`value`: Output) {
        this.mergeRequestsAccessLevel = value
    }

    /**
     * @param value Enable merge requests for the project.
     */
    @JvmName("cjqdiyyipfirmwnh")
    public suspend fun mergeRequestsEnabled(`value`: Output) {
        this.mergeRequestsEnabled = value
    }

    /**
     * @param value Sets the template for new merge requests in the project.
     */
    @JvmName("qhpyympqhpymnhcl")
    public suspend fun mergeRequestsTemplate(`value`: Output) {
        this.mergeRequestsTemplate = value
    }

    /**
     * @param value Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
     */
    @JvmName("jyfjmvaxugceflgb")
    public suspend fun mergeTrainsEnabled(`value`: Output) {
        this.mergeTrainsEnabled = value
    }

    /**
     * @param value Enable project pull mirror.
     */
    @JvmName("bmhjxsoqwoxhqhck")
    public suspend fun mirror(`value`: Output) {
        this.mirror = value
    }

    /**
     * @param value Enable overwrite diverged branches for a mirrored project.
     */
    @JvmName("pqcvgepakeuasbfp")
    public suspend fun mirrorOverwritesDivergedBranches(`value`: Output) {
        this.mirrorOverwritesDivergedBranches = value
    }

    /**
     * @param value Enable trigger builds on pushes for a mirrored project.
     */
    @JvmName("xtsmimldklxvqqsd")
    public suspend fun mirrorTriggerBuilds(`value`: Output) {
        this.mirrorTriggerBuilds = value
    }

    /**
     * @param value Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("gysyvfiepceredya")
    public suspend fun monitorAccessLevel(`value`: Output) {
        this.monitorAccessLevel = value
    }

    /**
     * @param value For forked projects, target merge requests to this project. If false, the target will be the upstream project.
     */
    @JvmName("ilcjfchercuvcdtj")
    public suspend fun mrDefaultTargetSelf(`value`: Output) {
        this.mrDefaultTargetSelf = value
    }

    /**
     * @param value The name of the project.
     */
    @JvmName("ywajjchnkmavdyrn")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

    /**
     * @param value The namespace (group or user) of the project. Defaults to your user.
     */
    @JvmName("xisasbyqwjeefunt")
    public suspend fun namespaceId(`value`: Output) {
        this.namespaceId = value
    }

    /**
     * @param value Set to true if you want allow merges only if all discussions are resolved.
     */
    @JvmName("etnkicyoactbtmeb")
    public suspend fun onlyAllowMergeIfAllDiscussionsAreResolved(`value`: Output) {
        this.onlyAllowMergeIfAllDiscussionsAreResolved = value
    }

    /**
     * @param value Set to true if you want allow merges only if a pipeline succeeds.
     */
    @JvmName("vgoxsqjtdovjglax")
    public suspend fun onlyAllowMergeIfPipelineSucceeds(`value`: Output) {
        this.onlyAllowMergeIfPipelineSucceeds = value
    }

    /**
     * @param value Enable only mirror protected branches for a mirrored project.
     */
    @JvmName("odosbjicaraxthax")
    public suspend fun onlyMirrorProtectedBranches(`value`: Output) {
        this.onlyMirrorProtectedBranches = value
    }

    /**
     * @param value Enable packages repository for the project.
     */
    @JvmName("awgkwukvfjrxbopg")
    public suspend fun packagesEnabled(`value`: Output) {
        this.packagesEnabled = value
    }

    /**
     * @param value Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
     */
    @JvmName("qqtpkdukwvctknmo")
    public suspend fun pagesAccessLevel(`value`: Output) {
        this.pagesAccessLevel = value
    }

    /**
     * @param value The path of the repository.
     */
    @JvmName("bsisskijinfaedba")
    public suspend fun path(`value`: Output) {
        this.path = value
    }

    /**
     * @param value Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
     */
    @Deprecated(
        message = """
  Deprecated in favor of `builds_access_level`
  """,
    )
    @JvmName("orxkgsubnuvypqus")
    public suspend fun pipelinesEnabled(`value`: Output) {
        this.pipelinesEnabled = value
    }

    /**
     * @param value Show link to create/view merge request when pushing from the command line
     */
    @JvmName("homvqjbhegiblqqe")
    public suspend fun printingMergeRequestLinkEnabled(`value`: Output) {
        this.printingMergeRequestLinkEnabled = value
    }

    /**
     * @param value If true, jobs can be viewed by non-project members.
     */
    @Deprecated(
        message = """
  The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in
      the next major version of the provider.
  """,
    )
    @JvmName("wipgmeftejjcxcmi")
    public suspend fun publicBuilds(`value`: Output) {
        this.publicBuilds = value
    }

    /**
     * @param value If true, jobs can be viewed by non-project members.
     */
    @JvmName("avuhedniyaannivo")
    public suspend fun publicJobs(`value`: Output) {
        this.publicJobs = value
    }

    /**
     * @param value Push rules for the project.
     */
    @JvmName("pnucwfxogbhtyyer")
    public suspend fun pushRules(`value`: Output) {
        this.pushRules = value
    }

    /**
     * @param value Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("nsvsnyqaklyafxhn")
    public suspend fun releasesAccessLevel(`value`: Output) {
        this.releasesAccessLevel = value
    }

    /**
     * @param value Enable `Delete source branch` option by default for all new merge requests.
     */
    @JvmName("rchaggmuhkroglmy")
    public suspend fun removeSourceBranchAfterMerge(`value`: Output) {
        this.removeSourceBranchAfterMerge = value
    }

    /**
     * @param value Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("pfnyvwsiiqefsdsf")
    public suspend fun repositoryAccessLevel(`value`: Output) {
        this.repositoryAccessLevel = value
    }

    /**
     * @param value Which storage shard the repository is on. (administrator only)
     */
    @JvmName("hdmyhcodespfxaft")
    public suspend fun repositoryStorage(`value`: Output) {
        this.repositoryStorage = value
    }

    /**
     * @param value Allow users to request member access.
     */
    @JvmName("unrckvscygeuexaa")
    public suspend fun requestAccessEnabled(`value`: Output) {
        this.requestAccessEnabled = value
    }

    /**
     * @param value Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("tcxrnprcghsymiyr")
    public suspend fun requirementsAccessLevel(`value`: Output) {
        this.requirementsAccessLevel = value
    }

    /**
     * @param value Automatically resolve merge request diffs discussions on lines changed with a push.
     */
    @JvmName("hfnjgcotdjqxryah")
    public suspend fun resolveOutdatedDiffDiscussions(`value`: Output) {
        this.resolveOutdatedDiffDiscussions = value
    }

    /**
     * @param value Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
     */
    @JvmName("aerewgcplfiiuxjq")
    public suspend fun restrictUserDefinedVariables(`value`: Output) {
        this.restrictUserDefinedVariables = value
    }

    /**
     * @param value Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("iaxanhxwkljiftoy")
    public suspend fun securityAndComplianceAccessLevel(`value`: Output) {
        this.securityAndComplianceAccessLevel = value
    }

    /**
     * @param value Enable shared runners for this project.
     */
    @JvmName("xycheefgbgultmgb")
    public suspend fun sharedRunnersEnabled(`value`: Output) {
        this.sharedRunnersEnabled = value
    }

    /**
     * @param value 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.
     */
    @JvmName("mewwldtkkjldhlnx")
    public suspend fun skipWaitForDefaultBranchProtection(`value`: Output) {
        this.skipWaitForDefaultBranchProtection = value
    }

    /**
     * @param value Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("nvadonoijgjwymcv")
    public suspend fun snippetsAccessLevel(`value`: Output) {
        this.snippetsAccessLevel = value
    }

    /**
     * @param value Enable snippets for the project.
     */
    @JvmName("egowdbofplixjqde")
    public suspend fun snippetsEnabled(`value`: Output) {
        this.snippetsEnabled = value
    }

    /**
     * @param value Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
     */
    @JvmName("oehlijgmvacqgmjg")
    public suspend fun squashCommitTemplate(`value`: Output) {
        this.squashCommitTemplate = value
    }

    /**
     * @param value Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
     */
    @JvmName("ndbwvkedryomxiac")
    public suspend fun squashOption(`value`: Output) {
        this.squashOption = value
    }

    /**
     * @param value The commit message used to apply merge request suggestions.
     */
    @JvmName("nhjjgmpptsrsbfdf")
    public suspend fun suggestionCommitMessage(`value`: Output) {
        this.suggestionCommitMessage = value
    }

    /**
     * @param value The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
     */
    @JvmName("wputgvxxyyobhdtj")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    @JvmName("comxaunhwxdupwpg")
    public suspend fun tags(vararg values: Output) {
        this.tags = Output.all(values.asList())
    }

    /**
     * @param values The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
     */
    @JvmName("hgxsncialphbhfns")
    public suspend fun tags(values: List>) {
        this.tags = Output.all(values)
    }

    /**
     * @param value 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`.
     */
    @JvmName("hbvyulmomcgsopru")
    public suspend fun templateName(`value`: Output) {
        this.templateName = value
    }

    /**
     * @param value 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.
     */
    @JvmName("bfikeijcmhsmtxyi")
    public suspend fun templateProjectId(`value`: Output) {
        this.templateProjectId = value
    }

    /**
     * @param value The list of topics for the project.
     */
    @JvmName("clpxmdsbmqxfnamh")
    public suspend fun topics(`value`: Output>) {
        this.topics = value
    }

    @JvmName("pspjvuwvbywdbnsu")
    public suspend fun topics(vararg values: Output) {
        this.topics = Output.all(values.asList())
    }

    /**
     * @param values The list of topics for the project.
     */
    @JvmName("kmsmaxgxhpognhcq")
    public suspend fun topics(values: List>) {
        this.topics = Output.all(values)
    }

    /**
     * @param value 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.
     */
    @JvmName("ucppbtnvruxgpmoj")
    public suspend fun useCustomTemplate(`value`: Output) {
        this.useCustomTemplate = value
    }

    /**
     * @param value Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
     */
    @JvmName("wvvwjhvolfxkyfwx")
    public suspend fun visibilityLevel(`value`: Output) {
        this.visibilityLevel = value
    }

    /**
     * @param value Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("qxtnxpdeduvnyxxh")
    public suspend fun wikiAccessLevel(`value`: Output) {
        this.wikiAccessLevel = value
    }

    /**
     * @param value Enable wiki for the project.
     */
    @JvmName("velombjinpfnlnii")
    public suspend fun wikiEnabled(`value`: Output) {
        this.wikiEnabled = value
    }

    /**
     * @param value Set to true if you want to treat skipped pipelines as if they finished with success.
     */
    @JvmName("kopmlbokffbwcchx")
    public suspend fun allowMergeOnSkippedPipeline(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.allowMergeOnSkippedPipeline = mapped
    }

    /**
     * @param value Set the analytics access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("tkvxlaskpjkbpjrm")
    public suspend fun analyticsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.analyticsAccessLevel = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("plpkdycvhhhhogxf")
    public suspend fun approvalsBeforeMerge(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.approvalsBeforeMerge = mapped
    }

    /**
     * @param value Set to `true` to archive the project instead of deleting on destroy. If set to `true` it will entire omit the `DELETE` operation.
     */
    @JvmName("ovuaosmvbayhfibd")
    public suspend fun archiveOnDestroy(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.archiveOnDestroy = mapped
    }

    /**
     * @param value Whether the project is in read-only mode (archived). Repositories can be archived/unarchived by toggling this parameter.
     */
    @JvmName("facyqwamqjcmmuno")
    public suspend fun archived(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.archived = mapped
    }

    /**
     * @param value Auto-cancel pending pipelines. This isn’t a boolean, but enabled/disabled.
     */
    @JvmName("oeosswwlghmiqyuh")
    public suspend fun autoCancelPendingPipelines(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.autoCancelPendingPipelines = mapped
    }

    /**
     * @param value Auto Deploy strategy. Valid values are `continuous`, `manual`, `timed_incremental`.
     */
    @JvmName("prmiavtbgrtxkuom")
    public suspend fun autoDevopsDeployStrategy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.autoDevopsDeployStrategy = mapped
    }

    /**
     * @param value Enable Auto DevOps for this project.
     */
    @JvmName("hikxwlcdxxwytcxq")
    public suspend fun autoDevopsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.autoDevopsEnabled = mapped
    }

    /**
     * @param value Set whether auto-closing referenced issues on default branch.
     */
    @JvmName("eqcbsgubhchwngvr")
    public suspend fun autocloseReferencedIssues(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.autocloseReferencedIssues = mapped
    }

    /**
     * @param value A local path to the avatar image to upload. **Note**: not available for imported resources.
     */
    @JvmName("qihevwycqbadqegd")
    public suspend fun avatar(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.avatar = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("jbvethiomutlsxfj")
    public suspend fun avatarHash(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.avatarHash = mapped
    }

    /**
     * @param value Test coverage parsing for the project. This is deprecated feature in GitLab 15.0.
     */
    @Deprecated(
        message = """
  build_coverage_regex is removed in GitLab 15.0.
  """,
    )
    @JvmName("vmrhkpsocimxageg")
    public suspend fun buildCoverageRegex(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.buildCoverageRegex = mapped
    }

    /**
     * @param value The Git strategy. Defaults to fetch. Valid values are `clone`, `fetch`.
     */
    @JvmName("pbcyhhvoqwnwabhe")
    public suspend fun buildGitStrategy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.buildGitStrategy = mapped
    }

    /**
     * @param value The maximum amount of time, in seconds, that a job can run.
     */
    @JvmName("ngyjotyregsuoram")
    public suspend fun buildTimeout(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.buildTimeout = mapped
    }

    /**
     * @param value Set the builds access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("mgfflrexsymrwdmh")
    public suspend fun buildsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.buildsAccessLevel = mapped
    }

    /**
     * @param value Custom Path to CI config file.
     */
    @JvmName("fgiqartwesouqnxt")
    public suspend fun ciConfigPath(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ciConfigPath = mapped
    }

    /**
     * @param value Default number of revisions for shallow cloning.
     */
    @JvmName("dqpwwtfdwgtmtjwy")
    public suspend fun ciDefaultGitDepth(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ciDefaultGitDepth = mapped
    }

    /**
     * @param value When a new deployment job starts, skip older deployment jobs that are still pending.
     */
    @JvmName("moxhioltptnunxob")
    public suspend fun ciForwardDeploymentEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ciForwardDeploymentEnabled = mapped
    }

    /**
     * @param value 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`
     */
    @JvmName("tuuakpluyhmpayar")
    public suspend fun ciRestrictPipelineCancellationRole(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ciRestrictPipelineCancellationRole = mapped
    }

    /**
     * @param value Use separate caches for protected branches.
     */
    @JvmName("dcawhcltpycykqob")
    public suspend fun ciSeparatedCaches(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ciSeparatedCaches = mapped
    }

    /**
     * @param value Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
     */
    @JvmName("pnxvesrmfcbsduei")
    public suspend fun containerExpirationPolicy(`value`: ProjectContainerExpirationPolicyArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.containerExpirationPolicy = mapped
    }

    /**
     * @param argument Set the image cleanup policy for this project. **Note**: this field is sometimes named `container_expiration_policy_attributes` in the GitLab Upstream API.
     */
    @JvmName("vvflkolmmegqtruv")
    public suspend fun containerExpirationPolicy(argument: suspend ProjectContainerExpirationPolicyArgsBuilder.() -> Unit) {
        val toBeMapped = ProjectContainerExpirationPolicyArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.containerExpirationPolicy = mapped
    }

    /**
     * @param value Set visibility of container registry, for this project. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("btuoxgcofcdhyhea")
    public suspend fun containerRegistryAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.containerRegistryAccessLevel = mapped
    }

    /**
     * @param value Enable container registry for the project.
     */
    @Deprecated(
        message = """
  Use `container_registry_access_level` instead.
  """,
    )
    @JvmName("dokxumguurxcrkwn")
    public suspend fun containerRegistryEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.containerRegistryEnabled = mapped
    }

    /**
     * @param value The default branch for the project.
     */
    @JvmName("mchlrgyonwpjcrvj")
    public suspend fun defaultBranch(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.defaultBranch = mapped
    }

    /**
     * @param value A description of the project.
     */
    @JvmName("qsstyavxohhefmpm")
    public suspend fun description(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.description = mapped
    }

    /**
     * @param value Enable email notifications.
     */
    @JvmName("nwwhbsscnwsqlcql")
    public suspend fun emailsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.emailsEnabled = mapped
    }

    /**
     * @param value Set the environments access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("nqywrnrlgmgwgdbl")
    public suspend fun environmentsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.environmentsAccessLevel = mapped
    }

    /**
     * @param value The classification label for the project.
     */
    @JvmName("asocxfhybdujluxx")
    public suspend fun externalAuthorizationClassificationLabel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.externalAuthorizationClassificationLabel = mapped
    }

    /**
     * @param value Set the feature flags access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("nciftdifyalxlpaf")
    public suspend fun featureFlagsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.featureFlagsAccessLevel = mapped
    }

    /**
     * @param value The id of the project to fork. During create the project is forked and during an update the fork relation is changed.
     */
    @JvmName("coxpdwdlirwgeydc")
    public suspend fun forkedFromProjectId(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.forkedFromProjectId = mapped
    }

    /**
     * @param value Set the forking access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("umpgoqtvhoewjboa")
    public suspend fun forkingAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.forkingAccessLevel = mapped
    }

    /**
     * @param value Enable group runners for this project.
     */
    @JvmName("fouoxiyjkvbbmtex")
    public suspend fun groupRunnersEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.groupRunnersEnabled = mapped
    }

    /**
     * @param value 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).
     */
    @JvmName("mjlinqyckobpdrfq")
    public suspend fun groupWithProjectTemplatesId(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.groupWithProjectTemplatesId = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("giwcsmegoettmqmy")
    public suspend fun importUrl(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.importUrl = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("rcouobcligvpyaus")
    public suspend fun importUrlPassword(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.importUrlPassword = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("goctbtjnqsveqxdm")
    public suspend fun importUrlUsername(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.importUrlUsername = mapped
    }

    /**
     * @param value Set the infrastructure access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("crlmumgjbefvswyo")
    public suspend fun infrastructureAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.infrastructureAccessLevel = mapped
    }

    /**
     * @param value Create main branch with first commit containing a README.md file.
     */
    @JvmName("thbrikirnshssbpx")
    public suspend fun initializeWithReadme(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.initializeWithReadme = mapped
    }

    /**
     * @param value Set the issues access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("ipqhxoyygbedhlpi")
    public suspend fun issuesAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.issuesAccessLevel = mapped
    }

    /**
     * @param value Enable issue tracking for the project.
     */
    @JvmName("jboqempsjgweyutt")
    public suspend fun issuesEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.issuesEnabled = mapped
    }

    /**
     * @param value Sets the template for new issues in the project.
     */
    @JvmName("kekajiwagccnsold")
    public suspend fun issuesTemplate(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.issuesTemplate = mapped
    }

    /**
     * @param value Disable or enable the ability to keep the latest artifact for this project.
     */
    @JvmName("hwqqpgplrivfdrxh")
    public suspend fun keepLatestArtifact(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.keepLatestArtifact = mapped
    }

    /**
     * @param value Enable LFS for the project.
     */
    @JvmName("adcybtspgimfrhtc")
    public suspend fun lfsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.lfsEnabled = mapped
    }

    /**
     * @param value Template used to create merge commit message in merge requests. (Introduced in GitLab 14.5.)
     */
    @JvmName("ngpaghqwkgqxpbal")
    public suspend fun mergeCommitTemplate(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergeCommitTemplate = mapped
    }

    /**
     * @param value Set the merge method. Valid values are `merge`, `rebase_merge`, `ff`.
     */
    @JvmName("bblvuxhupniuqtlf")
    public suspend fun mergeMethod(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergeMethod = mapped
    }

    /**
     * @param value Enable or disable merge pipelines.
     */
    @JvmName("xwdfkmchmdhvjnuk")
    public suspend fun mergePipelinesEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergePipelinesEnabled = mapped
    }

    /**
     * @param value Set the merge requests access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("qcaiqaymmxaykpyn")
    public suspend fun mergeRequestsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergeRequestsAccessLevel = mapped
    }

    /**
     * @param value Enable merge requests for the project.
     */
    @JvmName("qbsbhurscqmwbwbp")
    public suspend fun mergeRequestsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergeRequestsEnabled = mapped
    }

    /**
     * @param value Sets the template for new merge requests in the project.
     */
    @JvmName("igvditrhyafyuuog")
    public suspend fun mergeRequestsTemplate(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergeRequestsTemplate = mapped
    }

    /**
     * @param value Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
     */
    @JvmName("ppjmorngerbeeebf")
    public suspend fun mergeTrainsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mergeTrainsEnabled = mapped
    }

    /**
     * @param value Enable project pull mirror.
     */
    @JvmName("eyujmqogaiqusogw")
    public suspend fun mirror(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mirror = mapped
    }

    /**
     * @param value Enable overwrite diverged branches for a mirrored project.
     */
    @JvmName("xopbutbitspxnvaw")
    public suspend fun mirrorOverwritesDivergedBranches(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mirrorOverwritesDivergedBranches = mapped
    }

    /**
     * @param value Enable trigger builds on pushes for a mirrored project.
     */
    @JvmName("cneptgnwbhnbqejf")
    public suspend fun mirrorTriggerBuilds(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mirrorTriggerBuilds = mapped
    }

    /**
     * @param value Set the monitor access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("xheglviiflgwtjhk")
    public suspend fun monitorAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.monitorAccessLevel = mapped
    }

    /**
     * @param value For forked projects, target merge requests to this project. If false, the target will be the upstream project.
     */
    @JvmName("bryyjwinthqtspqs")
    public suspend fun mrDefaultTargetSelf(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mrDefaultTargetSelf = mapped
    }

    /**
     * @param value The name of the project.
     */
    @JvmName("tqjmkhceriifgvwa")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

    /**
     * @param value The namespace (group or user) of the project. Defaults to your user.
     */
    @JvmName("xitrgejjummrpnjl")
    public suspend fun namespaceId(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.namespaceId = mapped
    }

    /**
     * @param value Set to true if you want allow merges only if all discussions are resolved.
     */
    @JvmName("susdavrpbhpvcedc")
    public suspend fun onlyAllowMergeIfAllDiscussionsAreResolved(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.onlyAllowMergeIfAllDiscussionsAreResolved = mapped
    }

    /**
     * @param value Set to true if you want allow merges only if a pipeline succeeds.
     */
    @JvmName("fblvrgytnktsamiy")
    public suspend fun onlyAllowMergeIfPipelineSucceeds(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.onlyAllowMergeIfPipelineSucceeds = mapped
    }

    /**
     * @param value Enable only mirror protected branches for a mirrored project.
     */
    @JvmName("xgnfhmalynrrksde")
    public suspend fun onlyMirrorProtectedBranches(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.onlyMirrorProtectedBranches = mapped
    }

    /**
     * @param value Enable packages repository for the project.
     */
    @JvmName("pclevewvpletxudn")
    public suspend fun packagesEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.packagesEnabled = mapped
    }

    /**
     * @param value Enable pages access control. Valid values are `public`, `private`, `enabled`, `disabled`.
     */
    @JvmName("gxwilwjbpkvfyjcx")
    public suspend fun pagesAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.pagesAccessLevel = mapped
    }

    /**
     * @param value The path of the repository.
     */
    @JvmName("ipfrnkykqwvbtaop")
    public suspend fun path(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.path = mapped
    }

    /**
     * @param value Enable pipelines for the project. The `pipelines_enabled` field is being sent as `jobs_enabled` in the GitLab API calls.
     */
    @Deprecated(
        message = """
  Deprecated in favor of `builds_access_level`
  """,
    )
    @JvmName("qtrppwusyuftwxep")
    public suspend fun pipelinesEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.pipelinesEnabled = mapped
    }

    /**
     * @param value Show link to create/view merge request when pushing from the command line
     */
    @JvmName("etlkymlcvrvpadlr")
    public suspend fun printingMergeRequestLinkEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.printingMergeRequestLinkEnabled = mapped
    }

    /**
     * @param value If true, jobs can be viewed by non-project members.
     */
    @Deprecated(
        message = """
  The `public_builds` attribute has been deprecated in favor of `public_jobs` and will be removed in
      the next major version of the provider.
  """,
    )
    @JvmName("goxelwquflyixnqo")
    public suspend fun publicBuilds(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.publicBuilds = mapped
    }

    /**
     * @param value If true, jobs can be viewed by non-project members.
     */
    @JvmName("jvtfkjcqcydnkmxw")
    public suspend fun publicJobs(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.publicJobs = mapped
    }

    /**
     * @param value Push rules for the project.
     */
    @JvmName("miafoytloxctclpu")
    public suspend fun pushRules(`value`: ProjectPushRulesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.pushRules = mapped
    }

    /**
     * @param argument Push rules for the project.
     */
    @JvmName("wdtcvxayprqcfptx")
    public suspend fun pushRules(argument: suspend ProjectPushRulesArgsBuilder.() -> Unit) {
        val toBeMapped = ProjectPushRulesArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.pushRules = mapped
    }

    /**
     * @param value Set the releases access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("rdngildpjoyylktp")
    public suspend fun releasesAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.releasesAccessLevel = mapped
    }

    /**
     * @param value Enable `Delete source branch` option by default for all new merge requests.
     */
    @JvmName("wxhedgbjmobbirlw")
    public suspend fun removeSourceBranchAfterMerge(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.removeSourceBranchAfterMerge = mapped
    }

    /**
     * @param value Set the repository access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("bvokyadygalkvlme")
    public suspend fun repositoryAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.repositoryAccessLevel = mapped
    }

    /**
     * @param value Which storage shard the repository is on. (administrator only)
     */
    @JvmName("iuxvogmbrgtudwnl")
    public suspend fun repositoryStorage(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.repositoryStorage = mapped
    }

    /**
     * @param value Allow users to request member access.
     */
    @JvmName("xkfdnnetrosxgflf")
    public suspend fun requestAccessEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.requestAccessEnabled = mapped
    }

    /**
     * @param value Set the requirements access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("tfdetvuidksmgtlx")
    public suspend fun requirementsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.requirementsAccessLevel = mapped
    }

    /**
     * @param value Automatically resolve merge request diffs discussions on lines changed with a push.
     */
    @JvmName("mbbcnsjproravbey")
    public suspend fun resolveOutdatedDiffDiscussions(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resolveOutdatedDiffDiscussions = mapped
    }

    /**
     * @param value Allow only users with the Maintainer role to pass user-defined variables when triggering a pipeline.
     */
    @JvmName("amspbljdaciesqad")
    public suspend fun restrictUserDefinedVariables(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.restrictUserDefinedVariables = mapped
    }

    /**
     * @param value Set the security and compliance access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("kxlthucekubiudrk")
    public suspend fun securityAndComplianceAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.securityAndComplianceAccessLevel = mapped
    }

    /**
     * @param value Enable shared runners for this project.
     */
    @JvmName("dgqqmuscuyechjfb")
    public suspend fun sharedRunnersEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sharedRunnersEnabled = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("hhwvbmnfhmgcjcwk")
    public suspend fun skipWaitForDefaultBranchProtection(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.skipWaitForDefaultBranchProtection = mapped
    }

    /**
     * @param value Set the snippets access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("csdhowdkjyodgjco")
    public suspend fun snippetsAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.snippetsAccessLevel = mapped
    }

    /**
     * @param value Enable snippets for the project.
     */
    @JvmName("hegynpeuveukmfgl")
    public suspend fun snippetsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.snippetsEnabled = mapped
    }

    /**
     * @param value Template used to create squash commit message in merge requests. (Introduced in GitLab 14.6.)
     */
    @JvmName("srbutgryojcdbklr")
    public suspend fun squashCommitTemplate(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.squashCommitTemplate = mapped
    }

    /**
     * @param value Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
     */
    @JvmName("yrlychjrkydiscvi")
    public suspend fun squashOption(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.squashOption = mapped
    }

    /**
     * @param value The commit message used to apply merge request suggestions.
     */
    @JvmName("ckpoltseicblsiem")
    public suspend fun suggestionCommitMessage(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.suggestionCommitMessage = mapped
    }

    /**
     * @param value The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
     */
    @JvmName("vkydhqchhvupwifs")
    public suspend fun tags(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values The list of tags for a project; put array of tags, that should be finally assigned to a project. Use topics instead.
     */
    @JvmName("rjltltersjlvbcht")
    public suspend fun tags(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value 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`.
     */
    @JvmName("vssobmtksgmlxtmm")
    public suspend fun templateName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.templateName = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("dhgvcwnasofdianj")
    public suspend fun templateProjectId(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.templateProjectId = mapped
    }

    /**
     * @param value The list of topics for the project.
     */
    @JvmName("fhdvfoyhpxqnvqlm")
    public suspend fun topics(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.topics = mapped
    }

    /**
     * @param values The list of topics for the project.
     */
    @JvmName("txmpjgnplqnwkwfi")
    public suspend fun topics(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.topics = mapped
    }

    /**
     * @param value 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.
     */
    @JvmName("pjdhaofjkgoitsjh")
    public suspend fun useCustomTemplate(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.useCustomTemplate = mapped
    }

    /**
     * @param value Set to `public` to create a public project. Valid values are `private`, `internal`, `public`.
     */
    @JvmName("lylbpevnqkojapph")
    public suspend fun visibilityLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.visibilityLevel = mapped
    }

    /**
     * @param value Set the wiki access level. Valid values are `disabled`, `private`, `enabled`.
     */
    @JvmName("jtjkngtehofgbcxc")
    public suspend fun wikiAccessLevel(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.wikiAccessLevel = mapped
    }

    /**
     * @param value Enable wiki for the project.
     */
    @JvmName("jroagrgvqqvxojus")
    public suspend fun wikiEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.wikiEnabled = mapped
    }

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




© 2015 - 2024 Weber Informatics LLC | Privacy Policy