Skip to content

chore(github/repository): close the monorepo production environment to every ref - #1110

Merged
panicboat merged 1 commit into
mainfrom
chore/close-monorepo-production-environment
Oct 24, 2026
Merged

panicboat merged 1 commit into
mainfrom
chore/close-monorepo-production-environment

Conversation

@panicboat

Copy link
Copy Markdown
Owner

Why

production の apply role は OIDC subject repo:panicboat/monorepo:environment:production も許可している。
monorepo には GitHub environment がないので、job が environment: production を宣言すると、GitHub が自動作成して token を発行してしまう。
monorepo には GitHub environment を宣言する job がない(environment: はすべて reusable workflow の入力)ので、どの ref からの deployment も受け付けない production を作る。

What

  • monorepo.hcl に、tag pattern を 1 つも持たない environment production を宣言する。
  • tftest に、pattern が空のとき environment だけを作り policy を作らないことを確かめる run を足す。
  • README の environment の項目を、platform と monorepo の両方を書く形に直す。

影響

  • monorepo の production への apply は main への push の trust(ref:refs/heads/main)で動いているので、この変更では止まらない。
  • 将来 monorepo でも release tag から environment を使うときは、deployment_tag_patterns に pattern を足す。

Test plan

  • tofu test(github/repository/modules)が 3 passed
  • 空の pattern で policy を作る・custom_branch_policies を外すなどの改変で、新しい run が失敗する
  • monorepo の origin/main に、job-level の environment: がない
  • PR 上の github/repository の plan に、monorepo の environment の追加だけが出る
  • merge 後、gh api repos/panicboat/monorepo/environments/production で custom_branch_policies: true かつ policy 0 個になっている
  • monorepo の branch から environment: production の job を起動すると、GitHub に拒否される

🤖 Generated with Claude Code

https://claude.ai/code/session_01BZfNTtmPjmrDmh1MAMtiFS

…o every ref

Signed-off-by: panicboat <panicboat@gmail.com>
@coderabbitai

coderabbitai Bot commented Oct 24, 2026 •

Copy link
Copy Markdown

Important

  • 🔍 Trigger review

This repository does not receive automatic reviews because it has fewer than 10 stars.

Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9c47eea9-03d2-4761-87dd-0f007914c764
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@panicboat-github-workflow-bot panicboat-github-workflow-bot Bot added the deploy:repository Auto-generated deployment label label Oct 24, 2026
@panicboat-github-workflow-bot

Copy link
Copy Markdown
Contributor

Plan Result (repository/master)

CI link

Plan: 1 to add, 0 to change, 0 to destroy.
  • Create
    • github_repository_environment.repository["monorepo/production"]
Change Result (Click me)
  # github_repository_environment.repository["monorepo/production"] will be created
  + resource "github_repository_environment" "repository" {
      + can_admins_bypass   = false
      + environment         = "production"
      + id                  = (known after apply)
      + prevent_self_review = false
      + repository          = "monorepo"
      + repository_id       = (known after apply)

      + deployment_branch_policy {
          + custom_branch_policies = true
          + protected_branches     = false
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.

@panicboat
panicboat marked this pull request as ready for review October 24, 2026 13:06
@panicboat
panicboat enabled auto-merge (squash) October 24, 2026 13:06
@panicboat
panicboat merged commit d3f4914 into main Oct 24, 2026
15 checks passed
@panicboat
panicboat deleted the chore/close-monorepo-production-environment branch October 24, 2026 13:06
@panicboat-github-workflow-bot

Copy link
Copy Markdown
Contributor

✅ Apply Succeeded (repository/master)

CI link

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Details (Click me)
Oct 24 13:07:35.306 INF download and unarchive the package program=aqua version=2.64.0 env=linux/amd64 exe_name=terragrunt package_name=gruntwork-io/terragrunt package_version=v1.0.2 registry=standard

Initializing the backend...

Successfully configured the backend "s3"! OpenTofu will automatically
use this backend unless the backend configuration changes.

Initializing provider plugins...
- Finding integrations/github versions matching "~> 6.13"...
- Finding hashicorp/aws versions matching "~> 6.68"...
- Installing hashicorp/aws v6.70.0 to the shared cache directory...
- Installing integrations/github v6.13.0 to the shared cache directory...
- Installed integrations/github v6.13.0 (signed, key ID 38027F80D7FD5FB2)
- Using integrations/github v6.13.0 from the shared cache directory
- Installed hashicorp/aws v6.70.0 (signed, key ID 0C0AF313E5FD9F80)
- Using hashicorp/aws v6.70.0 from the shared cache directory

Providers are signed by their developers.
If you'd like to know more about provider signing, you can read about it here:
https://opentofu.org/docs/cli/plugins/signing/

OpenTofu has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that OpenTofu can guarantee to make the same selections by default when
you run "tofu init" in the future.

OpenTofu has been successfully initialized!

You may now begin working with OpenTofu. Try running "tofu plan" to see
any changes that are required for your infrastructure. All OpenTofu commands
should now work.

If you ever set or change modules or backend configuration for OpenTofu,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.
Acquiring state lock. This may take a few moments...
github_repository.repository["platform"]: Refreshing state... [id=platform]
github_repository.repository["deploy-actions"]: Refreshing state... [id=deploy-actions]
github_repository.repository["monorepo"]: Refreshing state... [id=monorepo]
github_repository.repository["ansible"]: Refreshing state... [id=ansible]
github_repository.repository["dotfiles"]: Refreshing state... [id=dotfiles]
github_repository_vulnerability_alerts.repository["dotfiles"]: Refreshing state... [id=880093624]
github_repository_vulnerability_alerts.repository["deploy-actions"]: Refreshing state... [id=1014666976]
github_repository_vulnerability_alerts.repository["platform"]: Refreshing state... [id=994278495]
github_repository_vulnerability_alerts.repository["monorepo"]: Refreshing state... [id=807388271]
github_repository_vulnerability_alerts.repository["ansible"]: Refreshing state... [id=880089351]
github_workflow_repository_permissions.repository["monorepo"]: Refreshing state... [id=monorepo]
github_repository_environment.repository["platform/production"]: Refreshing state... [id=platform:production]
github_workflow_repository_permissions.repository["platform"]: Refreshing state... [id=platform]
github_repository_environment_deployment_policy.repository["platform/production/*-v*"]: Refreshing state... [id=platform:production:64198899]

OpenTofu used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
  + create

OpenTofu will perform the following actions:

  # github_repository_environment.repository["monorepo/production"] will be created
  + resource "github_repository_environment" "repository" {
      + can_admins_bypass   = false
      + environment         = "production"
      + id                  = (known after apply)
      + prevent_self_review = false
      + repository          = "monorepo"
      + repository_id       = (known after apply)

      + deployment_branch_policy {
          + custom_branch_policies = true
          + protected_branches     = false
        }
    }

Plan: 1 to add, 0 to change, 0 to destroy.
github_repository_environment.repository["monorepo/production"]: Creating...
github_repository_environment.repository["monorepo/production"]: Creation complete after 1s [id=monorepo:production]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Outputs:

repository_full_names = {
  "ansible" = "panicboat/ansible"
  "deploy-actions" = "panicboat/deploy-actions"
  "dotfiles" = "panicboat/dotfiles"
  "monorepo" = "panicboat/monorepo"
  "platform" = "panicboat/platform"
}
repository_html_urls = {
  "ansible" = "https://github.com/panicboat/ansible"
  "deploy-actions" = "https://github.com/panicboat/deploy-actions"
  "dotfiles" = "https://github.com/panicboat/dotfiles"
  "monorepo" = "https://github.com/panicboat/monorepo"
  "platform" = "https://github.com/panicboat/platform"
}
repository_http_clone_urls = {
  "ansible" = "https://github.com/panicboat/ansible.git"
  "deploy-actions" = "https://github.com/panicboat/deploy-actions.git"
  "dotfiles" = "https://github.com/panicboat/dotfiles.git"
  "monorepo" = "https://github.com/panicboat/monorepo.git"
  "platform" = "https://github.com/panicboat/platform.git"
}
repository_ids = {
  "ansible" = 880089351
  "deploy-actions" = 1014666976
  "dotfiles" = 880093624
  "monorepo" = 807388271
  "platform" = 994278495
}
repository_node_ids = {
  "ansible" = "R_kgDONHUZBw"
  "deploy-actions" = "R_kgDOPHqW4A"
  "dotfiles" = "R_kgDONHUpuA"
  "monorepo" = "R_kgDOMB_Ebw"
  "platform" = "R_kgDOO0N8Xw"
}
repository_ssh_clone_urls = {
  "ansible" = "git@github.com:panicboat/ansible.git"
  "deploy-actions" = "git@github.com:panicboat/deploy-actions.git"
  "dotfiles" = "git@github.com:panicboat/dotfiles.git"
  "monorepo" = "git@github.com:panicboat/monorepo.git"
  "platform" = "git@github.com:panicboat/platform.git"
}

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

Labels

deploy:repository Auto-generated deployment label

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant