From 5b69150b3efa1dbb15d019830c5ba7a1febe8e61 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Tue, 21 Apr 2026 16:48:19 +0300 Subject: [PATCH] ci: fix release numbering in manual release workflow (fixes #26214) --- .github/show_manual_release_cmd_test.v | 30 +++++++++++ .github/workflows/show_manual_release_cmd.vsh | 53 +++++++++++++------ .gitignore | 1 + 3 files changed, 68 insertions(+), 16 deletions(-) create mode 100644 .github/show_manual_release_cmd_test.v diff --git a/.github/show_manual_release_cmd_test.v b/.github/show_manual_release_cmd_test.v new file mode 100644 index 000000000..f607e628b --- /dev/null +++ b/.github/show_manual_release_cmd_test.v @@ -0,0 +1,30 @@ +module main + +import os + +fn show_release_tag_for(now string) string { + script_path := os.join_path(os.dir(@FILE), 'workflows', 'show_manual_release_cmd.vsh') + cmd := 'V_RELEASE_TAG_NOW="${now}" ${os.quoted_path(@VEXE)} run ${os.quoted_path(script_path)}' + res := os.execute(cmd) + assert res.exit_code == 0, res.output + for line in res.output.split_into_lines() { + if line.contains('current release_tag: ') { + return line.all_after('current release_tag: ') + } + } + panic('missing release tag in output:\n${res.output}') +} + +fn test_show_manual_release_cmd_uses_iso_week_year() { + test_cases := { + '2025-12-28 00:00:00': 'weekly.2025.52' + '2025-12-29 00:00:00': 'weekly.2026.01' + '2025-12-31 00:00:00': 'weekly.2026.01' + '2026-01-01 00:00:00': 'weekly.2026.01' + '2026-01-04 00:00:00': 'weekly.2026.01' + '2026-01-05 00:00:00': 'weekly.2026.02' + } + for input, expected in test_cases { + assert show_release_tag_for(input) == expected + } +} diff --git a/.github/workflows/show_manual_release_cmd.vsh b/.github/workflows/show_manual_release_cmd.vsh index ad4e88115..38e25652c 100644 --- a/.github/workflows/show_manual_release_cmd.vsh +++ b/.github/workflows/show_manual_release_cmd.vsh @@ -1,26 +1,47 @@ +module main + import os import time import term -now := time.now() -year := now.year -week := now.strftime('%V') - -mut remote_name := 'origin' -mut release_tag := 'weekly.${year:04}.${week:02}' +fn iso_week_year(t time.Time) int { + // ISO 8601 assigns a date to the year of the Thursday in its week. + return t.add_days(4 - t.day_of_week()).year +} -if os.args.len > 1 { - remote_name = os.args[1] +fn default_release_tag_for(t time.Time) string { + return 'weekly.${iso_week_year(t):04}.${t.week_of_year():02}' } -if os.args.len > 2 { - release_tag = os.args[2] +fn release_time() time.Time { + now_override := os.getenv('V_RELEASE_TAG_NOW') + if now_override != '' { + return time.parse(now_override) or { + panic('invalid V_RELEASE_TAG_NOW `${now_override}`: ${err}') + } + } + return time.now() } -println('## Usage: show_manual_release_cmd.vsh [REMOTE] [TAGNAME]') -println('## current remote_name: ${remote_name}') -println('## current release_tag: ${release_tag}') -println('## ▼▼▼ ${term.ecolorize(term.yellow, 'run the following, to make a new github release')} ▼▼▼ ') +fn main() { + now := release_time() + mut remote_name := 'origin' + mut release_tag := default_release_tag_for(now) + + if os.args.len > 1 { + remote_name = os.args[1] + } -git_cmd := 'git tag -s -m "releases: ${release_tag}" ${release_tag} && git push --atomic ${remote_name} ${release_tag}' -println(git_cmd) + if os.args.len > 2 { + release_tag = os.args[2] + } + + println('## Usage: show_manual_release_cmd.vsh [REMOTE] [TAGNAME]') + println('## current remote_name: ${remote_name}') + println('## current release_tag: ${release_tag}') + println('## ▼▼▼ ${term.ecolorize(term.yellow, + 'run the following, to make a new github release')} ▼▼▼ ') + + git_cmd := 'git tag -s -m "releases: ${release_tag}" ${release_tag} && git push --atomic ${remote_name} ${release_tag}' + println(git_cmd) +} diff --git a/.gitignore b/.gitignore index f2d37c36b..51d04b1eb 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ # unignore vlib/x/markdown !vlib/x/markdown/** +!.github/show_manual_release_cmd_test.v !*/ # Do not add !*.* here; it overrides local excludes from .git/info/exclude. *.exe -- 2.39.5