mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 13:32:23 +00:00
277 lines
9.1 KiB
YAML
277 lines
9.1 KiB
YAML
---
|
|
name: Test
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
workflow_dispatch:
|
|
inputs:
|
|
run_macos_e2e:
|
|
description: Run macOS E2E tests (Appium Mac2)
|
|
required: false
|
|
default: 'false'
|
|
type: choice
|
|
options: ['false', 'true']
|
|
permissions:
|
|
contents: read
|
|
pull-requests: read
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref
|
|
|| github.ref }}
|
|
cancel-in-progress: true
|
|
jobs:
|
|
unit-tests:
|
|
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@v4
|
|
with:
|
|
fetch-depth: 1
|
|
- name: Cache pnpm store
|
|
uses: actions/cache@v4
|
|
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@v4
|
|
with:
|
|
name: coverage-report
|
|
path: coverage
|
|
retention-days: 7
|
|
|
|
rust-core-tests:
|
|
name: Rust Core Tests + Quality
|
|
runs-on: ubuntu-22.04
|
|
container:
|
|
image: ghcr.io/tinyhumansai/openhuman_ci:rust-1.93.0
|
|
env:
|
|
# Incremental compilation is pointless on fresh CI runners and just wastes
|
|
# disk and IO. Swatinem/rust-cache already handles cross-run warmup.
|
|
CARGO_INCREMENTAL: '0'
|
|
# Route rustc through sccache, backed by the GitHub Actions cache. This
|
|
# layers on top of Swatinem/rust-cache (which caches target/) by caching
|
|
# individual compilation units across branches.
|
|
RUSTC_WRAPPER: sccache
|
|
SCCACHE_GHA_ENABLED: 'true'
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
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-tauri-tests:
|
|
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@v4
|
|
with:
|
|
fetch-depth: 1
|
|
# Required for app/src-tauri/vendor/tauri-cef — the fork supplies
|
|
# tauri-runtime-cef (compiled into the default build) and the
|
|
# cef-aware tauri-cli + tauri-bundler used by release workflows.
|
|
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
|
|
|
|
# CEF is the default runtime, so `cargo test --manifest-path app/src-tauri/Cargo.toml`
|
|
# links the Chromium dylib via cef-dll-sys. Cache the download to avoid
|
|
# re-fetching ~400MB every PR run.
|
|
- name: Cache CEF binary distribution
|
|
uses: actions/cache@v4
|
|
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
|
|
|
|
# Core is linked into the Tauri binary as a path dep, so the shell's
|
|
# cargo test pulls it in automatically — no separate sidecar build.
|
|
- name: Test Tauri shell (OpenHuman)
|
|
run: cargo test --manifest-path app/src-tauri/Cargo.toml
|
|
|
|
# e2e-linux:
|
|
# name: E2E (Linux / tauri-driver)
|
|
# runs-on: ubuntu-22.04
|
|
# timeout-minutes: 60
|
|
# steps:
|
|
# - name: Checkout code
|
|
# uses: actions/checkout@v4
|
|
# with:
|
|
# fetch-depth: 1
|
|
# submodules: recursive
|
|
|
|
# - name: Setup Node.js 24.x
|
|
# uses: actions/setup-node@v4
|
|
# with:
|
|
# node-version: 24.x
|
|
# cache: "yarn"
|
|
|
|
# - name: Install Rust (rust-toolchain.toml)
|
|
# uses: dtolnay/rust-toolchain@1.93.0
|
|
|
|
# - name: Install system dependencies
|
|
# run: |
|
|
# sudo apt-get update
|
|
# sudo apt-get install -y \
|
|
# libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev \
|
|
# librsvg2-dev patchelf \
|
|
# xvfb at-spi2-core dbus-x11 \
|
|
# webkit2gtk-driver \
|
|
# libasound2-dev libxdo-dev libxtst-dev libx11-dev libevdev-dev
|
|
|
|
# - name: Cargo.lock fingerprint (deps only)
|
|
# id: cargo-lock-fingerprint
|
|
# shell: bash
|
|
# run: |
|
|
# echo "hash=$(tail -n +8 Cargo.lock | openssl dgst -sha256 | awk '{print $2}')" >> "$GITHUB_OUTPUT"
|
|
|
|
# - name: Cache Cargo registry and build
|
|
# uses: actions/cache@v4
|
|
# with:
|
|
# path: |
|
|
# ~/.cargo/registry
|
|
# ~/.cargo/git
|
|
# target
|
|
# key: ${{ runner.os }}-e2e-cargo-${{ steps.cargo-lock-fingerprint.outputs.hash }}
|
|
# restore-keys: |
|
|
# ${{ runner.os }}-e2e-cargo-
|
|
|
|
# - name: Install tauri-driver
|
|
# run: cargo install tauri-driver --version 2.0.5
|
|
|
|
# - name: Install JS dependencies
|
|
# run: yarn install --frozen-lockfile
|
|
|
|
# - name: Ensure .env exists for E2E build
|
|
# run: |
|
|
# touch .env
|
|
# touch app/.env
|
|
|
|
# - name: Build E2E app
|
|
# run: yarn workspace openhuman-app test:e2e:build
|
|
|
|
# - name: Stage sidecar next to app binary
|
|
# run: |
|
|
# # Tauri resolves externalBin relative to the running binary's directory.
|
|
# # Copy the sidecar from binaries/ to target/debug/ so the app can find it.
|
|
# cp app/src-tauri/binaries/openhuman-core-x86_64-unknown-linux-gnu \
|
|
# app/src-tauri/target/debug/openhuman-core-x86_64-unknown-linux-gnu
|
|
# chmod +x app/src-tauri/target/debug/openhuman-core-x86_64-unknown-linux-gnu
|
|
# echo "Sidecar staged next to app binary:"
|
|
# ls -la app/src-tauri/target/debug/openhuman-core-* app/src-tauri/target/debug/OpenHuman
|
|
|
|
# - name: Run E2E tests under Xvfb
|
|
# run: |
|
|
# export DISPLAY=:99
|
|
# Xvfb :99 -screen 0 1280x1024x24 &
|
|
# sleep 2
|
|
# # dbus session is required by webkit2gtk
|
|
# eval "$(dbus-launch --sh-syntax)"
|
|
# # Ensure XDG dirs exist for deep-link URL scheme registration on Linux
|
|
# mkdir -p ~/.local/share/applications
|
|
# export RUST_BACKTRACE=1
|
|
# cd app
|
|
# # Core specs — must pass on Linux CI
|
|
# FAILED=0
|
|
# for spec in \
|
|
# test/e2e/specs/login-flow.spec.ts \
|
|
# test/e2e/specs/smoke.spec.ts \
|
|
# test/e2e/specs/navigation.spec.ts \
|
|
# test/e2e/specs/telegram-flow.spec.ts; do
|
|
# SPEC_NAME=$(basename "$spec" .spec.ts)
|
|
# echo "=== Running $SPEC_NAME ==="
|
|
# bash scripts/e2e-run-spec.sh "$spec" "$SPEC_NAME" || {
|
|
# echo "FAILED: $SPEC_NAME"
|
|
# cat /tmp/tauri-driver-e2e-${SPEC_NAME}.log 2>/dev/null || true
|
|
# FAILED=1
|
|
# }
|
|
# done
|
|
# # Extended specs (auth, billing, gmail, notion, payments) are skipped
|
|
# # on Linux CI — webkit2gtk text matching differences cause Settings
|
|
# # page navigation timeouts. Full suite runs on macOS locally.
|
|
# if [ "$FAILED" -eq 1 ]; then
|
|
# echo "Core E2E specs failed"
|
|
# exit 1
|
|
# fi
|
|
# echo "Core E2E specs passed"
|
|
# e2e-macos:
|
|
# name: E2E (macOS / Appium)
|
|
# if: github.event_name == 'workflow_dispatch' && github.event.inputs.run_macos_e2e == 'true'
|
|
# runs-on: macos-latest
|
|
# timeout-minutes: 90
|
|
# steps:
|
|
# - name: Checkout code
|
|
# uses: actions/checkout@v4
|
|
# with:
|
|
# fetch-depth: 1
|
|
# submodules: recursive
|
|
|
|
# - name: Setup Node.js 24.x
|
|
# uses: actions/setup-node@v4
|
|
# with:
|
|
# node-version: 24.x
|
|
# cache: "yarn"
|
|
|
|
# - name: Install Rust (rust-toolchain.toml)
|
|
# uses: dtolnay/rust-toolchain@1.93.0
|
|
|
|
# - name: Install dependencies
|
|
# run: yarn install --frozen-lockfile
|
|
|
|
# - name: Ensure .env exists for E2E build
|
|
# run: |
|
|
# touch .env
|
|
# touch app/.env
|
|
|
|
# - name: Install Appium and mac2 driver
|
|
# run: |
|
|
# npm install -g appium
|
|
# appium driver install mac2
|
|
|
|
# - name: Build E2E app bundle
|
|
# run: yarn workspace openhuman-app test:e2e:build
|
|
|
|
# - name: Run all E2E flows
|
|
# run: yarn workspace openhuman-app test:e2e:all:flows
|