Skip to content

Latest commit

Β 

History

History
199 lines (161 loc) Β· 10.5 KB

File metadata and controls

199 lines (161 loc) Β· 10.5 KB

Release & Branching Policy - Fortnightly Releases

Jump To Calendar

Key Points

  1. πŸ› οΈDevelopment - All development and PRs target dev.
  2. 🚫Freeze Week - On Freeze Week the dev branch is merged into the rc (release-candidate) branch which is then frozen allowing only bug fixes and stabilisation.
  3. βœ…Release Week - On Release Week the rc branch is merged into master.
  4. πŸ“¦Shapshots - Snapshots are only created when master is stable.
  5. πŸ”„Schedule - Freeze Weeks And Release Weeks alternate every Friday beginning with Release Week. This means that every odd Friday is a Release Week and every even Friday is a Freeze Week.

Note

The dev branch is always open for new features and development every week, regardless of the release cycle. Only the rc branch is frozen for testing and bug fixes for release preparation during Freeze Week.


Weekly Breakdown

Phase Dev Branch Status RC Branch Status Allowed Changes Description
Freeze Week (during odd weeks) βœ…OPEN 🚫FROZEN ❌ No new features in rc
βœ… Bug fixes in rc
βœ… All dev in dev
Testing and validation
Merge Friday (on odd Fridays) βœ…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

In-Depth Monthly Timeline

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

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


Versioning YY.M.W

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

  • Release-cycle aligned: Matches our fortnightly 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 = "1st Week of July 2025" remote: Counting objects: 100% (1/1), done. remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) Unpacking objects: 100% (1/1), 869 bytes | 869.00 KiB/s, done. From https://github.com/HyDE-Project/HyDE

Pull Requests

  • Must be made againstdev branch
  • Should be reviewed and approved by at least one other developer before merging
  • Can be created anytime, but should be merged todev branch before releasing onmaster branch
  • Should not be merged directly intomaster branch
  • 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{Even Friday?}
    B -->|Yes| C[πŸ”„ DEV β†’ RC<br/>rc frozen<br/>πŸ§ͺ Testing Phase]
    B -->|No| A
    
    C --> D[πŸ”„ MERGE DAY<br/>Odd Friday<br/>rc β†’ master]
    D --> E[βœ… DEV & RC REOPEN<br/>New features to dev]
    E --> F[πŸ“¦ SNAPSHOT RELEASE<br/>Even Friday<br/>Whenever 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/>whenever 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

Fortnightly 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

Fortnightly Release Calendar for 2025

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