Skip to content

Drop Docker, build through the published CLI - #577

Merged
abernier merged 3 commits into
mainfrom
no-docker
Aug 19, 2026
Merged

Drop Docker, build through the published CLI#577
abernier merged 3 commits into
mainfrom
no-docker

Conversation

@abernier

@abernier abernier commented Aug 19, 2026

Copy link
Copy Markdown
Member

Stacked on #574.

npx @pmndrs/docs build does what the image did, so the image and everything that maintained it goes.

What goes

  • Dockerfile, .dockerignore
  • the four ci.yml steps that logged in, built, pushed and attested the image — and the packages, attestations and id-token permissions they alone needed
  • the 25-line -e VAR list in build.yml and in preview.sh: the CLI runs in the same process, so it reads the environment directly

What stays the same

build.yml keeps every input, every environment variable and the same Pages artifact. Only the build step changes:

- uses: actions/setup-node@v6
  with:
    node-version: 24
- run: npx -y @pmndrs/docs@${{ inputs.version }} build "${{ inputs.mdx }}" out --format website

docker_tag gives way to version — an npm version or range.

Why major

Not the inputs. All the repositories calling this workflow were checked: every one pins @v2 or @v3, none uses @main, and none passes docker_tag. Removing that input breaks nobody.

The major is for the git tag. Releases run git tag -fa v$MAJOR_VERSION --force, so a minor would slide zustand, react-three-fiber, drei and react-postprocessing — all pinned at @v3 — straight onto the Docker-free workflow. Only a major leaves v3 where it is and opens v4.

The substantive removal is the published artifact: ghcr.io/pmndrs/docs stops being pushed. Existing tags stay in the registry, frozen.

This repository is the canary

docs.yml now passes version: 'latest' instead of a number. Our own Pages deploy is then built by exactly what consumers install, so a broken release surfaces here before any downstream repository moves to @v4.

Verified

The artifact layout is the one thing that genuinely moved (docs/out$BASE_PATHout), so it was built for real with BASE_PATH=/toto: out/index.html and out/guide/start.html at the artifact root, asset URLs carrying /toto — the same shape the Docker path produced.

lint, tsc, 108 unit tests green. All three workflows parse.

Sequencing

Merge only once #574 has merged and a release has actually published @pmndrs/docs to npm — which needs the NPM_TOKEN repository secret.

Consumer repositories move to @v4 afterwards, one at a time. Note that none of their docs workflows triggers on pull_request, so a migration PR carries no CI signal — hence the canary above. pmndrs/sky and pmndrs/denoiser run the image inline rather than through this workflow and need their own conversation.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HfCBpbazo3fr1n2EUXNyh5

abernier and others added 3 commits August 19, 2026 13:17
`npx @pmndrs/docs build` does what the image did, so the image, the `Dockerfile` and the four
publish steps that maintained them are gone — as are the `packages`, `attestations` and
`id-token` permissions they alone needed.

`build.yml` keeps every input, environment variable and Pages artifact it had; only the build
step changes, and `docker_tag` gives way to `version` — an npm version or range.

BREAKING CHANGE: `ghcr.io/pmndrs/docs` is no longer published. Its existing tags stay in the
registry, frozen. The major is also what keeps the force-moved `vX` git tag off callers
pinning `build.yml@v3`.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HfCBpbazo3fr1n2EUXNyh5
`docs.yml` pins no version, so this repository's own Pages deploy is built by exactly what
consumers install. A broken release shows up here before anyone downstream moves to it, and
the deploy no longer waits on a version number this repository has to keep in step with
itself.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HfCBpbazo3fr1n2EUXNyh5
The permission left with the image attestation it served, but trusted publishing needs it
too — it is the OIDC token that authenticates the release to npm.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HfCBpbazo3fr1n2EUXNyh5
@abernier
abernier merged commit 3e23829 into main Aug 19, 2026
8 of 9 checks passed
@github-actions github-actions Bot mentioned this pull request Aug 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant