Quick reference
- Issue → template "Request new repository"
- Review the summary table posted by the bot
- Add the
approve-repolabel - 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
- Access to the
eigenoid/platform-settingsrepo - Permission to create issues in that repo
Procedure
-
Open an issue — Go to
platform-settings→ Issues → New Issue → select "Request new repository" -
Fill out the form:
- Category (determines the name prefix and suborg):
iac,app,docs,platform,tpl,svc, orexception - 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 | descriptionper 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. - Category (determines the name prefix and suborg):
-
Review the summary table — The
new-repo.ymlworkflow posts a table with the parsed data as a comment. Verify that everything is correct.Duplicate detectionIf a file
.github/repos/<name>.ymlalready exists, the workflow closes the issue automatically with an error message. The summary table is not shown. -
Approve the creation — Add the
approve-repolabel to the issue. Theapprove-repo.ymlworkflow generates the YAML and pushes it directly tomain. -
Wait for creation — safe-settings receives the push and creates the repo with the specified configuration (~10 seconds).
-
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:
- Creates 3 GCS buckets (dev, qa, prd) following the convention
eigenoid-2cea55-{stack}-tfstate-{env}. - Updates
state-buckets.json(bucket registry in.github/). - 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.
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
Emergency override
Org owners can create repos manually (bypassing the repository lifecycle ruleset), but:
- safe-settings will apply the org defaults on the next CRON sync
- If the repo needs custom config, create the YAML manually in
.github/repos/<name>.yml
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:
- Check the workflow logs in
platform-settings→ Actions - Check the safe-settings logs in Cloud Run (see operational guide)
- Contact @shoootyou