From 75b3576670794f1dc201f1de537da3078a822d3d Mon Sep 17 00:00:00 2001 From: Sinabina Date: Tue, 21 Jul 2026 11:07:36 -0700 Subject: [PATCH] fix: use portable archive paths on Windows --- .github/workflows/release-artifacts.yml | 7 +++++-- runtime/runtime-bootstrap.mjs | 2 +- skills/debug/references/support/runtime-bootstrap.mjs | 2 +- skills/design/references/support/runtime-bootstrap.mjs | 2 +- skills/plan/references/support/runtime-bootstrap.mjs | 2 +- skills/qa/references/support/runtime-bootstrap.mjs | 2 +- skills/review/references/support/runtime-bootstrap.mjs | 2 +- skills/ship/references/support/runtime-bootstrap.mjs | 2 +- test/gstack2-runtime-release-channel.test.ts | 3 +++ 9 files changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/release-artifacts.yml b/.github/workflows/release-artifacts.yml index 4e993d7f0..e2c53d707 100644 --- a/.github/workflows/release-artifacts.yml +++ b/.github/workflows/release-artifacts.yml @@ -120,12 +120,15 @@ jobs: browser_cleanup trap - EXIT stage="$RUNNER_TEMP/runtime-components" - mkdir -p "$stage" "$GITHUB_WORKSPACE/release-output" + # GNU tar treats a Windows drive colon in an archive path as a + # remote-host separator. Keep archive output in Git Bash's POSIX view. + release_dir="$(pwd -P)/release-output" + mkdir -p "$stage" "$release_dir" node .github/scripts/stage-runtime-components.mjs "$active" "$stage" for component_dir in "$stage"/*; do test -d "$component_dir" || continue component=$(basename "$component_dir") - archive="$GITHUB_WORKSPACE/release-output/gstack-runtime-2.0.0-$TARGET-$component.tar.gz" + archive="$release_dir/gstack-runtime-2.0.0-$TARGET-$component.tar.gz" tar -czf "$archive" -C "$component_dir" gstack node -e 'const fs=require("fs"),c=require("crypto"),p=process.argv[1];const b=fs.readFileSync(p);fs.writeFileSync(p+".sha256",c.createHash("sha256").update(b).digest("hex")+" "+require("path").basename(p)+"\n")' "$archive" done diff --git a/runtime/runtime-bootstrap.mjs b/runtime/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/runtime/runtime-bootstrap.mjs +++ b/runtime/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/skills/debug/references/support/runtime-bootstrap.mjs b/skills/debug/references/support/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/skills/debug/references/support/runtime-bootstrap.mjs +++ b/skills/debug/references/support/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/skills/design/references/support/runtime-bootstrap.mjs b/skills/design/references/support/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/skills/design/references/support/runtime-bootstrap.mjs +++ b/skills/design/references/support/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/skills/plan/references/support/runtime-bootstrap.mjs b/skills/plan/references/support/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/skills/plan/references/support/runtime-bootstrap.mjs +++ b/skills/plan/references/support/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/skills/qa/references/support/runtime-bootstrap.mjs b/skills/qa/references/support/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/skills/qa/references/support/runtime-bootstrap.mjs +++ b/skills/qa/references/support/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/skills/review/references/support/runtime-bootstrap.mjs b/skills/review/references/support/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/skills/review/references/support/runtime-bootstrap.mjs +++ b/skills/review/references/support/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/skills/ship/references/support/runtime-bootstrap.mjs b/skills/ship/references/support/runtime-bootstrap.mjs index c25d572f2..75c1a91f1 100644 --- a/skills/ship/references/support/runtime-bootstrap.mjs +++ b/skills/ship/references/support/runtime-bootstrap.mjs @@ -16,7 +16,7 @@ export const BOOTSTRAP_RUNTIME_VERSION = "2.0.0"; // Keep the runtime compatibility version separate from the immutable release // channel. Release candidates carry the 2.0.0 runtime contract while letting // fresh-machine production journeys run before the stable v2.0.0 tag exists. -export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.4"; +export const BOOTSTRAP_RELEASE_TAG = "v2.0.0-rc.5"; export const OFFICIAL_MANIFEST_URL = `https://github.com/time-attack/gstack/releases/download/${BOOTSTRAP_RELEASE_TAG}/gstack-runtime-manifest.json`; const CAPABILITIES = new Set(["browser", "browser-visible", "design", "pdf", "diagram", "ios"]); diff --git a/test/gstack2-runtime-release-channel.test.ts b/test/gstack2-runtime-release-channel.test.ts index 60d3a9205..0a30e8b00 100644 --- a/test/gstack2-runtime-release-channel.test.ts +++ b/test/gstack2-runtime-release-channel.test.ts @@ -66,6 +66,9 @@ describe("GStack runtime release channel", () => { expect(workflow).toContain('gh release create "$GITHUB_REF_NAME"'); expect(workflow).toContain("pathToFileURL(p).href"); expect(workflow).toContain('path").join(process.env.GITHUB_WORKSPACE,".gstack-runtime-smoke.html")'); + expect(workflow).toContain('release_dir="$(pwd -P)/release-output"'); + expect(workflow).toContain('archive="$release_dir/gstack-runtime-2.0.0-$TARGET-$component.tar.gz"'); + expect(workflow).not.toContain('archive="$GITHUB_WORKSPACE/release-output/'); expect(workflow).not.toContain("goto about:blank"); expect(buildSection).not.toContain("sigstore/cosign-installer"); expect(manifestSection).toContain("sigstore/cosign-installer");