RudeBase3D uses a Git Flow inspired branching model optimized for open source development with continuous integration and regular releases.
- Purpose: Production-ready code
- Protection: Protected branch, no direct commits
- Merges: Only from
developvia pull request - Versioning: All commits tagged with release versions
- CI/CD: Triggers production builds and releases
- Purpose: Integration branch for features
- Protection: Protected branch, requires reviews
- Merges: Feature branches, hotfixes, release preparations
- CI/CD: Continuous testing and preview builds
- Stability: Should always be in buildable state
- Naming:
feature/short-descriptionorfeature/issue-number-description - Source: Branch from
develop - Merge: Back to
developvia pull request - Lifetime: Short-lived, deleted after merge
- Examples:
feature/half-edge-subdivisionfeature/material-editor-uifeature/obj-file-import
- Naming:
release/v1.2.0 - Source: Branch from
develop - Purpose: Prepare new production release
- Merge: To both
mainanddevelop - Lifetime: Until release is complete
- Activities: Bug fixes, documentation updates, version bumps
- Naming:
hotfix/v1.2.1-critical-bug - Source: Branch from
main - Purpose: Critical production fixes
- Merge: To both
mainanddevelop - Lifetime: Very short, immediate fix cycle
- Naming:
experiment/description - Source: Usually from
develop - Purpose: Research, proof-of-concepts, major refactoring
- Merge: May or may not be merged
- Lifetime: Variable, often long-lived
# Start new feature
git checkout develop
git pull origin develop
git checkout -b feature/my-new-feature
# Develop feature
git add .
git commit -m "feat: implement feature X"
git push -u origin feature/my-new-feature
# Submit pull request to develop
# After review and approval, merge and delete branch# Create release branch
git checkout develop
git checkout -b release/v1.2.0
# Prepare release (version bumps, changelog, docs)
git commit -m "chore: prepare v1.2.0 release"
git push -u origin release/v1.2.0
# After testing, merge to main and develop
# Tag the release on main
git tag v1.2.0# Critical bug found in production
git checkout main
git checkout -b hotfix/v1.2.1-security-fix
# Fix the issue
git commit -m "fix: resolve security vulnerability"
git push -u origin hotfix/v1.2.1-security-fix
# Merge to main and develop, tag new version- β Require pull request reviews (2 approvals)
- β Dismiss stale reviews when new commits pushed
- β Require status checks to pass
- β Require branches to be up to date
- β Require conversation resolution before merging
- β Restrict pushes that create files larger than 100MB
- β Require signed commits
- β Require pull request reviews (1 approval)
- β Require status checks to pass
- β Require branches to be up to date
- β Allow force pushes by administrators only
- Format:
v{MAJOR}.{MINOR}.{PATCH}(e.g.,v1.2.3) - Location: Only on
mainbranch - Timing: Immediately after release merge
- Annotation: Include release notes summary
- Alpha:
v1.2.0-alpha.1(early development) - Beta:
v1.2.0-beta.1(feature complete, testing) - RC:
v1.2.0-rc.1(release candidate)
- Milestones:
milestone-1.0(major project milestones) - Archive:
archive-old-system(preserve important states)
Following Conventional Commits:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
- feat: New feature
- fix: Bug fix
- docs: Documentation changes
- style: Code style changes (formatting, etc.)
- refactor: Code refactoring
- perf: Performance improvements
- test: Test additions or modifications
- chore: Build process or auxiliary tool changes
- ci: CI/CD changes
- core: Core engine systems
- geometry: Geometry processing
- rendering: Rendering pipeline
- ui: User interface
- tools: Modeling tools
- io: Input/output systems
- docs: Documentation
- build: Build system
feat(geometry): add half-edge mesh subdivision
fix(rendering): resolve OpenGL context issues
docs(api): update Transform class documentation
refactor(core): improve memory pool implementation
- Major Releases: Every 6 months (January, July)
- Minor Releases: Monthly on 1st Tuesday
- Patch Releases: As needed for critical issues
- Pre-releases: 2 weeks before major/minor releases
- All features complete and tested
- Documentation updated
- Changelog generated
- Version numbers bumped
- CI/CD passes all tests
- Security review completed
- Performance benchmarks acceptable
- Release notes prepared
- Weekly: Review and merge ready feature branches
- Monthly: Clean up merged branches
- Quarterly: Review experimental branches
- Annually: Archive old release branches
- Stale Branch Detection: Mark branches inactive for 30+ days
- Auto-Delete: Remove merged feature branches after 7 days
- Dependency Updates: Weekly automated dependency PRs
- Security Scans: Daily security vulnerability checks
- Feature Branch Lifetime: Target < 2 weeks
- Pull Request Size: Target < 500 lines changed
- Review Time: Target < 48 hours
- Build Success Rate: Target > 95%
- Code Coverage: Minimum 80%
- Performance Tests: No regression > 5%
- Security Scans: Zero high-severity issues
- Documentation: All public APIs documented
- Actions: Automated CI/CD pipelines
- Discussions: Feature planning and community input
- Projects: Milestone and sprint planning
- Security: Dependency scanning and alerts
- CodeClimate: Code quality analysis
- Codecov: Test coverage reporting
- Snyk: Security vulnerability scanning
- SonarCloud: Static code analysis
- Setup: Local development environment
- Workflow: Branch creation and PR process
- Standards: Coding and commit conventions
- Testing: Running and writing tests
- Review: Code review process and expectations
- Small Commits: Atomic, focused changes
- Clear Messages: Descriptive commit messages
- Regular Rebasing: Keep feature branches current
- Clean History: Squash commits before merging
- Documentation: Update docs with code changes
- Automated Release Notes: Generate from commit messages
- Semantic Release: Automated version bumping
- Multi-Repository: Coordinate across related projects
- Advanced Merging: Investigate alternative merge strategies
Regular surveys and discussions to refine the branching strategy based on contributor experience and project needs.
This branching strategy will evolve with the project's maturity and team size.