Definition and automation of the Tech Committee's governance model
  • Rust 95.3%
  • Shell 4.6%
  • Nix 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-10 04:32:40 +00:00
.forgejo chore: regenerate tofu, schemas, CODEOWNERS [skip ci] 2026-08-10 04:32:40 +00:00
crates feat: repoint to git.cmu.dev 2026-08-08 03:11:13 -04:00
data feat: re-add tartan-vote and cbp tech leads 2026-08-09 23:57:25 -04:00
schemas feat: repoint to git.cmu.dev 2026-08-08 03:11:13 -04:00
tofu chore: regenerate tofu, schemas, CODEOWNERS [skip ci] 2026-08-10 04:32:40 +00:00
.editorconfig style: add editorconfig exclusions 2026-07-20 22:35:45 -04:00
.editorconfig-checker.json style: add editorconfig exclusions 2026-07-20 22:35:45 -04:00
.gitattributes feat: add CI workflows and opentofu provider config 2026-03-26 19:57:27 -04:00
.gitignore chore: update gitignore to shared conventions 2026-07-20 22:40:19 -04:00
atlantis.yaml feat: split into multiple atlantis projects 2026-07-28 02:21:34 -04:00
Cargo.lock fix: bump dependencies for osv-scanner 2026-07-21 02:20:16 -04:00
Cargo.toml feat: repoint to git.cmu.dev 2026-08-08 03:11:13 -04:00
devenv.lock chore: update devenv 2026-08-09 19:39:19 -04:00
devenv.nix feat: switch to ci secrets 2026-08-09 14:11:16 -04:00
devenv.yaml ci: migrate to new patterns 2026-08-08 03:10:44 -04:00
LICENSE-APACHE-2.0 Initial commit 2026-03-25 18:49:57 -04:00
LICENSE-MIT Initial commit 2026-03-25 18:49:57 -04:00
README.md feat: repoint to git.cmu.dev 2026-08-08 03:11:13 -04:00
secretspec.toml feat: switch to ci secrets 2026-08-09 14:11:16 -04:00
taplo.toml feat: add CI workflows and opentofu provider config 2026-03-26 19:57:27 -04:00

governance

This repository is the source of truth for the Tech Committee's governance model. It declaratively manages teams, repositories, and membership using OpenTofu and Atlantis.

Joining a team

  1. Link all available accounts in Keycloak.
  2. Add your git.cmu.dev username to the members array in the desired team .toml file under data/.
  3. Open a PR using a conventional PR title.

Note that only team leads are allowed to modify other people's memberships.

Creating a team

Teams are groups of leads, members, repositories, and channels. They can nest sub-projects recursively, each with the same shape. Copy an existing file in data/teams/ for a working starting point.

Reference the team schema for an authoritative list of fields and their constraints.

Features

Each repository opts into capabilities through its features table. Presence enables a feature, an empty table enables it with defaults, and features with settings take them as keys:

[[team.repos]]
name = "collie"
features = { kennel = {}, sentry = {} }

[team.repos.features.ai_gateway]
prod_monthly_budget = 20.0
  • kennel adds a Forgejo webhook that connects the repository to kennel for builds and deployments
  • sentry creates a Sentry project and writes its DSN to Vault
  • posthog creates a PostHog project and writes its key and host to Vault
  • cdn creates a public-read Garage bucket for the repository and writes its S3 credentials and public URL to Vault
  • oidc_client provisions prod and staging Keycloak OIDC clients with a fixed redirect URI and writes their credentials to Vault per profile; set admin = true to also provision a service-account client with user-management roles and write its credentials to Vault
  • ai_gateway provisions LiteLLM API keys with monthly budgets, a prod key and a lower-budget key shared by staging, preview, and dev, and writes the key and gateway URL to Vault per profile
  • docs registers the repository's docs/ directory with the documentation hub

How a project declares and consumes what these provision lives in the kennel docs: Deploying a Project and Secrets.

Description

The following is a list of platforms Governance manages:

  1. Keycloak
    • Members are added to their team's Keycloak groups, which gives them permission to access environment variables and other project-specific resources
    • Team leads are further added to the team's admins subgroup, which gives additional access
    • For projects with it enabled, OIDC clients are provisioned
  2. OpenBao
    • Keycloak groups are given the appropriate access to secret paths on OpenBao
  3. git.cmu.dev
    • Members are added to their Forgejo teams, which gives them appropriate access to the team's repositories
    • Forgejo repositories are set up to automatically sync to GitHub for visibility
  4. Google
    • Members are automatically added to ScottyLabs' and Tech's mailing lists (Google Groups)
  5. Sentry
    • Projects are provisioned under Sentry
  6. PostHog
    • Projects are provisioned under PostHog for product analytics
    • Leads of teams with a PostHog project are invited as organization members, and devops as owners
  7. LiteLLM
    • Repositories with the AI gateway enabled receive budgeted API keys under their team, written to OpenBao per profile
  8. Kennel
    • Repositories automatically receive a deploy webhook that authorizes them to be deployed by kennel
  9. Website
    • Groups with a public_url are published to the scottylabs.org project catalog
  10. Discord and Slack
    • Members are added to the appropriate channels on both platforms
    • On Discord, members are assigned the Tech role and their team's roles, and team leads additionally receive the Tech Lead role
    • Bidirectional sync is established between registered Discord and Slack channels via Matrix
  11. Vaultwarden
    • Members are given the appropriate access to account credentials on Vaultwarden

Here, "appropriate access" serves to delineate between member permissions and team lead permissions.