name: PR Checks on: pull_request: types: - opened - synchronize - reopened - ready_for_review jobs: verify: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Install native build tools run: sudo apt-get update && sudo apt-get install -y build-essential python3 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version-file: .nvmrc - name: Setup pnpm uses: pnpm/action-setup@v4 with: run_install: false - name: Install dependencies run: pnpm install --frozen-lockfile - name: Lint run: pnpm exec oxlint --format github # Why: project-owned type declarations must live in .ts so tsc # actually checks them. TypeScript's skipLibCheck: true (inherited # from @electron-toolkit/tsconfig) silently widens unresolved names # in .d.ts to `any`, which is how #1186 shipped a broken IPC signature # past typecheck. See docs/preload-typecheck-hole.md. - name: Guard against project-owned .d.ts in preload/shared run: | matches=$(find src/preload src/shared -name '*.d.ts' 2>/dev/null || true) if [ -n "$matches" ]; then echo "::error::Project-owned .d.ts files are not allowed under src/preload or src/shared." echo "Move type declarations into a .ts file so skipLibCheck does not hide errors." echo "See docs/preload-typecheck-hole.md." echo "Found:" echo "$matches" exit 1 fi - name: Typecheck run: pnpm typecheck # Why: postinstall rebuilds better-sqlite3 for Electron's ABI via # @electron/rebuild, but vitest runs under system Node.js. Rebuild # it for Node so orchestration tests can load the native module. - name: Rebuild better-sqlite3 for Node run: pnpm rebuild better-sqlite3 - name: Test run: pnpm test - name: Build run: pnpm build e2e: uses: ./.github/workflows/e2e.yml # Why: check out the PR head directly instead of refs/pull/N/merge. # The merge ref doesn't exist when the PR has conflicts or GitHub # hasn't computed the merge commit yet, causing checkout to fail # for reasons unrelated to the code under test. with: ref: ${{ github.event.pull_request.head.sha }}