Skip to content

CI: "Execution Tests [Latest Anaconda]" fail with jb: command not found (jupyter-book 2.x pulled unpinned) #569

Description

@mmcky

The daily Execution Tests [Latest Anaconda] jobs — execution-linux.yml, execution-osx.yml, execution-win.yml — have been failing on main every scheduled run since at least 2026-06-03. This is not related to the Anaconda 2026.06 bump (see QuantEcon/workspace-lectures#7): the conda environment resolves and installs cleanly on anaconda=2026.06, the Anaconda channel Terms of Service are accepted (setup-miniconda v4), and the build proceeds — it just can't find the jb command.

Symptom

The Build Lectures (+ Execution Checks) step exits 127:

/home/runner/work/_temp/<...>.sh: line 1: jb: command not found
##[error]Process completed with exit code 127.

Root cause

These workflows install jupyter-book with an unpinned pip install jupyter-book, which now resolves to jupyter-book 2.1.6. jupyter-book 2.x is the MyST-based rewrite and no longer ships the jb console script (it uses the myst CLI), so jb build lectures ... fails with command not found. The Build Cache [using jupyter-book] job (cache.yml) is green because it builds the environment from environment.yml — which pins the 1.x jupyter-book that still provides jb — via activate-environment: quantecon, so it never pulls 2.x.

Workflow jupyter-book source Version installed jb present Status
cache.yml (Build Cache) environment.yml (pinned) 1.x yes ✅ green
execution-*.yml (Latest Anaconda) pip install jupyter-book (unpinned) 2.1.6 no ❌ exit 127

Fix options

  • Pin the install — pip install "jupyter-book<2" ... — in all three execution-*.yml files; or
  • Install from the repo environment instead of an unpinned pip line (mirror cache.yml: environment-file: environment.yml + activate-environment: quantecon); or
  • Migrate these workflows to the JB2 myst build command, aligning with the in-flight JB2 work ([Experimental] Use jupyter-book 2.0 for building the lectures #363).

Notes

  • Timeline: red on every scheduled run back to at least 2026-06-03, which matches jupyter-book 2.x becoming the default pip install target.
  • All three OS jobs (Linux / OSX / Windows) share the same unpinned pip line, so they fail identically. The Windows numba/llvmlite special-case comment in the workflow is unrelated to this failure.
  • Example failing run (Linux, 2026-07-07): https://github.com/QuantEcon/lecture-python-programming/actions/runs/28879918261

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions