This is a process template repository. It is intentionally stack-agnostic so teams can use it for Node, Django, Go, Java, .NET, or any other technology.
main: production branch, always deployabledevelop: integration branch, always green- all work: short-lived branches + pull requests + required checks
maindevelop
Create from develop:
feature/<short-name>fix/<short-name>chore/<short-name>
Examples:
feature/auth-navigationfix/session-timeoutchore/update-docs
For urgent production fixes, create from main:
hotfix/<short-name>
Then merge into main and back into develop.
- Sync
develop
git checkout develop
git pull origin develop- Create a short-lived branch
git checkout -b feature/your-short-name- Commit with Conventional Commits
git commit -m "feat(scope): short description"- Push and open a pull request
git push -u origin feature/your-short-nameA PR may merge only when all are true:
- required CI checks are green
- at least one approval is present
- no unresolved review comments remain
- PR title follows Conventional Commits
- branch is up to date with target branch
- squash merge only
- delete source branch after merge
At sprint end:
- Open PR
develop -> main - Verify required checks are green
- Merge and deploy
- Tag release if your team uses tags
- Branch from
main:hotfix/<short-name> - Fix and open PR into
main - Deploy
- Merge
main -> develop
Format:
type(scope): description
Scope is optional:
type: description
Allowed types:
feat,fix,docs,style,refactor,test,chore,perf,ci,build,revert
Examples:
feat(auth): add route guardfix(api): handle empty tokenchore: update contributing guide
This template does not prescribe package managers or language tools. Each project team must define required checks in their own stack, then enforce them in CI.
Examples by stack:
- Node: lint + test + build
- Python/Django: ruff/flake8 + pytest + migrations check
- Go:
go vet+go test ./... - Java:
mvn test/gradle test
No direct pushes to main or develop.
All changes go through PR review and required checks.
This template uses a two-layer enforcement approach.
The following files are copied as-is into every project created from template:
.github/workflows/branch-name.yml.github/workflows/commitlint.yml.github/workflows/ci.yml.github/workflows/cd-demo.yml
branch-name and commitlint are universal policy checks.
ci and cd-demo call project-owned scripts (.ci/commands.sh, .ci/deploy.sh) so each stack can plug in its own commands.
Local hook enforcement is provided with Lefthook:
lefthook.ymlscripts/hooks/validate-commit-msg.shscripts/hooks/validate-branch-name.sh
This avoids Node-only hook tooling and works for mixed stacks.
One-time setup in each generated project:
lefthook installIf a team chooses a different local hook framework, they must keep the same branch and commit policy.