All notable changes to the QuantEcon Actions will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Containers: Upgraded
quantecon-book-themefrom 0.10.1 to 0.18.0 - CI: Temporarily disabled lecture-jax in container tests until JAX installation commands are added (lecture-jax#284)
- Architecture: Simplified notebook deployment - notebooks now served from gh-pages
instead of separate
.notebooksrepos- Eliminates 4 separate
.notebooksrepositories (one per lecture series) - Removes sync workflows from publish pipelines
- Google Colab integration via direct gh-pages URLs
- Requires
quantecon-book-themeupdate (tracked in quantecon-book-theme#359) - Single source of truth for notebooks alongside HTML content
- Eliminates 4 separate
setup-environment: Removeinstall-ml-libsandml-libs-versioninputs⚠️ BREAKING- ML/GPU libraries (JAX, PyTorch, numpyro) should be specified in each repo's
environment.ymlorenvironment-update.ymlinstead of being hardcoded in the action - JAX now bundles its own CUDA toolkit via pip (
jax[cuda13]), so system-level CUDA installation is unnecessary — GPU drivers on the AMI are sufficient - Removes pip cache step and hardcoded install step for ML libraries
- Migration: Repos using
install-ml-libs: 'true'should move ML packages to theirenvironment-update.ymland remove theinstall-ml-libsinput
- ML/GPU libraries (JAX, PyTorch, numpyro) should be specified in each repo's
- Documentation: New GPU-AMI-SETUP.md guide for building RunsOn GPU AMI
- Driver requirements (NVIDIA >= 580 for CUDA 13)
- Packer template for automated AMI builds
- Marker file setup for container detection
- Architecture notes on JAX bundled CUDA
restore-jupyter-cache: Newsave-cacheinput for PR-scoped build caching (#24)- When
true, saves build cache at job end usingactions/cache - Subsequent pushes to the same PR restore the prior build, only re-executing changed notebooks
- Cache is scoped to the PR branch (cannot affect other PRs or main)
- Default
falsepreserves existing read-only behavior
- When
build-lectures: Stage PDF and notebooks before HTML build so Jupyter Book theme can detect them and activate download features (#23)preview-netlify: Replacejqwithpython3for JSON parsing (lean container does not includejq)quantecon-buildcontainer: Addtexlive-fonts-extra(providesbbm.sty) andxindyfor PDF builds
test-containers-lectures: Addbuilderdimension to test matrix (container × repo × builder) for parallel validation of all build typestest-containers-lectures: Addbuilderinput toworkflow_dispatchfor targeted manual testing
- Renamed
environment-fileinput toenvironmentacross all actionssetup-environment:environment-file→environmentbuild-jupyter-cache:environment-file→environmentrestore-jupyter-cache:environment-file→environment
environment-updateinput for container-optimized buildssetup-environment: Newenvironment-updateinput for delta package installsbuild-jupyter-cache: Newenvironment-updateinput (passed through to setup-environment)restore-jupyter-cache: Newenvironment-updateinput (for cache key computation)- Default
''skips conda update entirely in container mode (fastest path) - When specified, installs only delta packages from a minimal environment file
- Cache key computation now includes both
environmentandenvironment-updatefile hashes - Documentation for RunsOn + custom AMI setup for GPU builds
- AMI requirements for container mode detection (marker file)
- Workflow examples and comparison tables
-
build-jupyter-cache- Dedicated action for building and caching notebook execution- Runs on
mainbranch (scheduled weekly or on push) - Full notebook execution with Jupyter Book
- Saves execution cache with unique key (
build-{env-hash}-{run-id}) - Verification step ensures cache validity before saving
- Creates GitHub issue on build failure with duplicate prevention
- Uploads execution reports as artifacts on failure
- Runs on
-
restore-jupyter-cache- Dedicated action for restoring notebook execution cache- Runs on PR branches (read-only restore, never saves)
- Prefix-based matching finds most recent cache
- Detailed cache status output (hit/miss, matched key)
- ~80% build time reduction when cache available (tested: 16m53s → 3m28s)
-
Workflow Templates (
templates/)cache.yml- Container-based cache workflow for lecture reposcache-standard.yml- Standard runner workflow (with LaTeX install)README.md- Template documentation and usage instructions
- BREAKING: Removed caching inputs from
build-lectures- Removed
cache-notebook-executioninput - Removed
use-build-cacheinput - Removed
build-cache-hitoutput - Migration: Use dedicated
build-jupyter-cacheandrestore-jupyter-cacheactions
- Removed
- Updated ARCHITECTURE.md with Layer 2 caching strategy
- Updated MIGRATION-GUIDE.md with cache workflow examples
- Updated QUICK-REFERENCE.md with cache action reference
- Added comprehensive README for both cache actions
-
Lean Container (
ghcr.io/quantecon/quantecon-build:latest)- Optimized for CI builds (~3GB vs ~8GB full container)
- Miniconda + Python 3.13 + Jupyter Book tooling
- XeLaTeX with essential packages (no full TexLive)
- Weekly automated builds alongside full container
-
Container Test Workflow (
.github/workflows/test-container.yml)- Automated validation of both containers after builds
- XeLaTeX compilation tests
- Jupyter Book HTML/PDF build tests
-
Lecture Validation Tests (
.github/workflows/test-containers-lectures.yml)- Full lecture builds against all 4 QuantEcon lecture repositories
- Tests container's built-in environment (ignores lecture repo's environment.yml)
- Matrix-based parallel testing across all containers × all repos (2×4 = 8 jobs)
- Triggered automatically after container builds, or manually via workflow_dispatch
- 120-minute timeout per build, artifacts retained for debugging
- Validated: All 4 lecture repos build successfully on both containers
-
setup-environment- Now container-aware- Auto-detects QuantEcon containers via
/etc/quantecon-containermarker - Skips redundant LaTeX installation when running in container
- Activates pre-installed
quanteconconda environment in containers - Falls back to full setup on
ubuntu-latestor other runners - Added
skip-latexinput for manual control
- Auto-detects QuantEcon containers via
-
Container Infrastructure
- Added Chrome + kaleido for Plotly static image export (
fig.to_image()) - Added Intel MKL for optimized linear algebra (2-3x faster for numerical computations)
- Added scikit-learn for ML lectures
- Added DejaVu fonts to both containers for XeLaTeX compatibility
- Updated lean container to Miniconda py313_25.11.1-1
- Uses
defaultschannel only (matches Anaconda metapackage behavior)
- Added Chrome + kaleido for Plotly static image export (
- Added container marker documentation
- Updated setup-environment README with container detection details
preview-cloudflare- Cloudflare Pages deployment for PR previews- Works with public and private repositories (free tier supports both)
- Predictable preview URLs (
pr-{number}.{project}.pages.dev) - Changed lecture detection with direct links in PR comments
- Smart PR comments (updates existing instead of duplicates)
- Security-aware (skips forks and dependabot)
- BREAKING: Renamed
deploy-netlify→preview-netlifyto better reflect its purpose as a PR preview action (not production deployment)
- Improved failure logging with clear summary
- Add prominent error message on build failure
- Display build configuration summary
- Provide instructions for downloading execution reports
- Add comprehensive Netlify setup guide
- CLI-only site creation instructions
- How to disable duplicate PR comments
- Decision table for different scenarios
-
Core Actions:
setup-environment- Conda/LaTeX/ML environment setup with cachingbuild-lectures- Jupyter Book builds with execution cachingdeploy-netlify- PR preview deployment with smart commentspublish-gh-pages- Native GitHub Pages deployment (OIDC-based)
-
Container Infrastructure (
ghcr.io/quantecon/quantecon:latest)- Ubuntu 24.04 LTS + TexLive (latest) + Miniconda + Python 3.13
- Anaconda 2025.12 metapackage (numpy, scipy, pandas, matplotlib, jupyter)
- Jupyter Book 1.0.4post1 + sphinx extensions
- Weekly automated builds (Monday 2am UTC)
-
Build Features:
- Asset assembly (
html-copy-pdf,html-copy-notebooks) - Execution reports on failure
- GitHub native build cache for fast PR builds
- Multi-format support (HTML, PDF, Jupyter notebooks)
- Asset assembly (
- Container setup: ~2-3 min (vs ~7-8 min ubuntu-latest)
- Conda environment caching (~5-6 min savings)
- Overall: 60-70% faster environment setup
- v0: Tracks latest stable release (currently v0.1.1)
- v0.x.x: Development/testing releases
See docs/MIGRATION-GUIDE.md for step-by-step instructions on migrating from repository-specific workflows to these centralized actions.
See TESTING.md for comprehensive testing strategy and validation procedures.