diff --git a/.github/workflows/openclaw-cross-os-release-checks-reusable.yml b/.github/workflows/openclaw-cross-os-release-checks-reusable.yml index d56492a5151..9b6282018d0 100644 --- a/.github/workflows/openclaw-cross-os-release-checks-reusable.yml +++ b/.github/workflows/openclaw-cross-os-release-checks-reusable.yml @@ -451,7 +451,7 @@ jobs: OUTPUT_DIR: ${{ runner.temp }}/openclaw-cross-os-release-checks/prepare/baseline run: | mkdir -p "${OUTPUT_DIR}" - npm pack --ignore-scripts --json "${BASELINE_SPEC}" --pack-destination "${OUTPUT_DIR}" > "${OUTPUT_DIR}/pack.json" + timeout --preserve-status 300s npm pack --ignore-scripts --json "${BASELINE_SPEC}" --pack-destination "${OUTPUT_DIR}" > "${OUTPUT_DIR}/pack.json" - name: Capture candidate metadata id: candidate_metadata diff --git a/test/scripts/openclaw-cross-os-release-workflow.test.ts b/test/scripts/openclaw-cross-os-release-workflow.test.ts index 0f8f196ba64..e100d102547 100644 --- a/test/scripts/openclaw-cross-os-release-workflow.test.ts +++ b/test/scripts/openclaw-cross-os-release-workflow.test.ts @@ -15,6 +15,12 @@ describe("cross-OS release checks workflow", () => { expect(workflow).not.toContain('pnpm dlx "tsx@${TSX_VERSION}"'); }); + it("bounds npm baseline packing during prepare", () => { + const workflow = readFileSync(WORKFLOW_PATH, "utf8"); + + expect(workflow).toContain("timeout --preserve-status 300s npm pack --ignore-scripts"); + }); + it("uses Windows-safe npm resolution for the TypeScript loader bootstrap", () => { const wrapper = readFileSync(WRAPPER_PATH, "utf8");