fix(lanes): add error handling for unreadable hook files in checkProfile

This commit is contained in:
2026-08-04 09:36:58 +07:00
parent fa489016b4
commit c3546f568a
2 changed files with 22 additions and 1 deletions
+15
View File
@@ -325,4 +325,19 @@ describe("checkProfile", () => {
const result = await detect.checkProfile(repo);
assert.ok(result.warnings.some((w) => /secrets\.env/.test(w)));
});
it("fails when a hook file becomes unreadable (permission or race condition)", async () => {
const repo = makeRepo();
writePkg(repo, { start: "node index.js" });
detect.scaffoldProfile(repo, detect.detectNode(repo));
const hookPath = path.join(repo, ".ccam", "profile", "hooks", "health.sh");
fs.chmodSync(hookPath, 0o000);
try {
const result = await detect.checkProfile(repo);
assert.equal(result.ok, false);
assert.ok(result.errors.some((e) => /not readable/.test(e)));
} finally {
fs.chmodSync(hookPath, 0o755);
}
});
});
+7 -1
View File
@@ -360,7 +360,13 @@ async function checkProfile(dir) {
continue;
}
if (!(fs.statSync(hookPath).mode & 0o111)) errors.push(`hook not executable: ${name}.sh`);
const body = fs.readFileSync(hookPath, "utf8");
let body;
try {
body = fs.readFileSync(hookPath, "utf8");
} catch (err) {
errors.push(`${name}.sh is not readable`);
continue;
}
if (containsTodo(body)) errors.push(`${name}.sh still has an unresolved TODO`);
}