CI: add timeout and retry to apt-get install steps #196
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@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Anaconda | |
| uses: conda-incubator/setup-miniconda@v4 | |
| 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 JAX (CPU, pinned) | |
| shell: bash -l {0} | |
| run: | | |
| # Pinned: jax 0.11.1 (2026-08-17) hangs numpy_vs_numba_vs_jax's | |
| # lax.fori_loop cells on the CPU path -- context is recorded in | |
| # QuantEcon/workspace-lectures#49. With jax already present, the | |
| # lecture's unpinned `!pip install quantecon jax` cell is satisfied | |
| # and does not upgrade. | |
| pip install "jax==0.11.0" | |
| - name: Install latex dependencies | |
| timeout-minutes: 30 | |
| run: | | |
| # Retried with a per-attempt timeout: a stalled Ubuntu mirror otherwise | |
| # hangs this step for hours (two 358-minute hangs on 2026-08-18). | |
| pkgs="texlive-latex-recommended texlive-latex-extra texlive-fonts-recommended texlive-fonts-extra texlive-xetex latexmk xindy dvipng cm-super" | |
| for attempt in 1 2; do | |
| timeout 14m sudo bash -c "apt-get -qq update && apt-get install -y $pkgs" && break | |
| if [ "$attempt" = 2 ]; then echo "apt-get failed after 2 attempts"; exit 1; fi | |
| echo "apt-get attempt $attempt failed; retrying in 30s"; sleep 30 | |
| done | |
| - name: Display Conda Environment Versions | |
| shell: bash -l {0} | |
| run: conda list | |
| - name: Display Pip Versions | |
| shell: bash -l {0} | |
| run: pip list | |
| - name: Download "build" folder (cache) | |
| uses: dawidd6/action-download-artifact@v21 | |
| with: | |
| workflow: cache.yml | |
| branch: main | |
| name: build-cache | |
| path: _build | |
| # TODO: enable pdf and download notebooks | |
| # # 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@v7 | |
| if: failure() | |
| with: | |
| name: execution-reports | |
| path: _build/html/reports | |
| - name: Preview Deploy to Netlify | |
| uses: nwtgck/actions-netlify@v4 | |
| 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 }} |