mirror of
https://github.com/tinyhumansai/openhuman.git
synced 2026-07-28 05:12:33 +00:00
- Flip `app/src-tauri/Cargo.toml` `default = ["cef"]` (wry is now opt-in via `--no-default-features --features wry`). `cef-dll-sys` auto-downloads the Chromium runtime per-target at compile time. - Update dev scripts: `dev:app` now uses CEF + keychain safe-storage setup; `dev:cef` aliased to it; new `dev:wry` for opt-out; `macos:build:*` and `tauri:build:ui` switched to `cargo tauri` so the CEF-aware bundler runs. - Replace `tauri-apps/tauri-action@v0.6.2` / `yarn tauri build` with `cargo tauri build` in `build.yml`, `build-windows.yml`, and `release.yml`. The upstream `@tauri-apps/cli` binary does not bundle CEF framework files into the produced installer — only the fork at `vendor/tauri-cef` does, so workflows must use the fork's CLI or the shipped apps fail to launch. - Bake the CEF-aware `cargo-tauri` into `ghcr.io/tinyhumansai/openhuman_ci` by compiling it from the submodule during Docker image build, plus CEF runtime libs (libnss3, libgbm1, libxshmfence1, …). Skips the per-run cargo-install in the container-based `build.yml`. - Cache CEF downloads per-OS in matrix jobs (~400MB/platform) and cache the compiled `cargo-tauri` binary on raw GH runners (build-windows, release). - Explicit `gh release upload` step for Linux + Windows installers since the tauri-action upload path was removed; macOS keeps its existing re-sign + notarize + re-upload flow.
272 lines
8.8 KiB
YAML
272 lines
8.8 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-latest
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 1
|
|
|
|
- name: Setup Node.js 24.x
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: 24.x
|
|
cache: "yarn"
|
|
|
|
- name: Cache node modules
|
|
id: yarn-cache
|
|
uses: actions/cache@v4
|
|
with:
|
|
path: node_modules
|
|
key: ${{ runner.os }}-test-${{ hashFiles('**/yarn.lock') }}
|
|
restore-keys: |
|
|
${{ runner.os }}-test-
|
|
${{ runner.os }}-build-
|
|
|
|
- name: Install dependencies
|
|
if: steps.yarn-cache.outputs.cache-hit != 'true'
|
|
run: yarn install --frozen-lockfile
|
|
|
|
- name: Run tests with coverage
|
|
run: yarn 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-tests:
|
|
name: Rust Tests + Quality
|
|
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
|
|
# 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
|
|
|
|
# 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 system dependencies (cmake, ALSA, X11)
|
|
run: apt-get update && apt-get install -y --no-install-recommends cmake libasound2-dev libxdo-dev libxtst-dev libx11-dev libevdev-dev && rm -rf /var/lib/apt/lists/*
|
|
|
|
- name: Check formatting (cargo fmt)
|
|
run: cargo fmt --all -- --check
|
|
|
|
- name: Run clippy (core crate)
|
|
run: cargo clippy -p openhuman
|
|
|
|
- name: Test core crate (openhuman)
|
|
run: cargo test -p openhuman
|
|
|
|
- name: Build sidecar core binary
|
|
run: cargo build --profile ci --target x86_64-unknown-linux-gnu --bin openhuman-core
|
|
|
|
- name: Stage sidecar for Tauri shell tests
|
|
run: |
|
|
mkdir -p app/src-tauri/binaries
|
|
cp target/x86_64-unknown-linux-gnu/ci/openhuman-core app/src-tauri/binaries/openhuman-core-x86_64-unknown-linux-gnu
|
|
chmod +x app/src-tauri/binaries/openhuman-core-x86_64-unknown-linux-gnu
|
|
|
|
- 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
|