| author | |
| committer | |
| log | c83bc5d48a2bf983acb1c8aaff3d34f86c14032e |
| tree | 8689fd1bffc4f3dc007080cb54862df843504cdb |
| parent | 9df3c640210fecccb58f7fbc735f81ca0ee011bd |
| signature | Signed by PGP key B5690EEEBB952194 |
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: check | 42 | - id: check |
| 42 | name: Compare HEAD to last nightly tag | 43 | 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" ]]; then | 46 | 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; |
| 77 | 77 | ||
| 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 | }; |
| 85 | 91 | ||
| ... | @@ -92,7 +98,9 @@ const compareNightlyVersions = (left: NightlyVersion, right: NightlyVersion): nu | ... | @@ -92,7 +98,9 @@ const compareNightlyVersions = (left: NightlyVersion, right: NightlyVersion): nu |
| 92 | }; | 98 | }; |
| 93 | 99 | ||
| 94 | const parseNightlyTag = (tag: string): NightlyVersion | undefined => { | 100 | const 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; |
| 97 | 105 | ||
| 98 | const [, major, minor, patch, date, runNumber] = match; | 106 | const [, major, minor, patch, date, runNumber] = match; |