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 - name: cache Next.js build uses: actions/cache@v5 with: path: apps/readest-app/.next/cache key: nextjs-web-${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | nextjs-web-${{ github.sha }}- nextjs-web- - 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: install playwright browsers working-directory: apps/readest-app run: npx playwright install --with-deps chromium - 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: cache Next.js build uses: actions/cache@v5 with: path: apps/readest-app/.next/cache key: nextjs-test-${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | nextjs-test-${{ github.sha }}- nextjs-test- - name: install Dependencies working-directory: apps/readest-app run: | pnpm install && pnpm setup-vendors - 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: install playwright browsers working-directory: apps/readest-app run: npx playwright install --with-deps chromium - 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 - name: cache Next.js build uses: actions/cache@v5 with: path: apps/readest-app/.next/cache key: nextjs-tauri-${{ github.sha }}-${{ hashFiles('pnpm-lock.yaml') }} restore-keys: | nextjs-tauri-${{ github.sha }}- nextjs-tauri- - 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