-
Notifications
You must be signed in to change notification settings - Fork 0
130 lines (112 loc) · 4.17 KB
/
deploy.yml
File metadata and controls
130 lines (112 loc) · 4.17 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
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@v4
- name: Setup Python
uses: actions/setup-python@v5
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: |
git clone https://github.com/pathsim/pathsim.git ../pathsim || { echo "Failed to clone pathsim"; exit 1; }
git clone https://github.com/pathsim/pathsim-chem.git ../pathsim-chem || { echo "Failed to clone pathsim-chem"; exit 1; }
git clone https://github.com/pathsim/pathsim-vehicle.git ../pathsim-vehicle || { echo "Failed to clone pathsim-vehicle"; exit 1; }
git clone https://github.com/pathsim/pathsim-flight.git ../pathsim-flight || echo "Skipping pathsim-flight (not available)"
- name: Fetch all tags
run: |
for repo in pathsim pathsim-chem pathsim-vehicle pathsim-flight; do
if [ -d "../$repo" ]; then
git -C ../$repo fetch --tags
latest_tag=$(git -C ../$repo describe --tags --abbrev=0 2>/dev/null || echo 'no tags')
echo "✓ $repo: latest_tag=$latest_tag"
else
echo "⊘ $repo: not cloned, skipping"
fi
done
# Build all versions (API, notebooks, outputs, figures)
# Uses smart caching: historical versions only built once, latest always rebuilt
- name: Build documentation
run: python scripts/build.py
# Build global search and crossref indexes
- name: Build indexes
run: python scripts/build-indexes.py
- 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@v4
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@v3
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@v4