Skip to content

fix(forge-ui): correct branch protection status checks + bypass actors - #29

Merged
GregoireF merged 1 commit into
mainfrom
fix/forge-ui-branch-protection
Jul 2, 2026
Merged

fix(forge-ui): correct branch protection status checks + bypass actors#29
GregoireF merged 1 commit into
mainfrom
fix/forge-ui-branch-protection

Conversation

@GregoireF

Copy link
Copy Markdown
Owner

Summary

  • Fix required_status_checks: replace placeholder "CI" (never matched any check) with real GitHub Actions job names
  • Add bypass_actors for github-actions[bot] (actor_id=15368) — needed for changesets to push version-bump commits to main
  • Add "Dependency review" as required check

Real check names (from forge-ui .github/workflows/)

Check Source
Typecheck · Lint · Test · Build ci.yml job name
Commitlint commitlint.yml job name
E2E (chromium) e2e.yml matrix
E2E (firefox) e2e.yml matrix
E2E (webkit) e2e.yml matrix
Dependency review GitHub built-in action

Test plan

  • tofu plan shows only the forge-ui ruleset being updated (no destroy)
  • After tofu apply, verify correct checks appear in GitHub repo settings
  • Verify github-actions[bot] bypass works for changesets release flow

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

AI Review

Security

  • Overly permissive rulesets: The bypass_actors block in the github_repository_ruleset.additional resource allows bypassing rules for specific actors, including actor_id = 5 (Admin repository role) and other dynamically defined actors. While this may be intentional, it is important to ensure that these bypasses are strictly necessary and limited to trusted actors to avoid potential abuse.
  • Potential secret exposure: The bypass_actors block includes hardcoded actor_id values (e.g., actor_id = 5 and actor_id = 15368). While these are not secrets, they could expose sensitive internal details about your GitHub configuration. Consider whether these IDs should be parameterized or stored in a more secure manner.

Best Practices

  • prevent_destroy missing: The github_repository_ruleset.additional resource does not include a lifecycle block with prevent_destroy = true. This could lead to accidental deletion of critical rulesets. Consider adding this to prevent unintended consequences.
  • Descriptive naming: The github_repository_ruleset.additional resource uses a generic name (additional), which could be more descriptive. Consider using a name that reflects its purpose, such as non_default_branch_rulesets.
  • Provider version pinning: The github provider version is not pinned in the configuration. It is recommended to specify a version constraint (e.g., ~> 5.0) to avoid unexpected breaking changes when the provider is updated.
  • Default values for optional variables: The additional_rulesets variable uses optional() with default values. While this is valid, explicitly specifying default values outside of optional() can improve readability and make it clearer for users.

Correctness

  • Dynamic block logic: The dynamic "required_status_checks" block uses length(each.value.required_status_checks) > 0 ? [1] : [] to determine whether to render the block. This is correct, but it could be simplified to each.value.required_status_checks != [] ? [1] : [] for better readability.
  • Hardcoded integration_id: The integration_id in the required_check block is hardcoded to 0. If this is intentional, it should be documented. Otherwise, consider parameterizing it or verifying its correctness.

Suggestions

  • Improved maintainability: The required_status_checks list in locals.tf contains long strings that could be prone to typos or inconsistencies. Consider defining these as constants or variables to ensure consistency and reduce duplication.
  • Documentation: Add comments or documentation explaining the purpose of the bypass_actors block and why specific actor_id values are used. This will help future maintainers understand the intent and avoid accidental misconfiguration.
  • Validation for bypass_actors: Add validation rules for the bypass_actors variable to ensure that actor_type and bypass_mode values are valid (e.g., actor_type should be one of Integration, User, or RepositoryRole, and bypass_mode should be always or pull_request).

Overall, the diff is well-structured and adheres to Terraform best practices in most areas, but the above points should be addressed to improve security, maintainability, and correctness.


Powered by GitHub Models (gpt-4o)

@github-actions

github-actions Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

✅ OpenTofu Plan · terraform/github · success

Show output
Running plan in cloud backend. Output will stream here. Pressing Ctrl-C
will stop streaming the logs, but will not stop the plan running remotely.

Preparing the remote plan...

To view this run in a browser, visit:
https://app.terraform.io/app/gregoiref/github/runs/run-MoEkSrNUpqAKRtY8

Waiting for the plan to start...
Terraform v1.15.3
on linux_amd64
Initializing plugins and modules...
github_issue_label.standard["GregoireF:priority:medium"]: Refreshing state... [id=GregoireF:priority:medium]
github_issue_label.standard[".github:needs-info"]: Refreshing state... [id=.github:needs-info]
github_issue_label.standard["addlicense-winget:bug"]: Refreshing state... [id=addlicense-winget:bug]
github_issue_label.standard[".github:documentation"]: Refreshing state... [id=.github:documentation]
github_issue_label.standard["homebrew-tap:documentation"]: Refreshing state... [id=homebrew-tap:documentation]
github_issue_label.standard["utils:github-actions"]: Refreshing state... [id=utils:github-actions]
github_issue_label.standard["addlicense-action:ai"]: Refreshing state... [id=addlicense-action:ai]
github_issue_label.standard["addlicense-winget:priority:high"]: Refreshing state... [id=addlicense-winget:priority:high]
github_issue_label.standard["addlicense-winget:question"]: Refreshing state... [id=addlicense-winget:question]
github_issue_label.standard["notiftk:priority:high"]: Refreshing state... [id=notiftk:priority:high]
github_issue_label.standard["GregoireF:in-progress"]: Refreshing state... [id=GregoireF:in-progress]
github_issue_label.standard["addlicense-action:github-actions"]: Refreshing state... [id=addlicense-action:github-actions]
github_issue_label.standard["forge-ui:ai"]: Refreshing state... [id=forge-ui:ai]
github_issue_label.standard["notiftk:bug"]: Refreshing state... [id=notiftk:bug]
github_issue_label.standard["addlicense-winget:priority:medium"]: Refreshing state... [id=addlicense-winget:priority:medium]
github_issue_label.standard["utils:question"]: Refreshing state... [id=utils:question]
github_issue_label.standard[".github:priority:high"]: Refreshing state... [id=.github:priority:high]
github_issue_label.standard[".github:bug"]: Refreshing state... [id=.github:bug]
github_issue_label.standard["addlicense-action:in-progress"]: Refreshing state... [id=addlicense-action:in-progress]
github_issue_label.standard[".github:priority:low"]: Refreshing state... [id=.github:priority:low]
github_issue_label.standard["addlicense-action:needs-info"]: Refreshing state... [id=addlicense-action:needs-info]
github_issue_label.standard["GregoireF:needs-info"]: Refreshing state... [id=GregoireF:needs-info]
github_issue_label.standard["utils:needs-info"]: Refreshing state... [id=utils:needs-info]
github_issue_label.standard["utils:dependencies"]: Refreshing state... [id=utils:dependencies]
github_issue_label.standard["addlicense-action:needs-triage"]: Refreshing state... [id=addlicense-action:needs-triage]
github_issue_label.standard["iac:secrets-management"]: Refreshing state... [id=iac:secrets-management]
github_issue_label.standard["iac:security"]: Refreshing state... [id=iac:security]
github_issue_label.standard["addlicense-action:dependencies"]: Refreshing state... [id=addlicense-action:dependencies]
github_issue_label.standard["addlicense:priority:medium"]: Refreshing state... [id=addlicense:priority:medium]
github_issue_label.standard[".github:needs-triage"]: Refreshing state... [id=.github:needs-triage]
github_issue_label.standard["addlicense-npm:security"]: Refreshing state... [id=addlicense-npm:security]
github_issue_label.standard["notiftk:github-actions"]: Refreshing state... [id=notiftk:github-actions]
github_issue_label.standard["notiftk:needs-info"]: Refreshing state... [id=notiftk:needs-info]
github_issue_label.standard[".github:blocked"]: Refreshing state... [id=.github:blocked]
github_issue_label.standard["addlicense-npm:dependencies"]: Refreshing state... [id=addlicense-npm:dependencies]
github_issue_label.standard["forge-ui:documentation"]: Refreshing state... [id=forge-ui:documentation]
github_issue_label.standard["iac:bug"]: Refreshing state... [id=iac:bug]
github_issue_label.standard["utils:blocked"]: Refreshing state... [id=utils:blocked]
github_issue_label.standard["GregoireF:question"]: Refreshing state... [id=GregoireF:question]
github_issue_label.standard["iac:github-actions"]: Refreshing state... [id=iac:github-actions]
github_issue_label.standard["utils:in-progress"]: Refreshing state... [id=utils:in-progress]
github_issue_label.standard["homebrew-tap:dependencies"]: Refreshing state... [id=homebrew-tap:dependencies]
github_issue_label.standard["homebrew-tap:bug"]: Refreshing state... [id=homebrew-tap:bug]
github_issue_label.standard["homebrew-tap:blocked"]: Refreshing state... [id=homebrew-tap:blocked]
github_issue_label.standard["utils:enhancement"]: Refreshing state... [id=utils:enhancement]
github_issue_label.standard["forge-ui:needs-info"]: Refreshing state... [id=forge-ui:needs-info]
github_issue_label.standard["homebrew-tap:priority:medium"]: Refreshing state... [id=homebrew-tap:priority:medium]
github_issue_label.standard["iac:needs-info"]: Refreshing state... [id=iac:needs-info]
github_issue_label.standard["addlicense-action:secrets-management"]: Refreshing state... [id=addlicense-action:secrets-management]
github_issue_label.standard["utils:secrets-management"]: Refreshing state... [id=utils:secrets-management]
github_issue_label.standard["GregoireF:priority:low"]: Refreshing state... [id=GregoireF:priority:low]
github_issue_label.standard["addlicense-npm:priority:high"]: Refreshing state... [id=addlicense-npm:priority:high]
github_issue_label.standard["addlicense-winget:ai"]: Refreshing state... [id=addlicense-winget:ai]
github_issue_label.standard["iac:blocked"]: Refreshing state... [id=iac:blocked]
github_issue_label.standard["forge-ui:bug"]: Refreshing state... [id=forge-ui:bug]
github_issue_label.standard["addlicense-npm:question"]: Refreshing state... [id=addlicense-npm:question]
github_issue_label.standard["iac:needs-triage"]: Refreshing state... [id=iac:needs-triage]
github_issue_label.standard["addlicense-action:documentation"]: Refreshing state... [id=addlicense-action:documentation]
github_issue_label.standard["homebrew-tap:security"]: Refreshing state... [id=homebrew-tap:security]
github_issue_label.standard["forge-ui:needs-triage"]: Refreshing state... [id=forge-ui:needs-triage]
github_issue_label.standard["addlicense-npm:secrets-management"]: Refreshing state... [id=addlicense-npm:secrets-management]
github_issue_label.standard["addlicense:needs-triage"]: Refreshing state... [id=addlicense:needs-triage]
github_issue_label.standard["addlicense-action:priority:low"]: Refreshing state... [id=addlicense-action:priority:low]
github_issue_label.standard["GregoireF:blocked"]: Refreshing state... [id=GregoireF:blocked]
github_issue_label.standard["iac:priority:medium"]: Refreshing state... [id=iac:priority:medium]
github_issue_label.standard["iac:dependencies"]: Refreshing state... [id=iac:dependencies]
github_issue_label.standard["forge-ui:priority:low"]: Refreshing state... [id=forge-ui:priority:low]
github_issue_label.standard["homebrew-tap:question"]: Refreshing state... [id=homebrew-tap:question]
github_issue_label.standard["GregoireF:security"]: Refreshing state... [id=GregoireF:security]
github_issue_label.standard["homebrew-tap:needs-triage"]: Refreshing state... [id=homebrew-tap:needs-triage]
github_issue_label.standard["notiftk:terraform"]: Refreshing state... [id=notiftk:terraform]
github_issue_label.standard["forge-ui:priority:high"]: Refreshing state... [id=forge-ui:priority:high]
github_issue_label.standard["addlicense-action:bug"]: Refreshing state... [id=addlicense-action:bug]
github_issue_label.standard["utils:priority:low"]: Refreshing state... [id=utils:priority:low]
github_issue_label.standard["utils:bug"]: Refreshing state... [id=utils:bug]
github_issue_label.standard["utils:ai"]: Refreshing state... [id=utils:ai]
github_issue_label.standard["addlicense:priority:low"]: Refreshing state... [id=addlicense:priority:low]
github_issue_label.standard[".github:enhancement"]: Refreshing state... [id=.github:enhancement]
github_issue_label.standard["notiftk:question"]: Refreshing state... [id=notiftk:question]
github_issue_label.standard["addlicense-winget:secrets-management"]: Refreshing state... [id=addlicense-winget:secrets-management]
github_issue_label.standard["utils:documentation"]: Refreshing state... [id=utils:documentation]
github_issue_label.standard["addlicense-action:priority:medium"]: Refreshing state... [id=addlicense-action:priority:medium]
github_issue_label.standard["addlicense:ai"]: Refreshing state... [id=addlicense:ai]
github_issue_label.standard["homebrew-tap:priority:low"]: Refreshing state... [id=homebrew-tap:priority:low]
github_issue_label.standard["homebrew-tap:github-actions"]: Refreshing state... [id=homebrew-tap:github-actions]
github_issue_label.standard["addlicense-winget:enhancement"]: Refreshing state... [id=addlicense-winget:enhancement]
github_issue_label.standard["homebrew-tap:enhancement"]: Refreshing state... [id=homebrew-tap:enhancement]
github_issue_label.standard["addlicense-npm:documentation"]: Refreshing state... [id=addlicense-npm:documentation]
github_issue_label.standard[".github:secrets-management"]: Refreshing state... [id=.github:secrets-management]
github_issue_label.standard["addlicense:needs-info"]: Refreshing state... [id=addlicense:needs-info]
github_issue_label.standard["homebrew-tap:needs-info"]: Refreshing state... [id=homebrew-tap:needs-info]
github_issue_label.standard["notiftk:security"]: Refreshing state... [id=notiftk:security]
github_issue_label.standard["addlicense:documentation"]: Refreshing state... [id=addlicense:documentation]
github_issue_label.standard["addlicense-npm:priority:medium"]: Refreshing state... [id=addlicense-npm:priority:medium]
github_issue_label.standard["forge-ui:question"]: Refreshing state... [id=forge-ui:question]
data.tfe_outputs.doppler: Refreshing...
data.tfe_outputs.doppler: Refresh complete after 0s [id=gregoiref-doppler]
github_issue_label.standard["addlicense:terraform"]: Refreshing state... [id=addlicense:terraform]
github_issue_label.standard["notiftk:priority:low"]: Refreshing state... [id=notiftk:priority:low]
github_issue_label.standard["addlicense-npm:enhancement"]: Refreshing state... [id=addlicense-npm:enhancement]
github_issue_label.standard[".github:in-progress"]: Refreshing state... [id=.github:in-progress]
github_issue_label.standard["GregoireF:secrets-management"]: Refreshing state... [id=GregoireF:secrets-management]
github_issue_label.standard["addlicense-npm:blocked"]: Refreshing state... [id=addlicense-npm:blocked]
github_issue_label.standard["notiftk:in-progress"]: Refreshing state... [id=notiftk:in-progress]
github_issue_label.standard[".github:ai"]: Refreshing state... [id=.github:ai]
github_issue_label.standard["utils:needs-triage"]: Refreshing state... [id=utils:needs-triage]
github_issue_label.standard["iac:question"]: Refreshing state... [id=iac:question]
github_issue_label.standard["addlicense-winget:dependencies"]: Refreshing state... [id=addlicense-winget:dependencies]
github_issue_label.standard["forge-ui:enhancement"]: Refreshing state... [id=forge-ui:enhancement]
github_issue_label.standard["addlicense-npm:github-actions"]: Refreshing state... [id=addlicense-npm:github-actions]
github_issue_label.standard["addlicense-npm:terraform"]: Refreshing state... [id=addlicense-npm:terraform]
github_issue_label.standard["utils:priority:high"]: Refreshing state... [id=utils:priority:high]
github_issue_label.standard[".github:terraform"]: Refreshing state... [id=.github:terraform]
github_issue_label.standard["iac:enhancement"]: Refreshing state... [id=iac:enhancement]
github_issue_label.standard["GregoireF:enhancement"]: Refreshing state... [id=GregoireF:enhancement]
github_issue_label.standard["notiftk:ai"]: Refreshing state... [id=notiftk:ai]
github_issue_label.standard["GregoireF:needs-triage"]: Refreshing state... [id=GregoireF:needs-triage]
github_issue_label.standard["homebrew-tap:in-progress"]: Refreshing state... [id=homebrew-tap:in-progress]
github_issue_label.standard["iac:documentation"]: Refreshing state... [id=iac:documentation]
github_issue_label.standard["addlicense-winget:needs-info"]: Refreshing state... [id=addlicense-winget:needs-info]
github_issue_label.standard["addlicense-npm:priority:low"]: Refreshing state... [id=addlicense-npm:priority:low]
github_issue_label.standard["forge-ui:github-actions"]: Refreshing state... [id=forge-ui:github-actions]
github_issue_label.standard["addlicense-npm:ai"]: Refreshing state... [id=addlicense-npm:ai]
github_issue_label.standard["notiftk:priority:medium"]: Refreshing state... [id=notiftk:priority:medium]
github_issue_label.standard["iac:ai"]: Refreshing state... [id=iac:ai]
github_issue_label.standard["addlicense-action:blocked"]: Refreshing state... [id=addlicense-action:blocked]
github_issue_label.standard[".github:priority:medium"]: Refreshing state... [id=.github:priority:medium]
github_issue_label.standard["utils:priority:medium"]: Refreshing state... [id=utils:priority:medium]
github_issue_label.standard["addlicense-npm:bug"]: Refreshing state... [id=addlicense-npm:bug]
github_issue_label.standard["GregoireF:github-actions"]: Refreshing state... [id=GregoireF:github-actions]
github_issue_label.standard["addlicense-action:terraform"]: Refreshing state... [id=addlicense-action:terraform]
github_issue_label.standard["addlicense-winget:documentation"]: Refreshing state... [id=addlicense-winget:documentation]
github_issue_label.standard[".github:security"]: Refreshing state... [id=.github:security]
github_issue_label.standard["addlicense:dependencies"]: Refreshing state... [id=addlicense:dependencies]
github_issue_label.standard["iac:terraform"]: Refreshing state... [id=iac:terraform]
github_issue_label.standard["notiftk:enhancement"]: Refreshing state... [id=notiftk:enhancement]
github_issue_label.standard["GregoireF:terraform"]: Refreshing state... [id=GregoireF:terraform]
github_issue_label.standard[".github:dependencies"]: Refreshing state... [id=.github:dependencies]
github_issue_label.standard["GregoireF:documentation"]: Refreshing state... [id=GregoireF:documentation]
github_issue_label.standard["addlicense:bug"]: Refreshing state... [id=addlicense:bug]
github_issue_label.standard["notiftk:documentation"]: Refreshing state... [id=notiftk:documentation]
github_issue_label.standard["homebrew-tap:priority:high"]: Refreshing state... [id=homebrew-tap:priority:high]
github_issue_label.standard["iac:in-progress"]: Refreshing state... [id=iac:in-progress]
github_issue_label.standard["addlicense:question"]: Refreshing state... [id=addlicense:question]
github_issue_label.standard["addlicense:enhancement"]: Refreshing state... [id=addlicense:enhancement]
github_issue_label.standard["notiftk:secrets-management"]: Refreshing state... [id=notiftk:secrets-management]
github_issue_label.standard["homebrew-tap:terraform"]: Refreshing state... [id=homebrew-tap:terraform]
github_issue_label.standard["homebrew-tap:ai"]: Refreshing state... [id=homebrew-tap:ai]
github_issue_label.standard["iac:priority:high"]: Refreshing state... [id=iac:priority:high]
github_issue_label.standard["addlicense:priority:high"]: Refreshing state... [id=addlicense:priority:high]
github_issue_label.standard["addlicense-action:question"]: Refreshing state... [id=addlicense-action:question]
github_issue_label.standard["addlicense-winget:priority:low"]: Refreshing state... [id=addlicense-winget:priority:low]
github_issue_label.standard["addlicense:github-actions"]: Refreshing state... [id=addlicense:github-actions]
github_issue_label.standard["utils:security"]: Refreshing state... [id=utils:security]
github_issue_label.standard["forge-ui:dependencies"]: Refreshing state... [id=forge-ui:dependencies]
github_issue_label.standard["forge-ui:security"]: Refreshing state... [id=forge-ui:security]
github_issue_label.standard["addlicense-npm:needs-info"]: Refreshing state... [id=addlicense-npm:needs-info]
github_issue_label.standard["addlicense-winget:in-progress"]: Refreshing state... [id=addlicense-winget:in-progress]
github_issue_label.standard["GregoireF:priority:high"]: Refreshing state... [id=GregoireF:priority:high]
github_issue_label.standard["forge-ui:in-progress"]: Refreshing state... [id=forge-ui:in-progress]
github_issue_label.standard["iac:priority:low"]: Refreshing state... [id=iac:priority:low]
github_issue_label.standard["forge-ui:blocked"]: Refreshing state... [id=forge-ui:blocked]
github_issue_label.standard["notiftk:needs-triage"]: Refreshing state... [id=notiftk:needs-triage]
github_issue_label.standard["addlicense-winget:github-actions"]: Refreshing state... [id=addlicense-winget:github-actions]
github_issue_label.standard["addlicense-action:priority:high"]: Refreshing state... [id=addlicense-action:priority:high]
github_issue_label.standard["addlicense-winget:blocked"]: Refreshing state... [id=addlicense-winget:blocked]
github_issue_label.standard[".github:question"]: Refreshing state... [id=.github:question]
github_issue_label.standard["addlicense:security"]: Refreshing state... [id=addlicense:security]
github_issue_label.standard["addlicense-npm:in-progress"]: Refreshing state... [id=addlicense-npm:in-progress]
github_issue_label.standard["notiftk:dependencies"]: Refreshing state... [id=notiftk:dependencies]
github_issue_label.standard["forge-ui:secrets-management"]: Refreshing state... [id=forge-ui:secrets-management]
github_issue_label.standard["addlicense:secrets-management"]: Refreshing state... [id=addlicense:secrets-management]
github_issue_label.standard["addlicense-winget:security"]: Refreshing state... [id=addlicense-winget:security]
github_issue_label.standard["addlicense-winget:terraform"]: Refreshing state... [id=addlicense-winget:terraform]
github_issue_label.standard["addlicense-winget:needs-triage"]: Refreshing state... [id=addlicense-winget:needs-triage]
github_issue_label.standard["homebrew-tap:secrets-management"]: Refreshing state... [id=homebrew-tap:secrets-management]
github_issue_label.standard["GregoireF:ai"]: Refreshing state... [id=GregoireF:ai]
github_issue_label.standard["addlicense-npm:needs-triage"]: Refreshing state... [id=addlicense-npm:needs-triage]
github_issue_label.standard["addlicense-action:enhancement"]: Refreshing state... [id=addlicense-action:enhancement]
github_issue_label.standard["addlicense-action:security"]: Refreshing state... [id=addlicense-action:security]
github_issue_label.standard["notiftk:blocked"]: Refreshing state... [id=notiftk:blocked]
github_issue_label.standard["utils:terraform"]: Refreshing state... [id=utils:terraform]
github_issue_label.standard["GregoireF:bug"]: Refreshing state... [id=GregoireF:bug]
github_issue_label.standard["addlicense:in-progress"]: Refreshing state... [id=addlicense:in-progress]
github_issue_label.standard[".github:github-actions"]: Refreshing state... [id=.github:github-actions]
github_issue_label.standard["addlicense:blocked"]: Refreshing state... [id=addlicense:blocked]
github_issue_label.standard["forge-ui:priority:medium"]: Refreshing state... [id=forge-ui:priority:medium]
github_issue_label.standard["GregoireF:dependencies"]: Refreshing state... [id=GregoireF:dependencies]
module.repository["addlicense-npm"].github_repository.this: Refreshing state... [id=addlicense-npm]
module.repository["notiftk"].github_repository.this: Refreshing state... [id=notiftk]
module.repository["utils"].github_repository.this: Refreshing state... [id=utils]
module.repository["addlicense"].github_repository.this: Refreshing state... [id=addlicense]
module.repository[".github"].github_repository.this: Refreshing state... [id=.github]
module.repository["GregoireF"].github_repository.this: Refreshing state... [id=GregoireF]
module.repository["addlicense-action"].github_repository.this: Refreshing state... [id=addlicense-action]
module.repository["forge-ui"].github_repository.this: Refreshing state... [id=forge-ui]
module.repository["addlicense-winget"].github_repository.this: Refreshing state... [id=addlicense-winget]
module.repository["iac"].github_repository.this: Refreshing state... [id=iac]
module.repository["homebrew-tap"].github_repository.this: Refreshing state... [id=homebrew-tap]
github_actions_secret.doppler_token["utils"]: Refreshing state... [id=utils:DOPPLER_TOKEN]
github_actions_secret.doppler_token["iac"]: Refreshing state... [id=iac:DOPPLER_TOKEN]
module.repository["forge-ui"].github_repository.this: Drift detected (update)
╷
│ Warning: Value for undeclared variable
│
│ The root module does not declare a variable named
│ "github_app_installation_id" but a value was found in file
│ "/home/tfc-agent/.tfc-agent/component/terraform/runs/run-MoEkSrNUpqAKRtY8/terraform.tfvars".
│ If you meant to use this value, add a "variable" block to the
│ configuration.
│
│ To silence these warnings, use TF_VAR_... environment variables to provide
│ certain "global" settings to all configurations in your organization. To
│ reduce the verbosity of these warnings, use the -compact-warnings option.
╵
╷
│ Warning: Value for undeclared variable
│
│ The root module does not declare a variable named "github_app_id" but a
│ value was found in file
│ "/home/tfc-agent/.tfc-agent/component/terraform/runs/run-MoEkSrNUpqAKRtY8/terraform.tfvars".
│ If you meant to use this value, add a "variable" block to the
│ configuration.
│
│ To silence these warnings, use TF_VAR_... environment variables to provide
│ certain "global" settings to all configurations in your organization. To
│ reduce the verbosity of these warnings, use the -compact-warnings option.
╵
╷
│ Warning: Values for undeclared variables
│
│ In addition to the other similar warnings shown, 1 other variable(s)
│ defined without being declared.
╵
╷
│ Warning: Argument is deprecated
│
│   with module.repository.github_repository.this,
│   on .terraform/modules/repository/modules/github/repository/main.tf line 21, in resource "github_repository" "this":21:   vulnerability_alerts = true
│
│ Use the github_repository_vulnerability_alerts resource instead. This field
│ will be removed in a future version.
╵
╷
│ Warning: Redundant ignore_changes element
│
│   on .terraform/modules/repository/modules/github/repository/main.tf line 158, in resource "github_repository_file" "codeowners":158: resource "github_repository_file" "codeowners" {
│
│ Adding an attribute name to ignore_changes tells Terraform to ignore future
│ changes to the argument in configuration after the object has been created,
│ retaining the value originally configured.
│
│ The attribute commit_sha is decided by the provider alone and therefore
│ there can be no configured value to compare with. Including this attribute
│ in ignore_changes has no effect. Remove the attribute from ignore_changes
│ to quiet this warning.
╵
╷
│ Warning: Redundant ignore_changes element
│
│   on .terraform/modules/repository/modules/github/repository/main.tf line 173, in resource "github_repository_file" "pr_template":173: resource "github_repository_file" "pr_template" {
│
│ Adding an attribute name to ignore_changes tells Terraform to ignore future
│ changes to the argument in configuration after the object has been created,
│ retaining the value originally configured.
│
│ The attribute commit_sha is decided by the provider alone and therefore
│ there can be no configured value to compare with. Including this attribute
│ in ignore_changes has no effect. Remove the attribute from ignore_changes
│ to quiet this warning.
╵
╷
│ Warning: Authentication method has limited TFE provider permissions
│
│   with provider["registry.terraform.io/hashicorp/tfe"],
│   on providers.tf line 6, in provider "tfe":6: provider "tfe" {
│
│ When running in HCP Terraform or Terraform Enterprise, the current
│ authentication method may not have sufficient permissions for all TFE
│ provider operations. Data sources and plans may work, but resource create,
│ update, or delete operations can fail. To avoid this, authenticate using
│ the provider token argument or the TFE_TOKEN environment variable.
╵
╷
│ Warning: Argument is deprecated
│
│   with github_actions_secret.doppler_token["utils"],
│   on doppler-secrets.tf line 19, in resource "github_actions_secret" "doppler_token":19:   plaintext_value = data.tfe_outputs.doppler.values["ci_tokens"][each.key]
│
│ Use value.
╵
╷
│ Error: error reading repository vulnerability alerts: GET https://api.github.com/repos/GregoireF/notiftk/vulnerability-alerts: 401 Bad credentials []
│
│   with module.repository["notiftk"].github_repository.this,
│   on .terraform/modules/repository/modules/github/repository/main.tf line 3, in resource "github_repository" "this":3: resource "github_repository" "this" {
│
╵
Operation failed: failed running terraform plan (exit 1)

─────────────────────────────────────────────────────────────────────────────

Note: You didn't use the -out option to save this plan, so OpenTofu can't
guarantee to take exactly these actions if you run "tofu apply" now.
::error::OpenTofu exited with code 1.

View run

@GregoireF
GregoireF force-pushed the fix/forge-ui-branch-protection branch from 7130867 to 503c34e Compare July 2, 2026 21:40
@GregoireF GregoireF closed this Jul 2, 2026
@GregoireF
GregoireF force-pushed the fix/forge-ui-branch-protection branch from 503c34e to c633aba Compare July 2, 2026 21:42
- Fix required status check names on main (were placeholder values):
  now uses exact job names from CI, E2E, dependency-review workflows
- Add bypass_actors for github-actions[bot] so changesets can push
  version-bump commits to main
- Extend module with optional additional_rulesets for non-default
  branch protection (generic for_each resource)
- Configure protect-develop ruleset on forge-ui: CI only, no E2E,
  github-actions[bot] bypass for Renovate direct automerge

Signed-off-by: Gregoire <mohinette@hotmail.fr>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@GregoireF GregoireF reopened this Jul 2, 2026
@GregoireF
GregoireF merged commit 9b4f715 into main Jul 2, 2026
11 checks passed
@GregoireF
GregoireF deleted the fix/forge-ui-branch-protection branch July 2, 2026 21:48
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant