-
Notifications
You must be signed in to change notification settings - Fork 1
150 lines (129 loc) · 4.82 KB
/
Copy pathdeploy.yml
File metadata and controls
150 lines (129 loc) · 4.82 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
name: Deploy to GitHub Pages
on:
push:
branches: [master]
schedule:
- cron: '0 */6 * * *' # Every 6 hours
workflow_dispatch:
permissions:
contents: write
pages: write
id-token: write
concurrency:
group: "pages"
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
outputs:
has_changes: ${{ steps.check_changes.outputs.has_changes }}
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Setup Python
uses: actions/setup-python@v6
with:
python-version: '3.11'
- name: Install Python dependencies
run: |
pip install -r scripts/requirements.txt
python -m ipykernel install --user --name python3 --display-name "Python 3"
- name: Clone PathSim repositories
run: python scripts/clone-repos.py
- name: Fetch Pyodide runtime
run: python scripts/fetch-pyodide.py
# TikZ diagrams in docstrings are compiled to SVG at build time. tectonic
# is a self-contained LaTeX engine (fetches packages on demand, cached
# below); dvisvgm converts the PDF to SVG. If this step ever fails the
# build still succeeds — TikZ blocks degrade to their source listing.
- name: Cache Tectonic packages and rendered diagrams
uses: actions/cache@v4
with:
path: |
~/.cache/Tectonic
.tikz-cache
key: tectonic-${{ runner.os }}-v1
- name: Install TeX toolchain for TikZ diagrams
run: |
sudo apt-get update
sudo apt-get install -y --no-install-recommends dvisvgm
curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net | sh
sudo install -m 0755 tectonic /usr/local/bin/tectonic
tectonic --version
dvisvgm --version | head -n 1
# Build all versions (API, notebooks, outputs, figures, roadmaps)
# Uses smart caching: historical versions only built once, latest always rebuilt
- name: Build documentation
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: python scripts/build.py
# Build global search and crossref indexes
- name: Build indexes
run: python scripts/build-indexes.py
# Inspect notebook execution health across all versions. Any version that
# still has outputs with success: false is reported in the step summary.
# The step fails only when the *latest* version of a package contains
# failed notebooks — historical versions can have unfixable code bugs
# that we tolerate, but a broken latest blocks deployment.
- name: Notebook health check
run: python scripts/check-notebook-health.py
env:
GITHUB_STEP_SUMMARY: ${{ env.GITHUB_STEP_SUMMARY }}
- name: Check for changes
id: check_changes
run: |
git add static/ src/lib/api/generated/
if git diff --staged --quiet; then
echo "has_changes=false" >> $GITHUB_OUTPUT
echo "No new content detected"
else
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "New content detected"
fi
- name: Commit generated files
if: steps.check_changes.outputs.has_changes == 'true'
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git commit -m "Update generated content [skip ci]"
git push
# For scheduled runs, skip frontend build if no new content
- name: Check if frontend build needed
id: need_build
run: |
if [[ "${{ github.event_name }}" == "schedule" && "${{ steps.check_changes.outputs.has_changes }}" == "false" ]]; then
echo "skip=true" >> $GITHUB_OUTPUT
echo "Scheduled run with no changes - skipping frontend build"
else
echo "skip=false" >> $GITHUB_OUTPUT
fi
- name: Setup Node.js
if: steps.need_build.outputs.skip != 'true'
uses: actions/setup-node@v6
with:
node-version: '20'
cache: 'npm'
- name: Install dependencies
if: steps.need_build.outputs.skip != 'true'
run: npm ci
- name: Build
if: steps.need_build.outputs.skip != 'true'
run: npm run build
- name: Upload artifact
if: steps.need_build.outputs.skip != 'true'
uses: actions/upload-pages-artifact@v5
with:
path: build
deploy:
needs: build
if: |
!cancelled() &&
(github.event_name != 'schedule' || needs.build.outputs.has_changes == 'true')
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v5