|
1 | | -## Release & Branching Policy (Flexible Freeze & Release Window) |
| 1 | +## Release & Branching Policy - Quarterly Releases |
2 | 2 |
|
3 | | -### Branches |
| 3 | +#### Three Key Points |
4 | 4 |
|
5 | | -- **`dev` branch** |
6 | | - Active development branch where all new features and fixes are merged and tested continuously. |
| 5 | +1. **Development** - All development and PRs target`dev` |
| 6 | +2. **Release** - Merge`dev` β`master` twice per month (1st Quarter & 3rd Quarter) |
| 7 | +3. **Snapshot** - Create official releases from stable`master` branch--- |
7 | 8 |
|
8 | | -- **`master` branch** |
9 | | - Stable production branch updated only with thoroughly tested code from `dev`. |
| 9 | +--- |
| 10 | + |
| 11 | +## Quarterly Release Schedule Flow |
| 12 | + |
| 13 | +- **1st Quarter (1st Friday):** Merge`dev` β`master` β Snapshot release (2nd Friday) |
| 14 | +- **3rd Quarter (3rd Friday):** Merge`dev` β`master` β Snapshot release (4th Friday) |
| 15 | + |
| 16 | + |
| 17 | +#### 1st Quarter Cycle |
| 18 | + |
| 19 | +**Week before 1st Friday:** |
| 20 | + |
| 21 | +- π«**Dev freeze** - No new PRs merged to`dev` (fixes only) |
| 22 | +- π§ͺ**Testing phase** - Focus on validation and bug fixes |
| 23 | + |
| 24 | +**1st Friday:** |
| 25 | + |
| 26 | +- π**Merge `dev` β `master`** |
| 27 | +- β
**Dev reopens** - New features and PRs accepted |
| 28 | + |
| 29 | +**2nd Friday:** |
| 30 | + |
| 31 | +- π¦**Snapshot release** (when`master` is stable) |
| 32 | + |
| 33 | +#### 3rd Quarter Cycle |
| 34 | + |
| 35 | +**Week before 3rd Friday:** |
10 | 36 |
|
11 | | -- **`release` branch** |
12 | | - Freezed production `master` branch for release. This branch is not updated with new features or fixes. This just serves as a snapshot of the production code. |
| 37 | +- π«**Dev freeze** - No new PRs merged to`dev` (fixes only) |
| 38 | +- π§ͺ**Testing phase** - Focus on validation and bug fixes |
13 | 39 |
|
14 | | -### Weekly Release Cycle (Flexible Timing) |
| 40 | +**3rd Friday:** |
15 | 41 |
|
16 | | -- **Dev Branch Freeze Window:** |
17 | | - The `dev` branch freeze typically occurs **during the latter part of the week (Wednesday/Thursday)**, allowing no new feature merges after that point. Only critical bug fixes and final testing are allowed during this freeze period. |
| 42 | +- π**Merge `dev` β `master`** |
| 43 | +- β
**Dev reopens** - New features and PRs accepted |
18 | 44 |
|
19 | | -- **Merge & Release Window:** |
20 | | - The merge from `dev` to `master` and deployment to production happens **on Friday**. |
| 45 | +**4th Friday:** |
21 | 46 |
|
22 | | -- **Freeze & Release Window:** |
23 | | - The freeze and release window is we can freeze and tag the `master` branch. Cycles should be first and third week per month. |
| 47 | +- π¦**Snapshot release** (when`master` is stable) |
| 48 | +- π**Preparation for next cycle/month** |
24 | 49 |
|
25 | | -### Development and Testing |
| 50 | +#### Summary |
26 | 51 |
|
27 | | -- **Monday to Wednesday (before freeze):** |
28 | | - Developers merge features and fixes into `dev`. Testers validate continuously. |
| 52 | +| Quarter | Freeze Week | Merge Friday | Snapshot Friday | Dev Status | |
| 53 | +| --------------------- | ------------------- | ------------ | --------------- | ---------- | |
| 54 | +| **1st Quarter** | Week before 1st Fri | 1st Friday | 2nd Friday | π«ββ
| |
| 55 | +| **3rd Quarter** | Week before 3rd Fri | 3rd Friday | 4th Friday | π«ββ
| |
29 | 56 |
|
30 | | -- **Thursday (freeze window):** |
31 | | - Development freezes on `dev` at some point during the day. Testers focus on final validation and regression testing. |
32 | 57 |
|
33 | | -- **Friday (release window):** |
34 | | - Once `dev` is stable and approved, it is merged into `master` and deployed. This happens sometime during Friday, with flexibility to ensure quality. |
| 58 | +**Key Rules:** |
35 | 59 |
|
36 | | -- **Friday to Sunday:** |
37 | | - Production monitoring and hotfix as needed. |
| 60 | +- π«**Freeze weeks:** No new features to`dev` (fixes only) |
| 61 | +- β
**Open weeks:** All development welcomed |
| 62 | +- π¦**Snapshots:** Only when`master` is stable |
| 63 | +- π**4th Friday:** Preparation for next cycle/month |
38 | 64 |
|
39 | | -### Pull Requests |
| 65 | +--- |
| 66 | + |
| 67 | +## Weekly Summary |
40 | 68 |
|
41 | | -- All pull requests should be made against `dev` branch. |
42 | | -- Pull requests should be reviewed and approved by at least one other developer before merging. |
43 | | -- Pull requests should be merged and deployed within the release window for `master` branch. |
44 | | -- Pull requests should not be merged directly into `master` branch. |
45 | | -- Pull request can be created anytime, but should be reviewed and and should be merged to `dev` branch before releasing on `master` branch. |
| 69 | +| Phase | Dev Branch Status | Allowed Changes | Description | |
| 70 | +| ----------------------------------------------- | ------------------- | ------------------------------------------------------------------- | ------------------------- | |
| 71 | +| **Freeze Week** (before 1st & 3rd Friday) | π«**FROZEN** | β No new features `<br>`β
Bug fixes `<br>`β
Non-breaking QoL | Testing and validation | |
| 72 | +| **Merge Friday** (1st & 3rd of month) | π**MERGING** | π Merge to master | Deploy stable code | |
| 73 | +| **Stabilization Week** (after merge) | β
**OPEN** | β
All development `<br>`π§ Critical hotfixes | Monitor master & develop | |
| 74 | +| **Snapshot Release** | π¦**RELEASE** | π¦ Create release | When `master` is stable | |
| 75 | + |
| 76 | +--- |
46 | 77 |
|
47 | | -### Summary Timeline (Flexible) |
| 78 | +## Monthly Timeline |
48 | 79 |
|
49 | | -| Day | Activity | |
50 | | -| -------------------------------- | ------------------------------------------------------ | |
51 | | -| MondayβWednesday (before freeze) | Active development and testing on `dev` branch | |
52 | | -| Thursday (freeze window) | Freeze `dev` branch at flexible time; finalize testing | |
53 | | -| Friday (release window) | Merge `dev` into `master` and deploy at flexible time | |
54 | | -| FridayβSunday | Monitor production and prepare hotfixes if needed | |
| 80 | +| Period | Dev Status | Master Status | Activity | Focus | |
| 81 | +| ---------------------------------------- | ------------------------- | ---------------------- | --------------------------- | ---------------------- | |
| 82 | +| **Week before 1st Friday** | π«**FROZEN** | π§ Previous fixes | Testing & validation | π§ͺ Prepare for merge | |
| 83 | +| **1st Friday** | π**MERGING** | π₯ Receives new code | Merge `dev` β `master` | π Deploy | |
| 84 | +| **Week after 1st Friday** | β
**OPEN** | π§ Hotfixes only | Active development | οΏ½ New features to dev | |
| 85 | +| **2nd Friday** | οΏ½**FREEZE begins** | οΏ½π¦**SNAPSHOT** | Release when stable | π¦ Release | |
| 86 | +| **Week before 2nd-to-last Friday** | π«**FROZEN** | π§ Minor fixes only | Testing & validation | π§ͺ Prepare for merge | |
| 87 | +| **2nd-to-last Friday** | π**MERGING** | π₯ Receives new code | Merge `dev` β `master` | π Deploy | |
| 88 | +| **Week after 2nd-to-last Friday** | β
**OPEN** | π§ Hotfixes only | Active development | οΏ½ New features to dev | |
| 89 | +| **Last Friday** | οΏ½**FREEZE begins** | π¦**SNAPSHOT** | Release when stable | π¦ Release | |
| 90 | + |
| 91 | +**Freeze periods: ~2 weeks per month (handles variable month lengths)** |
55 | 92 |
|
56 | 93 | --- |
57 | 94 |
|
58 | | -### Notes |
| 95 | +## Versioning |
| 96 | + |
| 97 | +We use **year.month.quarter** format (`vYY.M.Q`) instead of traditional semantic versioning for several reasons: |
| 98 | + |
| 99 | +- **Release-cycle aligned:** Matches our quarterly release schedule perfectly |
| 100 | +- **Time-based clarity:** Instantly shows when a release was made |
| 101 | +- **Predictable progression:** Always`.1` then`.3` each month |
| 102 | +- **No arbitrary numbers:** No confusion about what constitutes "major" vs "minor" |
| 103 | +- **User-friendly:** Easy to understand -`v25.7.1` = "July 2025, 1st Quarter" |
| 104 | + |
| 105 | +--- |
| 106 | + |
| 107 | +## Pull Requests |
| 108 | + |
| 109 | +- All pull requests should be made against`dev` branch |
| 110 | +- Pull requests should be reviewed and approved by at least one other developer before merging |
| 111 | +- Pull requests can be created anytime, but should be merged to`dev` branch before releasing on`master` branch |
| 112 | +- Pull requests should not be merged directly into`master` branch |
| 113 | +- Pull requests should be merged within the release window for`master` branch |
| 114 | + |
| 115 | +--- |
59 | 116 |
|
60 | | -- The freeze and release times are **flexible within late Wednesday and Friday** to accommodate testing needs and ensure release quality. |
61 | | -- Aim to freeze `dev` as early as possible on Wednesday and release early on Friday, but timing may adjust based on readiness. |
62 | | -- Clear communication will be provided each week about the expected freeze and release times. Expect that it may be in the commit messages or in a dedicated discord channel. |
63 | | -- This is yet experimental and may be adjusted or modified based on feedback and testing results. |
64 | | -- We don't have exact time frames as it depends on the collaborators availability. |
| 117 | +# FLOWCHART |
| 118 | + |
| 119 | +Here are some visuals to help you understand the flowchart better. |
| 120 | + |
| 121 | +## Development Flow |
| 122 | + |
| 123 | +```mermaid |
| 124 | +graph TD |
| 125 | + A[Normal Development<br/>β
All PRs to dev] --> B{Week Before<br/>1st/3rd Friday?} |
| 126 | + B -->|Yes| C[π« DEV FREEZE<br/>Bug fixes only<br/>π§ͺ Testing Phase] |
| 127 | + B -->|No| A |
| 128 | + |
| 129 | + C --> D[π MERGE DAY<br/>1st/3rd Friday<br/>dev β master] |
| 130 | + D --> E[β
DEV REOPENS<br/>New features accepted] |
| 131 | + E --> F[π¦ SNAPSHOT RELEASE<br/>2nd/4th Friday<br/>When master stable] |
| 132 | + F --> G[π Prep Next Cycle] |
| 133 | + G --> A |
| 134 | + |
| 135 | + style A fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737 |
| 136 | + style C fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737 |
| 137 | + style D fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737 |
| 138 | + style E fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737 |
| 139 | + style F fill:#c79bf0,stroke:#252737,stroke-width:2px,color:#252737 |
| 140 | + style G fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737 |
| 141 | +``` |
| 142 | + |
| 143 | + |
| 144 | +## Branch Flow |
| 145 | + |
| 146 | + |
| 147 | +```mermaid |
| 148 | +graph LR |
| 149 | + subgraph "Dev Branch" |
| 150 | + DEV[dev branch] --> FREEZE[π« FROZEN<br/>fixes only] |
| 151 | + FREEZE --> MERGE[π MERGING<br/>to master] |
| 152 | + MERGE --> OPEN[β
OPEN<br/>all dev] |
| 153 | + OPEN --> FREEZE |
| 154 | + end |
| 155 | + |
| 156 | + subgraph "Master Branch" |
| 157 | + MASTER[master branch] --> PREV[π§ Previous fixes] |
| 158 | + PREV --> RECEIVE[π₯ RECEIVES<br/>new code] |
| 159 | + RECEIVE --> RELEASE[π¦ RELEASE<br/>when stable] |
| 160 | + RELEASE --> PREV |
| 161 | + end |
| 162 | + |
| 163 | + MERGE -.-> RECEIVE |
| 164 | + |
| 165 | + style DEV fill:#252737,stroke:#a9b1d6,stroke-width:2px,color:#a9b1d6 |
| 166 | + style FREEZE fill:#ebbcba,stroke:#252737,stroke-width:2px,color:#252737 |
| 167 | + style MERGE fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737 |
| 168 | + style OPEN fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737 |
| 169 | + style MASTER fill:#252737,stroke:#a9b1d6,stroke-width:2px,color:#a9b1d6 |
| 170 | + style PREV fill:#c79bf0,stroke:#252737,stroke-width:2px,color:#252737 |
| 171 | + style RECEIVE fill:#a9b1dc,stroke:#252737,stroke-width:2px,color:#252737 |
| 172 | + style RELEASE fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737 |
| 173 | +``` |
| 174 | + |
| 175 | +## Quarterly Release Schedule |
| 176 | + |
| 177 | +```mermaid |
| 178 | +gantt |
| 179 | + title Quarterly Release Schedule |
| 180 | + dateFormat X |
| 181 | + axisFormat %d |
| 182 | + |
| 183 | + section Week 1 |
| 184 | + π« Dev Freeze :freeze1, 1, 7d |
| 185 | + π§ͺ Testing :test1, 1, 7d |
| 186 | + |
| 187 | + section Week 2 |
| 188 | + π Merge Friday :merge1, 8, 1d |
| 189 | + π¦ Snapshot :release1, 12, 1d |
| 190 | + β
Dev Open :open1, 8, 7d |
| 191 | + |
| 192 | + section Week 3 |
| 193 | + π« Dev Freeze :freeze2, 15, 7d |
| 194 | + π§ͺ Testing :test2, 15, 7d |
| 195 | + |
| 196 | + section Week 4 |
| 197 | + π Merge Friday :merge2, 22, 1d |
| 198 | + π¦ Snapshot :release2, 26, 1d |
| 199 | + β
Dev Open :open2, 22, 7d |
| 200 | +``` |
0 commit comments