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:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user