Skip to content

Latest commit

Β 

History

History
236 lines (184 loc) Β· 11.7 KB

File metadata and controls

236 lines (184 loc) Β· 11.7 KB

Release & Branching Policy - Quarterly Releases

Bi-monthly Release Calendar for 2025

Month Freeze Week Merge Friday Snapshot Quarter Tag
Jan 2024-12-27 2025-01-03 2025-01-10 Q1 25.1.1
2025-01-10 2025-01-17 2025-01-24 Q3 25.1.3
Feb 2025-01-31 2025-02-07 2025-02-14 Q1 25.2.1
2025-02-14 2025-02-21 2025-02-28 Q3 25.2.3
Mar 2025-02-28 2025-03-07 2025-03-14 Q1 25.3.1
2025-03-14 2025-03-21 2025-03-28 Q3 25.3.3
Apr 2025-03-28 2025-04-04 2025-04-11 Q1 25.4.1
2025-04-11 2025-04-18 2025-04-25 Q3 25.4.3
May 2025-04-25 2025-05-02 2025-05-09 Q1 25.5.1
2025-05-09 2025-05-16 2025-05-23 Q3 25.5.3
Jun 2025-05-30 2025-06-06 2025-06-13 Q1 25.6.1
2025-06-13 2025-06-20 2025-06-27 Q3 25.6.3
Jul 2025-06-27 2025-07-04 2025-07-11 Q1 25.7.1
2025-07-11 2025-07-18 2025-07-25 Q3 25.7.3
Aug 2025-07-25 2025-08-01 2025-08-08 Q1 25.8.1
2025-08-08 2025-08-15 2025-08-22 Q3 25.8.3
Sep 2025-08-29 2025-09-05 2025-09-12 Q1 25.9.1
2025-09-12 2025-09-19 2025-09-26 Q3 25.9.3
Oct 2025-09-26 2025-10-03 2025-10-10 Q1 25.10.1
2025-10-10 2025-10-17 2025-10-24 Q3 25.10.3
Nov 2025-10-31 2025-11-07 2025-11-14 Q1 25.11.1
2025-11-14 2025-11-21 2025-11-28 Q3 25.11.3
Dec 2025-11-28 2025-12-05 2025-12-12 Q1 25.12.1
2025-12-12 2025-12-19 2025-12-26 Q3 25.12.3

Three Key Points

  1. Development - All development and PRs targetdev
  2. Release Candidate - On Freeze Week, mergedev β†’rc (release-candidate). Only bug fixes and stabilization allowed inrc. dev remains open for new features.
  3. Release - Mergerc β†’master twice per month (1st Quarter & 3rd Quarter of the Month)
  4. Snapshot - Create snapshot releases from stablemaster branch

Note: The dev branch is always open for new features and development every week, regardless of the release cycle. Only the rc (release-candidate) branch is frozen for testing and bug fixes during release preparation.


Bi-monthly Release Schedule Flow

  • Week before 1st/3rd Friday (Freeze Week):
    • πŸ”„ Merge latest dev β†’ rc (release-candidate)
    • 🚫 rc branch is frozen: Only bug fixes and stabilization allowed
    • βœ… dev branch remains open: New features and PRs accepted
  • 1st/3rd Friday:
    • πŸ”„ Merge rc β†’ master
    • πŸ“¦ Snapshot release (when master is stable)
    • πŸ”„ Preparation for next cycle/month
    • βœ… dev branch remains open: New features and PRs accepted

1st & 3rd Quarter of the month Cycle

Week before 1st/3rd Friday (Freeze Week):

  • πŸ”„ Merge dev β†’ rc
  • 🚫 rc freeze - Only bug fixes and stabilization in rc
  • βœ… dev open - New features and PRs accepted

1st/3rd Friday:

  • πŸ”„ Merge rc β†’ master
  • πŸ“¦ Snapshot release (when master is stable)
  • πŸ”„ Preparation for next cycle/month

Summary

Quarter Freeze Week Merge Friday Snapshot Friday Dev Status RC Status
1st Quarter Week before 1st Fri 1st Friday 2nd Friday βœ… OPEN 🚫 FROZEN
3rd Quarter Week before 3rd Fri 3rd Friday 4th Friday βœ… OPEN 🚫 FROZEN

Key Rules:

  • 🚫Freeze weeks: Merge dev β†’ rc. Only bug fixes to rc. dev remains open for new features.
  • βœ…Open weeks: All development welcomed in dev
  • πŸ“¦Snapshots: Only whenmaster is stable
  • πŸ”„4th Friday: Preparation for next cycle/month

Weekly Summary

Phase Dev Branch Status RC Branch Status Allowed Changes Description
Freeze Week (before 1st & 3rd Friday) βœ…OPEN 🚫FROZEN ❌ No new features in rc
βœ… Bug fixes in rc
βœ… All dev in dev
Testing and validation
Merge Friday (1st & 3rd of month) βœ…OPEN πŸ”„MERGING πŸ”„ Merge rc to master Deploy stable code
Stabilization Week (after merge) βœ…OPEN βœ…OPEN βœ… All development in dev
πŸ”§ Critical hotfixes in rc
Monitor master & develop
Snapshot Release βœ…OPEN πŸ“¦RELEASE πŸ“¦ Create release When master is stable

Monthly Timeline

