Skip to content

Merge remote-tracking branch 'fork/main' #26

Merge remote-tracking branch 'fork/main'

Merge remote-tracking branch 'fork/main' #26

Workflow file for this run

# Phase-7 polish-plan test workflow.
#
# Runs the full validation surface produced by polish phases 3–6:
# - renderer-unit: vitest (310 tests) — Phase 4
# - backend-unit: cargo test --bin mark — Phase 5 (392 tests)
# - renderer-e2e: playwright chromium — Phase 6 (5 specs)
#
# Triggers: push to main, PR targeting main, manual dispatch. Existing
# release.yml + release-tauri.yml are tag/branch-scoped respectively
# and untouched by this file.
#
# Notes on tooling versions:
# - Node 22 + dtolnay/rust-toolchain@stable mirror release.yml so a
# green test run is a reliable predictor of a green release build.
# - cargo test uses --bin mark because src-tauri/Cargo.toml has no
# [lib] target — all 392 unit tests are attached to the binary.
# - Linux Tauri sysdeps (webkit2gtk-4.1, gtk-3, soup-3) are not
# strictly required for `cargo test --bin mark` because the test
# suite does not link the windowing layer, BUT tauri-build runs at
# compile time and pulls webkit pkg-config probes — installing the
# deps avoids spurious failures and keeps parity with future jobs.
# - Playwright runs macos-14 only initially; Linux is added under the
# same matrix entry once it has been observed green at least once.
name: test
on:
push:
branches: [main]
pull_request:
branches: [main]
workflow_dispatch:
concurrency:
group: test-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
renderer-unit:
name: renderer unit (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-14]
runs-on: ${{ matrix.os }}
timeout-minutes: 15
steps:
- name: checkout
uses: actions/checkout@v4
- name: setup node
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm
- name: npm ci
run: npm ci
- name: vitest run
run: npm test
backend-unit:
name: backend unit (${{ matrix.os }})
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-14]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
steps:
- name: checkout
uses: actions/checkout@v4
- name: setup rust
uses: dtolnay/rust-toolchain@stable
- name: cache cargo
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
src-tauri/target
key: cargo-test-${{ matrix.os }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
cargo-test-${{ matrix.os }}-
- name: install tauri sysdeps (linux)
if: matrix.os == 'ubuntu-latest'
run: |
sudo apt-get update
sudo apt-get install -y \
libwebkit2gtk-4.1-dev \
libgtk-3-dev \
libsoup-3.0-dev \
libjavascriptcoregtk-4.1-dev \
libayatana-appindicator3-dev \
librsvg2-dev
- name: cargo test
working-directory: src-tauri
run: cargo test --bin mark
renderer-e2e:
name: renderer e2e playwright (macos-14)
runs-on: macos-14
timeout-minutes: 25
steps:
- name: checkout
uses: actions/checkout@v4
- name: setup node
uses: actions/setup-node@v4
with:
node-version: '22'
cache: npm
- name: npm ci
run: npm ci
- name: vite build
run: npm run build
- name: cache playwright browsers
uses: actions/cache@v4
with:
path: ~/Library/Caches/ms-playwright
key: playwright-macos-14-${{ hashFiles('package-lock.json') }}
restore-keys: |
playwright-macos-14-
- name: install playwright chromium
run: npx playwright install chromium --with-deps
- name: playwright test
run: npm run test:e2e
- name: upload playwright report
if: failure()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
retention-days: 14
status-check:
name: status check
needs: [renderer-unit, backend-unit, renderer-e2e]
runs-on: ubuntu-latest
if: always()
steps:
- name: aggregate
run: |
set -euo pipefail
echo "renderer-unit: ${{ needs.renderer-unit.result }}"
echo "backend-unit: ${{ needs.backend-unit.result }}"
echo "renderer-e2e: ${{ needs.renderer-e2e.result }}"
if [ "${{ needs.renderer-unit.result }}" != "success" ] \
|| [ "${{ needs.backend-unit.result }}" != "success" ] \
|| [ "${{ needs.renderer-e2e.result }}" != "success" ]; then
echo "::error::one or more test jobs failed"
exit 1
fi
echo "all green"