Skip to content

fix(ci): midnightbsd drops broken-dep git; haiku uses provides-syntax… #66

fix(ci): midnightbsd drops broken-dep git; haiku uses provides-syntax…

fix(ci): midnightbsd drops broken-dep git; haiku uses provides-syntax… #66

Workflow file for this run

name: ci
on:
push:
branches: [main]
pull_request: {}
workflow_dispatch: {}
permissions:
contents: read
jobs:
# T1 native tjs legs, CI-smoke tier (release-matrix Decision 3): the same
# ./.github/actions/build-leg recipe the release matrix runs, minus attest.
# glibc Linux artifacts are smoke-only forever (published Linux = musl-static
# via the matrix); darwin here is the cheap early-warning twin of the
# published matrix leg. The tjs build restores from the shared cache, so a
# typical push pays only bundle+fuse+smoke.
tjs:
strategy:
fail-fast: false
matrix:
include:
- leg: darwin-arm64
os: macos-14
- leg: linux-x64-glibc
os: ubuntu-latest
- leg: linux-arm64-glibc
os: ubuntu-24.04-arm
runs-on: ${{ matrix.os }}
timeout-minutes: 60
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version-file: .tool-versions
- uses: ./.github/actions/build-leg
with:
leg: ${{ matrix.leg }}
sea:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest # linux-x64
- os: ubuntu-24.04-arm # linux-arm64
- os: macos-14 # darwin-arm64
- os: windows-latest # windows-x64
- os: windows-11-arm # windows-arm64
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version-file: .tool-versions
- name: Assert Node matches the .tool-versions pin
run: |
set -euo pipefail
want=$(sed -n 's/^nodejs //p' .tool-versions)
have=$(node -v); have=${have#v}
[ "$have" = "$want" ] || { echo "node skew: .tool-versions=$want but runtime=$have" >&2; exit 1; }
- name: Install the Claude provider (npm)
run: npm i -g @anthropic-ai/claude-code 2>&1 | tail -3
- name: SEA build + smoke + REQUIRED real bundle boot
run: |
set -uo pipefail
# The real Bun binary (~240MB) lives inside the installed package: on POSIX as the
# nested platform dep (…/claude-code/node_modules/@anthropic-ai/claude-code-<os>-<arch>/claude),
# on Windows as …/claude-code/bin/claude.exe. Match both names; clode's byte-scan extractor
# carves either (PE or ELF). Use `npm root -g` (portable: <prefix>/lib/node_modules on POSIX,
# <prefix>/node_modules on Windows) — NOT `npm prefix -g/node_modules`, which is wrong on POSIX.
PROV="$(find "$(npm root -g)/@anthropic-ai/claude-code" -type f \( -name claude -o -name claude.exe \) -size +20M 2>/dev/null | head -1)"
if [ -z "$PROV" ]; then echo "ERROR: no ~240MB Bun provider found under @anthropic-ai/claude-code" >&2; exit 1; fi
echo "provider: $PROV"
# One node:test run: build (sea-build), --clode-version/--clode-help + real boot + sea-deps
# reuse (sea-smoke, with CLODE_CLAUDE_BIN set so they RUN). CLODE_OFFLINE skips online -p.
CLODE_SEA=1 CLODE_OFFLINE=1 CLODE_CLAUDE_BIN="$PROV" \
node --test --test-concurrency=1 test/sea-build.test.cjs test/sea-smoke.test.cjs
test:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest # linux-x64
- os: windows-latest # windows-x64
runs-on: ${{ matrix.os }}
defaults:
run:
shell: bash
steps:
- uses: actions/checkout@v7
- uses: actions/setup-node@v6
with:
node-version-file: .tool-versions
- name: Assert Node matches the .tool-versions pin
run: |
set -euo pipefail
want=$(sed -n 's/^nodejs //p' .tool-versions)
have=$(node -v); have=${have#v}
[ "$have" = "$want" ] || { echo "node skew: .tool-versions=$want but runtime=$have" >&2; exit 1; }
- name: Install runtime deps (the six Bun-backing packages, locked) for the fidelity gate
run: npm ci
- name: Full node:test suite (includes the shim-fidelity gate)
run: npm test