Hmbown/CodeWhale · info · Error
Usage: node scripts/release/ensure-release-assets-absent.js
Error message
Usage: node scripts/release/ensure-release-assets-absent.js OWNER/REPO vX.Y.Z
What it means
CLI usage guard in main(): ensure-release-assets-absent.js expects exactly two arguments (OWNER/REPO and vX.Y.Z), so argv length must be 4. Any other count throws the one-line usage text; the top-level handler prints 'Release immutability check failed: <usage>' and exits 1.
Source
Thrown at scripts/release/ensure-release-assets-absent.js:74
}
if (!release || !Array.isArray(release.assets)) {
throw new Error(`GitHub Release ${tag} did not provide an asset inventory`);
}
if (release.assets.length === 0) {
return;
}
const names = release.assets.map((asset) => asset && asset.name).filter(Boolean);
const inventory = names.length > 0 ? names.join(", ") : `${release.assets.length} unnamed asset(s)`;
throw new Error(
`Refusing to replace existing assets for ${tag}: ${inventory}. ` +
"A normal Release workflow rerun must never delete or overwrite public bytes.",
);
}
function main() {
if (process.argv.length !== 4) {
throw new Error(usage());
}
const repo = process.argv[2];
const tag = process.argv[3];
const release = fetchRelease(repo, tag);
assertReleaseAssetsAbsent(release, tag);
console.log(
release === null
? `No existing GitHub Release assets found for ${tag}.`
: `Existing GitHub Release ${tag} has no assets; first upload may proceed.`,
);
}
if (require.main === module) {
try {
main();
} catch (error) {
console.error(`Release immutability check failed: ${error.message}`);
process.exit(1);View on GitHub (pinned to 8880682c63)
Solutions
- Invoke exactly: node scripts/release/ensure-release-assets-absent.js OWNER/REPO vX.Y.Z
- In CI, build the command from validated env vars (GITHUB_REPOSITORY and the pushed tag) so argument count is stable
Example fix
# before node scripts/release/ensure-release-assets-absent.js acme/codewhale # after node scripts/release/ensure-release-assets-absent.js acme/codewhale v1.2.3
Defensive patterns
Strategy: validation
Validate before calling
#!/usr/bin/env bash
: "${REPO:?set REPO to OWNER/REPO}" "${TAG:?set TAG to vX.Y.Z}"
node scripts/release/ensure-release-assets-absent.js "$REPO" "$TAG" Prevention
- Drive the script from GITHUB_REPOSITORY and the pushed tag so exactly two arguments always arrive
- Fail on unset variables (: ${VAR:?}) in wrapper scripts instead of letting them collapse argument count
When it happens
Trigger: Invoking with no arguments, one argument, or three or more; passing flags the script does not parse.
Common situations: First use in a workflow with an unset variable collapsing to one argument; copy-paste from docs without substituting placeholders; extra debug flags appended.
Related errors
- Usage: node scripts/release/assemble-release-assets.js INP
- Invalid GitHub repository: ${repo}
- Could not inspect GitHub Release ${tag}: ${detail}
- GitHub Release ${tag} returned invalid JSON: ${error.message
- Invalid release tag: ${tag}
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/993f9607022dc2e2.
Report an issue: GitHub.