Pre-built Playwright image — chromium + webkit
on top of node:24-trixie — published to GHCR for use as a base image in
GitHub Actions of downstream projects, so each consumer doesn't have to
reinstall browsers and OS deps on every CI run.
ghcr.io/digitaltolk/docker-builder-playwright:<playwright-version>
ghcr.io/digitaltolk/docker-builder-playwright:latest
Multi-arch: linux/amd64, linux/arm64.
jobs:
e2e:
runs-on: ubuntu-latest
container:
image: ghcr.io/digitaltolk/docker-builder-playwright:1.59.1
steps:
- uses: actions/checkout@v4
- run: npm ci
- run: npx playwright testBrowsers are pre-installed at /ms-playwright (PLAYWRIGHT_BROWSERS_PATH),
so no playwright install step is needed at runtime.
make build # build with the version pinned in package.json
make test # build + smoke test (prints playwright/node versions)
make shell # interactive bash inside the image
make version # print the pinned playwright version
make help # list all targetsThe playwright dependency in package.json is the single
source of truth for the Playwright version baked into the image (pinned to an
exact version). The Makefile and CI both read it with jq and pass it as the
PLAYWRIGHT_VERSION Docker build-arg.
Dependabot watches this pin and opens a PR when a
newer Playwright is published (it also keeps the GitHub Actions and the
node:24-trixie base image up to date).
-
Bump the
playwrightpin inpackage.json(e.g.,1.59.1→1.60.0) — or merge the Dependabot PR that does it — and commit. -
Tag the commit with a matching
vX.Y.Ztag:git tag v1.60.0 git push origin v1.60.0
-
The
releaseworkflow validates that the tag matches thepackage.jsonpin, builds multi-arch, pushes to GHCR with tags1.60.0,v1.60.0, andlatest, and creates a GitHub Release.
If the tag and the pin disagree, the release fails fast. Image revisions
on the same Playwright version (e.g., for a Dockerfile-only change) can be
released by appending a suffix: tag v1.60.0-1 will publish image tag
1.60.0-1 and update latest (the pin still reads 1.60.0).