From 37e2164d3086e53c16a522baf5214b7890903963 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 13:30:23 +0000 Subject: [PATCH 1/6] Add uv-build CI tests Agent-Logs-Url: https://github.com/version-fox/version-vault/sessions/4686c1f2-f825-4d42-8839-b2a3643328a2 Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- .github/workflows/ci.yml | 40 ++++++++++++++++ package.json | 1 + src/sdks/python/uv-build.ts | 6 +++ tests/uv-build.test.ts | 95 +++++++++++++++++++++++++++++++++++++ 4 files changed, 142 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 tests/uv-build.test.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..fa603c5 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,40 @@ +name: CI + +on: + pull_request: + push: + branches: + - main + +jobs: + test: + name: Test (${{ matrix.os }}) + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup pnpm + uses: pnpm/action-setup@v4 + with: + run_install: false + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version-file: .node-version + cache: pnpm + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run tests + run: pnpm test diff --git a/package.json b/package.json index 30d2635..a97df82 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "scripts": { "build": "cfworker-builder gen-toml", "dev": "tsx watch ./src/runtime/node-server", + "test": "tsx --test tests/**/*.test.ts", "workers:dev": "wrangler dev" }, "devDependencies": { diff --git a/src/sdks/python/uv-build.ts b/src/sdks/python/uv-build.ts index 94a0c65..e30ddcc 100644 --- a/src/sdks/python/uv-build.ts +++ b/src/sdks/python/uv-build.ts @@ -272,4 +272,10 @@ app.get("/", async (ctx) => { ); }); +export const uvBuildTestHelpers = { + parseAsset, + filterItems, + sortItems, +}; + export default app; diff --git a/tests/uv-build.test.ts b/tests/uv-build.test.ts new file mode 100644 index 0000000..22e5742 --- /dev/null +++ b/tests/uv-build.test.ts @@ -0,0 +1,95 @@ +import assert from "node:assert/strict"; +import test from "node:test"; +import { uvBuildTestHelpers } from "../src/sdks/python/uv-build"; + +const release = "20260501"; + +function asset(name: string) { + return { + name, + browser_download_url: `https://example.com/${name}`, + size: 123, + content_type: "application/gzip", + digest: "sha256:0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", + }; +} + +test("parses uv-build Linux, macOS, and Windows assets", () => { + const linux = uvBuildTestHelpers.parseAsset( + release, + asset("cpython-3.13.3+20260501-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz") + ); + const macos = uvBuildTestHelpers.parseAsset( + release, + asset("cpython-3.13.3+20260501-aarch64-apple-darwin-install_only.tar.zst") + ); + const windows = uvBuildTestHelpers.parseAsset( + release, + asset("cpython-3.13.3+20260501-x86_64-pc-windows-msvc-shared-install_only.tar.gz") + ); + + assert.equal(linux?.platform.os, "linux"); + assert.equal(linux?.platform.arch, "x86_64"); + assert.equal(linux?.platform.libc, "gnu"); + assert.equal(linux?.asset?.sha256, "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef"); + + assert.equal(macos?.platform.os, "darwin"); + assert.equal(macos?.platform.arch, "aarch64"); + assert.equal(macos?.platform.libc, null); + + assert.equal(windows?.platform.os, "windows"); + assert.equal(windows?.platform.arch, "x86_64"); + assert.equal(windows?.platform.libc, null); +}); + +test("parses freethreaded uv-build assets", () => { + const item = uvBuildTestHelpers.parseAsset( + release, + asset("cpython-3.13.3+20260501-aarch64-unknown-linux-musl-freethreaded+pgo-full.tar.gz") + ); + + assert.equal(item?.variant, "freethreaded"); + assert.equal(item?.display_version, "3.13.3t"); + assert.equal(item?.platform.os, "linux"); + assert.equal(item?.platform.arch, "aarch64"); + assert.equal(item?.platform.libc, "musl"); +}); + +test("ignores assets that do not match uv-build naming rules", () => { + assert.equal( + uvBuildTestHelpers.parseAsset( + release, + asset("cpython-3.13.3+20260501-x86_64-unknown-linux-gnu.tar.gz") + ), + null + ); + assert.equal( + uvBuildTestHelpers.parseAsset( + release, + asset("cpython-3.13.3+20260501-x86_64-unknown-linux-install_only.tar.gz") + ), + null + ); +}); + +test("filters uv-build items by os, arch, and libc", () => { + const items = [ + "cpython-3.13.3+20260501-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz", + "cpython-3.13.3+20260501-aarch64-unknown-linux-musl-install_only_stripped.tar.gz", + "cpython-3.13.3+20260501-aarch64-apple-darwin-install_only.tar.zst", + "cpython-3.13.3+20260501-x86_64-pc-windows-msvc-shared-install_only.tar.gz", + ].map((name) => uvBuildTestHelpers.parseAsset(release, asset(name))).filter((item) => item !== null); + + assert.deepEqual( + uvBuildTestHelpers.filterItems(items, { os: "linux", arch: "aarch64", libc: "musl" }).map((item) => item.filename), + ["cpython-3.13.3+20260501-aarch64-unknown-linux-musl-install_only_stripped.tar.gz"] + ); + assert.deepEqual( + uvBuildTestHelpers.filterItems(items, { os: "darwin" }).map((item) => item.platform.os), + ["darwin"] + ); + assert.deepEqual( + uvBuildTestHelpers.filterItems(items, { os: "windows", arch: "x86_64" }).map((item) => item.platform.os), + ["windows"] + ); +}); From 03b785cecaa62533d66751f59d27eca3e84d03b5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 13:31:03 +0000 Subject: [PATCH 2/6] Fix cross-platform test script Agent-Logs-Url: https://github.com/version-fox/version-vault/sessions/4686c1f2-f825-4d42-8839-b2a3643328a2 Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a97df82..e430a14 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "cfworker-builder gen-toml", "dev": "tsx watch ./src/runtime/node-server", - "test": "tsx --test tests/**/*.test.ts", + "test": "tsx --test tests/uv-build.test.ts", "workers:dev": "wrangler dev" }, "devDependencies": { From fc45d1fdd639ff38c18aa6b22239542f7df12254 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 13:32:11 +0000 Subject: [PATCH 3/6] Limit CI workflow permissions Agent-Logs-Url: https://github.com/version-fox/version-vault/sessions/4686c1f2-f825-4d42-8839-b2a3643328a2 Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fa603c5..672f04f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,8 @@ jobs: test: name: Test (${{ matrix.os }}) runs-on: ${{ matrix.os }} + permissions: + contents: read strategy: fail-fast: false matrix: From c392ddf4b5834d3f05d282fb2b9b38967cad3942 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 13:34:06 +0000 Subject: [PATCH 4/6] Update @hono/node-server to 1.19.10 Agent-Logs-Url: https://github.com/version-fox/version-vault/sessions/4686c1f2-f825-4d42-8839-b2a3643328a2 Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index e430a14..c063c79 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "wrangler": "^4.46.0" }, "dependencies": { - "@hono/node-server": "^1.19.5", + "@hono/node-server": "^1.19.10", "hono": "^4.10.7", "tsx": "^4.20.6" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8f4f0e3..d0fb8ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@hono/node-server': - specifier: ^1.19.5 - version: 1.19.5(hono@4.10.7) + specifier: ^1.19.10 + version: 1.19.10(hono@4.10.7) hono: specifier: ^4.10.7 version: 4.10.7 @@ -389,8 +389,8 @@ packages: cpu: [x64] os: [win32] - '@hono/node-server@1.19.5': - resolution: {integrity: sha512-iBuhh+uaaggeAuf+TftcjZyWh2GEgZcVGXkNtskLVoWaXhnJtC5HLHrU8W1KHDoucqO1MswwglmkWLFyiDn4WQ==} + '@hono/node-server@1.19.10': + resolution: {integrity: sha512-hZ7nOssGqRgyV3FVVQdfi+U4q02uB23bpnYpdvNXkYTRRyWx84b7yf1ans+dnJ/7h41sGL3CeQTfO+ZGxuO+Iw==} engines: {node: '>=18.14.1'} peerDependencies: hono: ^4 @@ -421,67 +421,79 @@ packages: resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.0.5': resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.0.4': resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.0.4': resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.0.4': resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.0.4': resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.33.5': resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.33.5': resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.33.5': resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.33.5': resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.33.5': resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.33.5': resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.33.5': resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} @@ -898,7 +910,7 @@ snapshots: '@esbuild/win32-x64@0.25.4': optional: true - '@hono/node-server@1.19.5(hono@4.10.7)': + '@hono/node-server@1.19.10(hono@4.10.7)': dependencies: hono: 4.10.7 From 0af4c43828b86003962b2e04b898457cbc817bc9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 13:41:34 +0000 Subject: [PATCH 5/6] Restore test script after merge Agent-Logs-Url: https://github.com/version-fox/version-vault/sessions/e4b06b4a-d332-40eb-9d81-8c86a0925b95 Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 333706e..b91ce95 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "scripts": { "build": "cfworker-builder gen-toml", "dev": "tsx watch ./src/runtime/node-server", + "test": "tsx --test tests/uv-build.test.ts", "workers:dev": "wrangler dev" }, "devDependencies": { From 0ed5054a080d261c314339a90264e8dd37ad7835 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 1 May 2026 13:46:57 +0000 Subject: [PATCH 6/6] Declare pnpm package manager version Agent-Logs-Url: https://github.com/version-fox/version-vault/sessions/2dd03dc5-df6b-40cb-adfb-3d8e50c5d266 Co-authored-by: bytemain <13938334+bytemain@users.noreply.github.com> --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index b91ce95..0438df0 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "@version-fox/version-vault", "private": true, "version": "1.0.0", + "packageManager": "pnpm@10.33.2", "main": "index.js", "license": "MIT", "scripts": {