-
Notifications
You must be signed in to change notification settings - Fork 0
134 lines (124 loc) · 4.3 KB
/
ci.yml
File metadata and controls
134 lines (124 loc) · 4.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- run: pip install ruff
- run: ruff check src/ tests/
unit:
runs-on: ubuntu-latest
env:
# Repository secret (Settings → Secrets → Actions). Empty for PRs from forks without secrets.
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
# Import ``docgen`` from the PR checkout, not only the copy under site-packages (avoids stale VHS fixes).
PYTHONPATH: ${{ github.workspace }}/src
strategy:
matrix:
python-version: ["3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: ${{ matrix.python-version }}
- name: Install system dependencies
run: |
set -euo pipefail
attempt=1
max_attempts=4
backoff=4
while [ "$attempt" -le "$max_attempts" ]; do
echo "apt attempt $attempt/$max_attempts"
if timeout 600s sudo apt-get -o Acquire::Retries=3 update \
&& timeout 600s sudo apt-get -o Acquire::Retries=3 install -y --no-install-recommends ffmpeg tesseract-ocr xvfb ttyd; then
exit 0
fi
if [ "$attempt" -eq "$max_attempts" ]; then
echo "apt failed after $max_attempts attempts"
exit 1
fi
echo "apt failed, retrying in ${backoff}s..."
sleep "$backoff"
backoff=$((backoff * 2))
attempt=$((attempt + 1))
done
- run: pip install --no-cache-dir ".[dev]"
# VHS terminal capture needs a DISPLAY (headless Ubuntu has none by default).
- run: xvfb-run -a pytest tests/ --ignore=tests/e2e -v --tb=short
playwright-vite-dogfood:
name: Playwright Vite dogfood fixture
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with:
node-version: "20"
cache: npm
cache-dependency-path: fixtures/playwright-vite-dogfood/package-lock.json
- name: Install fixture deps + Playwright (Chromium)
working-directory: fixtures/playwright-vite-dogfood
run: |
npm ci
npx playwright install --with-deps chromium
- name: Run Playwright tests against Vite dev server
working-directory: fixtures/playwright-vite-dogfood
env:
CI: "1"
run: npm run test:e2e
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- name: Install docgen (CLI)
run: pip install --no-cache-dir .
- name: docgen discover-tests includes fixture spec
env:
PYTHONPATH: ${{ github.workspace }}/src
run: |
set -euo pipefail
cd docs/demos
docgen --config docgen.yaml discover-tests --format=json | python3 -c "import json,sys; r=sys.stdin.read().strip(); \
assert r, 'empty stdout from discover-tests'; \
d=json.loads(r); \
assert len(d)>=1, d; \
assert any('smoke.spec.ts' in (x.get('spec_path') or '') for x in d), d"
smoke:
name: smoke (config + lint + tts dry-run)
runs-on: ubuntu-latest
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- run: pip install .
- name: Validate config loads
run: docgen --config docs/demos/docgen.yaml validate --help
- name: Narration lint
run: docgen --config docs/demos/docgen.yaml lint
- name: TTS dry-run
run: docgen --config docs/demos/docgen.yaml tts --dry-run
e2e:
runs-on: ubuntu-latest
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
PYTHONPATH: ${{ github.workspace }}/src
steps:
- uses: actions/checkout@v6
- uses: actions/setup-python@v6
with:
python-version: "3.12"
- run: pip install ".[dev]"
- run: playwright install --with-deps chromium
- run: pytest tests/e2e/ -v --tb=short