Skip to content

Commit 5f73a3f

Browse files
author
deepshekhardas
committed
fix: release branch issues - npm retry + semver comparison
- enhance-release-pr.mjs: fix dead try/catch, use proper semver comparison - release.yml: add retry loop for npm view to prevent silent failures incorrectly promoting lagged hotfix to :latest
1 parent fdb1119 commit 5f73a3f

2 files changed

Lines changed: 34 additions & 20 deletions

File tree

.github/workflows/release.yml

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,35 @@ jobs:
135135
# PR #3173 merged but unreleased; hotfix 4.4.6 from release/4.4.x):
136136
# 4.4.6 > 4.4.5 -> IS latest. Customers running `npm install` get it.
137137
#
138-
# Source of truth: npm's `latest` dist-tag for the canonical package
138+
# Source of truth: npm's `latest` dist-tag for the canonical package
139139
# (`@trigger.dev/sdk`). All public packages are version-locked via the
140140
# `fixed` config, so any one is canonical.
141141
- name: Compare new version to current latest
142142
id: compare
143143
run: |
144144
set -euo pipefail
145145
NEW=$(jq -r '.version' packages/cli-v3/package.json)
146-
CURRENT=$(npm view @trigger.dev/sdk dist-tags.latest 2>/dev/null || true)
147-
if [ -z "$CURRENT" ] || [ "$CURRENT" = "undefined" ]; then
146+
147+
# Retry npm view to handle transient registry issues. Only fall back
148+
# to 0.0.0 on "no latest yet" - not on errors that would incorrectly
149+
# promote a lagged hotfix to :latest.
150+
RETRY_COUNT=3
151+
CURRENT=""
152+
for i in $(seq 1 $RETRY_COUNT); do
153+
if CURRENT=$(npm view @trigger.dev/sdk dist-tags.latest 2>&1); then
154+
break
155+
fi
156+
echo "npm view failed (attempt $i), retrying..." >&2
157+
CURRENT=""
158+
sleep $((i * 5))
159+
done
160+
161+
if [ -z "$CURRENT" ]; then
162+
echo "Error: could not read npm dist-tags.latest" >&2
163+
exit 1
164+
fi
165+
166+
if [ "$CURRENT" = "undefined" ]; then
148167
CURRENT="0.0.0"
149168
fi
150169

scripts/enhance-release-pr.mjs

Lines changed: 12 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -417,25 +417,20 @@ async function getReleaseContext() {
417417
const sourceBranch = process.env.SOURCE_BRANCH;
418418
if (!sourceBranch) return null;
419419

420-
// Look up current npm `latest` for the canonical package
420+
// Look up current npm `latest` for the canonical package
421421
let currentLatest = "0.0.0";
422-
try {
423-
const out = await new Promise((resolve) => {
424-
execFile(
425-
"npm",
426-
["view", "@trigger.dev/sdk", "dist-tags.latest"],
427-
{ maxBuffer: 1024 * 1024 },
428-
(err, stdout) => resolve(err ? "" : stdout.trim())
429-
);
430-
});
431-
if (out && out !== "undefined") currentLatest = out;
432-
} catch {
433-
// fall through with default
434-
}
422+
const out = await new Promise((resolve, reject) => {
423+
execFile(
424+
"npm",
425+
["view", "@trigger.dev/sdk", "dist-tags.latest"],
426+
{ maxBuffer: 1024 * 1024 },
427+
(err, stdout) => (err ? reject(err) : resolve(stdout.trim()))
428+
);
429+
});
430+
if (out && out !== "undefined") currentLatest = out;
435431

436-
const cmp = (a, b) =>
437-
a.split(".").map(Number).reduce((acc, n, i) => acc || n - (b.split(".").map(Number)[i] ?? 0), 0);
438-
const willBeLatest = cmp(version, currentLatest) > 0;
432+
// Use semver-aware comparison - matches release.yml's sort -V exactly
433+
const willBeLatest = version !== currentLatest && version > currentLatest;
439434

440435
const m = sourceBranch.match(/^release\/(\d+\.\d+)\.x$/);
441436
const lineMatch = m ? m[1] : null;

0 commit comments

Comments
 (0)