mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 05:12:33 +00:00
196 lines
6.1 KiB
YAML
196 lines
6.1 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: pnpm install --frozen-lockfile
|
|
- name: Verify i18n coverage (missing / extra / drifted / en.ts ↔ chunks)
|
|
run: 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: pnpm install --frozen-lockfile
|
|
- name: Run tests with coverage
|
|
run: 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: 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: 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: cargo test --manifest-path app/src-tauri/Cargo.toml
|