Repository navigation
Move the web UI from pnpm and Node to Bun - #28
Conversation
The owner decided on Bun everywhere, as tech-stack.md in firsttris/workflows asks and as haul and windfenster already did, so the deviation "no Bun, pnpm only for the web UI" goes from CLAUDE.md. - web/package.json: packageManager bun@1.4.4; the Playwright runner on Bun (`bun --bun playwright test` for e2e, e2e:stack and screenshots; the package is already "type": "module") - web/bun.lock converted from pnpm-lock.yaml by `bun install`, with the same 355 package versions; pnpm-lock.yaml removed - web/bunfig.toml: the isolated linker, as pnpm installed before (project.inlang loads its plugin from node_modules/@inlang/plugin-message-format, a direct dependency), and minimumReleaseAge of one day, pnpm 12's default; no package has install scripts, so no trustedDependencies - CI and screenshots: oven-sh/setup-bun with bun-version-file instead of pnpm/action-setup and setup-node; in the Playwright image Bun of packageManager from npm; the playwright-image action reads web/bun.lock - Dockerfile: the web stage on oven/bun:1.4.4-slim, still on $BUILDPLATFORM - Renovate: a Bun group (image and packageManager) instead of the Node group and node-version managers - CLAUDE.md, README and docs/development.md: bun install, bun run Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y3rdfbWb1xDUdPRng7TX9Z
TDD review: one finding1. Screenshots workflow installs the latest Bun, not the one of
|
The step that installs Bun with npm ran in the repository root, which has no package.json: `node -p` failed, the substitution was empty and `npm install --global "bun@"` took the registry's latest with exit code 0. While Renovate waits three days after a Bun release, the screenshots would run on a different Bun than bun.lock and CI. The step now runs in web/, as the next one does and the e2e job of ci.yml does through its defaults. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y3rdfbWb1xDUdPRng7TX9Z
|
Fix for finding 1 pushed as 8c97829 ( Generated by Claude Code |
|
TDD-Review abgeschlossen: 1 belegtes Finding (Screenshots-Job installierte das neueste statt des gepinnten Bun) gefixt in 8c97829. CI grün: web, rust, playwright-image, e2e, docker, build. Merge per Squash. Generated by Claude Code |
The owner decided on Bun everywhere (tech-stack.md in firsttris/workflows, "Tooling"), so the web UI follows haul and windfenster and the CLAUDE.md deviation "no Bun, pnpm only for the web UI's build and tests" goes.
Changes
packageManager: bun@1.4.4;e2e,e2e:stackandscreenshotsrun the Playwright runner on Bun (bun --bun playwright test); the package already has"type": "module". The web servers of both Playwright configs are the Rust examples, no Vite.pnpm-lock.yamlbybun install: the same 355 package versions (compared name@version for name@version),pnpm-lock.yamlremoved.linker = "isolated", as pnpm installed before;project.inlangloads its plugin fromnode_modules/@inlang/plugin-message-format, a direct dependency, which the isolated linker links (Paraglide compiles all messages).minimumReleaseAgeof one day, pnpm 12's default, as in haul.bun pm untrustedfinds no package with install scripts, so notrustedDependencies(pnpm had noonlyBuiltDependencieseither).oven-sh/setup-bun@v2withbun-version-file: web/package.jsonandbun install --frozen-lockfileinstead ofpnpm/action-setupandsetup-node; in the Playwright image Bun ofpackageManagerfrom npm (the image has no jq or unzip); the sharedplaywright-imageaction readsweb/bun.lock. The path filters name no lockfile and stay.oven/bun:1.4.4-slim, still--platform=$BUILDPLATFORM.oven/bunandpackageManagerin web/package.json) instead of the Node group and itsnode-versionmanagers; the@types/nodeminor/patch rule only carved the types out of the Node group and duplicated the shared default, so it is gone.bun run), README, docs/development.md and comments:bun install,bun run ….Checks (local, Bun 1.4.4)
bun install --frozen-lockfile: 250 packages, lockfile unchangedbun run lint: 65 files, no findingsbun run typecheck: greenbun run test: 5 files, 12 tests passedbun run build: green; also without Node on PATH, as in theoven/bunstagebun run e2eagainst the demo server (cargo build -p spielstand-server --example demo): 21 passed--liston Bun and on Node (same node_modules): e2e 21 tests in 3 files, screenshots 8 in 1, stack 5 in 1, the same on bothNot run locally:
bun run e2e:stackandbun run screenshots(listed only), the Docker image build (no Docker daemon here), the CI workflows themselves and the Renovate config validator.Generated by Claude Code