Files
bookorbit/.github/workflows/e2e-runner.yml
T
neon 97cd03325f feat(reader): open DjVu documents in the web reader
Scanned books are commonly distributed as DjVu, which the scanner only stored as a supplement.
Decode pages on the server with DjVuLibre so DjVu imports with a cover and page count, opens in
the image reader with its embedded OCR text, and can be the preferred format of an ordinary email
recipient. Migration 0113 widens the recipient format check to allow it.

Decoding runs on validated private snapshots behind a bounded, reader-first queue, and
revalidation and cached pages are answered without a decoder. Released iOS builds cannot open
DjVu, so series continuation offers it only to callers sending includeDjvu=true, and the
dashboard and notebook read file never name it. The first full scan after upgrading promotes
stored .djvu supplements to content.
2026-10-14 21:37:41 +00:00

104 lines
3.0 KiB
YAML

name: E2E Runner (reusable)
on:
workflow_call:
inputs:
suite-id:
description: "E2E suite id from scripts/e2e/suite-registry.mjs (e.g. scanner-scenarios)"
required: true
type: string
check-name:
description: "Name shown in the GitHub checks UI"
required: true
type: string
artifact-name:
description: "Name for the uploaded artifact"
required: true
type: string
job-timeout-minutes:
description: "Job timeout in minutes"
required: false
type: number
default: 45
vitest-args:
description: "Optional extra args forwarded to vitest (for shard/testNamePattern reruns)"
required: false
type: string
default: ""
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true"
NODE_VERSION: "26"
PNPM_VERSION: "11"
E2E_DATABASE_URL: postgres://bookorbit:bookorbit@localhost:5432/bookorbit_e2e
NODE_ENV: test
JWT_SECRET: scanner-e2e-secret-1234
JWT_EXPIRES_IN: 15m
JWT_REFRESH_EXPIRES_IN: 7d
BOOKS_PATH: ../local/data
APP_URL: http://localhost:6263
jobs:
run-suite:
name: ${{ inputs.check-name }}
runs-on: ubuntu-latest
timeout-minutes: ${{ inputs.job-timeout-minutes }}
permissions:
contents: read
checks: write
services:
postgres:
image: pgvector/pgvector:pg18
env:
POSTGRES_USER: bookorbit
POSTGRES_PASSWORD: bookorbit
POSTGRES_DB: bookorbit
ports:
- 5432:5432
options: >-
--health-cmd="pg_isready -U bookorbit"
--health-interval=5s
--health-timeout=5s
--health-retries=20
steps:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Set up Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
with:
node-version: ${{ env.NODE_VERSION }}
pnpm-version: ${{ env.PNPM_VERSION }}
prefetch: "true"
- name: Install DjVuLibre tools
if: inputs.suite-id == 'djvu-reader' || inputs.suite-id == 'all'
run: sudo apt-get update && sudo apt-get install -y djvulibre-bin util-linux
- name: Run e2e suite
shell: bash
run: |
if [ -n "${{ inputs.vitest-args }}" ]; then
pnpm run e2e:run -- ${{ inputs.suite-id }} ${{ inputs.vitest-args }}
else
pnpm run e2e:run -- ${{ inputs.suite-id }}
fi
- name: Publish test report annotations
if: always()
uses: EnricoMi/publish-unit-test-result-action@d0a4676d0e0b938bc201470d88276b7c74c712b3 # v2
with:
check_name: ${{ inputs.check-name }}
files: test-results/server/*-e2e-junit.xml
fail_on: nothing
comment_mode: off
- name: Upload e2e artifacts
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ inputs.artifact-name }}
path: test-results/server
retention-days: 7