Skip to content

fix: avoid 422 when enterprise policy controls org fork setting#3360

Open
andrewesweet wants to merge 2 commits intointegrations:mainfrom
andrewesweet:fix/org-settings-fork-422
Open

fix: avoid 422 when enterprise policy controls org fork setting#3360
andrewesweet wants to merge 2 commits intointegrations:mainfrom
andrewesweet:fix/org-settings-fork-422

Conversation

@andrewesweet
Copy link
Copy Markdown
Contributor

@andrewesweet andrewesweet commented Apr 22, 2026

Resolves #2689
Relates to #1333


Before the change?

  • members_can_fork_private_repositories has Default: false in the schema, causing the field to always be sent to the GitHub API even when not explicitly set by the user.
  • When an enterprise-level policy locks this setting, the API returns a 422 validation error.

After the change?

  • Removed Default: false from the schema so the field is only included in API calls when explicitly configured by the user.
  • This matches the pattern used by members_can_create_internal_repositories (enterprise-only field with no default).
  • Updated description and docs to note the enterprise policy interaction.

Users who never set this field see no behavioral change — the API default is false and the Read function still populates state from the API response.

Pull request checklist

  • Schema migrations have been created if needed
  • Tests for the changes have been added (for bug fixes / features)
  • Docs have been reviewed and added / updated if needed (for bug fixes / features)

Does this introduce a breaking change?

  • Yes
  • No

@github-actions
Copy link
Copy Markdown

👋 Hi! Thank you for this contribution! Just to let you know, our GitHub SDK team does a round of issue and PR reviews twice a week, every Monday and Friday! We have a process in place for prioritizing and responding to your input. Because you are a part of this community please feel free to comment, add to, or pick up any issues/PRs that are labeled with Status: Up for grabs. You & others like you are the reason all of this works! So thank you & happy coding! 🚀

@github-actions github-actions Bot added the Type: Bug Something isn't working as documented label Apr 22, 2026
Copy link
Copy Markdown
Collaborator

@deiga deiga left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this won't be as simple as this. Since we use d.GetOk to identify if members_can_fork_private_repositories should be sent to the API it would still continue sending the value.

It would be important to add a test that verify's that members_can_fork_private_repositories isn't actually being set or updated in the Read function

Remove Default: false from members_can_fork_private_repositories
schema to prevent the field from being sent to the API when not
explicitly set by the user. When an enterprise-level policy locks
this setting, sending any value causes a 422 validation error.

Without a default, the field is only included in API calls when
the user explicitly configures it, matching the behavior of
members_can_create_internal_repositories (enterprise-only field).

Fixes integrations#2689
Relates to integrations#1333

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@andrewesweet andrewesweet force-pushed the fix/org-settings-fork-422 branch from 08b4cec to 21524a1 Compare May 1, 2026 11:36
Add Computed: true to members_can_fork_private_repositories schema so
Terraform accepts API values when users omit the field, preventing
phantom diffs that trigger 422 errors under enterprise policy.

Replace shouldInclude with d.GetOkExists for this field since GetOk
cannot distinguish "set to false" from "not set" on Computed+Optional
bools. Follows allow_forking pattern in resource_github_repository.go.

Add unit tests for buildOrganizationSettings and acceptance test
proving no phantom diff after apply.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copy link
Copy Markdown
Contributor Author

@andrewesweet andrewesweet left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the review, @deiga. I've updated the PR.

The schema now has Computed: true on the field, and the build function uses d.GetOkExists instead of shouldInclude. I followed the same pattern as allow_forking in resource_github_repository.go.

I also added:

  • Unit tests for buildOrganizationSettings covering nil when omitted, non-nil when explicitly set to true or false, and nil on updates when unchanged.
  • An acceptance test (TestAccGithubOrganizationSettings_omittedForkFieldProducesCleanPlan) verifying no phantom diff after apply.

@andrewesweet
Copy link
Copy Markdown
Contributor Author

I also spotted the same problem with members_can_create_internal_repositories and created #3385 and #3386 to fix it separately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Type: Bug Something isn't working as documented

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG]: github_organization_setting fails with 422 when a fork policy is defined on enterprise level

2 participants