From 0063b69671afe4e2bc961ac8490e910bb2378076 Mon Sep 17 00:00:00 2001 From: Clint Berry Date: Mon, 3 Aug 2026 23:01:39 +0000 Subject: [PATCH] ci: make the release publishable and the typecheck real MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two gates in the workflows were not doing their job. Found while preparing the first release tag. release.yml ran `go test ./...` without -p 1. ci.yml has that flag with a comment explaining why: the db, handler and sshproxy integration packages each reset the schema on the same database, so running packages in parallel fails outright. Reproduced locally — 3 packages fail without the flag, all pass with it. Tagging a release today would have died at the test job and published nothing, leaving a tag with no image behind it. Both workflows also ran `npx tsc --noEmit`, which checks nothing here. The root tsconfig is solution-style ("files": [] plus project references), so that invocation compiles zero files and exits 0 regardless of the code. Verified by injecting a type error: `tsc -b --noEmit` reports it, the previous command exits 0 on the same file. CLAUDE.md already documents this trap; the workflows had not caught up, so type errors could reach a release unchallenged. Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/ci.yml | 5 ++++- .github/workflows/release.yml | 12 ++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index afdd52f..5428158 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,7 +54,10 @@ jobs: - name: ESLint run: npm run lint - name: TypeScript typecheck - run: npx tsc --noEmit + # Build mode, not a bare --noEmit: the root tsconfig is solution-style + # ("files": [] plus project references), so `tsc --noEmit` compiles zero + # files and exits 0 no matter what. This step checked nothing until now. + run: npx tsc -b --noEmit - name: Frontend build run: npm run build - name: Go tests (integration enabled via TEST_DATABASE_URL) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ed36fd8..3774d77 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -58,12 +58,20 @@ jobs: - name: ESLint run: npm run lint - name: TypeScript typecheck - run: npx tsc --noEmit + # Build mode, not a bare --noEmit: the root tsconfig is solution-style + # ("files": [] plus project references), so `tsc --noEmit` compiles zero + # files and exits 0 no matter what. This step checked nothing until now. + run: npx tsc -b --noEmit - name: Go tests (integration enabled via TEST_DATABASE_URL) working-directory: server env: TEST_DATABASE_URL: postgres://deuce:deuce@localhost:5432/deuce?sslmode=disable - run: go test ./... + # -p 1 runs PACKAGES serially, matching ci.yml. The db, handler and + # sshproxy integration packages each reset the schema on the SAME + # database, so running them in parallel fails outright. Without this + # the release cannot publish — the test job dies before the image is + # ever built. + run: go test -p 1 ./... frontend_build: if: github.repository == 'forgeutah/deuce'