mirror of
https://github.com/pnpm/pnpm.git
synced 2026-11-02 12:04:29 -05:00
docs-migration-runtime-setting
7
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
7fb2bfab4a |
docs(pnpr): correct configuration keys, defaults, and commands (#17245)
Part of https://github.com/pnpm/tasks/issues/191. Wrong claims: - cli: drop the nonexistent `add-user --password` flag and document the terminal/stdin password read; `oci-gc --min-age` and `cache-gc --max-age` are the flags (the `-secs` forms are aliases); `--from` defaults to the `storage` key, not an internal field; `info` and `http` log the same access records; only global and server options have PNPR_* variables. - configuration: `packumentTtl` defaults to 5m; the minimal config now sets `auth.htpasswd.file`, and the auth section says accounts live in memory without it or a backend; grouped hosted registries default their org to `<ecosystem>~<name>`; the handshake is served for any surface; the pipeline surface also satisfies "something must be served"; add `package.update_maintainers` to the audit list. - tls-and-reverse-proxy: remove the invalid `publicUrl:` YAML key and the nonexistent `rate_limiting` setting. - backup-and-restore: `pnpr verify` hashes by default (`--check-hashes` does not exist, `--skip-hashes` skips only the hash comparison); `migrate-storage --verify` compares bytes. - webhooks: audit events do not cover publishes or token creation; the example uses a real action and the `actor` field. - cli: the `RUST_LOG` example keeps `pnpr::audit=info`. - install-acceleration: the `--public-url` host is exempt from the private-address refusal. - shared-side-effects-cache: `pnpm pipeline` publishes workspace-task artifacts. Missing facts: `routes.allowedPrivateNetworks`, the upstream `search` key and canonical `maxAge`, built-in `npm.jsr.io` route, relative path resolution, `log` defaults and `type`, `${VAR:-default}` substitution and the full secret-field list, `oci` defaults, `artifacts.quota` bounds, `migrate-storage` destination rules, `--osv false`, `--packument-ttl` default, S3 `forcePathStyle`/`allowHttp` defaults, grouped org layout, OIDC key table, container image section, `backend:` ignoring the htpasswd and token files. Duplicates and links: health probe bodies, reload procedure, and the resolver allowlist now link to their one home; broken `#secret` anchor fixed; links into the pnpm docs use absolute pnpm.io URLs. Stale history: drop "pnpr v1" and the per-paragraph "Since alpha.N" / "Since pnpm 12.x" prefixes, and the contributor-only extensibility text. Also corrects the `as_filter_directive` doc comment, which claimed `http` quiets the rest of the crate. |
||
|
|
6f95957063 |
docs: lint prose with Vale (#17238)
* docs: lint prose with Vale Add Vale with an in-repo style, .vale/styles/pnpm, that turns the writing rules in AGENTS.md and the Google developer documentation style guide into lint rules. The stock Vale packages (Google, Microsoft, RedHat, write-good) were too noisy to block on, for example 1,300 passive-voice hits in the v12 docs alone, so the rules are written for this repo, following the GitLab model. Each one links the guideline it enforces. Levels: - error, fails CI: dashes, plain-word substitutions, condescending words, "please", "note that", hedges, puffery, optional plurals, exclamation marks, ellipses, curly quotes, generic link text, product spellings, sentence-case headings, repeated words, double spaces, implementation history in comments; in changesets, bold or italic emphasis, internal names and release-line names. - warning: future tense, sentences over 30 words, "instead of" and "so that" tails in changesets. - suggestion: passive voice. .vale.ini scopes the rules. Docs get every rule. Contributor Markdown and code comments keep dashes and headings as warnings until their roughly 8,100 em dashes are rewritten. Released changesets stay in .changeset/ and are not rewritten, so lint-prose.mjs lints only the changesets added since PROSE_BASE (the PR base in CI). The prose workflow installs a pinned, checksum-verified Vale release and runs `pnpm lint:prose`. The rest of this change rewrites the existing docs, READMEs, contributor Markdown, and code comments to pass the error-level rules. Only prose and comment text changed. Renamed headings keep their anchors. Spelling stays with cspell, which checks identifiers that Vale does not see. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs: keep prose lint from flattening meaning --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
85f7fa1e98 |
feat(pnpr)!: give the hosted store a layout with one place per thing (#17100)
The hosted store shared one key space between packages, orgs and blobs: a registry without an org stored packages at the store root, an org's registry stored them in `<org>/`, a package's blobs sat beside its document, and a nested image repository sat inside its parent's directory. So an org collided with an unscoped package of the same name (an unpublish of that package removed the org's whole namespace), the implicit `<ecosystem>~<name>` org of a grouped registry was a valid npm name, and OCI GC and verify needed ad-hoc exclusion lists. On S3, object_store percent-encodes `~` in keys while the upload sweep compared raw prefixes, so grouped OCI registries were never swept. This is part of section A4 of pnpm/tasks#131. The new layout (pnpr_storage::layout), the same on disk and in a bucket: layout.json {"layout": 1} default/packages/<name>/document.json default/packages/<name>/blobs/<file> orgs/<org>/packages/... Every name, org and file name is one segment: `[a-z0-9._-]` as is, every other byte as `!` and two hex digits. That keeps nested names siblings, separates names that differ only in case on case-insensitive filesystems, and leaves nothing for object_store to escape, so a key is byte for byte the local path. Per-namespace records stay inside their namespace; records every namespace shares stay at the root. Listing is one directory read, so the `.package-index` workaround is gone, and the blob inventory reports package and blob names instead of paths. Startup refuses a store marked with another layout or an unmarked store holding data, and marks an empty one. The proxy cache uses the same package layout and is emptied once when its marker is missing. `pnpr upgrade-storage` converts an earlier store on disk or in a bucket, telling org directories from packages by the configured orgs; it moves blobs before documents so an interrupted run can resume, and refuses a directory that is both an org and a package. export, verify and migrate-storage check the layout, and migrate-storage marks its target. The registry fixtures the pnpm test suites serve are built in the new layout, and the cached build is keyed by the layout version. |
||
|
|
157994e9f4 |
docs(pnpr): document reverse-proxy and TLS setup, webhooks, lifecycle, and pnprServer (#17013)
* docs(pnpr): document reverse-proxy and TLS setup, webhooks, lifecycle, and pnprServer Document production deployment and operational architecture for pnpr and pnpm (Section C13 and Section F of https://github.com/pnpm/tasks/issues/131): - Add Reverse proxy and TLS deployment guide (pnpr/docs/tls-and-reverse-proxy.md) with architecture rationale and configuration recipes for Nginx, Caddy, Traefik, and AWS ALB. - Add Webhooks and event notifications guide (pnpr/docs/webhooks.md) documenting the decoupled event architecture, structured audit logs (pnpr::audit), and object storage bucket notifications. - Document signals, readiness probe state transitions, process lifecycle, and standard exit codes in pnpr/docs/cli.md. - Document S3 commit journal lifecycle, multi-replica considerations, and disaster recovery caveats in pnpr/docs/storage.md. - Document the pnprServer workspace setting reference in pnpm/docs/settings/dependency-resolution.md and pnpm11/docs/settings/dependency-resolution.md. - Update sidebars and quick start navigation. Related to https://github.com/pnpm/tasks/issues/131 * docs(pnpr): clarify pnprServer offloads resolution and streams package metadata Clarify that pnprServer offloads dependency resolution rather than file fetching: the server streams back resolved package metadata frames as it walks the graph so the client can prefetch tarballs from registries in parallel. * docs(pnpr): address review feedback on Vector remap and pnprServer tarball fetch boundary - Add remap transform in Vector example in pnpr/docs/webhooks.md to parse raw JSON from Docker container logs before filtering audit events. - Clarify direct public tarball fetching and server-side private upstream credential boundaries in pnpm/docs/settings/dependency-resolution.md and pnpm11/docs/settings/dependency-resolution.md. * docs(pnpr): correct probe endpoints, shutdown lifecycle, and log shippers * docs(pnpr): correct S3 commit journal staging paths and write-ahead sequence * docs(pnpr): clarify proxy hop coverage and orphan pruning scope * docs(pnpr): distinguish X-Real-IP from hop traversal and document ALB target port restriction |
||
|
|
e5988d13b1 |
feat: share build output between machines through pnpr or a Turborepo remote cache (#16812)
Dependency side effects and `pnpm pipeline` task results now share one artifact format, one trust model, and two transports. `pnpm pipeline` stores cacheable task results as `workspace-task` artifacts of the shared artifact protocol: P-256 signed envelopes whose manifest mirrors a local cache entry (`meta.json` and `outputs/`). A remote artifact is verified against `trustedKeys`, written into the local cache, and restored through the same checks as a local entry. Results of tasks that ran are published in the background when `publish` is on, and the run waits for the uploads before it ends. `ArtifactStore` in pnpm-pnpr-client is either a pnpr server or a server that speaks the Turborepo Remote Cache API. Both answers go through the same client-side verification. On the Turborepo API an artifact is the signed envelope stored under a hash of the owner, the input key, and the compatibility scope from `compatibility_scopes`, and each blob once per owner under a hash of its integrity, mirroring pnpr's resolve and blob routes. The API cannot create conditionally, so a later publication replaces an earlier one. A failed per-key lookup is a miss. Both transports refuse credentials for a server that is neither HTTPS nor loopback. The remote side-effects cache now goes through `ArtifactStore`, so it can use a Turborepo server too. pnpr-client's candidate filter now permits `workspace-task` candidates, which the pnpr server already accepted. `ArtifactSigner` replaces the duplicated signing setup in deps-restorer and the pipeline, and `decode_trusted_keys` moves into the protocol crate. The new `remoteCache` setting holds `url`, `team`, `token`, `org`, and the signing fields, with `PNPM_REMOTE_CACHE_*` overrides. Every field except `org` is machine-only and refused in pnpm-workspace.yaml with ERR_PNPM_WORKSPACE_REMOTE_CACHE_TRUST: `token` is not URL-scoped, so a repository that could name `url` could have the token sent anywhere. `sideEffectsCache.remote` keeps `packages`; its signing fields remain a fallback through `Config::remote_cache_settings()`. Only `remoteCache.publish` publishes pipeline tasks, so a machine that publishes dependency builds does not start uploading task outputs and logs. The section is boxed on `Config` to keep CLI futures under clippy's large_futures limit. Each artifact kind has its own size limits: a dependency build keeps 64 MiB per file and per artifact, and a task result may hold files of up to 4 GiB and 16 GiB in all. Blobs travel between files and servers as streams, so no result is held in memory. On pnpr, `PUT /-/pnpr/v0/artifacts/blob` stores one blob ahead of its envelope and commits it only once its bytes match the integrity, and `HEAD` tells a publisher which blobs to skip. `artifacts.quota` makes pnpr's storage bounds configurable. pnpm-testing-utils gains an in-memory Turborepo Remote Cache server for tests. On pnpr, `artifacts.orgs` declares who may read and who may publish what an organization owns: its signed artifacts, its compiler cache, and its pipeline run records. It replaces the username-equals-organization rule for artifacts, `artifacts.compilerCaches`, and `pipeline.workspaces`. The shared-artifact store asks an `OrgAccess` policy the server builds from it, and `CallerOrgs` replaces the duplicated authorize functions. Pipeline run records are keyed `<org>/<workspace>/<run id>` under a new `.pipeline-runs/v1` namespace; `pnpm pipeline --report` sends `remoteCache.org`. |
||
|
|
c13953b3bc |
docs: label shell commands and title file snippets (#16699)
Code blocks that hold only shell commands now use the `sh` language, and blocks showing a file's contents carry a `title` naming the file, across the pnpm v12, pnpm v11, and pnpr docs. Bold file-name labels above code blocks are folded into the titles. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
07839df5c3 |
docs: move product documentation beside its implementation (#16385)
* docs: move website documentation into the pnpm repository * docs: keep v11 and v12 documentation beside their implementations * docs(pnpr): keep registry documentation beside its implementation * ci: classify product documentation as documentation changes * test: cover product documentation in Rust CI exclusions * ci: isolate documentation publishing and support manual sync * test: make dependency status fixture timestamps deterministic |