From 3dc90d66c3f11ba0307f14441abaf47c1191e317 Mon Sep 17 00:00:00 2001 From: mmcky Date: Fri, 7 Nov 2025 16:05:34 +1100 Subject: [PATCH 1/3] Migrate ci.yml to use composite actions Changes: - Use setup-lecture-env@main for Conda (global cache) - Use setup-latex@main for LaTeX (global cache) - Use build-lectures@main for PDF, Jupyter, and HTML builds - Use deploy-netlify@main for preview deployments - Separate execution report artifacts (latex vs html) Benefits: - Restores from global caches created by cache.yml - Consistent build process across workflows - Reduced duplication and maintenance - Will test cache miss behavior before cache.yml completes --- .github/workflows/ci.yml | 92 +++++++++++++++++++++++----------------- 1 file changed, 54 insertions(+), 38 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4806928..f1e15ac 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,37 +6,31 @@ jobs: steps: - name: Checkout uses: actions/checkout@v5 - - name: Setup Anaconda - uses: conda-incubator/setup-miniconda@v3 + + # Use composite action for environment setup + - name: Setup Lecture Environment + uses: quantecon/actions/setup-lecture-env@main with: - auto-update-conda: true - auto-activate-base: true - miniconda-version: 'latest' - python-version: "3.13" - environment-file: environment.yml - activate-environment: quantecon + python-version: '3.13' + environment-file: 'environment.yml' + environment-name: 'quantecon' + - name: Graphics Support #TODO: Review if graphviz is needed run: | sudo apt-get -qq update && sudo apt-get install -y graphviz - - 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 + + # Use composite action for LaTeX setup + - name: Install LaTeX Dependencies + uses: quantecon/actions/setup-latex@main + - 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@v11 with: @@ -44,46 +38,68 @@ jobs: branch: main name: build-cache path: _build + # Build Assets (Download Notebooks and PDF via LaTeX) + # Use composite action for PDF build - name: Build PDF from LaTeX - shell: bash -l {0} + uses: quantecon/actions/build-lectures@main + with: + builder: 'pdflatex' + source-dir: 'lectures' + extra-args: '-n --keep-going' + + - name: Copy PDF to HTML output run: | - jb build lectures --builder pdflatex --path-output ./ -n --keep-going mkdir -p _build/html/_pdf cp -u _build/latex/*.pdf _build/html/_pdf + - name: Upload Execution Reports (LaTeX) uses: actions/upload-artifact@v5 if: failure() with: - name: execution-reports + name: execution-reports-latex path: _build/latex/reports + + # Use composite action for notebook build - name: Build Download Notebooks (sphinx-tojupyter) - shell: bash -l {0} + uses: quantecon/actions/build-lectures@main + with: + builder: 'jupyter' + source-dir: 'lectures' + + - name: Copy Notebooks to HTML output run: | - jb build lectures --path-output ./ --builder=custom --custom-builder=jupyter mkdir -p _build/html/_notebooks cp -u _build/jupyter/*.ipynb _build/html/_notebooks + # Build HTML (Website) - # BUG: rm .doctress to remove `sphinx` rendering issues for ipywidget mimetypes + # BUG: rm .doctrees to remove `sphinx` rendering issues for ipywidget mimetypes # and clear the sphinx cache for building final HTML documents. - name: Build HTML - shell: bash -l {0} run: | rm -r _build/.doctrees - jb build lectures --path-output ./ -nW --keep-going + + # Use composite action for HTML build + - name: Build HTML (Jupyter Book) + uses: quantecon/actions/build-lectures@main + with: + builder: 'html' + source-dir: 'lectures' + extra-args: '-nW --keep-going' + - name: Upload Execution Reports (HTML) uses: actions/upload-artifact@v5 if: failure() with: - name: execution-reports + name: execution-reports-html path: _build/html/reports + + # Use composite action for Netlify deployment - name: Preview Deploy to Netlify - uses: nwtgck/actions-netlify@v3.0 + uses: quantecon/actions/deploy-netlify@main 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 }} + build-dir: '_build/html/' + netlify-auth-token: ${{ secrets.NETLIFY_AUTH_TOKEN }} + netlify-site-id: ${{ secrets.NETLIFY_SITE_ID }} + production: 'false' + message: 'Preview Deploy from GitHub Actions' From e81aa111fba8daf22c74946ca28b6beabf030c2b Mon Sep 17 00:00:00 2001 From: mmcky Date: Fri, 7 Nov 2025 16:27:21 +1100 Subject: [PATCH 2/3] test: trigger PR #4 rebuild to test local cache hit Small edit to intro.md to trigger CI and validate that: - Conda cache restores from local branch cache - LaTeX cache restores from local branch cache - Jupyter cache restores from local branch cache - Build time is significantly reduced vs initial run --- lectures/intro.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lectures/intro.md b/lectures/intro.md index 7b3607e..5f055d9 100644 --- a/lectures/intro.md +++ b/lectures/intro.md @@ -11,7 +11,9 @@ kernelspec: # (TEST) A First Course in Quantitative Economics with Python -This lecture series provides an introduction to quantitative economics using Python. +This lecture series provides an introduction to quantitative economics using Python. + +**Testing local cache hit on PR #4** - This small edit should trigger a rebuild that uses the local cache created in the first run. ```{tableofcontents} ``` From 18bee844c65709dd200393196354028335d6e763 Mon Sep 17 00:00:00 2001 From: mmcky Date: Fri, 7 Nov 2025 17:13:24 +1100 Subject: [PATCH 3/3] refactor: migrate to unified setup-lecture-env-full action Replaces separate setup-lecture-env and setup-latex actions with the new unified setup-lecture-env-full action that provides optimized caching for both Conda and LaTeX packages. Benefits: - Simpler workflow (one action instead of two) - Better caching with separate Conda and apt caches - ~6-8 minute speedup with both caches hit vs ~12 min fresh --- .github/workflows/ci.yml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f1e15ac..da3094f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,22 +7,19 @@ jobs: - name: Checkout uses: actions/checkout@v5 - # Use composite action for environment setup - - name: Setup Lecture Environment - uses: quantecon/actions/setup-lecture-env@main + # Use unified composite action for complete environment setup + - name: Setup Complete Lecture Environment + uses: quantecon/actions/setup-lecture-env-full@main with: python-version: '3.13' environment-file: 'environment.yml' + latex-requirements-file: 'latex-requirements.txt' environment-name: 'quantecon' - name: Graphics Support #TODO: Review if graphviz is needed run: | sudo apt-get -qq update && sudo apt-get install -y graphviz - # Use composite action for LaTeX setup - - name: Install LaTeX Dependencies - uses: quantecon/actions/setup-latex@main - - name: Display Conda Environment Versions shell: bash -l {0} run: conda list