Migrate the five native lecture CI pipelines to quantecon/actions/build-lectures
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 42/100
- Issue type
- Refactor
- Clarity
- Mostly clear
- Activity status
- Quiet
- Tech stack
- github-actions, jupyter
- Domain
- build-system, ci-cd, documentation
Research direction
Start with the lecture-jax ci.yml and the existing build-lectures action used by lecture-dp, then review QuantEcon/actions#97 and #98 before migrating. Compare lecture-jax's built output with its native build, then apply the same migration to the remaining four native pipelines and remove their redundant patches from #340 as each lands.
Written by the indexing model from the issue text.
Description
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:
- QuantEcon/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. - QuantEcon/actions#98 — the native intro and programming pipelines run
rm -r _build/.doctreesbefore the final HTML build to fix ipywidget mimetype rendering. The composite has no equivalent.
Suggested sequence
- Resolve QuantEcon/actions#97 and #98.
- Migrate one repo as a pilot and compare its built output against the native build — not just a green tick.
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. - Migrate the remaining four, and drop the per-repo
set -eo pipefailpatches from #340 as each lands, since the action makes them redundant. - Consider the
zh-cneditions andlecture-datascience.mystafterwards.
Related
- #340 — the tactical gate fix this supersedes
- #266 — mono repo vs centralised GitHub Actions; this is the centralised-actions direction in practice
- Dominant language
- No language data
- Stars
- 0
- Forks
- 0
- PR merge metrics
- No merged PRs in 30d
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from QuantEcon/meta
-
test-jax-install.py does not assert the GPU — a silent CPU fallback passes CI in all five repos Openbug testing
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
-
GitHub MCP server drops tag-shaped content from issue-body reads — decide whether to report upstream Open
Difficulty 5/5 Over a week Newbie friendliness 35/100
-
enhancement project
Difficulty 5/5 Over a week Newbie friendliness 35/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 35/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 35/100
Similar issues
-
comp/dashboard P3 type/bug
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
NousResearch/hermes-agent#117722 ·
-
Needs Design Priority: Wishlist
Difficulty 2/5 1-3 hours Newbie friendliness 84/100
elementary/flatpak-platform#253 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
objectionary/hone-maven-plugin#1060 ·
-
0.kind: build failure
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
-
Update Vish to 1.1.5 Openpackage-update
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
oSoWoSo/vOid_Community_repOsitory#144 · 1 comment ·