Period Dev Status RC Status Master Status Activity Focus
Week before 1st Friday βœ…OPEN 🚫FROZEN πŸ”§ Previous fixes Testing & validation πŸ§ͺ Prepare for merge
1st Friday βœ…OPEN πŸ”„MERGING πŸ“₯ Receives new code Merge rc β†’ master πŸ”„ Deploy
Week after 1st Friday βœ…OPEN βœ…OPEN πŸ”§ Hotfixes only Active development πŸš€ New features to dev
2nd Friday βœ…OPEN βœ…OPEN πŸ“¦SNAPSHOT Release when stable πŸ“¦ Release
Week before 2nd-to-last Friday βœ…OPEN 🚫FROZEN πŸ”§ Minor fixes only Testing & validation πŸ§ͺ Prepare for merge
2nd-to-last Friday βœ…OPEN πŸ”„MERGING πŸ“₯ Receives new code Merge rc β†’ master πŸ”„ Deploy
Week after 2nd-to-last Friday βœ…OPEN βœ…OPEN πŸ”§ Hotfixes only Active development πŸš€ New features to dev
Last Friday βœ…OPEN βœ…OPEN πŸ“¦SNAPSHOT Release when stable πŸ“¦ Release

Freeze periods: ~2 weeks per month (handles variable month lengths)


Versioning YY.M.Q

We use year.month.quarter format (YY.M.Q) instead of traditional semantic versioning for several reasons:

  • Release-cycle aligned: Matches our bi-monthly release schedule perfectly
  • Time-based clarity: Instantly shows when a release was made
  • Predictable progression: Always .1 then .3 each month
  • No arbitrary numbers: No confusion about what constitutes "major" vs "minor"
  • User-friendly: Easy to understand - 25.7.1 = "July 2025, 1st Quarter of the Month"

Pull Requests

  • All pull requests should be made againstdev branch
  • Pull requests should be reviewed and approved by at least one other developer before merging
  • Pull requests can be created anytime, but should be merged todev branch before releasing onmaster branch
  • Pull requests should not be merged directly intomaster branch
  • Pull requests should be merged within the release window formaster branch

FLOWCHART

Here are some visuals to help you understand the flowchart better.

Development Flow

graph TD
    A[Normal Development<br/>βœ… All PRs to dev] --> B{Week Before<br/>1st/3rd Friday?}
    B -->|Yes| C[πŸ”„ DEV β†’ RC<br/>rc frozen<br/>πŸ§ͺ Testing Phase]
    B -->|No| A
    
    C --> D[πŸ”„ MERGE DAY<br/>1st/3rd Friday<br/>rc β†’ master]
    D --> E[βœ… DEV & RC REOPEN<br/>New features to dev]
    E --> F[πŸ“¦ SNAPSHOT RELEASE<br/>2nd/4th Friday<br/>When master stable]
    F --> G[πŸ”„ Prep Next Cycle]
    G --> A
    
    style A fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
    style C fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737
    style D fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737
    style E fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
    style F fill:#c79bf0,stroke:#252737,stroke-width:2px,color:#252737
    style G fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737
Loading

Branch Flow

graph LR
    subgraph "Dev Branch"
        DEV[dev branch] --> RC[πŸ”„ MERGE<br/>to rc]
        RC --> FROZEN[🚫 rc FROZEN<br/>fixes only]
        FROZEN --> MERGE[πŸ”„ MERGING<br/>rc to master]
        MERGE --> OPEN[βœ… OPEN<br/>all dev]
        OPEN --> RC
    end
    
    subgraph "RC Branch"
        RC2[rc branch] --> FROZEN2[🚫 FROZEN<br/>fixes only]
        FROZEN2 --> MERGE2[πŸ”„ MERGING<br/>to master]
        MERGE2 --> OPEN2[βœ… OPEN<br/>accepts new dev]
        OPEN2 --> RC2
    end
    
    subgraph "Master Branch"
        MASTER[master branch] --> PREV[πŸ”§ Previous fixes]
        PREV --> RECEIVE[πŸ“₯ RECEIVES<br/>new code]
        RECEIVE --> RELEASE[πŸ“¦ RELEASE<br/>when stable]
        RELEASE --> PREV
    end
    
    MERGE -.-> RECEIVE
    MERGE2 -.-> RECEIVE
    
    style DEV fill:#252737,stroke:#a9b1d6,stroke-width:2px,color:#a9b1d6
    style RC fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737
    style FROZEN fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737
    style MERGE fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737
    style OPEN fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
    style RC2 fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737
    style FROZEN2 fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737
    style MERGE2 fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737
    style OPEN2 fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
    style MASTER fill:#252737,stroke:#a9b1d6,stroke-width:2px,color:#a9b1d6
    style PREV fill:#c79bf0,stroke:#252737,stroke-width:2px,color:#252737
    style RECEIVE fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737
    style RELEASE fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
Loading

Bi-monthly Release Schedule

gantt
    title Monthly Release Schedule
    dateFormat  X
    axisFormat %a %d

    section Week 1
    βœ… Dev Open                :devopen1, 1, 7d
    πŸ”„ Dev β†’ RC                :devrc1, 2, 1d
    🚫 RC Freeze & Testing     :rctest1, 3, 5d

    section Week 2
    βœ… Dev Open                :devopen2, 8, 7d
    πŸ”„ RC β†’ Master (Friday)    :rcmaster1, 9, 1d
    πŸ§ͺ Master Testing          :mastertest1, 10, 3d
    πŸ“¦ Snapshot (Friday)       :release1, 14, 1d

    section Week 3
    βœ… Dev Open                :devopen3, 15, 7d
    πŸ”„ Dev β†’ RC                :devrc2, 16, 1d
    🚫 RC Freeze & Testing     :rctest2, 17, 5d

    section Week 4
    βœ… Dev Open                :devopen4, 22, 7d
    πŸ”„ RC β†’ Master (Friday)    :rcmaster2, 23, 1d
    πŸ§ͺ Master Testing          :mastertest2, 24, 3d
    πŸ“¦ Snapshot (Friday)       :release2, 1, 1d
Loading