Skip to content

Commit 6f64d0e

Browse files
Update RELEASE_POLICY.md
tl;dr The RELEASE_POLICY document is extremely laborious and excessively repetitive, this fixes that. Initially I set out to use less ambiguous language like fortnightly to replace language like bimonthly, which means once every two months to sane people and only ever means fortnightly to united-statesians in specific scenarios. However upon reading it I found that it went over the same few points several times, and found this rather redundantly verbose, and frankly bothersome. I condensed and slightly reorganised it to address my concerns. If you feel that I'm missing important information, have made an error, or have any concerns of your, please feel free to let me know and I'll do my best to remedy those if applicable.
1 parent d88f73a commit 6f64d0e

File tree

1 file changed

+71
-112
lines changed

1 file changed

+71
-112
lines changed

RELEASE_POLICY.md

Lines changed: 71 additions & 112 deletions
Original file line numberDiff line numberDiff line change
@@ -1,136 +1,67 @@
1-
## Release & Branching Policy - Quarterly Releases
1+
## Release & Branching Policy - Fortnightly Releases
22

3-
# Bi-monthly Release Calendar for 2025
3+
[Jump To Calendar](#fortnightly-release-calendar-for-2025)
44

5-
| Month | Freeze Week | Merge Friday | Snapshot | Quarter | Tag |
6-
|-----------|--------------|--------------|--------------|-------|---------|
7-
| Jan | 2024-12-27 | 2025-01-03 | 2025-01-10 | Q1 | 25.1.1 |
8-
| | 2025-01-10 | 2025-01-17 | 2025-01-24 | Q3 | 25.1.3 |
9-
| Feb | 2025-01-31 | 2025-02-07 | 2025-02-14 | Q1 | 25.2.1 |
10-
| | 2025-02-14 | 2025-02-21 | 2025-02-28 | Q3 | 25.2.3 |
11-
| Mar | 2025-02-28 | 2025-03-07 | 2025-03-14 | Q1 | 25.3.1 |
12-
| | 2025-03-14 | 2025-03-21 | 2025-03-28 | Q3 | 25.3.3 |
13-
| Apr | 2025-03-28 | 2025-04-04 | 2025-04-11 | Q1 | 25.4.1 |
14-
| | 2025-04-11 | 2025-04-18 | 2025-04-25 | Q3 | 25.4.3 |
15-
| May | 2025-04-25 | 2025-05-02 | 2025-05-09 | Q1 | 25.5.1 |
16-
| | 2025-05-09 | 2025-05-16 | 2025-05-23 | Q3 | 25.5.3 |
17-
| Jun | 2025-05-30 | 2025-06-06 | 2025-06-13 | Q1 | 25.6.1 |
18-
| | 2025-06-13 | 2025-06-20 | 2025-06-27 | Q3 | 25.6.3 |
19-
| Jul | 2025-06-27 | 2025-07-04 | 2025-07-11 | Q1 | 25.7.1 |
20-
| | 2025-07-11 | 2025-07-18 | 2025-07-25 | Q3 | 25.7.3 |
21-
| Aug | 2025-07-25 | 2025-08-01 | 2025-08-08 | Q1 | 25.8.1 |
22-
| | 2025-08-08 | 2025-08-15 | 2025-08-22 | Q3 | 25.8.3 |
23-
| Sep | 2025-08-29 | 2025-09-05 | 2025-09-12 | Q1 | 25.9.1 |
24-
| | 2025-09-12 | 2025-09-19 | 2025-09-26 | Q3 | 25.9.3 |
25-
| Oct | 2025-09-26 | 2025-10-03 | 2025-10-10 | Q1 | 25.10.1 |
26-
| | 2025-10-10 | 2025-10-17 | 2025-10-24 | Q3 | 25.10.3 |
27-
| Nov | 2025-10-31 | 2025-11-07 | 2025-11-14 | Q1 | 25.11.1 |
28-
| | 2025-11-14 | 2025-11-21 | 2025-11-28 | Q3 | 25.11.3 |
29-
| Dec | 2025-11-28 | 2025-12-05 | 2025-12-12 | Q1 | 25.12.1 |
30-
| | 2025-12-12 | 2025-12-19 | 2025-12-26 | Q3 | 25.12.3 |
31-
32-
33-
#### Three Key Points
34-
35-
1. **Development** - All development and PRs target`dev`
36-
2. **Release Candidate** - On Freeze Week, merge`dev``rc` (release-candidate). Only bug fixes and stabilization allowed in`rc`. `dev` remains open for new features.
37-
3. **Release** - Merge`rc``master` twice per month (1st Quarter & 3rd Quarter of the Month)
38-
4. **Snapshot** - Create snapshot releases from stable`master` branch
39-
40-
> **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.
41-
42-
---
43-
44-
## Bi-monthly Release Schedule Flow
45-
46-
- **Week before 1st/3rd Friday (Freeze Week):**
47-
- 🔄 Merge latest `dev``rc` (release-candidate)
48-
- 🚫 `rc` branch is frozen: Only bug fixes and stabilization allowed
49-
-`dev` branch remains open: New features and PRs accepted
50-
- **1st/3rd Friday:**
51-
- 🔄 Merge `rc``master`
52-
- 📦 Snapshot release (when `master` is stable)
53-
- 🔄 Preparation for next cycle/month
54-
-`dev` branch remains open: New features and PRs accepted
55-
56-
57-
#### 1st & 3rd Quarter of the month Cycle
58-
59-
**Week before 1st/3rd Friday (Freeze Week):**
5+
#### Key Points
606

61-
- 🔄 Merge `dev``rc`
62-
- 🚫 **rc freeze** - Only bug fixes and stabilization in `rc`
63-
-**dev open** - New features and PRs accepted
7+
1. **🛠️Development** - All development and PRs target `dev`.
8+
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.
9+
3. **✅Release Week** - On Release Week the `rc` branch is merged into `master`.
10+
4. **📦Shapshots** - Snapshots are only created when `master` is stable.
11+
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.
6412

65-
**1st/3rd Friday:**
66-
67-
- 🔄 Merge `rc``master`
68-
- 📦 **Snapshot release** (when `master` is stable)
69-
- 🔄 **Preparation for next cycle/month**
70-
71-
#### Summary
72-
73-
| Quarter | Freeze Week | Merge Friday | Snapshot Friday | Dev Status | RC Status |
74-
| --------------------- | ------------------- | ------------ | --------------- | ---------- | --------- |
75-
| **1st Quarter** | Week before 1st Fri | 1st Friday | 2nd Friday | ✅ OPEN | 🚫 FROZEN |
76-
| **3rd Quarter** | Week before 3rd Fri | 3rd Friday | 4th Friday | ✅ OPEN | 🚫 FROZEN |
77-
78-
**Key Rules:**
79-
80-
- 🚫**Freeze weeks:** Merge `dev``rc`. Only bug fixes to `rc`. `dev` remains open for new features.
81-
-**Open weeks:** All development welcomed in `dev`
82-
- 📦**Snapshots:** Only when`master` is stable
83-
- 🔄**4th Friday:** Preparation for next cycle/month
13+
> [!NOTE]
14+
> 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.
8415
8516
---
8617

87-
## Weekly Summary
18+
## Weekly Breakdown
8819

89-
| Phase | Dev Branch Status | RC Branch Status | Allowed Changes | Description |
90-
| ----------------------------------------------- | ------------------- | ------------------ | ------------------------------------------------------------------- | ------------------------- |
91-
| **Freeze Week** (before 1st & 3rd Friday) |**OPEN** | 🚫**FROZEN** | ❌ No new features in `rc`<br>✅ Bug fixes in `rc`<br>✅ All dev in `dev` | Testing and validation |
92-
| **Merge Friday** (1st & 3rd of month) |**OPEN** | 🔄**MERGING** | 🔄 Merge `rc` to master | Deploy stable code |
93-
| **Stabilization Week** (after merge) |**OPEN** |**OPEN** | ✅ All development in `dev`<br>🔧 Critical hotfixes in `rc` | Monitor master & develop |
94-
| **Snapshot Release** |**OPEN** | 📦**RELEASE** | 📦 Create release | When `master` is stable |
20+
| Phase | Dev Branch Status | RC Branch Status | Allowed Changes | Description |
21+
| ------------------------------------------| ------------------- | ------------------ | ---------------------------------------------------------------------------| ------------------------- |
22+
| **Freeze Week** (during odd weeks) |**OPEN** | 🚫**FROZEN** | ❌ No new features in `rc`<br>✅ Bug fixes in `rc`<br>✅ All dev in `dev` | Testing and validation |
23+
| **Merge Friday** (on odd Fridays) |**OPEN** | 🔄**MERGING** | 🔄 Merge `rc` to master | Deploy stable code |
24+
| **Stabilization Week** (after merge) |**OPEN** |**OPEN** | ✅ All development in `dev`<br>🔧 Critical hotfixes in `rc` | Monitor master & develop |
25+
| **Snapshot Release** |**OPEN** | 📦**RELEASE** | 📦 Create release | When `master` is stable |
9526

9627
---
9728

98-
## Monthly Timeline
29+
## In-Depth Monthly Timeline
9930

100-
| Period | Dev Status | RC Status | Master Status | Activity | Focus |
101-
| ---------------------------------------- | ------------------------- | --------------------- | ---------------------- | --------------------------- | ---------------------- |
102-
| **Week before 1st Friday** |**OPEN** | 🚫**FROZEN** | 🔧 Previous fixes | Testing & validation | 🧪 Prepare for merge |
103-
| **1st Friday** |**OPEN** | 🔄**MERGING** | 📥 Receives new code | Merge `rc``master` | 🔄 Deploy |
104-
| **Week after 1st Friday** |**OPEN** |**OPEN** | 🔧 Hotfixes only | Active development | 🚀 New features to dev |
105-
| **2nd Friday** |**OPEN** |**OPEN** | 📦**SNAPSHOT** | Release when stable | 📦 Release |
106-
| **Week before 2nd-to-last Friday** |**OPEN** | 🚫**FROZEN** | 🔧 Minor fixes only | Testing & validation | 🧪 Prepare for merge |
107-
| **2nd-to-last Friday** |**OPEN** | 🔄**MERGING** | 📥 Receives new code | Merge `rc``master` | 🔄 Deploy |
108-
| **Week after 2nd-to-last Friday** |**OPEN** |**OPEN** | 🔧 Hotfixes only | Active development | 🚀 New features to dev |
109-
| **Last Friday** |**OPEN** |**OPEN** | 📦**SNAPSHOT** | Release when stable | 📦 Release |
31+
| Period | Dev Status | RC Status | Master Status | Activity | Focus |
32+
| -------------------------------| --------------------| --------------------| ---------------------- | --------------------------- | ---------------------- |
33+
| **During 1st Week** |**OPEN** | 🚫**FROZEN** | 🔧 Previous fixes | Testing & validation | 🧪 Prepare for merge |
34+
| **1st Friday** |**OPEN** | 🔄**MERGING** | 📥 Receives new code | Merge `rc``master` | 🔄 Deploy |
35+
| **During 2nd Week** |**OPEN** |**OPEN** | 🔧 Hotfixes only | Active development | 🚀 New features to dev |
36+
| **2nd Friday** |**OPEN** |**OPEN** | 📦**SNAPSHOT** | Release when stable | 📦 Release |
37+
| **During 3rd Week** |**OPEN** | 🚫**FROZEN** | 🔧 Minor fixes only | Testing & validation | 🧪 Prepare for merge |
38+
| **3rd Friday** |**OPEN** | 🔄**MERGING** | 📥 Receives new code | Merge `rc``master` | 🔄 Deploy |
39+
| **During 4th Week** |**OPEN** |**OPEN** | 🔧 Hotfixes only | Active development | 🚀 New features to dev |
40+
| **4th Friday** |**OPEN** |**OPEN** | 📦**SNAPSHOT** | Release when stable | 📦 Release |
11041

111-
**Freeze periods: ~2 weeks per month (handles variable month lengths)**
42+
**Freeze periods: allows ~2 weeks per month (handles variable month lengths)**
11243

11344
---
11445

115-
## Versioning YY.M.Q
46+
## Versioning YY.M.W
11647

117-
We use **year.month.quarter** format (`YY.M.Q`) instead of traditional semantic versioning for several reasons:
48+
We use **year.month.week** format (`YY.M.W`) instead of traditional semantic versioning for several reasons:
11849

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

12556
---
12657

12758
## Pull Requests
12859

129-
- All pull requests should be made against`dev` branch
130-
- Pull requests should be reviewed and approved by at least one other developer before merging
131-
- Pull requests can be created anytime, but should be merged to`dev` branch before releasing on`master` branch
132-
- Pull requests should not be merged directly into`master` branch
133-
- Pull requests should be merged within the release window for`master` branch
60+
- *Must* be made against`dev` branch
61+
- Should be reviewed and approved by at least one other developer before merging
62+
- Can be created anytime, but should be merged to`dev` branch before releasing on`master` branch
63+
- Should not be merged directly into`master` branch
64+
- Should be merged within the release window for`master` branch
13465

13566
---
13667

@@ -142,13 +73,13 @@ Here are some visuals to help you understand the flowchart better.
14273

14374
```mermaid
14475
graph TD
145-
A[Normal Development<br/>✅ All PRs to dev] --> B{Week Before<br/>1st/3rd Friday?}
76+
A[Normal Development<br/>✅ All PRs to dev] --> B{Even Friday?}
14677
B -->|Yes| C[🔄 DEV → RC<br/>rc frozen<br/>🧪 Testing Phase]
14778
B -->|No| A
14879
149-
C --> D[🔄 MERGE DAY<br/>1st/3rd Friday<br/>rc → master]
80+
C --> D[🔄 MERGE DAY<br/>Odd Friday<br/>rc → master]
15081
D --> E[✅ DEV & RC REOPEN<br/>New features to dev]
151-
E --> F[📦 SNAPSHOT RELEASE<br/>2nd/4th Friday<br/>When master stable]
82+
E --> F[📦 SNAPSHOT RELEASE<br/>Even Friday<br/>Whenever master stable]
15283
F --> G[🔄 Prep Next Cycle]
15384
G --> A
15485
@@ -182,7 +113,7 @@ graph LR
182113
subgraph "Master Branch"
183114
MASTER[master branch] --> PREV[🔧 Previous fixes]
184115
PREV --> RECEIVE[📥 RECEIVES<br/>new code]
185-
RECEIVE --> RELEASE[📦 RELEASE<br/>when stable]
116+
RECEIVE --> RELEASE[📦 RELEASE<br/>whenever stable]
186117
RELEASE --> PREV
187118
end
188119
@@ -204,7 +135,7 @@ graph LR
204135
style RELEASE fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
205136
```
206137

207-
## Bi-monthly Release Schedule
138+
## Fortnightly Release Schedule
208139

209140
```mermaid
210141
gantt
@@ -234,3 +165,31 @@ gantt
234165
🧪 Master Testing :mastertest2, 24, 3d
235166
📦 Snapshot (Friday) :release2, 1, 1d
236167
```
168+
# Fortnightly Release Calendar for 2025
169+
170+
| Month | Freeze Week | Merge Friday | Snapshot | Week | Tag |
171+
|-----------|--------------|--------------|--------------|-------|---------|
172+
| Jan | 2024-12-27 | 2025-01-03 | 2025-01-10 | W1 | 25.1.1 |
173+
| | 2025-01-10 | 2025-01-17 | 2025-01-24 | W3 | 25.1.3 |
174+
| Feb | 2025-01-31 | 2025-02-07 | 2025-02-14 | W1 | 25.2.1 |
175+
| | 2025-02-14 | 2025-02-21 | 2025-02-28 | W3 | 25.2.3 |
176+
| Mar | 2025-02-28 | 2025-03-07 | 2025-03-14 | W1 | 25.3.1 |
177+
| | 2025-03-14 | 2025-03-21 | 2025-03-28 | W3 | 25.3.3 |
178+
| Apr | 2025-03-28 | 2025-04-04 | 2025-04-11 | W1 | 25.4.1 |
179+
| | 2025-04-11 | 2025-04-18 | 2025-04-25 | W3 | 25.4.3 |
180+
| May | 2025-04-25 | 2025-05-02 | 2025-05-09 | W1 | 25.5.1 |
181+
| | 2025-05-09 | 2025-05-16 | 2025-05-23 | W3 | 25.5.3 |
182+
| Jun | 2025-05-30 | 2025-06-06 | 2025-06-13 | W1 | 25.6.1 |
183+
| | 2025-06-13 | 2025-06-20 | 2025-06-27 | W3 | 25.6.3 |
184+
| Jul | 2025-06-27 | 2025-07-04 | 2025-07-11 | W1 | 25.7.1 |
185+
| | 2025-07-11 | 2025-07-18 | 2025-07-25 | W3 | 25.7.3 |
186+
| Aug | 2025-07-25 | 2025-08-01 | 2025-08-08 | W1 | 25.8.1 |
187+
| | 2025-08-08 | 2025-08-15 | 2025-08-22 | W3 | 25.8.3 |
188+
| Sep | 2025-08-29 | 2025-09-05 | 2025-09-12 | W1 | 25.9.1 |
189+
| | 2025-09-12 | 2025-09-19 | 2025-09-26 | W3 | 25.9.3 |
190+
| Oct | 2025-09-26 | 2025-10-03 | 2025-10-10 | W1 | 25.10.1 |
191+
| | 2025-10-10 | 2025-10-17 | 2025-10-24 | W3 | 25.10.3 |
192+
| Nov | 2025-10-31 | 2025-11-07 | 2025-11-14 | W1 | 25.11.1 |
193+
| | 2025-11-14 | 2025-11-21 | 2025-11-28 | W3 | 25.11.3 |
194+
| Dec | 2025-11-28 | 2025-12-05 | 2025-12-12 | W1 | 25.12.1 |
195+
| | 2025-12-12 | 2025-12-19 | 2025-12-26 | W3 | 25.12.3 |

0 commit comments

Comments
 (0)