0
0
# The gate: typecheck, lint, format and the full test suite with its coverage
# threshold, on every push and every pull into main. `npm test` fails the run
# if coverage drops below the floor in packages/hatk/vitest.config.ts, so a
# change that guts a tested path cannot land quietly.
#
# node:26, because package.json requires node >=25, on Debian trixie (glibc
# 2.41), not bookworm (2.36): better-sqlite3's prebuilt binary needs glibc >=
# 2.38, so on bookworm every sqlite-backed test dies with a GLIBC error.
#
# `npm ci` rather than `npm install`: it installs exactly the lockfile, the only
# record of the Linux binaries for better-sqlite3 and @duckdb/node-bindings.
# Never regenerate that lockfile on macOS over an existing node_modules: it
# drops every non-darwin platform package and breaks this run.
on:
push: { refs: [refs/heads/*] }
pull: { base: [refs/heads/main] }
image: node:26-trixie
cache: [/root/.npm]
steps:
- name: install
run: npm ci
- name: check
run: npm run check
- name: test
timeout: 30
run: npm test