Skip to content

Migrate the five native lecture CI pipelines to quantecon/actions/build-lectures #348

Description

@mmcky

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 migratedbuild-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:

Suggested sequence

  1. Resolve build-lectures: -n (nitpick) absent from default strictness; no extra-args passthrough via build-jupyter-cache actions#97 and [project] change prime to \top for transposes throughout #98.
  2. 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.
  3. Migrate the remaining four, and drop the per-repo set -eo pipefail patches from Notebook execution errors silently pass CI in three lecture repos — standardise -n -W on the sphinx-tojupyter build step #340 as each lands, since the action makes them redundant.
  4. Consider the zh-cn editions and lecture-datascience.myst afterwards.

Related

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions