Manages GitHub repository settings and branch/tag protection for the
jackin-project organization: 9 repositories, each with repository merge
settings plus protect-main and protect-tags rulesets.
variables.tf—repository_policiesinventory (single source of truth).locals.tf—check_templatescopy-paste source for check lists.repositories.tf—module.repository_policywiring.organization.tf— organization settings and Actions/workflow permissions.modules/repository-policy/— shared policy module (identical across orgs).checks.tf— invariant guards (no scripts).imports.tf— bootstrap import triples (one per repo: settings + 2 rulesets).providers.tf,versions.tf,outputs.tf— provider, pins, outputs.
Run tofu with GITHUB_TOKEN exported in the shell, or via the mise tasks
mise run tofu:plan / mise run tofu:apply, which inject the organization
token from 1Password. The token needs Administration: write on every managed
repository. It also needs org admin on jackin-project for the organization
settings and Actions policies in organization.tf.
- Add one entry to
repository_policiesinvariables.tf, copying a check list fromlocals.tf(standard=["Required", "DCO"],policy=["Policy"]); bespoke checks inline with a comment citing the producing workflow. Repos with no CI userequired_checks = []plus a non-emptyno_ci_reasonand extend the allowlist check inchecks.tf. Always add the name to the mandatory list inmandatory_target_repositories_presentinchecks.tf(updating its count and message). - Add one import triple (settings +
protect_main+protect_tags) toimports.tfusing the live numeric ruleset IDs.
organization.tfmanages the org profile (github_organization_settings), Actions availability/allow policy (github_actions_organization_permissions), and defaultGITHUB_TOKENworkflow permissions (github_actions_organization_workflow_permissions).
tofu fmt -check -recursive
tofu init -backend=false -input=false -lockfile=readonly
tofu validate -no-colorOpenTofu is pinned via mise.toml (opentofu 1.13.1); existing repos are
imported via imports.tf on first apply.