-
Notifications
You must be signed in to change notification settings - Fork 946
docs: add automatic release calendar updates in docs #17531
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 1 commit
Commits
Show all changes
4 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next
Next commit
docs: add automatic release calendar updates in docs
Closes #13821
- Loading branch information
commit 9ba00cebea840ad237961c9671db9d628c5c0e00
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -54,17 +54,17 @@ pages. | |
|
||
## Release schedule | ||
|
||
| Release name | Release Date | Status | | ||
|--------------|--------------------|------------------| | ||
| 2.12.x | June 04, 2024 | Not Supported | | ||
| 2.13.x | July 02, 2024 | Not Supported | | ||
| 2.14.x | August 06, 2024 | Not Supported | | ||
| 2.15.x | September 03, 2024 | Not Supported | | ||
| 2.16.x | October 01, 2024 | Not Supported | | ||
| 2.17.x | November 05, 2024 | Not Supported | | ||
| 2.18.x | December 03, 2024 | Security Support | | ||
| 2.19.x | February 04, 2024 | Stable | | ||
| 2.20.x | March 05, 2024 | Mainline | | ||
<!-- RELEASE_CALENDAR_START --> | ||
| Release name | Release Date | Status | Latest Release | | ||
|-------------|-------------------|------------------|----------------| | ||
| [2.16](https://coder.com/changelog/coder-2-16) | November 05, 2024 | Not Supported | [v2.16.1](https://github.com/coder/coder/releases/tag/v2.16.1) | | ||
| [2.17](https://coder.com/changelog/coder-2-17) | December 03, 2024 | Not Supported | [v2.17.3](https://github.com/coder/coder/releases/tag/v2.17.3) | | ||
| [2.18](https://coder.com/changelog/coder-2-18) | February 04, 2025 | Not Supported | [v2.18.5](https://github.com/coder/coder/releases/tag/v2.18.5) | | ||
| [2.19](https://coder.com/changelog/coder-2-19) | February 04, 2025 | Security Support | [v2.19.1](https://github.com/coder/coder/releases/tag/v2.19.1) | | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 🚫 [linkspector] reported by reviewdog 🐶 |
||
| [2.20](https://coder.com/changelog/coder-2-20) | March 04, 2025 | Stable | [v2.20.2](https://github.com/coder/coder/releases/tag/v2.20.2) | | ||
| [2.21](https://coder.com/changelog/coder-2-21) | April 01, 2025 | Mainline | [v2.21.0](https://github.com/coder/coder/releases/tag/v2.21.0) | | ||
| 2.22 | May 07, 2024 | Not Released | N/A | | ||
<!-- RELEASE_CALENDAR_END --> | ||
|
||
> [!TIP] | ||
> We publish a | ||
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,191 @@ | ||
#!/bin/bash< 8000 /td> | ||
|
||
set -euo pipefail | ||
|
||
# This script automatically updates the release calendar in docs/install/releases/index.md | ||
# It calculates the releases based on the first Tuesday of each month rule | ||
# and updates the status of each release (Not Supported, Security Support, Stable, Mainline, Not Released) | ||
|
||
DOCS_FILE="docs/install/releases/index.md" | ||
|
||
# Define unique markdown comments as anchors | ||
CALENDAR_START_MARKER="<!-- RELEASE_CALENDAR_START -->" | ||
CALENDAR_END_MARKER="<!-- RELEASE_CALENDAR_END -->" | ||
|
||
# Get current date | ||
current_date=$(date +"%Y-%m-%d") | ||
current_month=$(date +"%m") | ||
current_year=$(date +"%Y") | ||
|
||
# Function to get the first Tuesday of a given month and year | ||
get_first_tuesday() { | ||
local year=$1 | ||
local month=$2 | ||
|
||
# Find the first day of the month | ||
local first_day=$(date -d "$year-$month-01" +"%u") | ||
|
||
# Calculate days until first Tuesday (if day 1 is Tuesday, first_day=2) | ||
local days_until_tuesday=$((first_day == 2 ? 0 : (9 - first_day) % 7)) | ||
|
||
# Get the date of the first Tuesday | ||
local first_tuesday=$(date -d "$year-$month-01 +$days_until_tuesday days" +"%Y-%m-%d") | ||
|
||
echo "$first_tuesday" | ||
} | ||
|
||
# Function to format date as "Month DD, YYYY" | ||
format_date() { | ||
date -d "$1" +"%B %d, %Y" | ||
} | ||
|
||
# Function to get the latest patch version for a minor release | ||
get_latest_patch() { | ||
local version_major=$1 | ||
local version_minor=$2 | ||
|
||
# Get all tags for this minor version | ||
local tags=$(cd "$(git rev-parse --show-toplevel)" && git tag | grep "^v$version_major\\.$version_minor\\." | sort -V) | ||
|
||
# Get the latest one | ||
local latest=$(echo "$tags" | tail -1) | ||
|
||
if [ -z "$latest" ]; then | ||
# If no tags found, return empty | ||
echo "" | ||
else | ||
# Return without the v prefix | ||
echo "${latest#v}" | ||
fi | ||
} | ||
|
||
# Generate releases table showing: | ||
# - 3 previous unsupported releases | ||
# - 1 security support release (n-2) | ||
# - 1 stable release (n-1) | ||
# - 1 mainline release (n) | ||
# - 1 next release (n+1) | ||
generate_release_calendar() { | ||
local result="" | ||
local version_major=2 | ||
|
||
# Find the current minor version by looking at the last mainline release tag | ||
local latest_version=$(cd "$(git rev-parse --show-toplevel)" && git tag | grep '^v[0-9]*\.[0-9]*\.[0-9]*$' | sort -V | tail -1) | ||
local version_minor=$(echo "$latest_version" | cut -d. -f2) | ||
|
||
# Start with 3 unsupported releases back | ||
local start_minor=$((version_minor - 5)) | ||
|
||
# Initialize the calendar table with an additional column for latest release | ||
result="| Release name | Release Date | Status | Latest Release |\n" | ||
result+="|-------------|-------------------|------------------|----------------|\n" | ||
|
||
# Generate rows for each release (7 total: 3 unsupported, 1 security, 1 stable, 1 mainline, 1 next) | ||
for i in {0..6}; do | ||
# Calculate release minor version | ||
local rel_minor=$((start_minor + i)) | ||
# Format release name without the .x | ||
local version_name="$version_major.$rel_minor" | ||
|
||
# Calculate release month and year based on release pattern | ||
# This is a simplified calculation assuming monthly releases | ||
local rel_month=$(( (current_month - (5 - i) + 12) % 12 )) | ||
[[ $rel_month -eq 0 ]] && rel_month=12 | ||
local rel_year=$current_year | ||
if [[ $rel_month -gt $current_month ]]; then | ||
rel_year=$((rel_year - 1)) | ||
fi | ||
if [[ $rel_month -lt $current_month && $i -gt 5 ]]; then | ||
rel_year=$((rel_year + 1)) | ||
fi | ||
|
||
# Skip January releases starting from 2025 | ||
if [[ $rel_month -eq 1 && $rel_year -ge 2025 ]]; then | ||
rel_month=2 | ||
rel_year=$rel_year | ||
fi | ||
|
||
# Get release date (first Tuesday of the month) | ||
local release_date=$(get_first_tuesday $rel_year $(printf "%02d" $rel_month)) | ||
local formatted_date=$(format_date "$release_date") | ||
|
||
# Get latest patch version | ||
local latest_patch=$(get_latest_patch $version_major $rel_minor) | ||
local patch_link="" | ||
if [ -n "$latest_patch" ]; then | ||
patch_link="[v${latest_patch}](https://github.com/coder/coder/releases/tag/v${latest_patch})" | ||
else | ||
patch_link="N/A" | ||
fi | ||
|
||
# Determine status | ||
local status | ||
if [[ "$release_date" > "$current_date" ]]; then | ||
status="Not Released" | ||
elif [[ $i -eq 6 ]]; then | ||
status="Not Released" | ||
elif [[ $i -eq 5 ]]; then | ||
status="Mainline" | ||
elif [[ $i -eq 4 ]]; then | ||
status="Stable" | ||
elif [[ $i -eq 3 ]]; then | ||
status="Security Support" | ||
else | ||
status="Not Supported" | ||
fi | ||
|
||
# Format version name and patch link based on release status | ||
# No links for unreleased versions | ||
local formatted_version_name | ||
if [[ "$status" == "Not Released" ]]; then | ||
formatted_version_name="$version_name" | ||
patch_link="N/A" | ||
else | ||
formatted_version_name="[$version_name](https://coder.com/changelog/coder-$version_major-$rel_minor)" | ||
fi | ||
|
||
# Add row to table | ||
result+="| $formatted_version_name | $formatted_date | $status | $patch_link |\n" | ||
done | ||
|
||
echo -e "$result" | ||
} | ||
|
||
# Check if the markdown comments exist in the file | ||
if ! grep -q "$CALENDAR_START_MARKER" "$DOCS_FILE" || ! grep -q "$CALENDAR_END_MARKER" "$DOCS_FILE"; then | ||
echo "Error: Markdown comment anchors not found in $DOCS_FILE" | ||
echo "Please add the following anchors around the release calendar table:" | ||
echo " $CALENDAR_START_MARKER" | ||
echo " $CALENDAR_END_MARKER" | ||
exit 1 | ||
fi | ||
|
||
# Generate the new calendar table content | ||
NEW_CALENDAR=$(generate_release_calendar) | ||
|
||
# Update the file while preserving the rest of the content | ||
awk -v start_marker="$CALENDAR_START_MARKER" \ | ||
-v end_marker="$CALENDAR_END_MARKER" \ | ||
-v new_calendar="$NEW_CALENDAR" \ | ||
' | ||
BEGIN { found_start = 0; found_end = 0; print_line = 1; } | ||
$0 ~ start_marker { | ||
print; | ||
print new_calendar; | ||
found_start = 1; | ||
print_line = 0; | ||
next; | ||
} | ||
$0 ~ end_marker { | ||
found_end = 1; | ||
print_line = 1; | ||
print; | ||
next; | ||
} | ||
print_line || !found_start || found_end { print } | ||
' "$DOCS_FILE" > "${DOCS_FILE}.new" | ||
|
||
# Replace the original file with the updated version | ||
mv "${DOCS_FILE}.new" "$DOCS_FILE" | ||
|
||
echo "Successfully updated release calendar in $DOCS_FILE" |
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.