Dana Runtime uses a simplified two-branch model: one integration branch and one release branch.
feature/* ──PR──> develop ──PR──> master
|
hotfix/* ────┘ (branched from master; merged back to master + develop)
| Branch | Purpose | Accepts PRs from |
|---|---|---|
develop |
Integration branch. All feature work merges here first. Default branch. | feature/* |
master |
Release branch. Every merge produces a version tag + GitHub Release. | develop, hotfix/* |
- Branch from
develop - Merge back into
developvia PR - Naming:
feature/<descriptive-slug>(e.g.feature/timeline-compression) - Delete after merge
- Branch from
masterfor critical production bugs - Merge into both
masteranddevelop(keep develop in sync) - Bump the version on the hotfix branch manually before merging into
master - Naming:
hotfix/<version-or-slug>(e.g.hotfix/fix-crash) - Delete after merge
developaccumulates features via merged feature branches- When ready for release, set the target version in
pyproject.tomlondevelop - Open a PR
develop → master. CI auto-bumps the patch version ifdevelopis not already ahead - Merge the PR →
release-on-merge-to-mastertagsv<version>and creates a GitHub Release
- Source of truth:
versioninpyproject.toml - To ship a minor/major bump (e.g.
0.2.0,1.0.0), set it ondevelopbefore opening the release PR — the auto-bumper detectsdevelopis already ahead and skips - Otherwise the auto-bumper raises the patch component (
0.1.3→0.1.4) - Tags follow
v<version>(e.g.v0.2.0)
Enforced by .github/workflows/branch-policy.yml plus repository rulesets:
masteronly accepts PRs fromdeveloporhotfix/*- Direct pushes to
masterare blocked (no non-fast-forward, no deletion); merges require review + signatures - Any PR violating the source-branch rule is rejected by the
check-branch-policyjob
feature/* ──PR──> develop ──PR──> master ──> tag vX.Y.Z + GitHub Release
^ |
| hotfix/* ──┘ (also merged back to develop)
+-------------------+