Skip to content

Cannot create github_branch_protection_v3 after update to v5.3.0 #1307

@jtsaito

Description

@jtsaito

Terraform Version

v5.3.0

Affected Resource(s)

  • github_branch_protection_v3
  • github_branch_default
  • github_branch_default

The issue occures when creating a new github_branch_protection_v3 resource with attributes referenced from github_branch_default and github_branch_protection_v3 resources.

Debug Output

github_branch_protection_v3.<MY_REPO_NAME_REDACTED>: Creating...
╷
│ Error: PUT https://api.github.com/repos/<MY_ORG_REDACTED>/<MY_REPO_NAME_REDACTED>/branches/main/protection: 422 Invalid request.
│
│ No subschema in "anyOf" matched.
│ For 'properties/checks', nil is not an array.
│ Not all subschemas of "allOf" matched.
│ For 'anyOf/1', {"strict"=>true, "contexts"=>["build"], "checks"=>nil} is not a null. []

Expected Behavior

The branch protection v3 resource should be created.

Actual Behavior

Terraform errors out with message above.

Steps to Reproduce

Step 1

Create a repo with terraform apply.

resource "github_repository" "test-repo" {
  name        = "test-repo"
  description = "This repo is a test"

  has_downloads = true
  has_issues    = false
  has_projects  = false
  has_wiki      = false

  visibility = "private"

  auto_init = true

  vulnerability_alerts = false
}

resource "github_branch_default" "test-repo" {
  repository = github_repository.test-repo.name
  branch     = "main"
}

Step 2

Terraform apply the following change:

resource "github_branch_protection_v3" "test-repo" {
  repository     = github_repository.test-repo.name
  branch         = github_branch_default.test-repo.branch
  enforce_admins = true

  required_status_checks {
    strict   = true
    contexts = ["build"]
  }

  required_pull_request_reviews {
    dismiss_stale_reviews      = true
    require_code_owner_reviews = true
  }
}

Important Factoids

This works up to GitHub provider version v5.2.0 without errors and errors in v5.3.0.

This seems to be linked to the go client update in the release diff where the API Client is updated as follows.

Checks []*RequiredStatusCheck `json:"checks"`

From

Checks []*RequiredStatusCheck `json:"checks,omitempty"

To

Checks []*RequiredStatusCheck `json:"checks"`

References

Metadata

Metadata

Assignees

No one assigned

    Labels

    Status: Up for grabsIssues that are ready to be worked on by anyoneType: BugSomething isn't working as documented

    Type

    No type

    Projects

    Status

    ✅ Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions