Skip to main content

Quick reference

  1. Issue → template "Request new repository"
  2. Review the summary table posted by the bot
  3. Add the approve-repo label
  4. safe-settings creates the repo (~10 sec)

If the repo already exists, the issue is automatically closed with an error.


When to use

When a new repository is needed in the eigenoid org.

Preconditions

Procedure

  1. Open an issue — Go to platform-settings → Issues → New Issue → select "Request new repository"

  2. Fill out the form:

    • Category (determines the name prefix and suborg): iac, app, docs, platform, tpl, svc, or exception
    • Descriptive name (without the category prefix, in kebab-case — e.g., org-shared, studio)
    • Description
    • Topics (optional, comma-separated, lowercase)
    • Extra labels (optional, format name | color | description per line)
    • Visibility (private / public)

    The final repo name will be <category>-<descriptive-name> (e.g., iac-org-shared). For exceptions, the name is used as-is.

  3. Review the summary table — The new-repo.yml workflow posts a table with the parsed data as a comment. Verify that everything is correct.

    Duplicate detection

    If a file .github/repos/<name>.yml already exists, the workflow closes the issue automatically with an error message. The summary table is not shown.

  4. Approve the creation — Add the approve-repo label to the issue. The approve-repo.yml workflow generates the YAML and pushes it directly to main.

  5. Wait for creation — safe-settings receives the push and creates the repo with the specified configuration (~10 seconds).

  6. Issue closes automatically with a link to the created repo.

IaC repos — automatic state bucket bootstrap

When the selected category is iac, the approve-repo.yml workflow runs additional steps before creating the repo:

  1. Creates 3 GCS buckets (dev, qa, prd) following the convention eigenoid-2cea55-{stack}-tfstate-{env}.
  2. Updates state-buckets.json (bucket registry in .github/).
  3. Comments on the issue with a table of the created buckets.

The repo is created from the iac-template template, which comes pre-configured with terraflow.yaml, backend configs, and the CI workflow. The first PR with Terraform works immediately — there are no manual bootstrap steps.

Stack naming

The stack name is derived from the repo name without the iac- prefix. Example: repo iac-distribution → stack distribution → bucket eigenoid-2cea55-distribution-tfstate-dev.

For more detail, see the IaC Bootstrap runbook and ADR-0012.

Verification

# Verify the repo exists
gh repo view eigenoid/NAME

# Verify applied settings
gh api repos/eigenoid/NAME --jq '{private: .private, archived: .archived, description: .description}'

# IaC repos only — verify created buckets
for env in dev qa prd; do
gcloud storage buckets describe gs://eigenoid-2cea55-STACK-tfstate-$env 2>&1 | head -3
done
bash

Emergency override

Org owners can create repos manually (bypassing the repository lifecycle ruleset), but:

  1. safe-settings will apply the org defaults on the next CRON sync
  2. If the repo needs custom config, create the YAML manually in .github/repos/<name>.yml
warning

Repos created manually do not have an audit trail via issue. Always prefer the issue template flow.

Escalation

If the workflow fails or the repo is not created after 5 minutes:

  1. Check the workflow logs in platform-settings → Actions
  2. Check the safe-settings logs in Cloud Run (see operational guide)
  3. Contact @shoootyou

References