Automated governance for GitHub repository settings across the
gamaware organization. Contains shell scripts, composite GitHub
Actions, and workflows that discover repos, compare settings against
a baseline, apply corrections, and report drift via GitHub Issues.
scripts/— Shell scripts for syncing settings and generating reportsconfig/— Baseline settings JSON and per-repo overrides.github/workflows/— CI/CD and scheduled sync workflows.github/actions/— Composite actions (security-scan, sync-settings, update-pre-commit-composite).claude/skills/— Reusable skills (/audit,/add-repo-override,/exclude-repo)docs/architecture.md— System architecture overviewdocs/adr/— Architecture Decision Recordsdocs/runbooks/— Operational procedures (exclude repo, add setting, handle drift, onboard repo)
- Conventional commits required (
type: description) - Types:
fix,feat,docs,chore,ci,refactor,test - Never commit directly to
main— use feature branches and PRs - Squash merge only; PR title becomes commit title
- No AI attribution in commits, code, or content
General, secrets, shell, markdown, prose (Vale), GitHub Actions
(actionlint, zizmor), and conventional commit hooks — see
.pre-commit-config.yaml for the full list.
- PostToolUse on
Edit|Write: auto-format shell scripts (shellharden --replace,chmod +x) and markdown (markdownlint --fix) - Hooks defined in
.claude/settings.json, scripts in.claude/hooks/
- All default rules enforced — NO suppressions
- Fix violations directly instead of adding ignore comments
- Markdownlint: MD013 line length 120, tables exempt
- Table separators:
| --- |with spaces (MD060)
- Must pass
shellcheckandshellharden - Quote all variables:
"$VAR"(braces only when needed) - Scripts must have shebangs and executable permissions
- The Edit tool can strip executable permissions — verify and restore
- English only
- No hardcoded credentials or account IDs
- Use placeholder values (
YOUR_GITHUB_TOKEN, etc.)
sync-settings.yml— weekly settings sync + GitHub Issue reportsquality-checks.yml— markdown, YAML, shell, structure, JSON schema validation, link checking, zizmor (Actions security), Vale (prose linting)security.yml— Semgrep SAST + Trivy SCA (via composite action)update-pre-commit-hooks.yml— weekly auto-update via PR (via composite action)
.github/actions/security-scan/— reusable Semgrep + Trivy scan.github/actions/sync-settings/— reusable settings sync with outputs for drift detection.github/actions/update-pre-commit-composite/— reusable pre-commit autoupdate + PR creation
/audit— run a dry-run settings check across all repos/add-repo-override— add a per-repo exception to overrides.json/exclude-repo— exclude a repository from governance/ship [PR-number]— end-to-end PR lifecycle: update docs, commit, create PR, monitor CI, address reviews (CodeRabbit + Copilot), merge
- CodeRabbit auto-review via
.coderabbit.yaml - GitHub Copilot auto-review via ruleset
- Both reviewers run on every PR
The sync script (scripts/sync-repo-settings.sh) enforces:
- Repo settings: merge strategy, features, auto-merge, branch cleanup
- Security: secret scanning, push protection, vulnerability alerts
- Branch protection: reviews, CODEOWNERS, linear history, conversation resolution
- Rulesets: Copilot code review ruleset on default branch
- Labels: standard issue labels across all repos
- Default branch: ensures all repos use
main - Metadata: flags missing descriptions and topics (advisory)
- Required files: LICENSE, README, CODEOWNERS, etc.
Configuration lives in config/baseline.json with per-repo
overrides in config/overrides.json.