Files
airship/pnpm-workspace.yaml
T
Nayan 5349607a38 ci: add a windows-latest leg and document Windows support
None of this was caught because nothing ever ran on Windows: every job in every
workflow was ubuntu-latest, and checks.yml did not even run on the PR that
reported it — only Vercel, which failed on fork authorization.

The check job now runs on both, fail-fast off so a Windows-only break still
reports the Linux result. `shell: bash` on the multi-line steps, since the
default shell there is pwsh, which shares none of that syntax; Git Bash ships
on the runner, so nothing needs rewriting. The two drift checks stay Linux-only
— they verify that a committed generated file matches its generator, which is a
property of the repo, not of the platform.

The new build step is unconditional and unscoped on purpose. `--affected` is
exactly what let these through: they lived in build scripts, so a PR touching
no affected package never ran them. A `pnpm clean` step guards the lane that
was broken in all eleven packages.

pnpm-workspace.yaml's release-age exclusions had drifted almost across the
board — turbo pinned at 2.10.1 against 2.10.9 in the lockfile, the Claude SDK
at 0.3.196 against 0.3.226, both codex packages a minor behind. A stale pin
does not fail loudly; it simply stops excluding anything, and the package falls
back under the gate. That is the silent optional-dep drop the file's own
esbuild comment documents, and every one of these ships per-platform packages
including win32.
2026-08-11 23:12:06 +05:30

61 lines
3.2 KiB
YAML

packages:
- "packages/*"
- "apps/*"
# apps/web is both airship's home page and the app `make run` points the CLI at.
# It lives inside this workspace — unlike the standalone home/ and examples/
# trees it replaces, each of which carried its own lockfile and node_modules.
# One lockfile, one install, one lint pass; the cost is that React, Vite and
# Tailwind are now root dependencies. See README.md § The site.
allowBuilds:
esbuild: true
# wrangler's runtime. apps/web deploys to Cloudflare Workers, and both
# `make web:preview` and the deploy lane need it to have run its install step.
workerd: true
minimumReleaseAgeExclude:
# esbuild ships its binary as ~25 per-platform packages listed as OPTIONAL
# dependencies, published minutes apart from the parent. When the parent is
# old enough to pass the release-age gate but the platform packages are not,
# pnpm drops them silently — optional deps that fail resolution are not an
# error — and installs an esbuild with no binary behind it. The postinstall
# then finds a different version's binary on the hoist path and fails with
# `Expected "0.28.2" but got "0.27.7"`.
#
# The parent is pinned; the platform packages cannot be, because pnpm rejects
# a name pattern carrying a version union and enumerating all 25 for every
# bump is not maintainable. They only ever publish in lockstep with the
# version above, so the unpinned glob follows whatever it is pinned to.
#
# EVERY VERSION BELOW MUST MATCH THE LOCKFILE. A pin left behind at an older
# version does not fail loudly — it simply stops excluding anything, and the
# package silently falls back under the release-age gate, which is the
# esbuild failure above all over again. All of these but esbuild had drifted
# at once (turbo 2.10.1 vs 2.10.9, the Claude SDK 0.3.196 vs 0.3.226, both
# codex packages a minor behind), and every one of them ships per-platform
# optional deps including win32 — so the package most likely to go missing is
# the one for whichever platform is least represented in the team's machines.
# `pnpm why <pkg>` after a bump, and update the pin in the same commit.
- 'esbuild@0.28.2'
- '@esbuild/*'
- '@anthropic-ai/claude-agent-sdk-darwin-arm64@0.3.226'
- '@anthropic-ai/claude-agent-sdk-darwin-x64@0.3.226'
- '@anthropic-ai/claude-agent-sdk-linux-arm64-musl@0.3.226'
- '@anthropic-ai/claude-agent-sdk-linux-arm64@0.3.226'
- '@anthropic-ai/claude-agent-sdk-linux-x64-musl@0.3.226'
- '@anthropic-ai/claude-agent-sdk-linux-x64@0.3.226'
- '@anthropic-ai/claude-agent-sdk-win32-arm64@0.3.226'
- '@anthropic-ai/claude-agent-sdk-win32-x64@0.3.226'
- '@anthropic-ai/claude-agent-sdk@0.3.226'
- '@openai/codex-sdk@0.147.0'
# Unlike the other two SDKs this bundles no binary — the `opencode` CLI is a
# separate install, detected on PATH at runtime. See providers/opencode.ts.
- '@opencode-ai/sdk@1.18.15'
- '@openai/codex@0.147.0-darwin-arm64 || 0.147.0-darwin-x64 || 0.147.0-linux-arm64 || 0.147.0-linux-x64 || 0.147.0-win32-arm64 || 0.147.0-win32-x64 || 0.147.0'
- '@turbo/darwin-64@2.10.9'
- '@turbo/darwin-arm64@2.10.9'
- '@turbo/linux-64@2.10.9'
- '@turbo/linux-arm64@2.10.9'
- '@turbo/windows-64@2.10.9'
- '@turbo/windows-arm64@2.10.9'
- turbo@2.10.9
- ultracite@7.10.2