authorgravatar for 75971010+EfeDurmaz16@users.noreply.github.comEfe Baran Durmaz <75971010+EfeDurmaz16@users.noreply.github.com> 2026-04-19 20:58:04+03:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-04-19 10:58:04-07:00
logc83bc5d48a2bf983acb1c8aaff3d34f86c14032e
tree8689fd1bffc4f3dc007080cb54862df843504cdb
parent9df3c640210fecccb58f7fbc735f81ca0ee011bd
signature Signed by PGP key B5690EEEBB952194

fix(release): use v<semver> tag format for nightly releases (#2186)


5 files changed, 15 insertions(+), 6 deletions(-)

.github/workflows/release.yml+2-1
...@@ -4,6 +4,7 @@ on:...@@ -4,6 +4,7 @@ on:
4 push:4 push:
5 tags:5 tags:
6 - "v*.*.*"6 - "v*.*.*"
7 - "!v*-nightly.*"
7 schedule:8 schedule:
8 - cron: "0 */3 * * *"9 - cron: "0 */3 * * *"
9 workflow_dispatch:10 workflow_dispatch:
...@@ -41,7 +42,7 @@ jobs:...@@ -41,7 +42,7 @@ jobs:
41 - id: check42 - id: check
42 name: Compare HEAD to last nightly tag43 name: Compare HEAD to last nightly tag
43 run: |44 run: |
44 last_nightly_tag=$(git tag --list 'nightly-v*' --sort=-creatordate | head -n 1)45 last_nightly_tag=$(git tag --list 'v*-nightly.*' 'nightly-v*' --sort=-creatordate | head -n 1)
45 if [[ -z "$last_nightly_tag" ]]; then46 if [[ -z "$last_nightly_tag" ]]; then
46 echo "No previous nightly tag found. Proceeding with release."47 echo "No previous nightly tag found. Proceeding with release."
47 echo "has_changes=true" >> "$GITHUB_OUTPUT"48 echo "has_changes=true" >> "$GITHUB_OUTPUT"
scripts/release-smoke.ts+1-1
...@@ -220,7 +220,7 @@ try {...@@ -220,7 +220,7 @@ try {
220 );220 );
221 assertContains(221 assertContains(
222 nightlyReleaseMetadata,222 nightlyReleaseMetadata,
223 "tag=nightly-v9.9.10-nightly.20260413.321",223 "tag=v9.9.10-nightly.20260413.321",
224 "Expected nightly metadata to contain the derived nightly tag.",224 "Expected nightly metadata to contain the derived nightly tag.",
225 );225 );
226 assertContains(226 assertContains(
scripts/resolve-nightly-release.test.ts+1-1
...@@ -24,7 +24,7 @@ it("derives nightly metadata including the short commit sha in the release name"...@@ -24,7 +24,7 @@ it("derives nightly metadata including the short commit sha in the release name"
24 {24 {
25 baseVersion: "9.9.10",25 baseVersion: "9.9.10",
26 version: "9.9.10-nightly.20260413.321",26 version: "9.9.10-nightly.20260413.321",
27 tag: "nightly-v9.9.10-nightly.20260413.321",27 tag: "v9.9.10-nightly.20260413.321",
28 name: "T3 Code Nightly 9.9.10-nightly.20260413.321 (abcdef123456)",28 name: "T3 Code Nightly 9.9.10-nightly.20260413.321 (abcdef123456)",
29 shortSha: "abcdef123456",29 shortSha: "abcdef123456",
30 },30 },
scripts/resolve-nightly-release.ts+1-1
...@@ -54,7 +54,7 @@ export const resolveNightlyReleaseMetadata = (...@@ -54,7 +54,7 @@ export const resolveNightlyReleaseMetadata = (
54 return {54 return {
55 baseVersion,55 baseVersion,
56 version,56 version,
57 tag: `nightly-v${version}`,57 tag: `v${version}`,
58 name: `T3 Code Nightly ${version} (${shortSha})`,58 name: `T3 Code Nightly ${version} (${shortSha})`,
59 shortSha,59 shortSha,
60 };60 };
scripts/resolve-previous-release-tag.ts+10-2
...@@ -75,11 +75,17 @@ const parseStableTag = (tag: string): StableVersion | undefined => {...@@ -75,11 +75,17 @@ const parseStableTag = (tag: string): StableVersion | undefined => {
75 const [, major, minor, patch, prerelease] = match;75 const [, major, minor, patch, prerelease] = match;
76 if (!major || !minor || !patch) return undefined;76 if (!major || !minor || !patch) return undefined;
7777
78 const prereleaseIdentifiers = prerelease ? prerelease.split(".") : [];
79 // Nightly tags also start with `v` and carry a `nightly.*` prerelease
80 // identifier. They must not be considered stable candidates when resolving
81 // the previous stable tag.
82 if (prereleaseIdentifiers[0] === "nightly") return undefined;
83
78 return {84 return {
79 major: Number(major),85 major: Number(major),
80 minor: Number(minor),86 minor: Number(minor),
81 patch: Number(patch),87 patch: Number(patch),
82 prerelease: prerelease ? prerelease.split(".") : [],88 prerelease: prereleaseIdentifiers,
83 };89 };
84};90};
8591
...@@ -92,7 +98,9 @@ const compareNightlyVersions = (left: NightlyVersion, right: NightlyVersion): nu...@@ -92,7 +98,9 @@ const compareNightlyVersions = (left: NightlyVersion, right: NightlyVersion): nu
92};98};
9399
94const parseNightlyTag = (tag: string): NightlyVersion | undefined => {100const parseNightlyTag = (tag: string): NightlyVersion | undefined => {
95 const match = /^nightly-v(\d+)\.(\d+)\.(\d+)-nightly\.(\d{8})\.(\d+)$/.exec(tag);101 // Accept both the current `v<semver>` format and the legacy `nightly-v<semver>`
102 // format so release note diffs keep working across the tag-format transition.
103 const match = /^(?:nightly-)?v(\d+)\.(\d+)\.(\d+)-nightly\.(\d{8})\.(\d+)$/.exec(tag);
96 if (!match) return undefined;104 if (!match) return undefined;
97105
98 const [, major, minor, patch, date, runNumber] = match;106 const [, major, minor, patch, date, runNumber] = match;