| name | yabgp-release-workflow |
| description | This document defines the development, version management, and release workflow for the yabgp project. All contributors and maintainers must adhere to these guidelines. |
YABGP Development Workflow and Versioning Standards
Core Principles
- Branch Management:
master: Main development branch, always contains the latest development code.
stable/X.Y.x: Stable release branch, used for maintaining released versions (e.g., stable/0.9.x).
- Versioning Standards:
- Follows PEP 440 standards.
- Version number is defined in the
yabgp/__init__.py file.
Detailed Workflow
I. Development Phase
- Current Status: Working on the next feature release (e.g.,
0.9.0).
- Version Number: The version on the
master branch should have a .dev0 suffix (e.g., 0.9.0.dev0).
- Workflow:
- Developer forks the project to their personal repository.
- Create a feature branch based on
master.
- After development is complete, submit a Pull Request (PR) to the
master branch of smartbgp/yabgp.
- Merge after review approval.
II. Testing Phase
- Trigger: Feature development is basically complete, ready for the code freeze and testing period.
- Workflow:
- Tagging: After code merge, create a TAG on the corresponding commit in the
master branch (e.g., v0.9.0a1).
- Iteration: If bugs are found, fix them and repeat the above step, incrementing the suffix (e.g.,
0.9.0a2, 0.9.0a3, etc.).
III. Release Phase
- Trigger: Testing passed, ready to release the official version.
- Workflow:
- Lock Version: Maintainer submits a PR to change
yabgp/__init__.py to the official version number (remove suffix, e.g., 0.9.0).
- Merge and Branch: After the PR is merged into
master:
- Create a new stable branch based on this commit:
stable/0.9.x.
- Create an official TAG on the
stable/0.9.x branch: v0.9.0.
- Start Next Cycle: Submit a new PR on the
master branch to update the version number to the next development version (e.g., 0.10.0.dev0) to distinguish released code from new development code.
IV. Maintenance Phase (Hotfix)
- Scenario: A serious bug is found in a released version (e.g.,
0.9.0).
- Workflow:
- Submit fix code on the
stable/0.9.x branch.
- Update the version number on
stable/0.9.x to 0.9.1.
- Create TAG
v0.9.1 and release.
- Important: Cherry-pick or merge the fix code back to the
master branch (if master also has this bug).
Version Lifecycle Table
| Phase | Branch | __version__ | TAG | Action |
|---|
| Development | master | 0.9.0.dev0 | - | Developer fork → Develop → PR → Merge |
| Testing | master | 0.9.0.dev0 | 0.9.0a1, 0.9.0a2 | Create TAG on stable commit |
| Release | master | 0.9.0 | - | Remove .dev0, Merge PR |
| Release | stable/0.9.x | 0.9.0 | 0.9.0 | Create stable branch, create official TAG |
| Next Version | master | 0.10.0.dev0 | - | Update version to next dev version |
Flowchart
┌─────────────────────────────────────────────────────────────────────────────┐
│ YABGP Release Workflow │
├─────────────────────────────────────────────────────────────────────────────┤
│ │
│ master branch │
│ ═══════════════════════════════════════════════════════════════════════► │
│ │ │ │ │ │ │ │
│ │ 0.9.0 │ feat A │ feat B │ bugfix │ 0.9.0 │ 0.10.0 │
│ │ .dev0 │ │ │ │ (remove │ .dev0 │
│ │ │ │ │ │ dev0) │ │
│ │ │ ▼ ▼ │ │ │
│ │ │ TAG:0.9.0a1 TAG:0.9.0a2│ │ │
│ │ │ │ │ │
│ │ │ ▼ │ │
│ │ │ ┌────────┴────────┐│ │
│ │ │ │ stable/0.9.x ││ │
│ │ │ │ ════════════► ││ │
│ │ │ │ │ ││ │
│ │ │ │ TAG:0.9.0 ││ │
│ │ │ └─────────────────┘│ │
│ │
└─────────────────────────────────────────────────────────────────────────────┘
Version Number Quick Reference
Patch Release
Development: 0.9.1.dev0
Testing: TAG 0.9.1a1, 0.9.1a2
Release: Branch stable/0.9.x, TAG 0.9.1
Minor Release
Development: 0.10.0.dev0
Testing: TAG 0.10.0a1, 0.10.0a2
Release: Branch stable/0.10.x, TAG 0.10.0
Checklist
Before Developer Submits PR
Before Maintainer Creates Test TAG
Before Maintainer Releases Official Version
References