Repo-wide conventions for commits, branches, code style, and PRs. Tooling-specific config (CI workflows, lint configs, Dockerfiles) lives next to its tool.
All commits follow Conventional Commits:
<type>: <description>
[optional body]
Types:
feat:— new feature or functionalityfix:— bug fixchore:— maintenance, dependency updates, CI changesdocs:— documentation onlyrefactor:— code restructuring without behavior changetest:— adding or updating testsperf:— performance improvement
Rules:
- Lowercase type prefix, no capital first letter in description
- Imperative mood: "add login page", not "added login page"
- No period at the end
- Body is optional, separated by a blank line; use it to explain the why
The repository uses Semantic Versioning:
v<major>.<minor>.<patch>
- Major — breaking API/CRD changes
- Minor — new features, backward compatible
- Patch — bug fixes, documentation
Tags always include the v prefix: v1.0.0, v0.2.1.
mainis the default branch. Never commit directly.- Feature work happens on
<type>/<short-description>branches (e.g.,feat/github-connector,fix/webhook-timeout,docs/architecture-update). - Open PRs against
main. Squash merge is the norm. - Always
git pull --rebasebefore pushing.
- One topic per PR. Don't bundle unrelated changes — open separate PRs.
- The PR description should explain why, not just what.
- Run lints and tests locally before opening (see Code style).
The release tooling expects these labels to exist; CI creates them automatically if missing:
| Label | Color | Purpose |
|---|---|---|
release |
#0e8a16 (green) |
Applied to release PRs |
automated |
#1d76db (blue) |
Applied to PRs opened by CI |
dependencies |
#0366d6 (blue) |
Applied to chart/image bump PRs |
- Every top-level package has a
README.md. Follow the per-package template described inCONTRIBUTING.md. - Cross-package links use relative folder paths (e.g.,
../services/hub/), not external URLs. - Architecture lives in
docs/architecture.md, not in per-package READMEs. Per-package READMEs may include a focused internal diagram if it helps, but the system-level view stays in one place. - API/CRD reference content lives in
docs/crd-reference.mdanddocs/api-reference.md. Per-package docs link outward instead of duplicating. - Markdown lines: aim for ~100 chars where reasonable. Use fenced code blocks with language tags.
gofmtis mandatory; CI fails on unformatted code.golangci-lintruns with the config at the repo root.- Tests live next to source as
*_test.go. Prefer table-driven tests. go.workjoins every Go module; when you change a file inshared/api/, downstream modules pick it up automatically — noreplacedirectives needed inside the workspace.
- Prettier + ESLint, configs at the repo root.
- Tests live next to source as
*.test.ts(x)or under__tests__/. - Frontend code lives under
frontend/; follow its package README for build/dev commands.
helm lint chart/must pass.helm template chart/ -f your-values.yamlshould render without errors.- Keep values keys lowercase-camelCase to match the rest of the chart.