forked from akai/readest
5688687011
* ci(e2e): cache Playwright browsers and apt packages - cache `~/.cache/ms-playwright` keyed on the lockfile; on a hit only the OS deps are installed, skipping the browser download - cache apt archives in test_web_app, matching the rust/tauri jobs Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * ci: enable Turbopack persistent cache and key it for cross-PR reuse Enable `experimental.turbopackFileSystemCacheForBuild` so `next build` persists a real Turbopack cache (~640 MB at `.next/cache/turbopack`), instead of the ~340 KB of metadata the previous `.next/cache` cache held. Dev caching is already on by default in Next 16.1+. Redesign the cache keys so they actually pay off: - drop `${{ github.sha }}` from the key — it made every commit a unique entry that no other PR could exact-hit. The key is now `turbo-<mode>-<target>-<os>-<lockfile-hash>`, deterministic across branches, so every PR restores the same entry (in practice the one `main` last saved — the only cache sibling PRs can all see). - `build_web_app` (`next build`) caches `.next/cache`; `build_tauri_app` (`next dev`) caches `.next/dev/cache` — `next dev`'s Turbopack cache lives in a different directory. - drop the Next.js cache step from `test_web_app`; it runs no build. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
248 lines
7.5 KiB
YAML
248 lines
7.5 KiB
YAML
name: PR checks
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
permissions:
|
|
contents: write
|
|
pull-requests: write
|
|
jobs:
|
|
rust_lint:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
RUSTFLAGS: '-C target-cpu=skylake'
|
|
SCCACHE_GHA_ENABLED: 'true'
|
|
RUSTC_WRAPPER: sccache
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: 'true'
|
|
- name: setup sccache
|
|
uses: mozilla-actions/sccache-action@v0.0.10
|
|
- name: Install minimal stable with clippy and rustfmt
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
override: true
|
|
components: rustfmt, clippy
|
|
- name: Cache apt packages
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: /var/cache/apt/archives
|
|
key: apt-rust-lint-${{ runner.os }}
|
|
- name: Install system dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y pkg-config libfontconfig-dev libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev libsoup-3.0-dev
|
|
- name: Format check
|
|
working-directory: apps/readest-app/src-tauri
|
|
run: cargo fmt --check
|
|
- name: Clippy Check
|
|
working-directory: apps/readest-app/src-tauri
|
|
run: cargo clippy -p Readest --no-deps -- -D warnings
|
|
|
|
build_web_app:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: 'true'
|
|
|
|
- name: setup pnpm
|
|
uses: pnpm/action-setup@v6
|
|
|
|
- name: setup node
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 24
|
|
cache: pnpm
|
|
|
|
# Turbopack persists its build cache here (turbopackFileSystemCacheForBuild).
|
|
# The key is deterministic (no commit SHA) so every PR restores the same
|
|
# entry — in practice the one `main` last saved, which is the only cache
|
|
# sibling PRs can all see.
|
|
- name: cache Turbopack build cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: apps/readest-app/.next/cache
|
|
key: turbo-build-web-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
turbo-build-web-${{ runner.os }}-
|
|
|
|
- name: install Dependencies
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
pnpm install && pnpm setup-vendors
|
|
|
|
- name: install LuaJIT (for koplugin lint)
|
|
run: sudo apt-get update && sudo apt-get install -y luajit
|
|
|
|
- name: run format check
|
|
run: |
|
|
pnpm format:check || (pnpm format && git diff && exit 1)
|
|
|
|
- name: run lint
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
pnpm lint
|
|
|
|
- name: build the web app
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
pnpm build-web && pnpm check:all
|
|
|
|
- name: cache playwright browsers
|
|
id: playwright-cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
|
|
- name: install playwright browsers
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
if [ "${{ steps.playwright-cache.outputs.cache-hit }}" = 'true' ]; then
|
|
npx playwright install-deps chromium
|
|
else
|
|
npx playwright install --with-deps chromium
|
|
fi
|
|
|
|
- name: run web e2e tests
|
|
id: web_e2e
|
|
working-directory: apps/readest-app
|
|
run: pnpm test:e2e:web
|
|
|
|
- name: upload e2e report
|
|
if: ${{ failure() && steps.web_e2e.outcome == 'failure' }}
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: playwright-report
|
|
path: apps/readest-app/playwright-report/
|
|
retention-days: 7
|
|
|
|
test_web_app:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: 'true'
|
|
|
|
- name: setup pnpm
|
|
uses: pnpm/action-setup@v6
|
|
|
|
- name: setup node
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 24
|
|
cache: pnpm
|
|
|
|
- name: install Dependencies
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
pnpm install && pnpm setup-vendors
|
|
|
|
- name: cache apt packages
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: /var/cache/apt/archives
|
|
key: apt-test-web-${{ runner.os }}
|
|
|
|
- name: install LuaJIT + busted (for koplugin tests)
|
|
run: |
|
|
sudo apt-get update
|
|
# luajit — pnpm test:lua
|
|
# luarocks/libsqlite3-dev — required to build lsqlite3complete
|
|
sudo apt-get install -y luajit luarocks libsqlite3-dev
|
|
# Install busted + the SQLite binding the LibraryStore specs use,
|
|
# both pinned to Lua 5.1 (LuaJIT-compatible). System-wide install
|
|
# so `luarocks --lua-version=5.1 path` (sourced by
|
|
# scripts/test-koplugin.mjs) picks them up.
|
|
sudo luarocks --lua-version=5.1 install busted
|
|
sudo luarocks --lua-version=5.1 install lsqlite3complete
|
|
|
|
- name: cache playwright browsers
|
|
id: playwright-cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: ~/.cache/ms-playwright
|
|
key: playwright-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
|
|
- name: install playwright browsers
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
if [ "${{ steps.playwright-cache.outputs.cache-hit }}" = 'true' ]; then
|
|
npx playwright install-deps chromium
|
|
else
|
|
npx playwright install --with-deps chromium
|
|
fi
|
|
|
|
- name: run web tests
|
|
working-directory: apps/readest-app
|
|
run: pnpm test:pr:web
|
|
|
|
- name: run koplugin tests
|
|
working-directory: apps/readest-app
|
|
run: pnpm test:lua
|
|
|
|
build_tauri_app:
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
SCCACHE_GHA_ENABLED: 'true'
|
|
RUSTC_WRAPPER: sccache
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
submodules: 'true'
|
|
|
|
- name: setup pnpm
|
|
uses: pnpm/action-setup@v6
|
|
|
|
- name: setup node
|
|
uses: actions/setup-node@v6
|
|
with:
|
|
node-version: 24
|
|
cache: pnpm
|
|
|
|
# The tauri tests run `next dev`, whose Turbopack cache lives in
|
|
# `.next/dev/cache` (a different path from the `next build` cache).
|
|
- name: cache Turbopack dev cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: apps/readest-app/.next/dev/cache
|
|
key: turbo-dev-tauri-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
restore-keys: |
|
|
turbo-dev-tauri-${{ runner.os }}-
|
|
|
|
- name: install Dependencies
|
|
working-directory: apps/readest-app
|
|
run: |
|
|
pnpm install && pnpm setup-vendors
|
|
|
|
- name: setup sccache
|
|
uses: mozilla-actions/sccache-action@v0.0.10
|
|
|
|
- name: install Rust toolchain
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
toolchain: stable
|
|
|
|
- uses: Swatinem/rust-cache@v2
|
|
with:
|
|
key: tauri-cargo
|
|
cache-all-crates: 'true'
|
|
|
|
- name: Cache apt packages
|
|
uses: actions/cache@v5
|
|
with:
|
|
path: /var/cache/apt/archives
|
|
key: apt-tauri-${{ runner.os }}
|
|
- name: install system dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y pkg-config libfontconfig-dev libglib2.0-dev libgtk-3-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev libsoup-3.0-dev xvfb
|
|
|
|
- name: run tauri tests
|
|
working-directory: apps/readest-app
|
|
run: xvfb-run pnpm test:pr:tauri
|