Files
pnpm/Cargo.toml
Zoltan Kochan 763ddf1c99 chore(pacquet): wire pacquet workflows into monorepo (#11635)
* chore(pacquet): wire pacquet workflows into monorepo

Move Cargo workspace, Rust toolchain configs, justfile, composite actions,
and 7 workflow files out of `pacquet/` and up to the repo root so:

  - cargo / just / taplo run from repo root, the way the rest of the
    monorepo's tooling does
  - GitHub Actions actually discovers the workflows (it only reads
    `.github/workflows/` at the repo root)

Workflows are prefixed with `pacquet-` and renamed to "Pacquet ..." so
they don't collide with the existing pnpm CI. Path filters are scoped
to `pacquet/**` so they don't trigger on every commit. The cargo entry
from pacquet's standalone `dependabot.yml` is folded into the root one;
pacquet's `CODEOWNERS` and `pull_request_template.md` are dropped because
the root copies supersede them.

Path rewrites:
  - `Cargo.toml` workspace members → `pacquet/crates/*`, `pacquet/tasks/*`
  - all path-deps in `[workspace.dependencies]` → `pacquet/...`
  - `justfile` recipes (`install`, `install-hooks`) point at `pacquet/...`
  - `.taplo.toml` include globs → `pacquet/crates/*/*.toml`, `pacquet/tasks/*/*.toml`
  - `pacquet/npm/pacquet/scripts/generate-packages.mjs` REPO_ROOT walks one
    more level up
  - workflow `paths:` filters, `hashFiles(...)`, and shell paths all updated

Verified: `cargo metadata` resolves the workspace, `cargo fmt --check`
clean, `taplo format --check` picks up all 26 Cargo.tomls, `actionlint`
reports no new issues (the `type:`-on-input warnings on the rustup action
predate this move).

* chore(pacquet): drop pnpm version pin from pacquet CI workflows

The monorepo's root `package.json` declares `pnpm@11.1.1` under
`packageManager`, which conflicts with the workflows' explicit
`version: 11.0.0-rc.5` and trips `pnpm/action-setup` ERR_PNPM_BAD_PM_VERSION.

The pin was a pacquet-era workaround for the v9 lockfile while pnpm 11
was still pre-release. Stable 11.x writes v9 too, so let action-setup
read the version from `packageManager` like every other workflow in
this repo does.

* chore(pacquet): use pnpm/setup matching the rest of the monorepo

Replaces `pnpm/action-setup@v6` with the same `pnpm/setup@b1cac3...`
SHA the rest of pnpm/pnpm uses (release.yml, test.yml, ci.yml,
benchmark.yml, audit.yml). Reads pnpm version from `packageManager`
in root package.json, and skips the implicit `pnpm install` since
pacquet does its own scoped install via `just install` (which only
touches `pacquet/tasks/registry-mock/`).

The release workflow now also installs Node via the same action
(`runtime: node@22`) instead of via `pnpm runtime -g set node 22`,
since pnpm/setup handles runtimes in one step.

* chore(pacquet): tighten permissions and Dependabot cooldown

Address zizmor warnings on the pacquet CI changes:

  - `dependabot.yml`: the cargo entry I added in the previous commit
    inherited from pacquet's standalone repo and is missing the
    `cooldown: default-days: 7` the github-actions entry uses. Add it
    so cargo and github-actions debounce updates consistently.

  - `pacquet-ci.yml`, `pacquet-codecov.yml`, `pacquet-cargo-unused.yml`
    lacked a top-level `permissions:` block, so GITHUB_TOKEN inherited
    the repo default. Declare `contents: read` — every job in these
    workflows only reads the repo and runs local checks.

The other four pacquet workflows already declare permissions
explicitly (integrated-benchmark/comment, micro-benchmark, release).

* chore(pacquet): add "reimagining" to cspell dictionary

cspell at the repo root scans all `**/README.md` and was rejecting
`pacquet/README.md` and `pacquet/npm/pacquet/README.md`, which describe
pacquet as "not a reimagining of pnpm." Add the word to the existing
allow-list rather than rewording two READMEs imported from a separate
repo.

* fix(pacquet): prefix workspace-relative paths with pacquet/

Two Rust source files looked up paths off the cargo workspace root
(\`cargo locate-project --workspace\`), which now resolves to the
monorepo root rather than the pacquet directory. Add the \`pacquet/\`
prefix:

  - \`tasks/registry-mock/src/dirs.rs\` — \`registry_mock()\` was
    pointing the node launcher at \`<repo>/tasks/registry-mock/launch.mjs\`
    instead of \`<repo>/pacquet/tasks/registry-mock/launch.mjs\`, which
    failed every Pacquet CI test job ("Cannot find module ...launch.mjs").
  - \`tasks/micro-benchmark/src/main.rs\` — same idea for the
    fixtures folder.
2026-05-14 18:17:45 +02:00

125 lines
5.1 KiB
TOML

[workspace]
resolver = "2"
members = ["pacquet/crates/*", "pacquet/tasks/*"]
[workspace.package]
authors = ["Yagiz Nizipli <yagiz@nizipli.com"]
description = "Pacquet"
edition = "2024"
homepage = "https://github.com/pnpm/pacquet"
keywords = ["nodejs", "package", "manager", "pnpm", "npm"]
license = "MIT"
repository = "https://github.com/pnpm/pacquet"
[workspace.dependencies]
# Crates
pacquet-cli = { path = "pacquet/crates/cli" }
pacquet-cmd-shim = { path = "pacquet/crates/cmd-shim" }
pacquet-fs = { path = "pacquet/crates/fs" }
pacquet-registry = { path = "pacquet/crates/registry" }
pacquet-tarball = { path = "pacquet/crates/tarball" }
pacquet-testing-utils = { path = "pacquet/crates/testing-utils" }
pacquet-package-manifest = { path = "pacquet/crates/package-manifest" }
pacquet-package-manager = { path = "pacquet/crates/package-manager" }
pacquet-package-is-installable = { path = "pacquet/crates/package-is-installable" }
pacquet-lockfile = { path = "pacquet/crates/lockfile" }
pacquet-modules-yaml = { path = "pacquet/crates/modules-yaml" }
pacquet-network = { path = "pacquet/crates/network" }
pacquet-config = { path = "pacquet/crates/config" }
pacquet-executor = { path = "pacquet/crates/executor" }
pacquet-git-fetcher = { path = "pacquet/crates/git-fetcher" }
pacquet-diagnostics = { path = "pacquet/crates/diagnostics" }
pacquet-graph-hasher = { path = "pacquet/crates/graph-hasher" }
pacquet-store-dir = { path = "pacquet/crates/store-dir" }
pacquet-reporter = { path = "pacquet/crates/reporter" }
pacquet-patching = { path = "pacquet/crates/patching" }
pacquet-real-hoist = { path = "pacquet/crates/real-hoist" }
pacquet-workspace = { path = "pacquet/crates/workspace" }
# Tasks
pacquet-registry-mock = { path = "pacquet/tasks/registry-mock" }
# Dependencies
async-recursion = { version = "1.1.1" }
clap = { version = "4", features = ["derive", "string"] }
command-extra = { version = "1.0.0" }
base64 = { version = "0.22.1" }
dashmap = { version = "6.1.0" }
derive_more = { version = "2.1.1", features = ["full"] }
diffy = { version = "0.5.0" }
dunce = { version = "1.0.5" }
home = { version = "0.5.12" }
httpdate = { version = "1.0.3" }
ignore = { version = "0.4.25" }
indexmap = { version = "2.14.0", features = ["serde"] }
insta = { version = "1.47.2", features = ["yaml", "glob", "walkdir"] }
itertools = { version = "0.14.0" }
futures-util = { version = "0.3.32" }
gethostname = { version = "1" }
miette = { version = "7.6.0", features = ["fancy"] }
num_cpus = { version = "1.17.0" }
os_display = { version = "0.1.4" }
reflink-copy = { version = "0.1.29" }
junction = { version = "2.0.0" }
libc = { version = "0.2.185" }
reqwest = { version = "0.13", default-features = false, features = [
"hickory-dns",
"json",
"rustls",
"socks",
"stream",
] }
node-semver = { version = "2.2.0" }
pathdiff = { version = "0.2.3" }
pipe-trait = { version = "0.4.0" }
rayon = { version = "1.12.0" }
rmp-serde = { version = "1.3.0" }
rusqlite = { version = "0.39.0", features = ["bundled"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = { version = "1.0.149", features = ["preserve_order"] }
serde-saphyr = { version = "0.0.26" }
# 0.11 removes the LowerHex impl on Output; revisit after upstream/consumers catch up
sha2 = { version = "0.10.9" }
smart-default = { version = "0.7.1" }
split-first-char = { version = "2.0.1" }
ssri = { version = "9.2.0" }
strum = { version = "0.28.0", features = ["derive"] }
sysinfo = { version = "0.39.1" }
tar = { version = "0.4.45" }
text-block-macros = { version = "0.2.0" }
tracing = { version = "0.1.44" }
tracing-subscriber = { version = "0.3.23", features = ["env-filter"] }
tokio = { version = "1", features = ["rt", "rt-multi-thread", "macros"] }
walkdir = { version = "2.5.0" }
wax = { version = "0.7.0" }
which = { version = "8.0.2" }
zip = { version = "5", default-features = false, features = ["deflate"] }
zune-inflate = { version = "0.2.54" }
# Dev dependencies
assert_cmd = { version = "2.2.1" }
chrono = { version = "0.4.44", default-features = false, features = ["clock"] }
criterion = { version = "0.8.2", features = ["async_tokio"] }
pretty_assertions = { version = "1.4.1" }
project-root = { version = "0.2.2" }
tempfile = { version = "3.27.0" }
mockito = { version = "1.7.2" }
[workspace.metadata.workspaces]
allow_branch = "main"
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
strip = "symbols"
debug = false
panic = "abort" # Let it crash and force ourselves to write safe Rust.
# Use the `--profile release-debug` flag to show symbols in release mode.
# e.g. `cargo build --profile release-debug`
[profile.release-debug]
inherits = "release"
strip = false
debug = true