From de46092a9e82f11c2dd70dcdd2418ebac1bf1824 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 12 Aug 2026 20:07:09 +0000 Subject: [PATCH 1/3] ci: merge all TypeScript SDK verification into dirsql-typescript-ci One workflow now owns PR verification for packages/ts, replacing ts-lint.yml, ts-typecheck.yml and ts-test.yml (all deleted) and absorbing the typescript-sdk and rust-napi-binding conventions lanes (job ids preserved). Nine jobs: the two gate suites, biome lint, tsc typecheck, the shared napi build, and the unit / hermetic-integration / binding / distcheck tiers. Same shape as dirsql-python-ci: packages/rust/** fans in for the binding and attestation staleness, the root testing-conventions.toml governs the SDK lane, fragments are excluded, e2e-attestations stays in scope for e2e-verify. skip-changelog: CI configuration only, no packages/** change Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01GECJQGPKgycnh4hrhzrDYP --- .github/workflows/conventions.yml | 18 --- .../{ts-test.yml => dirsql-typescript-ci.yml} | 109 ++++++++++++++++-- .github/workflows/ts-lint.yml | 48 -------- .github/workflows/ts-typecheck.yml | 51 -------- 4 files changed, 102 insertions(+), 124 deletions(-) rename .github/workflows/{ts-test.yml => dirsql-typescript-ci.yml} (67%) delete mode 100644 .github/workflows/ts-lint.yml delete mode 100644 .github/workflows/ts-typecheck.yml diff --git a/.github/workflows/conventions.yml b/.github/workflows/conventions.yml index 03f9e1ee9..25a68f7c9 100644 --- a/.github/workflows/conventions.yml +++ b/.github/workflows/conventions.yml @@ -13,15 +13,6 @@ permissions: contents: read jobs: - typescript-sdk: - uses: thekevinscott/testing-conventions/.github/workflows/testing-conventions.yml@v0 - with: - languages: '["typescript"]' - source: packages/ts/src - config: testing-conventions.toml - base: ${{ github.event.pull_request.base.sha || 'origin/main' }} - rust_toolchain: true - rust: uses: thekevinscott/testing-conventions/.github/workflows/testing-conventions.yml@v0 with: @@ -30,12 +21,3 @@ jobs: config: testing-conventions.toml base: ${{ github.event.pull_request.base.sha || 'origin/main' }} gates: '["colocated-test", "unit-lint", "integration-lint", "mutation", "packaging"]' - - rust-napi-binding: - uses: thekevinscott/testing-conventions/.github/workflows/testing-conventions.yml@v0 - with: - languages: '["rust"]' - source: packages/ts/napi - config: testing-conventions.toml - base: ${{ github.event.pull_request.base.sha || 'origin/main' }} - gates: '["colocated-test", "unit-lint"]' diff --git a/.github/workflows/ts-test.yml b/.github/workflows/dirsql-typescript-ci.yml similarity index 67% rename from .github/workflows/ts-test.yml rename to .github/workflows/dirsql-typescript-ci.yml index 6620f67a9..e37dcd202 100644 --- a/.github/workflows/ts-test.yml +++ b/.github/workflows/dirsql-typescript-ci.yml @@ -1,8 +1,14 @@ -name: TS Test - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - +name: dirsql TypeScript CI + +# All PR verification for the TypeScript SDK (packages/ts): biome lint, tsc +# typecheck, the napi build + four test tiers, and the testing-conventions +# gate suites for the SDK and the napi binding crate. Merged from ts-lint.yml, +# ts-typecheck.yml, ts-test.yml and two conventions.yml lanes so one paths +# filter governs the whole set. +# +# packages/rust/** fans in: the core compiles into the binding, and +# [e2e].extra_scope means a core change stales this package's attestation. +# No self-path on pull_request, per the #834 stack convention. on: push: branches: [main] @@ -11,16 +17,105 @@ on: - 'packages/rust/**' - 'Cargo.toml' - 'Cargo.lock' - - '.github/workflows/ts-test.yml' + - 'testing-conventions.toml' + - '.github/workflows/dirsql-typescript-ci.yml' pull_request: paths: - - '.github/CI-DISABLED-PLACEHOLDER' + - 'packages/ts/**' + - '!packages/ts/changelog.d/**' + - '!packages/ts/migrations.d/**' + - '!packages/ts/README.md' + - 'packages/rust/**' + - 'Cargo.toml' + - 'Cargo.lock' + - 'testing-conventions.toml' concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true +permissions: + contents: read + jobs: + # Job ids `typescript-sdk` / `rust-napi-binding` kept from their + # conventions.yml lanes so check-run names are unchanged. + typescript-sdk: + uses: thekevinscott/testing-conventions/.github/workflows/testing-conventions.yml@v0 + with: + languages: '["typescript"]' + source: packages/ts/src + config: testing-conventions.toml + base: ${{ github.event.pull_request.base.sha || 'origin/main' }} + rust_toolchain: true + + rust-napi-binding: + uses: thekevinscott/testing-conventions/.github/workflows/testing-conventions.yml@v0 + with: + languages: '["rust"]' + source: packages/ts/napi + config: testing-conventions.toml + base: ${{ github.event.pull_request.base.sha || 'origin/main' }} + gates: '["colocated-test", "unit-lint"]' + + lint: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: "24" + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 11 + + - name: Install dependencies + working-directory: packages/ts + run: pnpm install + + - name: Lint + working-directory: packages/ts + run: pnpm lint + + - name: Format check + working-directory: packages/ts + run: pnpm format:check + +# `tsc` already runs as part of `pnpm build` in `ts-test.yml`, so this is +# redundant in the strict sense. It exists for the same reason +# `python-typecheck.yml` does: a dedicated, fast-failing type-check signal +# that doesn't require the napi-rs build chain (~seconds instead of minutes) +# and shows up as its own red check rather than "Unit tests" failing on a +# pure type error. The native addon is loaded at runtime via `createRequire` +# (see `src/load-native-core.ts`), so `tsc --noEmit` does not need +# `dirsql.node` or the generated `index.d.ts` to succeed. + tsc: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + + - name: Install Node + uses: actions/setup-node@v4 + with: + node-version: "24" + + - name: Install pnpm + uses: pnpm/action-setup@v4 + with: + version: 11 + + - name: Install dependencies + working-directory: packages/ts + run: pnpm install + + - name: Type check + working-directory: packages/ts + run: pnpm exec tsc --noEmit + build: # Builds the napi addon once and shares it with unit/binding/distcheck below # (#483) instead of each job/matrix-cell rebuilding it independently. diff --git a/.github/workflows/ts-lint.yml b/.github/workflows/ts-lint.yml deleted file mode 100644 index 80b33c093..000000000 --- a/.github/workflows/ts-lint.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: TS Lint - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -on: - push: - branches: [main] - paths: - - 'packages/ts/**/*.ts' - - 'packages/ts/**/*.js' - - 'packages/ts/biome.json' - - 'packages/ts/package.json' - pull_request: - paths: - - '.github/CI-DISABLED-PLACEHOLDER' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - lint: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - - name: Install Node - uses: actions/setup-node@v4 - with: - node-version: "24" - - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 11 - - - name: Install dependencies - working-directory: packages/ts - run: pnpm install - - - name: Lint - working-directory: packages/ts - run: pnpm lint - - - name: Format check - working-directory: packages/ts - run: pnpm format:check diff --git a/.github/workflows/ts-typecheck.yml b/.github/workflows/ts-typecheck.yml deleted file mode 100644 index fba5aeb11..000000000 --- a/.github/workflows/ts-typecheck.yml +++ /dev/null @@ -1,51 +0,0 @@ -name: TS Typecheck - -env: - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -on: - push: - branches: [main] - paths: - - 'packages/ts/**/*.ts' - - 'packages/ts/tsconfig.json' - - 'packages/ts/package.json' - pull_request: - paths: - - '.github/CI-DISABLED-PLACEHOLDER' - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -# `tsc` already runs as part of `pnpm build` in `ts-test.yml`, so this is -# redundant in the strict sense. It exists for the same reason -# `python-typecheck.yml` does: a dedicated, fast-failing type-check signal -# that doesn't require the napi-rs build chain (~seconds instead of minutes) -# and shows up as its own red check rather than "Unit tests" failing on a -# pure type error. The native addon is loaded at runtime via `createRequire` -# (see `src/load-native-core.ts`), so `tsc --noEmit` does not need -# `dirsql.node` or the generated `index.d.ts` to succeed. -jobs: - tsc: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - - - name: Install Node - uses: actions/setup-node@v4 - with: - node-version: "24" - - - name: Install pnpm - uses: pnpm/action-setup@v4 - with: - version: 11 - - - name: Install dependencies - working-directory: packages/ts - run: pnpm install - - - name: Type check - working-directory: packages/ts - run: pnpm exec tsc --noEmit From 457410817082b3a71fca934b6dcf5160102680a1 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 14 Aug 2026 13:44:21 +0000 Subject: [PATCH 2/3] ci: exclude rust fragments/README from dirsql-typescript-ci PR paths A rust changelog fragment or README edit cannot alter this workflow's verdict; mirror dirsql-rust-ci's exclusions. Also disambiguate the two check names this workflow shares verbatim with dirsql-python-ci. skip-changelog: CI configuration only --- .github/workflows/dirsql-typescript-ci.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/dirsql-typescript-ci.yml b/.github/workflows/dirsql-typescript-ci.yml index e37dcd202..84dd6dba6 100644 --- a/.github/workflows/dirsql-typescript-ci.yml +++ b/.github/workflows/dirsql-typescript-ci.yml @@ -26,6 +26,9 @@ on: - '!packages/ts/migrations.d/**' - '!packages/ts/README.md' - 'packages/rust/**' + - '!packages/rust/changelog.d/**' + - '!packages/rust/migrations.d/**' + - '!packages/rust/README.md' - 'Cargo.toml' - 'Cargo.lock' - 'testing-conventions.toml' @@ -59,6 +62,7 @@ jobs: gates: '["colocated-test", "unit-lint"]' lint: + name: lint (ts) runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 @@ -302,7 +306,7 @@ jobs: # asserts no test files ship in the artifact). No mocks. The flow lives # in the internals/distcheck package (#520); this job invokes its # `dirsql-distcheck node` entry point (which drives npm/pnpm from Python). - name: Packaging distcheck (install + run) + name: Packaging distcheck (ts) needs: build runs-on: ubuntu-latest steps: From ff8632fe4b97cfd477989c77b73a0bc97cba7e95 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 14 Aug 2026 15:29:33 +0000 Subject: [PATCH 3/3] ci: trigger dirsql-typescript-ci.yml on edits to their own files The pull_request self-path was omitted while this stack was being probed, so definition layers reported zero checks and the probe PRs measured cleanly. The probes are read and closed, and the YAML layers were always separate PRs from them, so the suppression has no remaining purpose -- it only leaves CI-config-only PRs with no checks at all, which merge vacuously green under the post-#881 Mergify gate. skip-changelog: CI configuration only --- .github/workflows/dirsql-typescript-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/dirsql-typescript-ci.yml b/.github/workflows/dirsql-typescript-ci.yml index 84dd6dba6..3ee1818fa 100644 --- a/.github/workflows/dirsql-typescript-ci.yml +++ b/.github/workflows/dirsql-typescript-ci.yml @@ -32,6 +32,7 @@ on: - 'Cargo.toml' - 'Cargo.lock' - 'testing-conventions.toml' + - '.github/workflows/dirsql-typescript-ci.yml' concurrency: group: ${{ github.workflow }}-${{ github.ref }}