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__.pyfile.
Detailed Workflow
I. Development Phase
- Current Status: Working on the next feature release (e.g.,
0.9.0). - Version Number: The version on the
masterbranch should have a.dev0suffix (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
masterbranch ofsmartbgp/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
masterbranch (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.).
- Tagging: After code merge, create a TAG on the corresponding commit in the
III. Release Phase
- Trigger: Testing passed, ready to release the official version.
- Workflow:
- Lock Version: Maintainer submits a PR to change
yabgp/__init__.pyto 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.xbranch:v0.9.0.
- Create a new stable branch based on this commit:
- Start Next Cycle: Submit a new PR on the
masterbranch to update the version number to the next development version (e.g.,0.10.0.dev0) to distinguish released code from new development code.
- Lock Version: Maintainer submits a PR to change
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.xbranch. - Update the version number on
stable/0.9.xto0.9.1. - Create TAG
v0.9.1and release. - Important: Cherry-pick or merge the fix code back to the
masterbranch (ifmasteralso has this bug).
- Submit fix code on the
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
- Code is based on the latest
masterbranch - Local tests passed
- Version number not modified
Before Maintainer Creates Test TAG
- Code is based on the latest
masterbranch - TAG name follows standards (e.g.,
0.9.0a1)
Before Maintainer Releases Official Version
- Version number updated from
.dev0to official version -
stable/X.Y.xbranch created - Official TAG created on
stable/X.Y.xbranch -
masterbranch version updated to next development version
References
- PEP 440 - Version Identification and Dependency Specification
- Python Packaging User Guide - Version Specifiers
- Semantic Versioning 2.0.0
Source: smartbgp/yabgp — distributed by TomeVault.