chore(release): v0.51.19 #31
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 | |
| - name: Cache Rust build artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| workspaces: | | |
| . -> target | |
| app/src-tauri -> target | |
| cache-on-failure: true | |
| - 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 |