chore(release): v0.31.0 (M4 API/format freeze) (#156) #375
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |