Skip to content

[BUG]: github_repository_ruleset fails with cannot unmarshal string into Go struct field RepositoryRuleset.rules.required_reviewers.reviewer.id of type int64 #3214

@mateimicu

Description

@mateimicu

Expected Behavior

Creating a github_repository_ruleset with required_reviewers containing a team reviewer should succeed and be tracked in state.

Actual Behavior

The GitHub API returns the reviewer id as a string ("id":"3827094"), but the provider's Go struct expects an int64. This causes JSON unmarshaling to fail after the API call succeeds (HTTP 201), meaning:

The ruleset is created on GitHub (confirmed via UI and API response)
The provider crashes trying to parse the response
The resource is never written to state
Subsequent applies create duplicate rulesets since Terraform doesn't know they exist, eventually resulting in 422 Validation Failed - Name must be unique errors

Terraform Version

Terraform v1.5.0

  • provider registry.terraform.io/integrations/github v6.11.1

Affected Resource(s)

github_repository_ruleset
Likely also github_organization_ruleset

Terraform Configuration Files

Steps to Reproduce

resource "github_repository_ruleset" "example" {
  name        = "Example rule"
  repository  = "my-repo"
  target      = "branch"
  enforcement = "active"

  conditions {
    ref_name {
      include = ["~DEFAULT_BRANCH"]
      exclude = []
    }
  }

  rules {
    pull_request {
      allowed_merge_methods            = ["squash"]
      dismiss_stale_reviews_on_push    = true
      require_code_owner_review        = false
      require_last_push_approval       = true
      required_approving_review_count  = 1
      required_review_thread_resolution = false

      required_reviewers {
        minimum_approvals = 1
        file_patterns     = ["*"]

        reviewer {
          id   = 3827094  # Team ID (sent as int, returned as string by API)
          type = "Team"
        }
      }
    }

    non_fast_forward = true
  }
}

Debug Output

f_http_req_body="{"name":"Rule for Engineers 1 approval - platform-automations", ...
"required_reviewers":[{"minimum_approvals":1,"file_patterns":["*"],"reviewer":{"id":3827094,"type":"Team"}}] ...}"
GitHub API responds with 201 Created, but returns id as a string:
tf_http_res_status_code=201
tf_http_res_body="{"id":13056455, ...
"required_reviewers":[{"minimum_approvals":1,"file_patterns":["*"],"reviewer":{"id":"3827094","type":"Team"}}] ...}"
[ERROR] provider.terraform-provider-github_v6.11.1: Response contains error diagnostic:
  diagnostic_severity=ERROR
  diagnostic_summary="json: cannot unmarshal string into Go struct field RepositoryRuleset.rules.required_reviewers.reviewer.id of type int64"
  tf_resource_type=github_repository_ruleset

Panic Output

Code of Conduct

  • I agree to follow this project's Code of Conduct

Metadata

Metadata

Assignees

Labels

Type: BugSomething isn't working as documented

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions