From 8363424f862b0ef2a5838570a5eac27a27827cb5 Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 15:56:51 -0300 Subject: [PATCH 01/10] docs: GitHub Actions runner migration + macOS artifacts design Co-Authored-By: Claude Opus 4.8 (1M context) --- ...6-07-29-github-runners-migration-design.md | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 docs/superpowers/specs/2026-07-29-github-runners-migration-design.md diff --git a/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md b/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md new file mode 100644 index 0000000..3da4964 --- /dev/null +++ b/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md @@ -0,0 +1,131 @@ +# GitHub Actions Runner Migration + macOS Artifacts + +**Date:** 2026-07-29 + +## Goal + +Update the runners used across the three GitHub Actions workflows, and add +macOS artifact production: + +- **A) `ci.yml`** — keep the `mulesoft` runners, but make it a pure build+test + workflow: remove all artifact output. +- **B) `main.yml` + `release.yml`** — replace the `mulesoft` runners with + standard GitHub-hosted runners. +- **C) `main.yml` + `release.yml`** — add a macOS runner leg so a + macOS-compatible artifact is produced. + +## Current state + +All three workflows use the same matrix: + +```yaml +matrix: + os: [ mulesoft-ubuntu, mulesoft-windows ] + include: + - os: mulesoft-ubuntu + script_name: linux + - os: mulesoft-windows + script_name: windows +runs-on: ${{ matrix.os }} +``` + +- `ci.yml` — scheduled (Wednesdays 12:00 UTC). Builds, creates distro, builds + Python wheel + Node package, runs Node tests. Then 3 upload-prep steps + (*Derive platform tokens*, *Stage renamed CLI distro*, *Stage OS-qualified + Node package*) and 4 `upload-artifact` steps (CLI distro, Python wheel, Node + package, native shared library). +- `main.yml` — push/PR to master. Same build steps plus master-only regression + + Node TCK conformance lanes, plus the same 3 prep + 4 upload-artifact steps. +- `release.yml` — on `v*` tags. Builds, then uploads assets to the GitHub + Release via `svenstaro/upload-release-action`. The native shared library + upload is split into **per-OS conditional** steps: Linux (`.so`), Windows + (`.dll`), plus a shared header upload. + +Artifact naming already derives arch from `uname -m` (`ARCH`), so adding a new +OS leg produces correctly-named artifacts automatically. + +## Changes + +### A) `ci.yml` — build + run only + +- Matrix and `runs-on` **unchanged** (keep `mulesoft-ubuntu` + `mulesoft-windows`). +- **Remove** these steps (they exist only to produce/stage uploads): + - *Derive platform tokens* + - *Stage renamed CLI distro* + - *Upload generated script* + - *Upload Python wheel* + - *Stage OS-qualified Node package* + - *Upload Node package* + - *Upload native shared library* +- **Keep** everything up to and including *Run Node.js Tests*. +- Result: `ci.yml` builds and runs tests, produces no artifacts. + +### B) `main.yml` + `release.yml` — GitHub-hosted runners + +Replace the matrix runner labels in both files: + +- `mulesoft-ubuntu` → `ubuntu-latest` +- `mulesoft-windows` → `windows-latest` + +`script_name` mappings (`linux`, `windows`) and all other steps stay the same. + +### C) macOS leg on `main.yml` + `release.yml` + +Add a third matrix entry to both files: + +```yaml +matrix: + os: [ ubuntu-latest, windows-latest, macos-latest ] + include: + - os: ubuntu-latest + script_name: linux + - os: windows-latest + script_name: windows + - os: macos-latest + script_name: macos +``` + +- Chosen runner: **`macos-latest` (Apple Silicon, arm64)**. `uname -m` returns + `arm64`, so all artifacts read `...-macos-arm64...` with no other change. +- **`main.yml`** — macOS is just another matrix leg; every existing step runs + for it. The *Upload native shared library* step already lists `dwlib.dylib` + in its `path`, so macOS is covered with no edit to that step. +- **`release.yml`** — add a new conditional step mirroring the existing + Linux/Windows branches: + + ```yaml + - name: Upload native shared library to release (macOS) + if: runner.os == 'macOS' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: native-lib/python/src/dataweave/native/dwlib.dylib + asset_name: dwlib-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.dylib + tag: ${{ github.ref }} + overwrite: true + ``` + + The shared *header* upload step is not OS-conditional and needs no change. + +## Orchestration + +A coordinator (main session) dispatches parallel subagents — one per workflow +file (`ci.yml`, `main.yml`, `release.yml`) since the edits are independent. All +work happens on a single new branch; a single PR is opened at the end. + +## Risks / notes + +- macOS `native-lib` native build uses `-J-Xmx6G`; `macos-latest` (arm64) has + ~7GB RAM. Should fit but is the tightest leg — monitor the first run. +- The master-only regression + Node TCK steps in `main.yml` will also execute + on the macOS leg for master pushes (expected, more coverage). +- macOS GitHub-hosted minutes bill at a higher multiplier than Linux/Windows. + +## Testing + +No unit tests apply. Validation is: +- YAML lint / parse sanity for all three files. +- Confirm no `mulesoft-*` labels remain in `main.yml` / `release.yml`, and that + `ci.yml` still uses them. +- Confirm `ci.yml` has zero `upload-artifact` steps. +- Confirm the three-way matrix + macOS release branch exist. From 1179d3b2ff88cdccdd0fc419404787a6e4f0a709 Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 16:04:33 -0300 Subject: [PATCH 02/10] ci: make ci.yml build+run only, drop artifact uploads --- .github/workflows/ci.yml | 67 ---------------------------------------- 1 file changed, 67 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2848cb8..ce22135 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -70,70 +70,3 @@ jobs: - name: Run Node.js Tests run: ./gradlew --stacktrace --no-problems-report native-lib:nodeTest shell: bash - - # Derive lowercase OS + runtime arch tokens for artifact names. - # OS comes from matrix.script_name (linux/windows); arch from uname -m - # (x86_64 today; stays correct if an arm64 runner is ever added). - - name: Derive platform tokens - run: echo "ARCH=$(uname -m)" >> "$GITHUB_ENV" - shell: bash - - # archive:false makes the artifact name equal the uploaded file name. - # Copy the Gradle-named distro zip to the convention name so the CLI - # artifact reads dw-cli---.zip. - - name: Stage renamed CLI distro - run: cp "native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.script_name }}.zip" "native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip" - shell: bash - - # Upload the artifact file - - name: Upload generated script - uses: actions/upload-artifact@v7.0.1 - with: - # archive:false skips the redundant outer zip (the distro is already a - # .zip) and names the artifact after the file — which already carries - # ${matrix.script_name}, so the matrix legs don't collide. No `name:`: - # it would be ignored under archive:false. - path: native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip - archive: false - - # Upload the Python wheel - - name: Upload Python wheel - uses: actions/upload-artifact@v7.0.1 - with: - # archive:false skips the redundant outer zip and names the artifact - # after the wheel — whose platform tag (manylinux/win_amd64/…) is - # already OS-unique, so the matrix legs don't collide. No `name:`: it - # would be ignored under archive:false. - path: native-lib/python/dist/dataweave_native-0.0.1-py3-*.whl - archive: false - - # npm pack emits the same filename (dataweave-native-0.0.1.tgz) on every - # OS. With archive:false the file NAME becomes the artifact name (the - # `name:` input is ignored), so copy to an OS-qualified name first to keep - # the matrix legs from colliding. - - name: Stage OS-qualified Node package - run: cp native-lib/node/dataweave-native-0.0.1.tgz "native-lib/node/dataweave-node-0.0.1-${{ matrix.script_name }}-${{ env.ARCH }}.tgz" - shell: bash - - # Upload the Node.js package - - name: Upload Node package - uses: actions/upload-artifact@v7.0.1 - with: - path: native-lib/node/dataweave-node-0.0.1-${{ matrix.script_name }}-${{ env.ARCH }}.tgz - # Single .tgz (already gzip-compressed); skip the redundant outer zip - # (v7+ feature). archive:false ignores `name:` and uses the file name, - # which the copy above made OS-unique. - archive: false - - # Upload the native shared library + header together per OS. Multiple - # files, so this stays archived (archive:false allows only one file); the - # zip is wanted here and `name:` still applies. - - name: Upload native shared library - uses: actions/upload-artifact@v7.0.1 - with: - name: dwlib-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }} - path: | - native-lib/python/src/dataweave/native/dwlib.dylib - native-lib/python/src/dataweave/native/dwlib.so - native-lib/python/src/dataweave/native/dwlib.dll - native-lib/python/src/dataweave/native/dwlib.h From e46bd32282decd21f30aad0009308c2c7532b03a Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 16:08:55 -0300 Subject: [PATCH 03/10] ci: main.yml to GitHub-hosted runners + macOS leg --- .github/workflows/main.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 37ee664..7edbb9e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -17,12 +17,14 @@ jobs: BUILD: strategy: matrix: - os: [ mulesoft-ubuntu, mulesoft-windows ] + os: [ ubuntu-latest, windows-latest, macos-latest ] include: - - os: mulesoft-ubuntu + - os: ubuntu-latest script_name: linux - - os: mulesoft-windows + - os: windows-latest script_name: windows + - os: macos-latest + script_name: macos runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job steps: From 16116d00ff0400f069434f4288ae959e1a9dffc4 Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 16:12:47 -0300 Subject: [PATCH 04/10] ci: release.yml to GitHub-hosted runners + macOS artifact --- .github/workflows/release.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f0f8c35..2610c8c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -11,12 +11,14 @@ jobs: RELEASE_EXTENSION: strategy: matrix: - os: [ mulesoft-ubuntu, mulesoft-windows ] + os: [ ubuntu-latest, windows-latest, macos-latest ] include: - - os: mulesoft-ubuntu + - os: ubuntu-latest script_name: linux - - os: mulesoft-windows + - os: windows-latest script_name: windows + - os: macos-latest + script_name: macos runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job @@ -129,6 +131,16 @@ jobs: tag: ${{ github.ref }} overwrite: true + - name: Upload native shared library to release (macOS) + if: runner.os == 'macOS' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: native-lib/python/src/dataweave/native/dwlib.dylib + asset_name: dwlib-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.dylib + tag: ${{ github.ref }} + overwrite: true + # Upload the native library header - name: Upload native library header to release uses: svenstaro/upload-release-action@v2 From 62c4fff8f94cff5eb1911302f0cbbeb84b44d5ad Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 16:21:53 -0300 Subject: [PATCH 05/10] ci: setup-python on all legs, drop dead ci.yml env, fix stale comment --- .github/workflows/ci.yml | 2 -- .github/workflows/main.yml | 7 ++++++- .github/workflows/release.yml | 5 +++++ 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce22135..c5efd3c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,8 +3,6 @@ name: CI Native CLI on: schedule: - cron: '0 12 * * 3' # This runs the workflow every wednesday day at 12:00 UTC -env: - NATIVE_VERSION: 100.100.100 # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 7edbb9e..3bc4d98 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -66,6 +66,11 @@ jobs: shell: bash # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install Python build dependencies run: python3 -m pip install --upgrade setuptools wheel shell: bash @@ -112,7 +117,7 @@ jobs: # Derive lowercase OS + runtime arch tokens for artifact names. # OS comes from matrix.script_name (linux/windows); arch from uname -m - # (x86_64 today; stays correct if an arm64 runner is ever added). + # (x86_64 on linux/windows, arm64 on macos). - name: Derive platform tokens run: echo "ARCH=$(uname -m)" >> "$GITHUB_ENV" shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2610c8c..2ffb93b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -55,6 +55,11 @@ jobs: shell: bash # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) + - name: Setup Python + uses: actions/setup-python@v5 + with: + python-version: '3.12' + - name: Install Python build dependencies run: python3 -m pip install --upgrade setuptools wheel shell: bash From e9487fbb6a33d57cc8b579a4e8cc2a1d64887e23 Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 16:43:03 -0300 Subject: [PATCH 06/10] ci: bump graalvm buildtools 0.11.2->0.11.5, add fail-fast: false Fixes Windows nativeCompile 'other has different root' on windows-latest: GraalVM toolcache (C:) and workspace (D:) live on different drives, and 0.11.2 relativizes the native-image args-file path unconditionally. 0.11.5 guards relativize to same-root paths and falls back to absolute. fail-fast: false stops one matrix leg's failure from cancelling the others. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/ci.yml | 1 + .github/workflows/main.yml | 1 + .github/workflows/release.yml | 1 + build.gradle | 2 +- 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5efd3c..bedae26 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,7 @@ on: jobs: CI: strategy: + fail-fast: false matrix: os: [ mulesoft-ubuntu, mulesoft-windows ] include: diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3bc4d98..4382b45 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -16,6 +16,7 @@ jobs: # This workflow contains a single job called "build" BUILD: strategy: + fail-fast: false matrix: os: [ ubuntu-latest, windows-latest, macos-latest ] include: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2ffb93b..4d81042 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -10,6 +10,7 @@ jobs: # This workflow contains a single job called "build" RELEASE_EXTENSION: strategy: + fail-fast: false matrix: os: [ ubuntu-latest, windows-latest, macos-latest ] include: diff --git a/build.gradle b/build.gradle index 3bf824b..ff1883c 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.11.2" + classpath "org.graalvm.buildtools.native:org.graalvm.buildtools.native.gradle.plugin:0.11.5" } } From 46e7131aff7f024d1751b768f32984c853d5ce38 Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 17:43:26 -0300 Subject: [PATCH 07/10] ci: remove setup-python, bump node-gyp 10->11 for GitHub runners Two failures surfaced once fail-fast:false let every leg run to completion: 1. Python wheel (ubuntu+macos): 'No module named setuptools'. The setup-python step I added put a second interpreter ahead of the one the Gradle daemon (started at Run Build) resolves as python3, so pip installed setuptools into the wrong interpreter. Removing setup-python restores the single-interpreter path that already passes; macOS image python allows the pip install, so the PEP 668 concern was moot. 2. Node package (windows): node-gyp 10 fails 'could not find Visual Studio 2017 or newer' because windows-latest now ships VS 18. node-gyp 11 recognizes it. Lockfile regenerated to resolve node-gyp 11.5.0. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/main.yml | 5 - .github/workflows/release.yml | 5 - native-lib/node/package-lock.json | 367 ++++++++++++------------------ native-lib/node/package.json | 2 +- 4 files changed, 148 insertions(+), 231 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4382b45..b2c5e54 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -67,11 +67,6 @@ jobs: shell: bash # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - name: Install Python build dependencies run: python3 -m pip install --upgrade setuptools wheel shell: bash diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4d81042..cdbfaec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,11 +56,6 @@ jobs: shell: bash # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) - - name: Setup Python - uses: actions/setup-python@v5 - with: - python-version: '3.12' - - name: Install Python build dependencies run: python3 -m pip install --upgrade setuptools wheel shell: bash diff --git a/native-lib/node/package-lock.json b/native-lib/node/package-lock.json index 5e35059..a25496b 100644 --- a/native-lib/node/package-lock.json +++ b/native-lib/node/package-lock.json @@ -16,7 +16,7 @@ "@types/node": "^20", "@vitest/coverage-v8": "^3.0", "fast-xml-parser": "^5.10.1", - "node-gyp": "^10", + "node-gyp": "^11", "typescript": "^5.5", "vitest": "^3.0" }, @@ -558,6 +558,19 @@ "node": ">=12" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.6.tgz", @@ -621,9 +634,9 @@ "license": "MIT" }, "node_modules/@npmcli/agent": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-2.2.2.tgz", - "integrity": "sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-3.0.0.tgz", + "integrity": "sha512-S79NdEgDQd/NGCay6TCoVzXSj74skRZIKJcpJjC5lOq34SZzyI6MqtiiWoiVWoVrTcGjNeC4ipbh1VIHlpfF5Q==", "dev": true, "license": "ISC", "dependencies": { @@ -634,20 +647,20 @@ "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@npmcli/fs": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.1.tgz", - "integrity": "sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, "license": "ISC", "dependencies": { "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/@pkgjs/parseargs": { @@ -1196,13 +1209,13 @@ } }, "node_modules/abbrev": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", - "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/agent-base": { @@ -1215,20 +1228,6 @@ "node": ">= 14" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -1318,13 +1317,13 @@ } }, "node_modules/cacache": { - "version": "18.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", - "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-19.0.1.tgz", + "integrity": "sha512-hdsUxulXCi5STId78vRVYEtDAjq99ICAUktLTeTYsLoTE6Z8dS0c8pWNCxwdrk9YfJeobDZc2Y186hD/5ZQgFQ==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -1332,13 +1331,13 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/chai": { @@ -1369,23 +1368,13 @@ } }, "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=6" + "node": ">=18" } }, "node_modules/color-convert": { @@ -1801,20 +1790,10 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/ip-address": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.2.0.tgz", - "integrity": "sha512-/+S6j4E9AHvW9SWMSEY9Xfy66O5PWvVEJ08O0y5JGyEKQpojb0K0GKpz/v5HJ/G0vi3D2sjGK78119oXZeE0qA==", + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.3.1.tgz", + "integrity": "sha512-1e9d3kb97NHJTIJDZW9rKqW2h6+dFa50Dy0fpPSMQp2ADje5gvKsXmdiK6dwY5t76TaTt5+P5N1Y/LoToIxP6g==", "dev": true, "license": "MIT", "engines": { @@ -1831,13 +1810,6 @@ "node": ">=8" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true, - "license": "MIT" - }, "node_modules/is-unsafe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-unsafe/-/is-unsafe-2.0.0.tgz", @@ -1991,27 +1963,26 @@ } }, "node_modules/make-fetch-happen": { - "version": "13.0.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-13.0.1.tgz", - "integrity": "sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-14.0.3.tgz", + "integrity": "sha512-QMjGbFTP0blj97EeidG5hk/QhKQ3T4ICckQGLgz38QF7Vgbk6e6FTARN8KhKxyBbWn8R0HU+bnw8aSoFPD4qtQ==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "proc-log": "^4.2.0", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/minimatch": { @@ -2054,18 +2025,18 @@ } }, "node_modules/minipass-fetch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", - "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -2097,6 +2068,13 @@ "node": ">=8" } }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/minipass-pipeline": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", @@ -2123,6 +2101,13 @@ "node": ">=8" } }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/minipass-sized": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", @@ -2149,44 +2134,24 @@ "node": ">=8" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, "node_modules/ms": { @@ -2216,9 +2181,9 @@ } }, "node_modules/negotiator": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", - "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { @@ -2226,57 +2191,54 @@ } }, "node_modules/node-gyp": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.3.1.tgz", - "integrity": "sha512-Pp3nFHBThHzVtNY7U6JfPjvT/DTE8+o/4xKsLQtBoU+j2HLsGlhcfzflAoUreaJbNmYnX+LlLi0qjV8kpyO6xQ==", + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-11.5.0.tgz", + "integrity": "sha512-ra7Kvlhxn5V9Slyus0ygMa2h+UqExPqUIkfk7Pc8QTLT956JLSy51uWFwHtIYy0vI8cB4BDhc/S03+880My/LQ==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", - "glob": "^10.3.10", "graceful-fs": "^4.2.6", - "make-fetch-happen": "^13.0.0", - "nopt": "^7.0.0", - "proc-log": "^4.1.0", + "make-fetch-happen": "^14.0.3", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^4.0.0" + "tar": "^7.4.3", + "tinyglobby": "^0.2.12", + "which": "^5.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/nopt": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", - "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "^2.0.0" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.6.tgz", + "integrity": "sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==", "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2399,13 +2361,13 @@ } }, "node_modules/proc-log": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-4.2.0.tgz", - "integrity": "sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/promise-retry": { @@ -2560,9 +2522,9 @@ } }, "node_modules/socks": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.8.tgz", - "integrity": "sha512-NlGELfPrgX2f1TAAcz0WawlLn+0r3FyhhCRpFFK2CemXenPYvzMWWZINv3eDNo9ucdwme7oCHRY0Jnbs4aIkog==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.9.tgz", + "integrity": "sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==", "dev": true, "license": "MIT", "dependencies": { @@ -2600,16 +2562,16 @@ } }, "node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/stackback": { @@ -2780,58 +2742,20 @@ } }, "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "deprecated": "Old versions of tar are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "version": "7.5.22", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.22.tgz", + "integrity": "sha512-MFO/QzvtAOmJbkhOaCTvbGcFN9L9b+JunIsDwaKljSOdcLMea3NJ1k9Usz/rjdfSXTq4dfzfeS7W4p4YOAAHeA==", "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "yallist": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=8" + "node": ">=18" } }, "node_modules/test-exclude": { @@ -2971,29 +2895,29 @@ "license": "MIT" }, "node_modules/unique-filename": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", - "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-4.0.0.tgz", + "integrity": "sha512-XSnEewXmQ+veP7xX2dS5Q4yZAvO40cBN2MWkJ7D/6sW4Dg6wYBNwM1Vrnz1FhH5AdeLIlUXRI9e28z1YZi71NQ==", "dev": true, "license": "ISC", "dependencies": { - "unique-slug": "^4.0.0" + "unique-slug": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/unique-slug": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", - "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-5.0.0.tgz", + "integrity": "sha512-9OdaqO5kwqR+1kVgHAhsp5vPNU0hnxRa26rBFNfNgM7M6pNtgzeBn3s/xbyCQL3dcjzOatcef6UUHpB/6MaETg==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/vite": { @@ -3168,9 +3092,9 @@ } }, "node_modules/which": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", - "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3180,7 +3104,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/why-is-node-running": { @@ -3315,11 +3239,14 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "ISC" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } } } } diff --git a/native-lib/node/package.json b/native-lib/node/package.json index 05c2b88..b1a3e86 100644 --- a/native-lib/node/package.json +++ b/native-lib/node/package.json @@ -37,7 +37,7 @@ "@types/node": "^20", "@vitest/coverage-v8": "^3.0", "fast-xml-parser": "^5.10.1", - "node-gyp": "^10", + "node-gyp": "^11", "typescript": "^5.5", "vitest": "^3.0" } From a32342c915b331187afddf78b46bbb0b13f501ec Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 18:27:21 -0300 Subject: [PATCH 08/10] CI: pin windows-2022 for Node addon build; --break-system-packages for macOS pip MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit windows-latest rolled forward to Visual Studio 18 (VS 2026), which node-gyp 11.5.0 cannot detect ("unknown version undefined"). Pin the Windows matrix leg to windows-2022, which ships the VS 2022 / v17 toolchain node-gyp 11 supports — the same toolchain class the self-hosted mulesoft-windows runner uses. Still a standard GitHub-hosted runner. macOS system Python enforces PEP 668, so plain pip install is refused; add --break-system-packages to the setuptools/wheel install step. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/main.yml | 6 +++--- .github/workflows/release.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b2c5e54..732fbab 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,11 +18,11 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest, macos-latest ] + os: [ ubuntu-latest, windows-2022, macos-latest ] include: - os: ubuntu-latest script_name: linux - - os: windows-latest + - os: windows-2022 script_name: windows - os: macos-latest script_name: macos @@ -68,7 +68,7 @@ jobs: # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) - name: Install Python build dependencies - run: python3 -m pip install --upgrade setuptools wheel + run: python3 -m pip install --break-system-packages --upgrade setuptools wheel shell: bash # Generate native-lib python wheel diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cdbfaec..209b9c4 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,11 +12,11 @@ jobs: strategy: fail-fast: false matrix: - os: [ ubuntu-latest, windows-latest, macos-latest ] + os: [ ubuntu-latest, windows-2022, macos-latest ] include: - os: ubuntu-latest script_name: linux - - os: windows-latest + - os: windows-2022 script_name: windows - os: macos-latest script_name: macos @@ -57,7 +57,7 @@ jobs: # Install Python build dependencies (setuptools/wheel may be missing on Windows runners) - name: Install Python build dependencies - run: python3 -m pip install --upgrade setuptools wheel + run: python3 -m pip install --break-system-packages --upgrade setuptools wheel shell: bash # Generate native-lib python wheel From 4bb7e4685d557261d83897182814cafb7fbc8349 Mon Sep 17 00:00:00 2001 From: mlischetti Date: Wed, 29 Jul 2026 19:29:29 -0300 Subject: [PATCH 09/10] CI: use Gradle distro classifier (osx) for macOS source filename MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit native-cli:distro classifies macOS as "osx" (getOsName()), so the produced zip is native-cli--native-distro-osx.zip — but the staging step looked for "-macos.zip" and failed the macOS leg at "Stage renamed CLI distro". Add a distro_os matrix field (linux/windows/osx) for the SOURCE filename while keeping script_name (macos) for the convention artifact name. Co-Authored-By: Claude Opus 4.8 (1M context) --- .github/workflows/main.yml | 9 ++++++++- .github/workflows/release.yml | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 732fbab..1a1a255 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -20,12 +20,19 @@ jobs: matrix: os: [ ubuntu-latest, windows-2022, macos-latest ] include: + # script_name → artifact-name OS token (our naming convention). + # distro_os → Gradle distro classifier (native-cli getOsName(): + # macOS is "osx", not "macos"), used for the source + # filename produced by native-cli:distro. - os: ubuntu-latest script_name: linux + distro_os: linux - os: windows-2022 script_name: windows + distro_os: windows - os: macos-latest script_name: macos + distro_os: osx runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job steps: @@ -122,7 +129,7 @@ jobs: # Copy the Gradle-named distro zip to the convention name so the CLI # artifact reads dw-cli---.zip. - name: Stage renamed CLI distro - run: cp "native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.script_name }}.zip" "native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip" + run: cp "native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.distro_os }}.zip" "native-cli/build/distributions/dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip" shell: bash # Upload the artifact file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 209b9c4..01e7cf7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -14,12 +14,19 @@ jobs: matrix: os: [ ubuntu-latest, windows-2022, macos-latest ] include: + # script_name → artifact-name OS token (our naming convention). + # distro_os → Gradle distro classifier (native-cli getOsName(): + # macOS is "osx", not "macos"), used for the source + # filename produced by native-cli:distro. - os: ubuntu-latest script_name: linux + distro_os: linux - os: windows-2022 script_name: windows + distro_os: windows - os: macos-latest script_name: macos + distro_os: osx runs-on: ${{ matrix.os }} # Steps represent a sequence of tasks that will be executed as part of the job @@ -86,7 +93,7 @@ jobs: uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.script_name }}.zip + file: native-cli/build/distributions/native-cli-${{env.NATIVE_VERSION}}-native-distro-${{ matrix.distro_os }}.zip asset_name: dw-cli-${{env.NATIVE_VERSION}}-${{ matrix.script_name }}-${{ env.ARCH }}.zip tag: ${{ github.ref }} overwrite: true From 463af49e3f83949c920bafa7a6d051be04a17dcb Mon Sep 17 00:00:00 2001 From: mlischetti Date: Thu, 30 Jul 2026 09:33:12 -0300 Subject: [PATCH 10/10] docs: reconcile runner-migration spec with as-shipped design Update the spec to match what actually shipped and passed CI: - Windows leg pinned to windows-2022 (VS 18 / node-gyp 11.5 incompatibility) with the node-gyp ^12 return-to-latest follow-up noted. - distro_os matrix field documented (Gradle classifies macOS as "osx"). - New "Deviations discovered during CI" section records the GraalVM 0.11.5 bump, the node-gyp ^11 bump, and the macOS --break-system-packages fix. - Testing checks updated for windows-2022, distro_os, and the green run. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...6-07-29-github-runners-migration-design.md | 59 +++++++++++++++++-- 1 file changed, 55 insertions(+), 4 deletions(-) diff --git a/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md b/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md index 3da4964..53974f5 100644 --- a/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md +++ b/docs/superpowers/specs/2026-07-29-github-runners-migration-design.md @@ -65,28 +65,55 @@ OS leg produces correctly-named artifacts automatically. Replace the matrix runner labels in both files: - `mulesoft-ubuntu` → `ubuntu-latest` -- `mulesoft-windows` → `windows-latest` +- `mulesoft-windows` → `windows-2022` `script_name` mappings (`linux`, `windows`) and all other steps stay the same. +> **Windows label: `windows-2022`, not `windows-latest`.** The migration +> originally targeted `windows-latest`, but that image rolled forward to +> Visual Studio 18 (VS 2026, install path `…\Microsoft Visual Studio\18\…`), +> which the pinned `node-gyp` 11.5.0 cannot detect (`find VS unknown version +> "undefined"`) — the Node addon build fails. `windows-2022` ships the VS 2022 +> / v17 toolchain that node-gyp 11 supports (the same toolchain class the +> self-hosted `mulesoft-windows` runner uses) and is still a standard +> GitHub-hosted runner, satisfying goal B. +> +> **Follow-up:** when `windows-2022` is eventually retired, the durable fix is +> bumping `node-gyp` to `^12.1.0` (which added VS 18/2026 support) and +> returning to `windows-latest`. + ### C) macOS leg on `main.yml` + `release.yml` Add a third matrix entry to both files: ```yaml matrix: - os: [ ubuntu-latest, windows-latest, macos-latest ] + os: [ ubuntu-latest, windows-2022, macos-latest ] include: + # script_name → artifact-name OS token (our naming convention). + # distro_os → Gradle distro classifier (native-cli getOsName(): + # macOS is "osx", not "macos"), used for the source + # filename produced by native-cli:distro. - os: ubuntu-latest script_name: linux - - os: windows-latest + distro_os: linux + - os: windows-2022 script_name: windows + distro_os: windows - os: macos-latest script_name: macos + distro_os: osx ``` - Chosen runner: **`macos-latest` (Apple Silicon, arm64)**. `uname -m` returns `arm64`, so all artifacts read `...-macos-arm64...` with no other change. +- **`distro_os` field.** `native-cli:distro` names its zip with the Gradle + `getOsName()` classifier, which is **`osx`** on macOS (not `macos`). The + staging step that renames the distro to the `dw-cli---.zip` + convention (and `release.yml`'s upload `file:`) must reference the *source* + file by its `distro_os` classifier, while the *convention* artifact name + keeps `script_name` (`macos`). For linux/windows the two tokens coincide, so + only macOS needs the distinction. - **`main.yml`** — macOS is just another matrix leg; every existing step runs for it. The *Upload native shared library* step already lists `dwlib.dylib` in its `path`, so macOS is covered with no edit to that step. @@ -120,6 +147,26 @@ work happens on a single new branch; a single PR is opened at the end. - The master-only regression + Node TCK steps in `main.yml` will also execute on the macOS leg for master pushes (expected, more coverage). - macOS GitHub-hosted minutes bill at a higher multiplier than Linux/Windows. +- `windows-2022` is pinned (see section B); it is not deprecated today but will + eventually be retired — track the node-gyp `^12` follow-up before then. + +## Deviations discovered during CI + +These fixes were required to get all three legs green and are outside the +original A/B/C scope; recorded here so the as-shipped state is complete. + +- **GraalVM buildtools `0.11.2 → 0.11.5`** (`build.gradle`). On `windows-latest` + the toolcache (C:) and workspace (D:) live on different drives; buildtools + 0.11.2 called `Path.relativize` across drive roots and crashed + `nativeCompile` (`'other' has different root`). 0.11.5 guards relativize to + same-root paths. +- **`node-gyp` bumped to `^11`** (`native-lib/node/package.json` + + regenerated lockfile). Intended to fix VS detection on `windows-latest`; it + did **not** (11.5.0 still can't see VS 18), which is why the Windows leg was + pinned to `windows-2022` instead. The bump is harmless and left in place. +- **`--break-system-packages`** added to the Python build-deps step in + `main.yml` + `release.yml`. macOS system Python enforces PEP 668 and refuses + the plain `pip install --upgrade setuptools wheel`. ## Testing @@ -127,5 +174,9 @@ No unit tests apply. Validation is: - YAML lint / parse sanity for all three files. - Confirm no `mulesoft-*` labels remain in `main.yml` / `release.yml`, and that `ci.yml` still uses them. +- Confirm the Windows leg uses `windows-2022` (not `windows-latest`). - Confirm `ci.yml` has zero `upload-artifact` steps. -- Confirm the three-way matrix + macOS release branch exist. +- Confirm the three-way matrix + macOS release branch exist, and that the + distro staging/upload references `matrix.distro_os` for the source filename. +- End-to-end: all three legs (`ubuntu-latest`, `windows-2022`, `macos-latest`) + of the `Build Native CLI` workflow pass — confirmed green on commit `4bb7e46`.