We welcome contributions via GitHub Pull Requests.
main: The primary branch. All features, fixes, and releases go here.- Feature branches (
feature/*,fix/*, etc.): Short-lived branches for development work.
-
Create a feature branch from
main:git checkout main git pull origin main git checkout -b feature/your-feature-name
-
Keep your branch updated (rebase strategy):
git fetch origin git rebase origin/main # Resolve any conflicts git push --force-with-lease origin feature/your-feature-name -
Make your changes, commit, and push:
git add . git commit -m "feat: add feature description" git push origin feature/your-feature-name
-
Create a Pull Request to
main:- Target branch:
main - Ensure your branch is rebased on latest
main - Use Squash and Merge to keep history clean
- Ensure all CI checks pass before merging
- Target branch:
We follow a tag-based release process:
-
Prepare for release:
git checkout main git pull origin main # Update version in Cargo.toml # Update CHANGELOG.md with release notes git add Cargo.toml CHANGELOG.md git commit -m "chore: prepare release v0.1.8" git push origin main
-
Create and push release tag:
# Tag MUST match the version in Cargo.toml git tag -a v0.1.8 -m "Release v0.1.8" git push origin v0.1.8
-
Automated release process:
- Tag push triggers the production release pipeline
- Creates GitHub Release with artifacts
- Builds and pushes Docker images with
:latestand:v0.1.8tags - Uploads binaries to Google Cloud Storage
-
Development releases: Automatically created on every push to
main- Version format:
v0.1.8-beta.1,v0.1.8-beta.2, etc. - Docker tags:
:dev,:dev-latest,:v0.1.8-beta.1 - Used for testing and development environments
- Version format:
-
Production releases: Created by pushing version tags
- Version format:
v0.1.8(semantic versioning) - Docker tags:
:latest,:stable,:v0.1.8 - Full GitHub Release with changelog and artifacts
- Version format:
We use a rebase workflow to maintain a clean, linear git history:
-
Always rebase feature branches before merging:
git checkout feature/my-feature git fetch origin git rebase origin/main
-
If you have conflicts during rebase:
# Fix conflicts in the affected files git add . git rebase --continue # Repeat until rebase is complete
-
Force push with lease (safer than --force):
git push --force-with-lease origin feature/my-feature
Important: Never rebase branches that others are working on. Only rebase your own feature branches.
Use clear, descriptive commit messages following conventional commits:
feat:New featurefix:Bug fixdocs:Documentation changeschore:Maintenance tasks (version bumps, etc.)test:Test additions or changesrefactor:Code refactoring
Examples:
feat: add validator health check endpointfix: resolve memory leak in worker processchore: bump version to 0.1.8
- Report bugs via GitHub Issues
- Include:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Environment details (OS, Rust version, etc.)
- Reference issues in commits:
fix: resolve login bug (#123)
# Start new feature
git checkout main && git pull
git checkout -b feature/my-feature
# Keep branch updated with rebase
git fetch origin
git rebase origin/main
git push --force-with-lease origin feature/my-feature
# Create release
git checkout main && git pull
# Update Cargo.toml version and CHANGELOG.md
git add Cargo.toml CHANGELOG.md
git commit -m "chore: prepare release v0.1.8"
git push origin main
git tag -a v0.1.8 -m "Release v0.1.8"
git push origin v0.1.8Before creating a release tag:
- Version bumped in
Cargo.toml -
CHANGELOG.mdupdated with release notes - All tests passing on
main - Documentation updated if needed
- Tag version matches Cargo.toml version exactly