-
Notifications
You must be signed in to change notification settings - Fork 1
129 lines (110 loc) · 3.92 KB
/
deploy.yml
File metadata and controls
129 lines (110 loc) · 3.92 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
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
# 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