Skip to content

Commit 9400dd8

Browse files
committed
2 parents 3dbc23b + e7f55d6 commit 9400dd8

File tree

3 files changed

+98
-6
lines changed

3 files changed

+98
-6
lines changed

.github/scripts/remind-release.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import calendar
2+
from datetime import date, timedelta
3+
4+
5+
def get_fridays(year, month):
6+
"""Return a list of all Fridays in a given month."""
7+
c = calendar.Calendar()
8+
return [
9+
d
10+
for d in c.itermonthdates(year, month)
11+
if d.weekday() == calendar.FRIDAY and d.month == month
12+
]
13+
14+
15+
def print_release_calendar(year):
16+
print(f"# Bi-monthly Release Calendar for {year}\n")
17+
print(
18+
"| Month | Freeze Week | Merge Friday | Snapshot | Quarter | Tag |"
19+
)
20+
print(
21+
"|-----------|--------------|--------------|--------------|-------|---------|"
22+
)
23+
for month in range(1, 13):
24+
fridays = get_fridays(year, month)
25+
if not fridays:
26+
continue
27+
merge1 = fridays[0] if len(fridays) > 0 else None
28+
snap1 = fridays[1] if len(fridays) > 1 else None
29+
merge2 = fridays[2] if len(fridays) > 2 else None
30+
snap2 = fridays[3] if len(fridays) > 3 else None
31+
freeze1 = merge1 - timedelta(days=7) if merge1 else None
32+
freeze2 = merge2 - timedelta(days=7) if merge2 else None
33+
yy = str(year)[-2:]
34+
m = str(month)
35+
tag1 = f"{yy}.{m}.1" if merge1 else ""
36+
tag3 = f"{yy}.{m}.3" if merge2 else ""
37+
# Print 1st quarter row
38+
print(
39+
f"| {calendar.month_abbr[month]:<9} | "
40+
f"{freeze1.strftime('%Y-%m-%d') if freeze1 else '':<12} | "
41+
f"{merge1.strftime('%Y-%m-%d') if merge1 else '':<12} | "
42+
f"{snap1.strftime('%Y-%m-%d') if snap1 else '':<12} | "
43+
f"{'Q1':<5} | "
44+
f"{tag1:<7} |"
45+
)
46+
# Print 3rd quarter row
47+
if merge2:
48+
print(
49+
f"| {'':<9} | "
50+
f"{freeze2.strftime('%Y-%m-%d') if freeze2 else '':<12} | "
51+
f"{merge2.strftime('%Y-%m-%d') if merge2 else '':<12} | "
52+
f"{snap2.strftime('%Y-%m-%d') if snap2 else '':<12} | "
53+
f"{'Q3':<5} | "
54+
f"{tag3:<7} |"
55+
)
56+
57+
58+
if __name__ == "__main__":
59+
import sys
60+
61+
year = int(sys.argv[1]) if len(sys.argv) > 1 else date.today().year
62+
print_release_calendar(year)

Configs/.local/bin/hydectl

2.5 MB
Binary file not shown.

RELEASE_POLICY.md

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,47 @@
11
## Release & Branching Policy - Quarterly Releases
22

3+
# Bi-monthly Release Calendar for 2025
4+
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+
333
#### Three Key Points
434

535
1. **Development** - All development and PRs target`dev`
636
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.
7-
3. **Release** - Merge`rc``master` twice per month (1st Quarter & 3rd Quarter)
37+
3. **Release** - Merge`rc``master` twice per month (1st Quarter & 3rd Quarter of the Month)
838
4. **Snapshot** - Create snapshot releases from stable`master` branch
939

1040
> **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.
1141
1242
---
1343

14-
## Quarterly Release Schedule Flow
44+
## Bi-monthly Release Schedule Flow
1545

1646
- **Week before 1st/3rd Friday (Freeze Week):**
1747
- 🔄 Merge latest `dev``rc` (release-candidate)
@@ -24,7 +54,7 @@
2454
-`dev` branch remains open: New features and PRs accepted
2555

2656

27-
#### 1st & 3rd Quarter Cycle
57+
#### 1st & 3rd Quarter of the month Cycle
2858

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

@@ -86,11 +116,11 @@
86116

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

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

95125
---
96126

@@ -174,7 +204,7 @@ graph LR
174204
style RELEASE fill:#a9b1d6,stroke:#252737,stroke-width:2px,color:#252737
175205
```
176206

177-
## Quarterly Release Schedule
207+
## Bi-monthly Release Schedule
178208

179209
```mermaid
180210
gantt

0 commit comments

Comments
 (0)