ci: run unit and Rust tests, tighten triggers and permissions

Expand path triggers to all build inputs (configs, lockfile, index.html,
CHANGELOG.md which feeds the What's New modal), add pnpm test:unit and
cargo test steps, read-only permissions, a 60-minute timeout, and a
workflow-scoped concurrency group.
This commit is contained in:
2026-07-11 19:12:41 +01:00
parent 4aa74d535b
commit 0b4459365d
+34 -1
View File
@@ -4,16 +4,39 @@ on:
push: push:
branches: [main] branches: [main]
paths: paths:
- '.github/workflows/ci.yml'
# CHANGELOG.md is a build input: src/changelog.ts imports it ?raw for
# the What's New modal, and changelog.test.ts asserts on its content.
- 'CHANGELOG.md'
- 'index.html'
- 'package.json'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- 'src/**' - 'src/**'
- 'src-tauri/**' - 'src-tauri/**'
- 'tsconfig*.json'
- 'vite.config.ts'
pull_request: pull_request:
paths: paths:
- '.github/workflows/ci.yml'
# CHANGELOG.md is a build input: src/changelog.ts imports it ?raw for
# the What's New modal, and changelog.test.ts asserts on its content.
- 'CHANGELOG.md'
- 'index.html'
- 'package.json'
- 'pnpm-lock.yaml'
- 'pnpm-workspace.yaml'
- 'src/**' - 'src/**'
- 'src-tauri/**' - 'src-tauri/**'
- 'tsconfig*.json'
- 'vite.config.ts'
workflow_dispatch: workflow_dispatch:
permissions:
contents: read
concurrency: concurrency:
group: ci-${{ github.ref }} group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
@@ -21,7 +44,9 @@ jobs:
# windows-latest to match the release target — the ML crates (ort, candle) # windows-latest to match the release target — the ML crates (ort, candle)
# and the NSIS bundle only ever ship from Windows. # and the NSIS bundle only ever ship from Windows.
runs-on: windows-latest runs-on: windows-latest
timeout-minutes: 60
env: env:
CARGO_INCREMENTAL: 0
GITEA_STATUS_TOKEN: ${{ secrets.GITEA_STATUS_TOKEN }} GITEA_STATUS_TOKEN: ${{ secrets.GITEA_STATUS_TOKEN }}
steps: steps:
- name: Report pending status to Gitea - name: Report pending status to Gitea
@@ -58,10 +83,14 @@ jobs:
with: with:
node-version: 22 node-version: 22
cache: pnpm cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- name: Install frontend dependencies - name: Install frontend dependencies
run: pnpm install --frozen-lockfile run: pnpm install --frozen-lockfile
- name: Unit tests
run: pnpm test:unit
# tsc + vite build; also produces dist/ which tauri's build script expects # tsc + vite build; also produces dist/ which tauri's build script expects
- name: Type-check and build frontend - name: Type-check and build frontend
run: pnpm build:vite run: pnpm build:vite
@@ -85,6 +114,10 @@ jobs:
working-directory: src-tauri working-directory: src-tauri
run: cargo clippy --all-targets --locked --no-default-features -- -D warnings run: cargo clippy --all-targets --locked --no-default-features -- -D warnings
- name: Rust tests
working-directory: src-tauri
run: cargo test --locked --no-default-features
- name: Report final status to Gitea - name: Report final status to Gitea
if: always() && github.event_name != 'pull_request' && env.GITEA_STATUS_TOKEN != '' if: always() && github.event_name != 'pull_request' && env.GITEA_STATUS_TOKEN != ''
continue-on-error: true continue-on-error: true