forked from mosaicstack/stack
newest_matching_file() piped `ls -1t` into `head -1`. Under `set -o pipefail` head closes the pipe after the first line, ls dies on SIGPIPE, and the function returns 141 having printed nothing. Its callers assign it at top level under `set -e`, so that 141 aborts the install. It takes roughly 1600 matching names to fill the pipe buffer, which is why this has sat unnoticed: with two or three files the old code is correct. Measured on origin/next with 5001 matches, the function returns 141 and prints nothing; with this change it returns rc=0 and the right filename. Two of the four callers are the "find the newest .mosaic-bak-* backup" lookup, which is the path a restore leans on. Reading the listing into an array through process substitution has no pipeline, so there is nothing for pipefail to catch. This also clears the one remaining violation `scripts/pipefail-early-exit.test.mjs` reports against tools/install.sh -- that test lives on main, not on next, so it starts failing the moment main is merged into next for the 0.0.50 integration. tools/install-newest-matching-file.test.sh pins it, including the large-population case that is the whole point. Red on origin/next (rc=141), green here. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01WYgWocp36goy8hj2ui6ps1
33 lines
1.2 KiB
JSON
33 lines
1.2 KiB
JSON
{
|
|
"name": "mosaic-stack",
|
|
"private": true,
|
|
"packageManager": "[email protected]",
|
|
"scripts": {
|
|
"build": "turbo run build",
|
|
"dev": "turbo run dev",
|
|
"lint": "turbo run lint",
|
|
"preflight": "node scripts/preflight.mjs",
|
|
"clean:generated": "node scripts/clean-generated.mjs",
|
|
"typecheck": "pnpm preflight && turbo run typecheck",
|
|
"test:checkout": "node --test scripts/*.test.mjs",
|
|
"test": "pnpm test:checkout && turbo run test && pnpm run test:installer",
|
|
"test:installer": "bash tools/install-next-lane.test.sh && bash tools/install-node-provisioning.test.sh && bash tools/install-newest-matching-file.test.sh",
|
|
"format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
"format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"",
|
|
"prepare": "node scripts/install-hooks.mjs"
|
|
},
|
|
"devDependencies": {
|
|
"@typescript-eslint/eslint-plugin": "^8.0.0",
|
|
"@typescript-eslint/parser": "^8.0.0",
|
|
"eslint": "^9.0.0",
|
|
"typescript-eslint": "^8.0.0",
|
|
"husky": "^9.0.0",
|
|
"lint-staged": "^15.0.0",
|
|
"prettier": "^3.0.0",
|
|
"turbo": "^2.0.0",
|
|
"typescript": "^5.8.0",
|
|
"vitest": "^2.0.0"
|
|
},
|
|
"license": "MIT"
|
|
}
|