Commit Graph
202 Commits
Author SHA1 Message Date
Zoltan Kochanandgithub-actions[bot] 901f2438e0 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#17217)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-23 10:35:07 +02:00
Zoltan Kochanandgithub-actions[bot] 87636f932c chore: update dependencies, Node.js, pnpm, and GitHub Actions (#17191)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-21 14:08:06 +02:00
Zoltan Kochanandgithub-actions[bot] 8e8ffe85ad chore: update dependencies, Node.js, pnpm, and GitHub Actions (#17076)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-18 10:04:23 +02:00
Zoltan Kochanandgithub-actions[bot] 3a1a9b1797 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16948)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-15 11:15:32 +02:00
Zoltan Kochanandgithub-actions[bot] 3c76f7b72e chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16896)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-13 08:53:54 +02:00
Zoltan Kochanandgithub-actions[bot] 95fc851c75 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16864)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-12 11:25:04 +02:00
Zoltan Kochanandgithub-actions[bot] 3994543da9 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16841)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-11 10:51:07 +02:00
8778146f56 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16781)
* chore: update dependencies, Node.js, pnpm, and GitHub Actions

* ci: run the wasm nightly through pnx and dylint through rustup

pnpm 12.11 runs scripts with the toolchain from rust-toolchain.toml first
on PATH, so `cargo +nightly-2026-08-27` reached a plain cargo that does not
know the `+toolchain` syntax. The wasm and runtime-probe builds now run
`pnx --package=rust@nightly-2026-08-27 cargo`, which installs the nightly
with the wasm target, so the rustup install and the job-wide
RUSTUP_TOOLCHAIN go.

cargo-dylint builds its lint library through the rustup proxies, which
pick the nightly the library pins and set RUSTUP_TOOLCHAIN for
dylint-link. Under pnpm it got the workspace's stable cargo instead. CI
now runs `cargo dylint` directly, as `just dylint` does, and the unused
pipeline goes. The pre-push hook, which runs as a pnpm script, puts the
directory holding `rustup` first on PATH for its dylint check.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci: bundle the esm loader before the dylint check

`pnpm-deps-restorer` embeds `cas-loader.mjs.inc`, which the prepare
script of `@pnpm/esm-loader` generates. `pnpm pipeline` installed it
implicitly; the direct `cargo dylint` run needs the install as a step.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-09 15:09:32 +02:00
Zoltan Kochan 7e4db25f84 feat(pnpr): serve the web UI at /-/ui/ (#16769)
pnpr now serves its web UI at /-/ui/ from the same origin, so the UI
needs no CORS setup and no server URL. The UI ships as the separate
`@pnpm/pnpr-ui` package, an optional peer dependency of `@pnpm/pnpr`.
pnpr finds it next to its own package (npm and pnpm both link a resolved
peer beside the package that declares it), or reads it from `ui.dir`,
and `ui.enabled: false` turns it off.

- Serving: files from the UI directory, `index.html` for every other
  path outside `assets/`, a 404 for a missing hashed asset. The page
  gets a relative `<base>` so deep routes and path prefixes work without
  an absolute Vite base. Responses carry a CSP that keeps scripts and
  requests on this origin.
- The UI source stays on bit.cloud. `pnpr/ui` is a workspace of its own
  that pins `@pnpm/pnpr.apps.pnpr-web` from bit.cloud's registry and
  builds it into `pnpr/npm/pnpr-ui/dist`.
- Release: a `build-pnpr-ui` job builds the bundle. The verify and
  publish jobs download it. The smoke test installs the UI beside the
  wrapper and checks that pnpr serves it. `@pnpm/pnpr-ui` releases in a
  fixed group with `@pnpm/pnpr`.
2026-10-09 00:56:04 +02:00
Zoltan Kochanandgithub-actions[bot] 21c234428f chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16722)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-08 09:55:05 +02:00
Zoltan Kochanandgithub-actions[bot] 496217e397 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16671)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-06 19:41:51 +02:00
2515828983 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16640)
* chore: update dependencies, Node.js, pnpm, and GitHub Actions

* chore: generate the embedded CAS loader bundle on install

