| Category | Status | Created | Author |
|---|---|---|---|
| Integrations | Draft | 2026-04-20 | Aditya Choudhari |
Problem
How do we know which Ctrlplane deployment a GitHub release belongs to?owner/repo alone fails for monorepos (e.g. ctrlplanedev/deployments produces releases for wandb, shared-tenant, k8s, etc.). Naming-convention approaches (<service>/v<version>) fight existing tools — release-please emits <service>-v<ver>, changesets emits <pkg>@<ver>, semantic-release emits v<ver>.
Proposal
A single CEL selector on deployment metadata.Flow
releasewebhook hitsapps/api/src/routes/github/release.ts.- Verify signature, resolve installation.
- Build CEL context.
- For every deployment with
git/release-selectorin metadata, evaluate. - Match → create deployment version with
release.tag_nameas the version.
CEL context
GET /repos/{o}/{r}/compare/{prev}...{tag}).
Metadata keys
| Key | Required | Purpose |
|---|---|---|
git/release-selector | yes | CEL returning bool |
git/repo key — repo check lives inside the selector.
GitHub App permissions
- Metadata: Read
- Contents: Read
- Events:
Release,Installation,Installation repositories
Error handling
- Selector throws → log, skip deployment.
- Compare API fails → evaluate without enriched fields (selectors referencing them evaluate false).
- Zero matches → log + 200.
Out of scope (v1)
- Selector prefilter / indexing
- Draft / prerelease handling beyond what selectors express
- Backfilling historical releases