Skip to content

chore(release): v0.31.0 (M4 API/format freeze) (#156) #375

chore(release): v0.31.0 (M4 API/format freeze) (#156)

chore(release): v0.31.0 (M4 API/format freeze) (#156) #375

Workflow file for this run

name: Quality scan
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
jobs:
quality:
name: Quality checks (typecheck / build / test / lint)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v6
# pnpm version is read from the `packageManager` field of the
# workspace root package.json; the action errors out if both
# are specified.
- uses: actions/setup-node@v6
with:
node-version: "20"
cache: pnpm
- run: pnpm install --frozen-lockfile
- name: Build
# tsup per package; produces dist/ artifacts (including .d.ts
# files) that downstream packages import from. Must run before
# typecheck so the @basou/core type references in @basou/cli
# resolve under fresh CI checkouts; locally, the same step runs
# first in CONTRIBUTING.md's release-flow step 4. Also catches
# publish-time export-shape regressions before they reach npm.
run: pnpm -r build
- name: Typecheck
# tsc --noEmit per package; depends on the prior Build step
# having generated downstream .d.ts files. Verifies that all
# workspace packages typecheck against the published shape.
run: pnpm typecheck
- name: Test + coverage gate
# vitest per package WITH v8 coverage; any test break fails CI, and
# so does coverage dropping below the per-package ratchet floors in
# packages/{core,cli,sdk}/vitest.config.ts (packages/basou has no
# test:coverage script and is skipped). The coverage run subsumes a
# plain `pnpm -r test`, so tests are not run twice. Floors only ever
# move up — see vitest.coverage.ts.
run: pnpm -r test:coverage
- name: Lint
# biome check across the workspace; this is the gap that the
# security workflow alone did not cover and that let a
# package.json keywords format violation land in 240de59
# un-noticed until 2026-05-23. Local `pnpm lint` is no longer
# the only verifier of CONTRIBUTING.md's "Both must pass"
# contract.
run: pnpm lint
- name: Lint (language)
# check-language.mjs scans packages/*/src/**/*.ts (excluding
# *.test.ts) for Japanese outside a small E-5 allowlist. biome
# does not detect natural-language content, so this guards the
# English-only convention for basou's public surface (source,
# comments, errors, CLI output) that biome cannot.
run: pnpm lint:lang