82 lines
3.9 KiB
YAML
82 lines
3.9 KiB
YAML
name: fast-browser scenarios
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- "extensions/fast-browser/**"
|
|
- "package.json"
|
|
- "bun.lock"
|
|
- ".github/workflows/fast-browser-scenarios.yml"
|
|
pull_request:
|
|
paths:
|
|
- "extensions/fast-browser/**"
|
|
- "package.json"
|
|
- "bun.lock"
|
|
- ".github/workflows/fast-browser-scenarios.yml"
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
offline:
|
|
name: Offline scenario contract tests
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: oven-sh/setup-bun@v2
|
|
with:
|
|
bun-version: "1.3.14"
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.12"
|
|
- name: Install pinned dependencies
|
|
run: |
|
|
bun install --frozen-lockfile
|
|
python -m pip install --disable-pip-version-check 'browser-harness==0.1.13'
|
|
- name: Run offline scenario contract tests
|
|
run: |
|
|
node --test --experimental-strip-types \
|
|
extensions/fast-browser/scenario-cli.test.ts \
|
|
extensions/fast-browser/scenarios.test.ts \
|
|
extensions/fast-browser/reports.test.ts
|
|
python -m unittest discover -s extensions/fast-browser -p 'test_*.py'
|
|
- name: Validate local scenario examples without a browser
|
|
run: |
|
|
node --experimental-strip-types extensions/fast-browser/scenario-cli.ts --check --format json extensions/fast-browser/scenarios/examples/local-form.json
|
|
node --experimental-strip-types extensions/fast-browser/scenario-cli.ts --check --format json extensions/fast-browser/scenarios/examples/local-login.json
|
|
node --experimental-strip-types extensions/fast-browser/scenario-cli.ts --check --format json extensions/fast-browser/scenarios/examples/local-popup.json
|
|
|
|
live-headless:
|
|
name: Local Chromium headless scenarios
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 15
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: oven-sh/setup-bun@v2
|
|
with:
|
|
bun-version: "1.3.14"
|
|
- uses: actions/setup-python@v5
|
|
with:
|
|
python-version: "3.12"
|
|
- name: Install pinned browser dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install --yes --no-install-recommends chromium
|
|
python -m venv .pi/fast-browser-demo/venv
|
|
.pi/fast-browser-demo/venv/bin/python -m pip install --disable-pip-version-check 'browser-harness==0.1.13'
|
|
bun install --frozen-lockfile
|
|
- name: Run declarative CLI scenarios against local Chromium
|
|
env:
|
|
FAST_BROWSER_FIXTURE_MODE: "local"
|
|
FAST_BROWSER_TEST_PASSWORD: "demo-password"
|
|
FAST_BROWSER_PYTHON: "${{ github.workspace }}/.pi/fast-browser-demo/venv/bin/python"
|
|
run: |
|
|
report_dir="$RUNNER_TEMP/fast-browser-scenario-reports"
|
|
mkdir -m 700 -p "$report_dir"
|
|
node --experimental-strip-types extensions/fast-browser/scenario-cli.ts --headless --capture-on-request --format json --report "$report_dir/local-form.json" extensions/fast-browser/scenarios/examples/local-form.json
|
|
node --experimental-strip-types extensions/fast-browser/scenario-cli.ts --headless --capture-on-request --format json --report "$report_dir/local-login.json" extensions/fast-browser/scenarios/examples/local-login.json
|
|
node --experimental-strip-types extensions/fast-browser/scenario-cli.ts --headless --capture-on-request --format json --report "$report_dir/local-popup.json" extensions/fast-browser/scenarios/examples/local-popup.json
|
|
node --input-type=module -e 'import { readFileSync, accessSync } from "node:fs"; for (const name of ["local-form", "local-login", "local-popup"]) { const report = JSON.parse(readFileSync(`${process.env.RUNNER_TEMP}/fast-browser-scenario-reports/${name}.json`, "utf8")); for (const evidence of report.evidence ?? []) if (evidence.status === "captured") accessSync(evidence.retainedPath); }'
|