Skip to content

Commit d97f5ae

Browse files
authored
fix: add ESR support to release calendar script (#25205)
The `update-release-calendar.sh` script did not account for Extended Support Release (ESR) versions. Running it would drop ESR entries (e.g. 2.24) from the calendar entirely or mark them as "Not Supported" instead of "Extended Support Release". ## Changes - Add `ESR_VERSIONS` array for tracking active ESR minor versions - Add `is_esr_version()` helper to check ESR membership - Extract `generate_release_row()` to reduce duplication - Prepend ESR versions older than the standard window - Override "Not Supported" status for ESR versions within the window > [!NOTE] > When new ESR versions are designated or old ones reach end of life, update the `ESR_VERSIONS` array at the top of the script. <!-- This PR was authored by Coder Agents -->
1 parent d79cfcf commit d97f5ae

4 files changed

Lines changed: 96 additions & 55 deletions

File tree

docs/install/kubernetes.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ We support two release channels: mainline and stable - read the
135135
helm install coder coder-v2/coder \
136136
--namespace coder \
137137
--values values.yaml \
138-
--version 2.30.0
138+
--version 2.33.2
139139
```
140140

141141
- **OCI Registry**
@@ -146,7 +146,7 @@ We support two release channels: mainline and stable - read the
146146
helm install coder oci://ghcr.io/coder/chart/coder \
147147
--namespace coder \
148148
--values values.yaml \
149-
--version 2.30.0
149+
--version 2.33.2
150150
```
151151

152152
- **Stable** Coder release:
@@ -159,7 +159,7 @@ We support two release channels: mainline and stable - read the
159159
helm install coder coder-v2/coder \
160160
--namespace coder \
161161
--values values.yaml \
162-
--version 2.29.5
162+
--version 2.32.1
163163
```
164164

165165
- **OCI Registry**
@@ -170,7 +170,7 @@ We support two release channels: mainline and stable - read the
170170
helm install coder oci://ghcr.io/coder/chart/coder \
171171
--namespace coder \
172172
--values values.yaml \
173-
--version 2.29.5
173+
--version 2.32.1
174174
```
175175

176176
You can watch Coder start up by running `kubectl get pods -n coder`. Once Coder

docs/install/rancher.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@ kubectl create secret generic coder-db-url -n coder \
134134

135135
1. Select a Coder version:
136136

137-
- **Mainline**: `2.30.0`
138-
- **Stable**: `2.29.5`
137+
- **Mainline**: `2.33.2`
138+
- **Stable**: `2.32.1`
139139

140140
Learn more about release channels in the [Releases documentation](./releases/index.md).
141141

docs/install/releases/index.md

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,16 @@ pages.
7777
## Release schedule
7878
<!-- Autogenerated release calendar from scripts/update-release-calendar.sh -->
7979
<!-- RELEASE_CALENDAR_START -->
80-
| Release name | Release Date | Status | Latest Release |
81-
|------------------------------------------------|--------------------|--------------------------|------------------------------------------------------------------|
82-
| [2.24](https://coder.com/changelog/coder-2-24) | July 01, 2025 | Extended Support Release | [v2.24.4](https://github.com/coder/coder/releases/tag/v2.24.4) |
83-
| [2.26](https://coder.com/changelog/coder-2-26) | September 03, 2025 | Not Supported | [v2.26.6](https://github.com/coder/coder/releases/tag/v2.26.6) |
84-
| [2.27](https://coder.com/changelog/coder-2-27) | October 02, 2025 | Not Supported | [v2.27.11](https://github.com/coder/coder/releases/tag/v2.27.11) |
85-
| [2.28](https://coder.com/changelog/coder-2-28) | November 04, 2025 | Not Supported | [v2.28.11](https://github.com/coder/coder/releases/tag/v2.28.11) |
86-
| [2.29](https://coder.com/changelog/coder-2-29) | December 02, 2025 | Extended Support Release | [v2.29.10](https://github.com/coder/coder/releases/tag/v2.29.10) |
87-
| [2.30](https://coder.com/changelog/coder-2-30) | February 03, 2026 | Security Support | [v2.30.7](https://github.com/coder/coder/releases/tag/v2.30.7) |
88-
| [2.31](https://coder.com/changelog/coder-2-31) | February 23, 2026 | Stable | [v2.31.9](https://github.com/coder/coder/releases/tag/v2.31.9) |
89-
| [2.32](https://coder.com/changelog/coder-2-32) | April 14, 2026 | Mainline | [v2.32.0](https://github.com/coder/coder/releases/tag/v2.32.0) |
90-
| 2.33 | | Not Released | N/A |
80+
| Release name | Release Date | Status | Latest Release |
81+
|------------------------------------------------|-------------------|--------------------------|------------------------------------------------------------------|
82+
| [2.24](https://coder.com/changelog/coder-2-24) | July 01, 2025 | Extended Support Release | [v2.24.4](https://github.com/coder/coder/releases/tag/v2.24.4) |
83+
| [2.28](https://coder.com/changelog/coder-2-28) | November 04, 2025 | Not Supported | [v2.28.11](https://github.com/coder/coder/releases/tag/v2.28.11) |
84+
| [2.29](https://coder.com/changelog/coder-2-29) | December 02, 2025 | Extended Support Release | [v2.29.12](https://github.com/coder/coder/releases/tag/v2.29.12) |
85+
| [2.30](https://coder.com/changelog/coder-2-30) | February 03, 2026 | Not Supported | [v2.30.7](https://github.com/coder/coder/releases/tag/v2.30.7) |
86+
| [2.31](https://coder.com/changelog/coder-2-31) | February 23, 2026 | Security Support | [v2.31.11](https://github.com/coder/coder/releases/tag/v2.31.11) |
87+
| [2.32](https://coder.com/changelog/coder-2-32) | April 14, 2026 | Stable | [v2.32.1](https://github.com/coder/coder/releases/tag/v2.32.1) |
88+
| [2.33](https://coder.com/changelog/coder-2-33) | May 05, 2026 | Mainline | [v2.33.2](https://github.com/coder/coder/releases/tag/v2.33.2) |
89+
| 2.34 | | Not Released | N/A |
9190
<!-- RELEASE_CALENDAR_END -->
9291

9392
> [!TIP]

scripts/update-release-calendar.sh

Lines changed: 80 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,34 @@
33
set -euo pipefail
44

55
# This script automatically updates the release calendar in docs/install/releases/index.md
6-
# It updates the status of each release (Not Supported, Security Support, Stable, Mainline, Not Released)
7-
# and gets the release dates from the first published tag for each minor release.
6+
# It updates the status of each release (Not Supported, Security Support, Stable, Mainline,
7+
# Extended Support Release, Not Released) and gets the release dates from the first published
8+
# tag for each minor release.
9+
#
10+
# ESR (Extended Support Release) versions are biannually released and receive extended
11+
# maintenance. Update the ESR_VERSIONS array below when new ESR versions are designated
12+
# or old ones reach end of life.
813

914
DOCS_FILE="docs/install/releases/index.md"
1015

1116
CALENDAR_START_MARKER="<!-- RELEASE_CALENDAR_START -->"
1217
CALENDAR_END_MARKER="<!-- RELEASE_CALENDAR_END -->"
1318

19+
# Known active ESR (Extended Support Release) minor versions.
20+
# Update this list when new ESR versions are designated or old ones reach end of life.
21+
ESR_VERSIONS=(24 29)
22+
23+
# Check if a minor version is a known active ESR version.
24+
is_esr_version() {
25+
local minor=$1
26+
for esr in "${ESR_VERSIONS[@]}"; do
27+
if [[ "$minor" -eq "$esr" ]]; then
28+
return 0
29+
fi
30+
done
31+
return 1
32+
}
33+
1434
# Format date as "Month DD, YYYY"
1535
format_date() {
1636
TZ=UTC date -d "$1" +"%B %d, %Y"
@@ -78,12 +98,59 @@ get_release_date() {
7898
fi
7999
}
80100

101+
# Generate a single release row for the calendar table.
102+
# Arguments: version_major, rel_minor, status
103+
generate_release_row() {
104+
local version_major=$1
105+
local rel_minor=$2
106+
local status=$3
107+
local version_name="$version_major.$rel_minor"
108+
local actual_release_date
109+
local formatted_date
110+
local latest_patch
111+
local patch_link
112+
local formatted_version_name
113+
114+
# Get the actual release date from the first published tag
115+
if [[ "$status" != "Not Released" ]]; then
116+
actual_release_date=$(get_release_date "$version_major" "$rel_minor")
117+
118+
if [ -n "$actual_release_date" ]; then
119+
formatted_date=$(format_date "$actual_release_date")
120+
else
121+
formatted_date="TBD"
122+
fi
123+
fi
124+
125+
# Get latest patch version
126+
latest_patch=$(get_latest_patch "$version_major" "$rel_minor")
127+
if [ -n "$latest_patch" ]; then
128+
patch_link="[v${latest_patch}](https://github.com/coder/coder/releases/tag/v${latest_patch})"
129+
else
130+
patch_link="N/A"
131+
fi
132+
133+
# Format version name and patch link based on release status
134+
if [[ "$status" == "Not Released" ]]; then
135+
formatted_version_name="$version_name"
136+
patch_link="N/A"
137+
echo "| $formatted_version_name | | $status | $patch_link |"
138+
else
139+
formatted_version_name="[$version_name](https://coder.com/changelog/coder-$version_major-$rel_minor)"
140+
echo "| $formatted_version_name | $formatted_date | $status | $patch_link |"
141+
fi
142+
}
143+
81144
# Generate releases table showing:
145+
# - Active ESR releases (older than the standard window)
82146
# - 3 previous unsupported releases
83147
# - 1 security support release (n-2)
84148
# - 1 stable release (n-1)
85149
# - 1 mainline release (n)
86150
# - 1 next release (n+1)
151+
#
152+
# ESR versions within the standard window that would otherwise show as
153+
# "Not Supported" are marked as "Extended Support Release" instead.
87154
generate_release_calendar() {
88155
local result=""
89156
local version_major=2
@@ -101,17 +168,18 @@ generate_release_calendar() {
101168
result="| Release name | Release Date | Status | Latest Release |\n"
102169
result+="|--------------|--------------|--------|----------------|\n"
103170

171+
# Add active ESR versions that fall before the standard window
172+
for esr_minor in "${ESR_VERSIONS[@]}"; do
173+
if [[ "$esr_minor" -lt "$start_minor" ]]; then
174+
result+="$(generate_release_row "$version_major" "$esr_minor" "Extended Support Release")\n"
175+
fi
176+
done
177+
104178
# Generate rows for each release (7 total: 3 unsupported, 1 security, 1 stable, 1 mainline, 1 next)
105179
for i in {0..6}; do
106180
# Calculate release minor version
107181
local rel_minor=$((start_minor + i))
108-
local version_name="$version_major.$rel_minor"
109-
local actual_release_date
110-
local formatted_date
111-
local latest_patch
112-
local patch_link
113182
local status
114-
local formatted_version_name
115183

116184
# Determine status based on position
117185
if [[ $i -eq 6 ]]; then
@@ -126,38 +194,12 @@ generate_release_calendar() {
126194
status="Not Supported"
127195
fi
128196

129-
# Get the actual release date from the first published tag
130-
if [[ "$status" != "Not Released" ]]; then
131-
actual_release_date=$(get_release_date "$version_major" "$rel_minor")
132-
133-
# Format the release date if we have one
134-
if [ -n "$actual_release_date" ]; then
135-
formatted_date=$(format_date "$actual_release_date")
136-
else
137-
# If no release date found, just display TBD
138-
formatted_date="TBD"
139-
fi
140-
fi
141-
142-
# Get latest patch version
143-
latest_patch=$(get_latest_patch "$version_major" "$rel_minor")
144-
if [ -n "$latest_patch" ]; then
145-
patch_link="[v${latest_patch}](https://github.com/coder/coder/releases/tag/v${latest_patch})"
146-
else
147-
patch_link="N/A"
197+
# Override status for active ESR versions that would otherwise be "Not Supported"
198+
if [[ "$status" == "Not Supported" ]] && is_esr_version "$rel_minor"; then
199+
status="Extended Support Release"
148200
fi
149201

150-
# Format version name and patch link based on release status
151-
if [[ "$status" == "Not Released" ]]; then
152-
formatted_version_name="$version_name"
153-
patch_link="N/A"
154-
# Add row to table without a date for "Not Released"
155-
result+="| $formatted_version_name | | $status | $patch_link |\n"
156-
else
157-
formatted_version_name="[$version_name](https://coder.com/changelog/coder-$version_major-$rel_minor)"
158-
# Add row to table with date for released versions
159-
result+="| $formatted_version_name | $formatted_date | $status | $patch_link |\n"
160-
fi
202+
result+="$(generate_release_row "$version_major" "$rel_minor" "$status")\n"
161203
done
162204

163205
echo -e "$result"

0 commit comments

Comments
 (0)