Release Management & Versioning Strategy #945
Replies: 3 comments 4 replies
TL;DR
Updated Strategy: Patterns from Major OSS ProjectsAfter reviewing how Kubernetes, Node.js, Python, and Go manage releases, here is a refined strategy grounded in proven OSS practice. The Universal Rule Across All Major Projects
Recommendation for CAIPE: Branch ModelgitGraph
commit id: "feat: LiteLLM"
commit id: "feat: dynamic agents"
commit id: "feat: webex-bot"
branch release/0.3.x
checkout release/0.3.x
commit id: "tag: 0.3.0-rc.1" tag: "v0.3.0-rc.1"
commit id: "cherry-pick: fix slack warnings"
commit id: "tag: 0.3.0-rc.2" tag: "v0.3.0-rc.2"
commit id: "tag: 0.3.0" tag: "v0.3.0"
checkout main
commit id: "feat: 0.4.0 work starts"
checkout release/0.3.x
commit id: "cherry-pick: fix ui crash"
commit id: "tag: 0.3.1" tag: "v0.3.1"
checkout main
merge release/0.3.x id: "backport fixes to main"
Key rules (same as Kubernetes and Node.js):
Feature Freeze & Release Timelinegantt
title CAIPE Release Timeline (Kubernetes-style)
dateFormat YYYY-MM-DD
section main (0.3.x work)
Feature development :a1, 2026-02-01, 42d
Feature freeze (no new feat PRs to milestone) :milestone, 2026-03-14, 0d
section release/0.3.x
Cut branch + tag rc.1 :b1, 2026-03-14, 7d
Cherry-picks + tag rc.2 :b2, 2026-03-21, 7d
Final testing + tag 0.3.0 :b3, 2026-03-28, 7d
section Patches
0.3.1 0.3.2 as needed :c1, 2026-04-04, 30d
Cherry-Pick RC Strategy with GitHub ActionsThis is the mechanism Kubernetes uses with The iron rule (same across all major OSS):
Label-Driven Automation Flowflowchart TD
A[PR merged to main] --> B{cherry-pick label present?}
B -- "cherry-pick/release-0.3.x" --> C[GHA cherry-pick workflow triggers]
B -- No label --> D[Stays on main only]
C --> E{Cherry-pick applies cleanly?}
E -- Yes --> F[Bot opens PR to release/0.3.x]
E -- Conflict --> G[Bot comments conflict warning\non original PR]
F --> H[Reviewer merges to release/0.3.x]
G --> I[Author resolves manually]
H --> J{In RC window?}
J -- Yes --> K[Included in next RC tag]
J -- No, post-release --> L[Included in next patch 0.3.1]
GitHub Actions — Cherry-Pick Workflow# .github/workflows/cherry-pick.yml
name: Cherry-pick to release branch
on:
pull_request:
types: [closed]
branches: [main]
jobs:
cherry-pick:
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Find cherry-pick target branches from labels
id: labels
run: |
echo '${{ toJson(github.event.pull_request.labels) }}' \
| jq -r '.[].name | select(startswith("cherry-pick/")) | ltrimstr("cherry-pick/")' \
> /tmp/target-branches.txt
cat /tmp/target-branches.txt
- name: Cherry-pick to each target branch
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
SHA="${{ github.event.pull_request.merge_commit_sha }}"
PR="${{ github.event.pull_request.number }}"
TITLE="${{ github.event.pull_request.title }}"
while IFS= read -r branch; do
[ -z "$branch" ] && continue
NEW_BRANCH="cherry-pick/${PR}-to-${branch//\//-}"
git fetch origin "$branch"
git checkout -b "$NEW_BRANCH" "origin/$branch"
if git cherry-pick "$SHA"; then
git push origin "$NEW_BRANCH"
gh pr create \
--base "$branch" \
--head "$NEW_BRANCH" \
--title "cherry-pick: $TITLE" \
--body "Automated cherry-pick of #${PR} onto \`${branch}\`."
else
git cherry-pick --abort
gh pr comment "$PR" \
--body ":warning: Cherry-pick to \`${branch}\` has conflicts. Manual backport required."
fi
done < /tmp/target-branches.txt
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}GitHub Actions — RC Tagging Workflow# .github/workflows/tag-rc.yml
name: Tag Release Candidate
on:
workflow_dispatch:
inputs:
version:
description: "RC version e.g. 0.3.0-rc.2"
required: true
branch:
description: "Release branch e.g. release/0.3.x"
required: true
jobs:
tag-rc:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ inputs.branch }}
- name: Tag and push RC
run: |
git tag ${{ inputs.version }}
git push origin ${{ inputs.version }}
- name: Create GitHub pre-release with auto-generated notes
run: |
gh release create ${{ inputs.version }} \
--prerelease \
--title "Release Candidate ${{ inputs.version }}" \
--generate-notes \
--target ${{ inputs.branch }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}What Qualifies for Cherry-Pick (OSS Consensus)
Should Large Features Target Release Branches?No. This is universal across all major OSS projects. Large features target For CAIPE specifically, given the active flowchart LR
F1[prebuild/feat/webex-bot] --> N[next/0.3.0]
F2[prebuild/feat/slack-authz] --> N
F3[prebuild/fix/metadata-leak] --> N
N -->|CI green, milestone 80%| M[main]
M -->|cut| R[release/0.3.x]
R -->|tag| T1[v0.3.0-rc.1]
T1 -->|cherry-picks + testing| T2[v0.3.0]
Proposed LabelsAdd these to the repo to enable the automation above:
References: Kubernetes release process, Node.js release process, Python release schedule, Go release policy |
CI/CD Versioning Matrix & Release DecisionsVersioning MatrixThe following table defines how chart versions, appVersions, and image versions are managed across different release scenarios:
Decisions
|


Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Release Management & Versioning Strategy
Overview
This discussion establishes a comprehensive release management framework for the CAIPE (Community AI Platform Engineering) project, ensuring consistent, predictable, and well-documented releases.
1. Semantic Versioning (SemVer) Framework
Format
Example versions:
0.2.35- Production release0.3.0- Major feature release0.2.35-rc.1- Release candidateVersion Components
2. Release Types & Contents
MAJOR Releases
Frequency: As needed (typically 6-12 months)
What goes in:
MINOR Releases (Monthly Proposed)
Frequency: Monthly
What goes in:
Recent Examples:
PATCH Releases
Frequency: As needed (weekly or bi-weekly)
What goes in:
Recent Examples:
3. Current Release Cadence & Milestones
Active Milestones
Recent Releases
4. Proposed Release Schedule
Monthly Release Cadence
5. Release Process Workflow
Phase 1: Planning
Phase 2: Development
Phase 3: Testing & QA
Phase 4: Release
Phase 5: Post-Release
6. Issue Categorization Guidelines
Labels for Release Planning
Milestone Assignment Rules
7. Milestone Tracking Strategy
Milestone Health Metrics
Milestone Closure Criteria
8. Release Checklist
Pre-Release (1 week before)
Release Day
Post-Release (24 hours)
9. Discussion Prompts for Team Agreement
Questions for Team Discussion
Release Cadence
Version Numbering
Breaking Changes
Release Candidates
Automation
Communication
Hotfixes
Milestone Planning
10. Next Steps
Created: 2026-03-10
Status: 🟡 Open for Discussion
Created by: @sriaradhyula
All reactions