One-time UI checklist for configuring the GitHub repo. The
authoritative version lives at .github/SETTINGS.md
in the repo root — that's what operators should follow.
This doc is a pointer + quick rationale.
Branch protection, required status checks, tag protection, dependabot alerts, secret-scan push-protection, and the Homebrew tap secret are all operator decisions. They differ by deployment, can't be version-controlled as code (GitHub's API surface is inconsistent), and are set once at repo creation.
.github/SETTINGS.md walks through the clicks. docs/ just
reminds you to do it.
- Create the repo (private at first; flip to public when ready). Don't let GitHub add a README / gitignore / license — they collide with the local ones.
- Branches → Add rule for
master:- Require a PR before merging.
- Require status checks (see ci.md for names).
- Require linear history (matches our squash-merge policy).
- No force-push, no delete.
- Tags → Protected tags pattern
v*— admins only. Prevents accidentalgit push origin v1.0.0from contributors; release-please's workflow token still works. - Code security:
- Dependabot alerts ON.
- Dependabot security updates ON.
- Secret scanning ON.
- Push protection ON.
- Actions → General:
- "Read and write permissions" (release-please needs it).
- "Allow GitHub Actions to create and approve pull requests" (release-please + dependabot open PRs).
- Pull Requests:
- Squash-only (disable merge commits + rebase-merge).
- "Pull request title and description" as default commit message.
- Allow auto-merge (for dependabot-auto-merge.yml).
- Auto-delete head branches.
- Optional: Homebrew tap secret:
- Create the
amiwrpremium/homebrew-taprepo (empty, public). - Generate a fine-grained PAT: Contents: R/W on that one repo, no other perms.
- Paste as
HOMEBREW_TAP_GITHUB_TOKENsecret on shellboto. - Rotate before the PAT expires.
- Create the
- Branch protection keeps
mastershippable. Every commit there has passed CI. - Tag protection keeps the release path gate-kept — only
admins or the workflow can push a
v*tag, and tagging is what triggers a release. - Dependabot + security updates keep dependencies patched. Auto-merge handles patch-only; humans review minor/major.
- Secret scanning + push protection catch accidental secret commits at push time (belt-and-braces alongside our local gitleaks hook).
- Workflow permissions + allow-PR let release-please + dependabot open their PRs without us manually granting on every run.
- Squash-only merges keep history linear; Conventional Commits map 1:1 with merges.
- CodeQL will flag pre-existing issues. Normal. Triage under Security → Code scanning; fix what matters, dismiss the rest with rationale.
- Dependabot's first week is noisy. It scans everything outdated and opens a batch of PRs. Merge the patch ones; triage the minor/major ones. Subsequent weeks are quiet.
Optional. Not shipped as a requirement.
If you want signed commits on master:
- Configure GPG / SSH signing locally (
git config commit.gpgsign true+ key). - In branch protection for
master, tick "Require signed commits." - Make sure release-please's bot commits are signed too — that's
done via the
sign-commitsinput on the action.
.github/SETTINGS.md— the click-by-click checklist.- ci.md — the CI workflows those branch-protection toggles gate.