You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Five lecture repos hand-roll their Jupyter Book build steps in ci.yml. lecture-dp does not — it calls quantecon/actions/build-lectures. This issue tracks moving the rest across.
Why
The immediate motivation is #340. That issue found that a broken notebook could pass CI green in most repos, for two reasons: the execution step lacked -W, and its exit code came from a trailing cp rather than from jb build — because shell: bash -l {0} is a custom shell spec, so GitHub does not inject -eo pipefail.
The composite action is structurally immune to that second failure. Its build step captures the exit code explicitly and exits with it:
set +e
jb build "$SOURCE_DIR" --path-output "$OUTPUT_DIR""${builder_args[@]}"$EXTRA_ARGS
BUILD_EXIT_CODE=$?set -e
# ... set outputs ...exit$BUILD_EXIT_CODE
It also moves PDF and notebook staging into separate steps that run before the build, so there is no trailing command to mask anything, and it defaults extra-args to -W --keep-going.
#340 is being closed with per-repo patches, which is the right immediate move — the gate was open and five one-to-two-line changes close it. But those patches each carry a comment explaining a bash gotcha that the action makes irrelevant, and they leave five copies of build logic to keep in sync. Migration is the durable answer.
Scope
Repo
Current shape
First jb build
lecture-python-intro
native
Build PDF from LaTeX
lecture-python-advanced.myst
native
Build PDF from LaTeX
lecture-python.myst
native
Build Download Notebooks (sphinx-tojupyter)
lecture-python-programming
native
Build Download Notebooks (sphinx-tojupyter)
lecture-jax
native
Build Download Notebooks (sphinx-tojupyter)
lecture-dp
already migrated — build-lectures@v0.8.0
n/a
The three zh-cn editions and lecture-datascience.myst are also native but already gate correctly; they should follow eventually for consistency, not urgency.
Known blockers
The v0.8.0 validation study already compared the composite against the native intro and programming pipelines and found two gaps. Both should be resolved before migrating those two repos, or the migration silently loses build strictness:
build-lectures: -n (nitpick) absent from default strictness; no extra-args passthrough via build-jupyter-cache actions#97 — build-lectures defaults extra-args to -W --keep-goingwithout -n, which the native intro and programming builds pass. Cross-reference warnings that fail a native build would pass silently on the composite. Compounding it, build-jupyter-cache invokes build-lectures with a fixed with: block and no extra-args passthrough, so a consumer cannot get -n into that HTML build at all.
Migrate one repo as a pilot and compare its built output against the native build — not just a green tick. lecture-jax is a reasonable candidate: smallest of the five at 33 lectures, and its first jb build is the tojupyter step, so it exercises the notebook-staging path.
Five lecture repos hand-roll their Jupyter Book build steps in
ci.yml.lecture-dpdoes not — it callsquantecon/actions/build-lectures. This issue tracks moving the rest across.Why
The immediate motivation is #340. That issue found that a broken notebook could pass CI green in most repos, for two reasons: the execution step lacked
-W, and its exit code came from a trailingcprather than fromjb build— becauseshell: bash -l {0}is a custom shell spec, so GitHub does not inject-eo pipefail.The composite action is structurally immune to that second failure. Its build step captures the exit code explicitly and exits with it:
It also moves PDF and notebook staging into separate steps that run before the build, so there is no trailing command to mask anything, and it defaults
extra-argsto-W --keep-going.#340 is being closed with per-repo patches, which is the right immediate move — the gate was open and five one-to-two-line changes close it. But those patches each carry a comment explaining a bash gotcha that the action makes irrelevant, and they leave five copies of build logic to keep in sync. Migration is the durable answer.
Scope
jb buildlecture-python-introlecture-python-advanced.mystlecture-python.mystlecture-python-programminglecture-jaxlecture-dpbuild-lectures@v0.8.0The three
zh-cneditions andlecture-datascience.mystare also native but already gate correctly; they should follow eventually for consistency, not urgency.Known blockers
The v0.8.0 validation study already compared the composite against the native intro and programming pipelines and found two gaps. Both should be resolved before migrating those two repos, or the migration silently loses build strictness:
-n(nitpick) absent from default strictness; no extra-args passthrough via build-jupyter-cache actions#97 —build-lecturesdefaultsextra-argsto-W --keep-goingwithout-n, which the native intro and programming builds pass. Cross-reference warnings that fail a native build would pass silently on the composite. Compounding it,build-jupyter-cacheinvokesbuild-lectureswith a fixedwith:block and noextra-argspassthrough, so a consumer cannot get-ninto that HTML build at all._build/.doctreesclear (ipywidget mimetype rendering) actions#98 — the native intro and programming pipelines runrm -r _build/.doctreesbefore the final HTML build to fix ipywidget mimetype rendering. The composite has no equivalent.Suggested sequence
-n(nitpick) absent from default strictness; no extra-args passthrough via build-jupyter-cache actions#97 and [project] change prime to\topfor transposes throughout #98.lecture-jaxis a reasonable candidate: smallest of the five at 33 lectures, and its firstjb buildis the tojupyter step, so it exercises the notebook-staging path.set -eo pipefailpatches from Notebook execution errors silently pass CI in three lecture repos — standardise-n -Won the sphinx-tojupyter build step #340 as each lands, since the action makes them redundant.zh-cneditions andlecture-datascience.mystafterwards.Related
-n -Won the sphinx-tojupyter build step #340 — the tactical gate fix this supersedes