The CAS loader that `deps-restorer` embeds with include_str! was a
minified esbuild bundle committed to the repo. Every enhanced-resolve or
esbuild bump rewrote most of it, and a stale copy failed CI with a
byte-by-byte assertion diff.

`@pnpm/esm-loader` now generates it from a `prepare` script, so every
`pnpm install` that includes the package writes it before cargo builds.
Cargo already depends on that install for `.pnpm/crates`. The package
gets its own esbuild devDependency instead of borrowing pnpm11/pnpm's.
The filtered installs that feed cargo (install-crates and the wasm
release job) now also select `@pnpm/esm-loader`.

Also ignore GHSA-hp3w-g68c-fv3c. sprintf-js has no patched release, and
it is reached only through argparse 1 formatting its own help text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: write the CAS loader bundle atomically and generate it for wasm CI

An interrupted `prepare` could leave a truncated bundle that a later
up-to-date install never rewrites. Write to a temporary file and rename.

The pnpm-wasm workflow builds the CLI after a filtered install, so it now
selects `@pnpm/esm-loader` too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-06 06:57:03 +00:00
Zoltan Kochanandgithub-actions[bot] 146b66d3a0 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16574)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-10-05 11:15:30 +02:00
Trevor Burnham fca2d32621 ci(release): build the Linux CLI without forced unwind tables (#16565)
rustc emits unwind tables on Linux even under panic = "abort". The CLI
never unwinds, so pass -C force-unwind-tables=no to its Linux release
builds. The NAPI addon builds with panic = "unwind" and keeps them.

The flag goes in CARGO_TARGET_<TRIPLE>_RUSTFLAGS rather than RUSTFLAGS:
Cargo appends it to the ppc64le rustflags in .cargo/config.toml, while
RUSTFLAGS would replace them and drop the LLD workaround. cross forwards
CARGO_* variables into its container.

Measured on fat-LTO release builds of pnpm-cli:

- aarch64 gnu: 48.48 MB to 47.42 MB, .eh_frame 2.60 MB to 1.53 MB,
  gzip -185 KB.
- aarch64 musl: -0.98 MB.
- x86_64 gnu and musl: unchanged. Fat LTO merges in std's bitcode, and
  LLVM's x86 backend then emits the same frame info for every function.

On aarch64 every FDE remains, but without uwtable LLVM writes only the
prologue's unwind info, so each entry is smaller. Panic messages, exit
codes and RUST_BACKTRACE output are unchanged.
2026-10-05 00:51:11 +02:00
bac8077715 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#16373)
* chore: update dependencies, Node.js, pnpm, and GitHub Actions

* fix(deps): hold `@yarnpkg/core` at 4.9.1

`@yarnpkg/core` 4.9.2 was published with `got` declared as a Yarn
`patch:` specifier. pnpm resolves that to a `link:` into a nonexistent
workspace path, so `got` is missing and the TypeScript compile fails
with TS2307 in `@yarnpkg/core/lib/httpUtils.d.ts`.

Pin the catalog entry back to 4.9.1, override the transitive copy that
`@yarnpkg/nm` pulls in through `^4.9.1`, and add the package to
`update.ignoreDeps` so the daily update-lockfile run stops bumping it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 23:06:01 +02:00
Zoltan KochanandClaude Opus 5.5 b6cf8497d6 ci(release): unpack each verified tarball once (#16540)
* ci(release): unpack each verified tarball once

The release verify jobs compared every payload file against the packed
tarball with one `tar -xOf` per file, which decompresses the whole
tarball each time. Since the WebContainer runtime added dist/wasm (a
47 MB pnpm.wasm plus about 600 files) to both the pnpm and `@pnpm/exe`
wrappers, that loop runs for more than ten minutes. Unpack each tarball
once and compare files with cmp.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* ci(release): reject payload paths outside the package

With the tarball unpacked once, a files entry with enough .. segments
resolves to the same outside file on both sides of cmp and passes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-03 20:22:01 +02:00
Zoltan Kochan ef7d3c5e33 fix: publish the WebContainer runtime as @pnpm/wasm (#16544)
The 12.9.0 release bundled the 47 MB WebAssembly build and its runtime
dependencies into the `pnpm` and `@pnpm/exe` wrappers, so every native
install downloaded about 55 MB to run a binary that never uses it.

The runtime now publishes as its own package, `@pnpm/wasm`, which provides
the `pnpm`, `pn`, `pnpx`, and `pnx` bins. `pnpm/wasm/stage.mjs` writes it to
`pnpm/npm/wasm`, and the release stages it with the native packages. The
wrappers no longer carry `dist/wasm`. In a WebContainer their launchers
exit with an error that names `@pnpm/wasm`, and `install.js` leaves the
Node launchers in place instead of linking a native binary there.

The browser test now covers the `@pnpm/wasm` tarball installed locally and
globally, including the bin aliases and `npx` dispatch. The wrapper and
Corepack modes are removed, since the wrapper no longer runs in
WebContainers.
2026-10-03 17:52:52 +02:00
Zoltan Kochan 658dbc30a6 feat: support pnpm in StackBlitz WebContainers (#16499)
Compile the shared Rust CLI for wasm32-wasip1-threads and supply filesystem,
network, process, terminal and cancellation capabilities through a Node host.
Select host implementations at compile time so native builds retain their
native dependency/features and execution paths.

Bundle the WASM runtime in the regular npm wrappers and select it from the
WebContainer runtime marker. Keep Node launchers usable without installation
scripts. Native installation replaces all four launchers with native bytes.
Regenerate shims after upgrades or dependency builds replace Node targets with
native binaries, including before dependent lifecycle scripts run. Preserve
collision winners and publish replacement shims with executable permissions.
Reject non-descendant permission templates and intermediate symlink escapes, validate before creating directories, and avoid path-based cleanup races.
Restore direct native aliases in both version-management implementations.
Retain process cleanup after failed stdin shutdown. Prevent cross-origin redirects from replaying login credentials in both CLI lines, and strip npm-otp from cross-origin WASM requests. Avoid repeated selected-snapshot and removed-bin scans.

Preserve resolution, lockfile, integrity and build-approval behavior. Use an
isolated WASM store with rollback journals and process leases. Patch WASI path
normalization for multiple parent segments and retain that patch in bundles.

Add pinned tooling, release packaging, real-browser workflow and selection
tests, documentation and a release note. Document host limits, including the
Corepack cold-download failure in WebContainer's streaming hash implementation.
Controlled native CLI cases showed no separated slowdown, and the latest
hoisted rebuild and repeat-install fixture improved. Retain the documented
microbenchmark uncertainty and host limitations.

Related to pnpm/tasks#63.
2026-10-02 10:32:41 +02:00
Zoltan KochanandClaude Opus 5.5 f46c6c67c6 fix(release): run the ppc64le smoke test outside the checkout (#16414)
The root package.json pins packageManager to pnpm 12.8.1, so the freshly
built 12.8.2 binary handed off to the pinned x64 pnpm under qemu-ppc64le
and failed with an exec format error, blocking the v12.8.2 release.

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 02:39:06 +02:00
Zoltan Kochan 09bbe5baf7 fix(release): prevent ppc64le startup crashes (#16384)
The cross 0.2.5 ppc64le image uses binutils 2.26.1. It mislinks
calls to optional libc functions absent from its sysroot: the
published binary tests the dynamically resolved gettid address,
then branches to an unmapped address instead of calling it.

Let GCC retain its sysroot and library selection, but route its
linker invocation to the LLD bundled with the pinned Rust toolchain.
This fixes the weak-symbol calls without raising the glibc baseline
or adding another linker download. Scope the setting to ppc64le.

Smoke-test the actual release binary against a newer libc, where
gettid is present. Testing only against the build sysroot misses
the bug because Rust takes its syscall fallback there.

Closes pnpm/pnpm#16380.
2026-09-29 14:18:07 +02:00
1e87ac2062 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#15869)
* chore: update dependencies, Node.js, pnpm, and GitHub Actions

* chore: keep `@yarnpkg/core` at 4.9.1

`@yarnpkg/core@4.9.2` was published with a Yarn-only
`patch:got@npm%3A11.8.2#~/.yarn/patches/...` dependency. pnpm locked it
as a dangling `link:`, so `got` was never installed and `tsgo` failed on
`@yarnpkg/core/lib/httpUtils.d.ts` in TS CI / Compile & Lint.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

* chore: drop registry mirror URLs from the lockfile

The previous commit regenerated the lockfile with a local scoped
registry override, which wrote non-npmjs tarball URLs for `@pnpm/`
packages and failed the supply-chain check in CI.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

---------

Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-28 20:01:03 +02:00
Zoltan Kochan 387e1c82d3 fix: stop shipping the crashing arm64 musl pnpm 11 executable (#16307)
The `@pnpm/linuxstatic-arm64` binary segfaults at startup on arm64 musl
Linux (Alpine on ARM). Every published 11.x version is affected, and the
plain Node.js runtime it embeds runs fine, so the SEA injection for this
target is what breaks it. This is the same failure class that already
made darwin-x64 unsupported.

pnpm 11:
- Drop linux-arm64-musl from the pack-app targets, the `@pnpm/exe`
  optionalDependencies, the release publish loop and the GitHub release
  tarballs, and remove the workspace package.
- `@pnpm/exe`'s preinstall on arm64 musl Linux now fails with a message
  pointing at `npm install -g pnpm` or pnpm 12. The message choice moved
  into platform-pkg-name.js so it is unit-testable without such a host.

pnpm 12:
- Switching to (or self-updating to) a pnpm below 12 on arm64 musl Linux
  installs the JavaScript `pnpm` package. Existing 11.x releases keep
  their broken platform package, so this is what fixes projects that
  already pin one. A global `@pnpm/exe` left at the target version by an
  earlier self-update is not reused there either. The pnpm 12 native
  binary itself runs on that host.

The pnpm 11 JavaScript CLI already switches correctly: it keeps the
running package's identity, and only the JavaScript `pnpm` runs there.

Closes https://github.com/pnpm/pnpm/issues/10443
2026-09-28 07:16:05 +02:00
3172a576b7 fix: statically link CRT for windows-msvc pnpm binaries (#15853)
The published Windows pnpm.exe linked VCRUNTIME140.dll, so it exited
0xC0000135 on a clean Windows install. The Rust release job now passes
-C target-feature=+crt-static when building the CLI for
*-pc-windows-msvc. The NAPI cdylib build is unchanged, including the
musl -crt-static flag.

The release verification job rejects a Windows pnpm.exe that still
imports that DLL.

Closes https://github.com/pnpm/pnpm/issues/15723

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Zoltan Kochan <z@kochan.io>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 12:16:54 +02:00
Cody Tenney be9684b637 fix(release): keep Windows-only files out of Unix release archives (#15706)
Every per-target archive is built from one shared `dist/`, so the Windows
entries rode along into the macOS and Linux archives: the `node-gyp.cmd` batch
twin of the POSIX `node-gyp` wrapper, and the fastlist binaries `ps-list`
spawns from its Windows-only branch. In the macOS arm64 archive for 11.28.0
those two `.exe` files alone are 487 KB that no macOS process can load.

`copy-artifacts.ts` already drops the non-target `@reflink` native packages
per target, so the same pruning now covers these entries for every non-Windows
target. The Windows archives and the npm packages are unchanged: those serve
Windows, and the npm packages serve every platform out of one `dist/`.

The Rust CLI's GitHub archives carry `node-gyp.cmd` the same way, from a
node-gyp payload built once and shared by every target, so the non-Windows
archiving step drops it there too. Its npm packages keep it, as they do in the
TypeScript CLI.
2026-09-25 23:02:58 +02:00
Zoltan Kochanandgithub-actions[bot] 2db6f34be0 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#15339)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-25 11:29:04 +02:00
Zoltan Kochanandgithub-actions[bot] b53b8ff9e8 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#15295)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-22 19:15:36 +02:00
Zoltan Kochanandgithub-actions[bot] 8cf342a051 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#15101)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-20 23:07:29 +02:00
Zoltan Kochanandgithub-actions[bot] b4438d438b chore: update dependencies, Node.js, pnpm, and GitHub Actions (#15070)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-18 19:06:19 +02:00
Zoltan Kochanandgithub-actions[bot] 5276e7402b chore: update dependencies, Node.js, pnpm, and GitHub Actions (#15003)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-18 13:13:22 +02:00
Zoltan Kochanandgithub-actions[bot] ba2a57105e chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14940)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-16 09:14:51 +02:00
Zoltan Kochanandgithub-actions[bot] 49dbe22c32 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14922)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-15 12:51:51 +02:00
Zoltan Kochanandgithub-actions[bot] 62a242f718 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14850)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-12 11:57:43 +02:00
Zoltan KochanandClaude Opus 5 822f2dcb23 chore(ci): install every crate through pnpm (#14824)
Commit the pnpm-managed Cargo source block. The block is a function of
Cargo.lock, so an install regenerates it byte for byte and the tracked
`.cargo/config.toml` stops reporting as modified after every install. A new
Rust CI step fails if the committed block and the lockfile drift apart.

Cargo now resolves every crate through `.pnpm/crates` and falls back to its
own registry nowhere, so each job that runs cargo needs an install behind it.
Eight did not have one: both cargo-unused jobs, the micro-benchmark, the
integrated benchmark's build and executor jobs, and the three release builds.
The new `install-crates` action gives them one and narrows the JavaScript half
with `--filter pacquet`, which a filter does not do to the Cargo half.

The release builds go through `cross`, which mounts the checkout at
`/project`. pnpm links each crate into `.pnpm/crates` with a relative symlink,
so a store outside the checkout stops resolving under that mount. Those jobs
install into a store inside the checkout instead, on Linux, the one host where
cross containerizes the build at all.

The two workflows that commit no longer discard the block. It is tracked
content now, and a run that changes it should carry the change.


Claude-Session: https://claude.ai/code/session_01Gg6uVUzLw1MniCLC81TQjP
Claude-Session: https://claude.ai/code/session_01HwJS1pAz9HHQpJWEJAiaUu

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-11 02:27:47 +02:00
Zoltan KochanandClaude Opus 5 4d32532cc7 chore: install the Rust dependencies with pnpm (#14689)
* chore: install the Rust dependencies with pnpm

Turn on `cargo.enabled` so `pnpm install` installs the crates `Cargo.lock`
pins alongside the JavaScript dependencies. pnpm links the registry crates
into `.pnpm/crates/crates-io` and the git-sourced ones into
`.pnpm/crates/git`, then writes a source replacement block into
`.cargo/config.toml` that points Cargo at both.

The `node-semver` fork stays patched in. pnpm installs git-sourced crates
since pnpm/pnpm#14694, which shipped in the 12.4.1 the repository pins, so
enabling this no longer costs the fork's `<=` range and `Ord for Bound`
fixes.

Document the workflow, including the two things a contributor hits first:
`pnpm install` shells out to `cargo`, so it fails when `cargo` is off
`PATH`, and the generated block leaves the tracked `.cargo/config.toml`
modified after every install.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SDxJNVEeyUBb4pcepEpGcj

* ci: initialize Rust before pnpm installs dependencies

Every `pnpm install` now shells out to `cargo metadata`, and there is no
way to opt one out: `cargo.enabled` is read from `pnpm-workspace.yaml`
only, no CLI flag or `PNPM_CONFIG_*` variable overrides it, and `--filter`
does not narrow the Cargo half. So each job whose install runs gets the
pinned toolchain first. `pnpm/setup` installs unless told not to,
`pnpm/update` runs its own install, and `pnpm pipeline` installs before it
runs anything.

The step has to precede the install rather than follow it. The rustup
action ends with `git restore .`, which would otherwise wipe the source
replacement block back out of `.cargo/config.toml`.

Keep that block out of the two workflows that commit. It points at the
gitignored `.pnpm/crates`, so a commit carrying it would break every
Rust-only job and every checkout that has not installed. Both workflows
also decide whether to commit at all by reading `git status --porcelain`,
which the block would make non-empty on every run. Each discards it right
before that check: the release PR in a step of its own, the lockfile
update through the `post-update` command pnpm/update runs between its
install and its commit.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SDxJNVEeyUBb4pcepEpGcj

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-10 21:17:43 +02:00
Zoltan Kochanandgithub-actions[bot] a75be2f56d chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14806)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-10 19:11:38 +02:00
Zoltan Kochanandgithub-actions[bot] c52f5d3686 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14762)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-10 08:33:20 +02:00
Zoltan Kochanandgithub-actions[bot] 2a762b7d53 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14681)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-08 13:29:35 +02:00
Zoltan KochanandClaude Opus 5 e91c63887e feat: add android-arm64 and android-x64 builds (#14660)
Build the Rust CLI and the NAPI addon for aarch64-linux-android and
x86_64-linux-android and publish them as `@pnpm/exe.android-*` and
`@pnpm/napi.android-*`, so installing pnpm in Termux resolves a native binary
instead of failing the preinstall with no prebuilt binary for the platform.
Closes pnpm/pnpm#14431.

pnpm 11 reached Android because it was a JavaScript CLI and bionic was
irrelevant to it. pnpm 12 ships per-platform native binaries, which turned that
into a hard install failure.

This ships a dedicated artifact rather than aliasing the existing musl one onto
android. Aliasing would mean dropping `libc: ["musl"]` from the shared packages
and weakening that metadata for Alpine consumers, and it does not work anyway:
the musl binary's `getaddrinfo` reads `/etc/resolv.conf`, which Android does
not have and which cannot be created without root, so every registry lookup
fails there. A bionic binary resolves through Android's own resolver. The
generated manifests carry `os: ["android"]` with no `libc` field, since bionic
is neither of the two the field can name.

Cross.toml pins newer images for the two targets. The ones cross picks by
default carry NDK r21, whose toolchain predates Rust's move from libgcc to
libunwind, so linking fails with `cannot find -lunwind`. They are pinned by
digest rather than tag because they build published, attested binaries.

Android has no CI behind it: nothing in the release pipeline or the test suite
runs on a device or an emulator, so this is best-effort.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-07 16:35:46 +02:00
Zoltan Kochan 52859b9bfd feat: add freebsd-x64, linux-ppc64 and linux-s390x builds (#14656)
Build the Rust CLI and the NAPI addon for x86_64-unknown-freebsd,
powerpc64le-unknown-linux-gnu and s390x-unknown-linux-gnu, and publish them as
`@pnpm/exe.*` and `@pnpm/napi.*` platform packages, so installing pnpm on those
hosts resolves a native binary instead of failing the preinstall with no
prebuilt binary for the platform. Closes pnpm/pnpm#14597.

pnpm 11's npm package was a JavaScript CLI that ran wherever Node.js ran, so
all three worked without anyone building for them. pnpm 12 ships per-platform
native binaries, which turned that into a hard install failure. ppc64le and
s390x were the only two architectures Node.js ships an official binary for that
pnpm did not; both were reported on pnpm/pnpm#14651, which stays open for
OpenBSD, a tier 3 Rust target with no rustup std and no cross image.

The release matrix builds all three with cross on the existing x86_64 Linux
runner, the same way it already builds the aarch64 and riscv64 targets, so no
new hardware is involved.

The little-endian POWER package is `@pnpm/exe.linux-ppc64`, not `-ppc64le`.
Node reports both endiannesses as `ppc64` and npm's `cpu` field cannot express
which, so the name has to be what `process.arch` yields. Only the little-endian
build is released, matching Node.

FreeBSD's platform entry is a bare specifier rather than a glibc/musl pair. It
has no libc split, so it takes the same shape as darwin and win32 and never
reaches the libc ordering, and its manifest carries no `libc` field.
2026-09-07 14:57:22 +02:00
velonica0andZoltan Kochan 7a27a8efd9 feat: add linux-riscv64 build (#14529)
Build the Rust CLI for riscv64gc-unknown-linux-gnu and publish it as
@pnpm/exe.linux-riscv64, so installing pnpm on a riscv64 host resolves a
native binary instead of finding no prebuilt binary for the platform.

The release matrix builds the target with cross on the existing x86_64 Linux
runner, the same way it already builds both aarch64 targets, so no riscv64
hardware is involved.

PLATFORMS.linux gets a plain string specifier rather than a glibc/musl pair.
Only a glibc build is released, and the libc ordering maps over the pair's
keys, so a pair with a missing musl entry would yield an undefined specifier.

---------

Co-authored-by: Zoltan Kochan <z@kochan.io>
2026-09-07 12:30:44 +02:00
Zoltan Kochanandgithub-actions[bot] 08e64d4b83 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14603)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-07 11:29:41 +02:00
Zoltan Kochanandgithub-actions[bot] 7a0a0655cb chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14577)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-09-05 09:38:08 +02:00
Zoltan Kochan 949c8d3b62 ci(release): retry cross builds on transient failures (#14522)
The v12.3.2 release run died in "Package pnpm-napi darwin-x64" because
Apple clang segfaulted while linking the httparse build script. Nothing
in the tree changed; the same Blacksmith image built v12.3.1 fine the
day before. Every other packaging job was cancelled and the release had
to wait for the run to finish before "re-run failed jobs" was possible.

Route the three release cross builds through a wrapper script that
retries up to three times. Cargo keeps the crates a failed attempt
finished, so a retry only redoes the crate that died.

The Windows legs of build-rust and build-pnpr now run the build step
under bash instead of the default pwsh, as the napi packaging job
already did on both Windows targets. The clang-cl environment for
win32-arm64 is exported through GITHUB_ENV and GITHUB_PATH, so it
reaches bash the same way.
2026-09-04 03:12:51 +02:00
Zoltan Kochan d34902d5a6 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14400) 2026-09-02 18:35:33 +02:00
Zoltan Kochan 28bb2a339b ci: reference same-repository actions and workflows with the self-repository syntax (#14452)
zizmor's self-repository audit flags every `uses: ./.github/...` reference
now that GitHub has a dedicated `$/` form. The `$/` form resolves against the
workflow's own commit rather than the runtime checkout, so it cannot load an
action cloned into the workspace at runtime, and GitHub treats it as pinned.

Rewrites all 22 references (18 local actions, 4 reusable workflow calls).

With the `$/` form the runner downloads the whole repository as an action
archive at job setup, and that download fails on any broken symlink in the
tree. The four broken symlinks were all test fixtures: the directory-fetcher
and cafs tests now copy their fixture into a temp dir and create the broken
symlink there, and the has-not-outdated-deps fixture drops two dangling
node_modules links that `pnpm outdated` never followed.

pnpm's GitHub Actions dependency discovery only followed `./` references
into local actions and reusable workflows; both stacks now follow `$/` too.
2026-09-02 13:58:57 +02:00
Zoltan Kochan 340c0384aa fix(release): verify declared Rust pnpm binary (#14390) 2026-09-01 01:29:29 +02:00
Zoltan Kochanandgithub-actions[bot] 4c356251c9 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14344)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-31 16:33:34 +02:00
Zoltan Kochanandgithub-actions[bot] a3f44249db chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14328)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-29 16:36:52 +02:00
Zoltan Kochanandgithub-actions[bot] d241d0ba15 chore: update dependencies, Node.js, pnpm, and GitHub Actions (#14271)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-08-28 15:07:35 +02:00
Zoltan Kochan 03436d6880 fix: repair TS CI compile and lint after the dependency and Node.js update (#14206)
The dependency update (pnpm/pnpm#14205) broke TS CI / Compile & Lint in
two independent ways.

streamx 2.28.1 declares the 'data' event payload as unknown, so the five
tar-stream data handlers in the releasing commands that annotated the
chunk as Buffer no longer typechecked. They now take the chunk as
unknown and cast at the use site; tar-stream emits Buffers at runtime,
so the emitted JavaScript is unchanged.

The Node.js v26.8.0 binaries on nodejs.org were built with a bogus
version string and self-report as 26.8.0-alpha.0.0.0 (Node.js shipped
26.8.1 the next day to correct it). That prerelease-looking version made
cspell's engine guard reject the runtime during lint and made node-gyp
request a nonexistent v26.8.0-alpha.0.0.0 headers tarball for native
builds. The pinned runtime is bumped to 26.8.1 in the root devEngines,
the compile-only script, the CI test matrix, and the benchmark and
release workflows.
2026-08-27 00:49:41 +02:00