DEBUG: Hardware benchmark on GitHub Actions (CPU) #1337
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: Build Project [using jupyter-book] | |
| on: [pull_request] | |
| jobs: | |
| preview: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 # Fetch full git history for changelog feature | |
| - name: Setup Anaconda | |
| uses: conda-incubator/setup-miniconda@v3 | |
| with: | |
| auto-update-conda: true | |
| auto-activate-base: true | |
| miniconda-version: 'latest' | |
| python-version: "3.13" | |
| environment-file: environment.yml | |
| activate-environment: quantecon | |
| - name: Install latex dependencies | |
| run: | | |
| sudo apt-get -qq update | |
| sudo apt-get install -y \ | |
| texlive-latex-recommended \ | |
| texlive-latex-extra \ | |
| texlive-fonts-recommended \ | |
| texlive-fonts-extra \ | |
| texlive-xetex \ | |
| latexmk \ | |
| xindy \ | |
| dvipng \ | |
| cm-super | |
| - name: Display Conda Environment Versions | |
| shell: bash -l {0} | |
| run: conda list | |
| - name: Display Pip Versions | |
| shell: bash -l {0} | |
| run: pip list | |
| - name: Run Hardware Benchmarks (Bare Metal) | |
| shell: bash -l {0} | |
| run: | | |
| pip install jax # Install JAX for CPU | |
| echo "=== Bare Metal Python Script Execution ===" | |
| python scripts/benchmark-hardware.py | |
| - name: Run Jupyter Notebook Benchmark (via nbconvert) | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Jupyter Kernel Execution ===" | |
| cd scripts | |
| jupyter nbconvert --to notebook --execute benchmark-jupyter.ipynb --output benchmark-jupyter-executed.ipynb | |
| echo "Notebook executed successfully" | |
| cd .. | |
| - name: Run Jupyter-Book Benchmark | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Jupyter-Book Execution ===" | |
| # Build just the benchmark file using jupyter-book | |
| mkdir -p benchmark_test | |
| cp scripts/benchmark-jupyterbook.md benchmark_test/ | |
| # Create minimal _config.yml | |
| echo "title: Benchmark Test" > benchmark_test/_config.yml | |
| echo "execute:" >> benchmark_test/_config.yml | |
| echo " execute_notebooks: force" >> benchmark_test/_config.yml | |
| # Create minimal _toc.yml | |
| echo "format: jb-book" > benchmark_test/_toc.yml | |
| echo "root: benchmark-jupyterbook" >> benchmark_test/_toc.yml | |
| # Build (run from benchmark_test so JSON is written there) | |
| cd benchmark_test | |
| jb build . --path-output ../benchmark_build/ | |
| cd .. | |
| echo "Jupyter-Book build completed successfully" | |
| - name: Collect and Display Benchmark Results | |
| shell: bash -l {0} | |
| run: | | |
| echo "=== Collecting Benchmark Results ===" | |
| mkdir -p benchmark_results | |
| # Copy results from each pathway | |
| cp benchmark_results_bare_metal.json benchmark_results/ 2>/dev/null || echo "No bare metal results" | |
| cp scripts/benchmark_results_jupyter.json benchmark_results/ 2>/dev/null || echo "No jupyter results" | |
| cp benchmark_test/benchmark_results_jupyterbook.json benchmark_results/ 2>/dev/null || echo "No jupyterbook results" | |
| # Display summary | |
| echo "" | |
| echo "============================================================" | |
| echo "BENCHMARK RESULTS SUMMARY" | |
| echo "============================================================" | |
| for f in benchmark_results/*.json; do | |
| if [ -f "$f" ]; then | |
| echo "" | |
| echo "--- $(basename $f) ---" | |
| cat "$f" | |
| fi | |
| done | |
| - name: Upload Benchmark Results | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: benchmark-results | |
| path: benchmark_results/ | |
| if-no-files-found: warn | |
| - name: Download "build" folder (cache) | |
| uses: dawidd6/action-download-artifact@v11 | |
| with: | |
| workflow: cache.yml | |
| branch: main | |
| name: build-cache | |
| path: _build | |
| # Build Assets (Download Notebooks and PDF via LaTeX) | |
| - name: Build Download Notebooks (sphinx-tojupyter) | |
| shell: bash -l {0} | |
| run: | | |
| jb build lectures --path-output ./ --builder=custom --custom-builder=jupyter -n -W --keep-going | |
| mkdir -p _build/html/_notebooks | |
| cp -u _build/jupyter/*.ipynb _build/html/_notebooks | |
| - name: Build PDF from LaTeX | |
| shell: bash -l {0} | |
| run: | | |
| jb build lectures --builder pdflatex --path-output ./ -n -W --keep-going | |
| mkdir _build/html/_pdf | |
| cp -u _build/latex/*.pdf _build/html/_pdf | |
| # Final Build of HTML | |
| - name: Build HTML | |
| shell: bash -l {0} | |
| run: | | |
| jb build lectures --path-output ./ -n -W --keep-going | |
| - name: Upload Execution Reports | |
| uses: actions/upload-artifact@v5 | |
| if: failure() | |
| with: | |
| name: execution-reports | |
| path: _build/html/reports | |
| - name: Preview Deploy to Netlify | |
| uses: nwtgck/actions-netlify@v3 | |
| with: | |
| publish-dir: '_build/html/' | |
| production-branch: main | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| deploy-message: "Preview Deploy from GitHub Actions" | |
| env: | |
| NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} | |
| NETLIFY_SITE_ID: ${{ secrets.NETLIFY_SITE_ID }} |