Files
openhuman/.github/workflows/test-reusable.yml
T

196 lines
6.3 KiB
YAML

---
# Reusable test workflow — frontend unit tests, Rust core tests, Rust Tauri
# shell tests. Same job graph used by both PR/push (`test.yml`) and the
# release pretest gate (`release-staging.yml`, `release-production.yml`).
#
# Caching: pnpm store, Swatinem rust-cache, CEF runtime, and sccache backed
# by the GitHub Actions cache. Cache keys mirror what the release build
# matrix uses so warm caches survive across workflows on the same SHA.
name: Test (reusable)
on:
workflow_call:
inputs:
ref:
description: Git ref (tag or SHA) to test. Release workflows pass the
freshly-pushed staging/production tag here so pretest validates
the exact commit the build matrix will check out, not main HEAD
at workflow_dispatch time. Defaults to empty (checkout uses its
own default, i.e. the workflow's triggering ref).
type: string
default: ""
run_unit:
description: Run frontend Vitest suite.
type: boolean
default: true
run_rust_core:
description: Run `cargo test -p openhuman` (core crate).
type: boolean
default: true
run_rust_tauri:
description: Run `cargo test --manifest-path app/src-tauri/Cargo.toml`.
type: boolean
default: true
permissions:
contents: read
packages: read
jobs:
i18n-coverage:
if: inputs.run_unit
name: i18n Coverage
runs-on: ubuntu-22.04
container:
image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
ref: ${{ inputs.ref }}
fetch-depth: 1
- name: Cache pnpm store
uses: actions/cache@v5
with:
path: ~/.local/share/pnpm/store
key: pnpm-store-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
pnpm-store-${{ runner.os }}-
- name: Install dependencies
run: bash scripts/ci-cancel-aware.sh pnpm install --frozen-lockfile
- name: Verify i18n coverage (missing / extra / drifted / en.ts ↔ chunks)
run: bash scripts/ci-cancel-aware.sh pnpm i18n:check
unit-tests:
if: inputs.run_unit
name: Frontend Unit Tests
runs-on: ubuntu-22.04
container:
image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
ref: ${{ inputs.ref }}
fetch-depth: 1
- name: Cache pnpm store
uses: actions/cache@v5
with:
path: ~/.local/share/pnpm/store
key: pnpm-store-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
restore-keys: |
pnpm-store-${{ runner.os }}-
- name: Install dependencies
run: bash scripts/ci-cancel-aware.sh pnpm install --frozen-lockfile
- name: Run tests with coverage
run: bash scripts/ci-cancel-aware.sh pnpm test:coverage
env:
NODE_ENV: test
- name: Upload coverage reports
if: always()
uses: actions/upload-artifact@v5
with:
name: coverage-report
path: coverage
retention-days: 7
rust-core-tests:
if: inputs.run_rust_core
name: Rust Core Tests + Quality
runs-on: ubuntu-22.04
timeout-minutes: 20
container:
image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
env:
CARGO_INCREMENTAL: "0"
RUSTC_WRAPPER: sccache
SCCACHE_GHA_ENABLED: "true"
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
ref: ${{ inputs.ref }}
fetch-depth: 1
persist-credentials: false
submodules: recursive
- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: . -> target
cache-on-failure: true
key: core
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.9
- name: Test core crate (openhuman)
run: bash scripts/ci-cancel-aware.sh cargo test -p openhuman
rust-core-tests-windows:
if: inputs.run_rust_core
name: Rust Core Tests (Windows — secrets ACL)
runs-on: windows-latest
timeout-minutes: 20
env:
CARGO_INCREMENTAL: '0'
SCCACHE_GHA_ENABLED: 'true'
RUSTC_WRAPPER: sccache
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
ref: ${{ inputs.ref }}
fetch-depth: 1
persist-credentials: false
submodules: recursive
- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: . -> target
cache-on-failure: true
key: core-windows
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.9
- name: Run Windows-specific secrets tests
# Runs the full security::secrets suite including all #[cfg(windows)]
# tests: self-repair ACL path (OPENHUMAN-TAURI-GN), domain-qualified
# icacls username, is_permission_error, repair_windows_acl.
run: bash scripts/ci-cancel-aware.sh cargo test -p openhuman -- security::secrets --nocapture
rust-tauri-tests:
if: inputs.run_rust_tauri
name: Rust Tauri Shell Tests
runs-on: ubuntu-22.04
container:
image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
env:
CARGO_INCREMENTAL: "0"
RUSTC_WRAPPER: sccache
SCCACHE_GHA_ENABLED: "true"
steps:
- name: Checkout code
uses: actions/checkout@v5
with:
ref: ${{ inputs.ref }}
fetch-depth: 1
# Required for app/src-tauri/vendor/tauri-cef.
persist-credentials: false
submodules: recursive
- name: Cache Rust build artifacts
uses: Swatinem/rust-cache@v2
with:
workspaces: |
. -> target
app/src-tauri -> target
cache-on-failure: true
key: tauri
- name: Cache CEF binary distribution
uses: actions/cache@v5
with:
path: ~/.cache/tauri-cef
key: cef-ubuntu-22.04-${{ hashFiles('app/src-tauri/Cargo.toml') }}
restore-keys: |
cef-ubuntu-22.04-
- name: Install sccache
uses: mozilla-actions/sccache-action@v0.0.9
- name: Test Tauri shell (OpenHuman)
run: bash scripts/ci-cancel-aware.sh cargo test --manifest-path app/src-tauri/Cargo.toml