Skip to content

Project settings (readme, default branch) missing when creating via Terraform

Bug Report

When creating a gitlab.com project via the Terraform gitlab_project resource, we are seeing some projects create without their default branch or Readme initialised, even when the terraform plan output lists + initialize_with_readme = true and + default_branch = "main"

Initially this was a rare occurrence, but for the last 1-2 weeks this is now consistently how projects are being created via Terraform.

Relevant Terraform Configuration

Our terraform iterates over a growing list of project configuration files to create and manage those projects in via Terraform state. Currently this terraform manages 474 projects.

resource "gitlab_project" "project" {
  for_each = {
    for project in local.projects_data : "${project.project_key}" => project
  }
  # Enforcing naming convention (lower case and dashes instead of spaces)
  name        = lower(replace(each.value.project_name, " ", "-"))
  path        = lower(replace(each.value.project_name, " ", "-"))
  description = "${each.value.project_description} (Terraform Managed)"
  # Set project namespace ID to the immediate parent group ID
  namespace_id = data.gitlab_group.project_group[each.key].id

  # Project configuration
  default_branch         = lower(replace(each.value.project_default_branch_name, " ", "-"))
  initialize_with_readme = true
  visibility_level       = "private"

  # Visibility, project features, permissions
  merge_requests_enabled               = true
  forking_access_level                 = "disabled"
  lfs_enabled                          = false
  packages_enabled                     = false
  container_registry_access_level      = "disabled"
  analytics_access_level               = "enabled"
  security_and_compliance_access_level = "enabled"
  wiki_enabled                         = false
  snippets_enabled                     = false
  issues_enabled                       = false
  issues_access_level                  = "disabled"
  releases_access_level                = "enabled"
  environments_access_level            = "enabled"
  feature_flags_access_level           = "disabled"
  infrastructure_access_level          = "private"
  monitor_access_level                 = "disabled"
  pages_access_level                   = each.value.project_gitlab_pages_enabled ? "private" : "disabled"

  # Merge Requests
  merge_pipelines_enabled             = false
  resolve_outdated_diff_discussions   = false
  printing_merge_request_link_enabled = true
  remove_source_branch_after_merge    = true
  squash_option                       = "default_off"
  merge_method                        = each.value.project_merge_method

  # Merge checks
  only_allow_merge_if_pipeline_succeeds            = true
  only_allow_merge_if_all_discussions_are_resolved = true

  # CI/CD settings
  builds_access_level = "enabled"
  public_jobs         = false

  # Deletion behavior
  archive_on_destroy = true
}

Relevant Terraform Command

Utilising the gitlab-terraform template - https://gitlab.com/gitlab-org/gitlab/-/blob/eef9eac07d67baf1cf2aa000962a0ca5de0b30dd/lib/gitlab/ci/templates/Terraform/Base.gitlab-ci.yml#L72

gitlab-terraform apply $TERRAFORM_VAR_ARG

Relevant Log Output

These are the debug logs of the `terraform` command output:

I've included the http request (output in the TF_LOG_PATH file) to create the project with shows initialize_with_readme set to true, and the default_branch as main.

{
    "@caller": "gitlab.com/gitlab-org/terraform-provider-gitlab/internal/provider/sdk/resource_gitlab_project.go:2290",
    "@level": "debug",
    "@message": "[DEBUG] create gitlab project \"gitlab-support-test6\"",
    "@module": "gitlab",
    "@timestamp": "2024-05-21T13:22:45.630474Z",
    "tf_mux_provider": "tf5to6server.v5tov6Server",
    "tf_provider_addr": "registry.terraform.io/gitlabhq/gitlab",
    "tf_req_id": "45788674-609f-28d5-f3c4-dc02adf050b9",
    "tf_resource_type": "gitlab_project",
    "tf_rpc": "ApplyResourceChange",
    "timestamp": "2024-05-21T13:22:45.630Z"
}
{
    "@caller": "github.com/hashicorp/terraform-plugin-sdk/v2@v2.33.0/helper/logging/logging_http_transport.go:160",
    "@level": "debug",
    "@message": "Sending HTTP Request",
    "@module": "gitlab.GitLab",
    "@timestamp": "2024-05-21T13:22:45.631996Z",
    "Accept": "application/json",
    "Accept-Encoding": "gzip",
    "Authorization": "Bearer <REDACTED>",
    "Content-Length": "1096",
    "Content-Type": "application/json",
    "Host": "gitlab.com",
    "User-Agent": "Terraform/1.5.5 (+https://www.terraform.io) Terraform-Plugin-SDK/2.33.0 terraform-provider-gitlab/16.11.0",
    "new_logger_warning": "This log was generated by a subsystem logger that wasn't created before being used. Use tflog.NewSubsystem to create this logger before it is used.",
    "tf_http_op_type": "request",
    "tf_http_req_body": "{\"analytics_access_level\":\"enabled\",\"builds_access_level\":\"enabled\",\"container_registry_access_level\":\"disabled\",\"default_branch\":\"main\",\"description\":\"Test 6 (Terraform Managed)\",\"forking_access_level\":\"disabled\",\"initialize_with_readme\":true,\"issues_access_level\":\"disabled\",\"lfs_enabled\":false,\"merge_method\":\"merge\",\"name\":\"gitlab-support-test6\",\"namespace_id\":68563821,\"only_allow_merge_if_all_discussions_are_resolved\":true,\"only_allow_merge_if_pipeline_succeeds\":true,\"packages_enabled\":false,\"pages_access_level\":\"disabled\",\"path\":\"gitlab-support-test6\",\"public_builds\":false,\"releases_access_level\":\"enabled\",\"environments_access_level\":\"enabled\",\"feature_flags_access_level\":\"disabled\",\"infrastructure_access_level\":\"private\",\"monitor_access_level\":\"disabled\",\"remove_source_branch_after_merge\":true,\"printing_merge_request_link_enabled\":true,\"resolve_outdated_diff_discussions\":false,\"security_and_compliance_access_level\":\"enabled\",\"squash_option\":\"default_off\",\"visibility\":\"private\",\"issues_enabled\":false,\"merge_requests_enabled\":true,\"snippets_enabled\":false,\"wiki_enabled\":false}",
    "tf_http_req_method": "POST",
    "tf_http_req_uri": "/api/v4/projects",
    "tf_http_req_version": "HTTP/1.1",
    "tf_http_trans_id": "2ef35812-4ca3-e1b5-3cf0-02e6c1907b16",
    "timestamp": "2024-05-21T13:22:45.631Z"
}

Additional Details

  • GitLab Terraform Provider Version: 16.11
  • GitLab Version: 17.1.0-pre
  • Terraform Version: 1.5:v1.5.1