CI: only commit manifests not full notebooks #27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy to GitHub Pages | |
| on: | |
| push: | |
| branches: [master] | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| pages: write | |
| id-token: write | |
| concurrency: | |
| group: "pages" | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| 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 | |
| - name: Clone PathSim repositories for API extraction | |
| 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; } | |
| - name: Fetch all tags and verify repos | |
| run: | | |
| for repo in pathsim pathsim-chem pathsim-vehicle; do | |
| if [ ! -d "../$repo/.git" ]; then | |
| echo "Error: Repository $repo not properly cloned" | |
| exit 1 | |
| fi | |
| git -C ../$repo fetch --tags | |
| latest_tag=$(git -C ../$repo describe --tags --abbrev=0 2>/dev/null || echo 'no tags') | |
| echo "✓ $repo: branch=$(git -C ../$repo rev-parse --abbrev-ref HEAD), latest_tag=$latest_tag" | |
| done | |
| # Always extract latest API (for src/lib/api/generated/) | |
| - name: Extract latest API | |
| run: python scripts/extract-api.py | |
| # Prepare notebooks BEFORE version extraction (repos still on main) | |
| - name: Prepare notebooks | |
| run: python scripts/prepare-notebooks.py | |
| # Smart extraction: only missing versions + always re-extract latest | |
| # This checks out tags, so must run after notebook prep | |
| - name: Extract versioned API | |
| run: python scripts/extract-versions.py | |
| # Ensure repos are back on main branch | |
| - name: Restore repos to main branch | |
| run: | | |
| for repo in pathsim pathsim-chem pathsim-vehicle; do | |
| git -C ../$repo checkout main 2>/dev/null || git -C ../$repo checkout master 2>/dev/null || true | |
| echo "✓ $repo on $(git -C ../$repo rev-parse --abbrev-ref HEAD)" | |
| done | |
| # Always regenerate manifests (to pick up new versions) | |
| - name: Generate version manifests | |
| run: python scripts/generate-manifests.py | |
| - name: Build search and crossref indexes | |
| run: python scripts/build-indexes.py | |
| - name: Commit generated files | |
| run: | | |
| git config user.name "github-actions[bot]" | |
| git config user.email "github-actions[bot]@users.noreply.github.com" | |
| # Only commit API data and versioned cache (not full notebooks - they're regenerated from source) | |
| git add src/lib/api/generated/ static/api/versions/ | |
| # Only commit notebook manifests, not full .ipynb files | |
| git add static/notebooks/*/manifest.json 2>/dev/null || true | |
| if git diff --staged --quiet; then | |
| echo "No changes to commit" | |
| else | |
| git commit -m "Update generated API data and indexes [skip ci]" | |
| git push | |
| fi | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '20' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build | |
| env: | |
| BASE_PATH: '/${{ github.event.repository.name }}' | |
| run: npm run build | |
| - name: Upload artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: build | |
| deploy: | |
| needs: build | |
| 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 |