We use a simple Git flow:
dev (development) → main (releases)
main- Production branch. Only accepts merges fromdevvia PRs. Each merge creates an automatic release.dev- Development branch. All feature work happens here or in feature branches merged intodev.
- Daily development happens on
devbranch - Feature branches (optional): Create from
dev, merge back todev - Releases: Create a PR from
dev→main - When PR is merged to
main, a release is automatically created with:- A version tag (e.g.,
v2024.12.03-123) - A changelog of commits since last release
- A downloadable
.zipof the app
- A version tag (e.g.,
- ✅ Build verification
- ✅ Run tests
- ✅ Build verification
- ✅ Run tests
- ⏳ Require review approval
- 🏗️ Build release version
- 📦 Create app archive
- 🏷️ Tag with version
- 🚀 Publish GitHub Release
# Switch to dev for development
git checkout dev
# Create a feature branch
git checkout -b feature/my-feature
# Merge feature to dev
git checkout dev
git merge feature/my-feature
git push
# Create a release (via GitHub PR)
# Go to GitHub → Pull Requests → New PR → base: main, compare: devGo to GitHub → Settings → Branches → Add rule:
- ✅ Require a pull request before merging
- ✅ Require status checks to pass (select "Build & Test")
- ✅ Require branches to be up to date
- ✅ Require status checks to pass (select "Build & Test")