diff options
| author | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-16 18:43:23 +0300 |
|---|---|---|
| committer | Ogulcan Celik <ogulcancelik@gmail.com> | 2026-09-16 18:43:23 +0300 |
| commit | 3f78f172d9f9fe1a9422334c5ae03cd5ac685ebd (patch) | |
| tree | 3f6a141652b4480a4934fc6b85032a5c9a5eb158 /scripts/release-workflows.test.ts | |
| parent | 36db8ff3f4bee21b06f3208422be7cf91c7d3e40 (diff) | |
fix: address release promotion review findings
Diffstat (limited to 'scripts/release-workflows.test.ts')
| -rw-r--r-- | scripts/release-workflows.test.ts | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/scripts/release-workflows.test.ts b/scripts/release-workflows.test.ts index a169204f..75097710 100644 --- a/scripts/release-workflows.test.ts +++ b/scripts/release-workflows.test.ts @@ -33,6 +33,21 @@ describe("official publishing workflow boundaries", () => { expect(adminGate.run).not.toContain("ogulcancelik"); }); + test("release arguments are not interpolated into executable shell text", () => { + const input = `untrusted'\"$(echo unexpected-command)`; + for (const args of [ + ["preview", input], + ["release-prepare", input, input], + ["release-publish", input, input], + ["release", input, input], + ]) { + const result = spawnSync("just", ["--dry-run", ...args], { encoding: "utf8" }); + expect(result.status).toBe(0); + expect(result.stdout + result.stderr).not.toContain(input); + expect(result.stdout + result.stderr).not.toContain("unexpected-command"); + } + }); + test.skipIf(process.platform === "win32")("admin gate permits admins and fails closed for other roles or API errors", () => { const dir = mkdtempSync("/var/tmp/herdr-admin-gate-"); try { |
