in internal/provider/sdk/resource_gitlab_project.go [2137:2489]
func createProject(ctx context.Context, d *schema.ResourceData, client *gitlab.Client) (*gitlab.Project, diag.Diagnostics) {
options := &gitlab.CreateProjectOptions{
Name: gitlab.Ptr(d.Get("name").(string)),
}
if v, ok := d.GetOk("path"); ok {
options.Path = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("namespace_id"); ok {
options.NamespaceID = gitlab.Ptr(v.(int))
}
if v, ok := d.GetOk("description"); ok {
options.Description = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("default_branch"); ok {
options.DefaultBranch = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("tags"); ok {
// TODO: Remove TagList on next breaking change. TagList and Topics aren't completely synonymous.
// nolint:staticcheck // SA1019
options.TagList = stringSetToStringSlice(v.(*schema.Set))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("container_registry_enabled"); ok {
// nolint:staticcheck // SA1019
options.ContainerRegistryEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("initialize_with_readme"); ok {
options.InitializeWithReadme = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("pipelines_enabled"); ok {
// nolint:staticcheck // SA1019
options.JobsEnabled = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("import_url"); ok {
importURL, err := constructImportUrl(v.(string), d.Get("import_url_username").(string), d.Get("import_url_password").(string))
if err != nil {
return nil, diag.Errorf("Unable to construct import URL for API: %s", err)
}
options.ImportURL = gitlab.Ptr(importURL)
}
if v, ok := d.GetOk("template_name"); ok {
options.TemplateName = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("template_project_id"); ok {
options.TemplateProjectID = gitlab.Ptr(v.(int))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("use_custom_template"); ok {
// There is currently a bug where `use_custom_template` returns a 500 if the
// value is set to `false`, requiring it to be set to `null` instead to work.
// As a result, only apply this value if it's "true"
if v.(bool) {
options.UseCustomTemplate = gitlab.Ptr(v.(bool))
}
}
if v, ok := d.GetOk("group_with_project_templates_id"); ok {
options.GroupWithProjectTemplatesID = gitlab.Ptr(v.(int))
}
if v, ok := d.GetOk("pages_access_level"); ok {
options.PagesAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("ci_config_path"); ok {
options.CIConfigPath = gitlab.Ptr(v.(string))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("resolve_outdated_diff_discussions"); ok {
options.ResolveOutdatedDiffDiscussions = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("analytics_access_level"); ok {
options.AnalyticsAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("auto_cancel_pending_pipelines"); ok {
options.AutoCancelPendingPipelines = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("auto_devops_deploy_strategy"); ok {
options.AutoDevopsDeployStrategy = gitlab.Ptr(v.(string))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("auto_devops_enabled"); ok {
options.AutoDevopsEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("autoclose_referenced_issues"); ok {
options.AutocloseReferencedIssues = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("build_git_strategy"); ok {
options.BuildGitStrategy = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("build_timeout"); ok {
options.BuildTimeout = gitlab.Ptr(v.(int))
}
if v, ok := d.GetOk("builds_access_level"); ok {
options.BuildsAccessLevel = stringToAccessControlValue(v.(string))
}
if _, ok := d.GetOk("container_expiration_policy"); ok {
options.ContainerExpirationPolicyAttributes = expandContainerExpirationPolicyAttributes(d)
}
if v, ok := d.GetOk("container_registry_access_level"); ok {
options.ContainerRegistryAccessLevel = stringToAccessControlValue(v.(string))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("emails_enabled"); ok {
options.EmailsEnabled = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("external_authorization_classification_label"); ok {
options.ExternalAuthorizationClassificationLabel = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("forking_access_level"); ok {
options.ForkingAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("issues_access_level"); ok {
options.IssuesAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("merge_requests_access_level"); ok {
options.MergeRequestsAccessLevel = stringToAccessControlValue(v.(string))
}
// Ignore deprecated public_builds in favor of public_jobs.
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("public_jobs"); ok {
options.PublicBuilds = gitlab.Ptr(v.(bool))
} else if v, ok := d.GetOkExists("public_builds"); ok {
options.PublicBuilds = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("repository_access_level"); ok {
options.RepositoryAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("repository_storage"); ok {
options.RepositoryStorage = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("requirements_access_level"); ok {
options.RequirementsAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("security_and_compliance_access_level"); ok {
options.SecurityAndComplianceAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("snippets_access_level"); ok {
options.SnippetsAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("suggestion_commit_message"); ok {
options.SuggestionCommitMessage = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("topics"); ok {
options.Topics = stringSetToStringSlice(v.(*schema.Set))
}
if v, ok := d.GetOk("wiki_access_level"); ok {
options.WikiAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("squash_commit_template"); ok {
options.SquashCommitTemplate = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("merge_commit_template"); ok {
options.MergeCommitTemplate = gitlab.Ptr(v.(string))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("request_access_enabled"); ok {
options.RequestAccessEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("issues_enabled"); ok {
options.IssuesEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("merge_requests_enabled"); ok {
// nolint:staticcheck // SA1019
options.MergeRequestsEnabled = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("approvals_before_merge"); ok {
options.ApprovalsBeforeMerge = gitlab.Ptr(v.(int)) //nolint:staticcheck
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("wiki_enabled"); ok {
// nolint:staticcheck // SA1019
options.WikiEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("snippets_enabled"); ok {
// nolint:staticcheck // SA1019
options.SnippetsEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("lfs_enabled"); ok {
options.LFSEnabled = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("visibility_level"); ok {
options.Visibility = stringToVisibilityLevel(v.(string))
}
if v, ok := d.GetOk("merge_method"); ok {
options.MergeMethod = stringToMergeMethod(v.(string))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("only_allow_merge_if_pipeline_succeeds"); ok {
options.OnlyAllowMergeIfPipelineSucceeds = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("only_allow_merge_if_all_discussions_are_resolved"); ok {
options.OnlyAllowMergeIfAllDiscussionsAreResolved = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("allow_merge_on_skipped_pipeline"); ok {
options.AllowMergeOnSkippedPipeline = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("shared_runners_enabled"); ok {
options.SharedRunnersEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("group_runners_enabled"); ok {
options.GroupRunnersEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("remove_source_branch_after_merge"); ok {
options.RemoveSourceBranchAfterMerge = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("packages_enabled"); ok {
options.PackagesEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("printing_merge_request_link_enabled"); ok {
options.PrintingMergeRequestLinkEnabled = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("mirror"); ok {
options.Mirror = gitlab.Ptr(v.(bool))
}
// nolint:staticcheck // SA1019 ignore deprecated GetOkExists
// lintignore: XR001 // TODO: replace with alternative for GetOkExists
if v, ok := d.GetOkExists("mirror_trigger_builds"); ok {
options.MirrorTriggerBuilds = gitlab.Ptr(v.(bool))
}
if v, ok := d.GetOk("ci_config_path"); ok {
options.CIConfigPath = gitlab.Ptr(v.(string))
}
if v, ok := d.GetOk("squash_option"); ok {
options.SquashOption = stringToSquashOptionValue(v.(string))
}
avatar, err := handleAvatarOnCreate(d)
if err != nil {
return nil, diag.FromErr(err)
}
if avatar != nil {
options.Avatar = &gitlab.ProjectAvatar{
Filename: avatar.Filename,
Image: avatar.Image,
}
}
if v, ok := d.GetOk("releases_access_level"); ok {
options.ReleasesAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("environments_access_level"); ok {
options.EnvironmentsAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("feature_flags_access_level"); ok {
options.FeatureFlagsAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("infrastructure_access_level"); ok {
options.InfrastructureAccessLevel = stringToAccessControlValue(v.(string))
}
if v, ok := d.GetOk("monitor_access_level"); ok {
options.MonitorAccessLevel = stringToAccessControlValue(v.(string))
}
tflog.Debug(ctx, fmt.Sprintf("[DEBUG] create gitlab project %q", *options.Name))
project, _, err := client.Projects.CreateProject(options, gitlab.WithContext(ctx))
if err != nil {
return nil, diag.FromErr(err)
}
return project, nil
}