Skip to content

Commit 23c6245

Browse files
mmckyclaude
andauthored
CI: align build safety with the English source repo (closes #184) (#185)
* FIX: execution and doc failures from the Anaconda 2026.07 cache build Resolves the four failures reported in #182. All four are target-side defects; the English source is healthy in every case. likelihood_bayes — the font block called `mpl.font_manager.fontManager` and `plt.rcParams` before `import matplotlib.pyplot as plt`. Newer matplotlib no longer imports `font_manager` as a side effect of `import matplotlib`, so this raised AttributeError (and would have raised NameError on `plt`). Moved the pyplot import above both uses. An audit of the font block across all 69 lectures found this the only file with either ordering hazard. kalman_2 — a `.text()` annotation drew the covariance matrix with `\begin{bmatrix}`, which matplotlib mathtext cannot render (it supports no LaTeX environments). Rewritten as `\left[ \substack{...} \right]`, which renders an equivalent bracketed 2x2 matrix under mathtext, using `\;` as the column separator rather than `&`. This keeps the drop-usetex standard from #22 intact with no loss of information. The lecture's other `\begin{bmatrix}` uses are inside `{math}` blocks, rendered by MathJax, and are unaffected. sir_model — the header directive had lost its argument: `{raw}` instead of `{raw} jupyter`. The other 50 lectures carrying this directive kept theirs. ak_aiyagari — the file carried a stray fence at line 38 followed by a duplicated copy of the original frontmatter, and a doubled closing fence at EOF. The stray opener ran to line 56, swallowing both the H1 title and the `_admonition/gpu.md` include, which is what produced the 13 "headings start at H2" warnings. Removed both strays; the file's fence structure now matches the English source exactly (122). The `translation.title` field was also corrupt ("V, σ, μ") and has been set to the lecture title. An edition-wide sweep found no other file with unbalanced fences. The last two are content corruption introduced in translation and warrant engine issues against action-translation; they are not covered by the existing #107/#115/#116/#117 set. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: align build safety with the English source repo Resolves #184. Brings ci.yml's execution safety in line with lecture-python.myst, which is the standard the fleet builds to. - `-n -W --keep-going` on the sphinx-tojupyter build. Previously this step ran with no flags, so a notebook whose cells raised still exited zero and the job went green. That is how the two execution breaks in #182 (likelihood_bayes, kalman_2) reached main with passing CI. - Upload Execution Reports (Download Notebooks), so a failure in that step leaves a traceback artifact. Previously there was none, which is why #182 had to be diagnosed from the weekly Build Cache workflow's artifact rather than from CI directly. - Clear stale Sphinx environment (`rm -rf _build/.doctrees`) before the builds, matching the source repo. The equivalent was present here only as a commented-out note. The HTML artifact is renamed `execution-reports` -> `execution-reports-html`. This is required, not cosmetic: upload-artifact@v7 runs with `overwrite: false`, so adding a second upload under the same name would collide when both steps fail in one run. The new names match the source repo's convention (-notebooks / -latex / -html). The PDF/LaTeX build is left commented out — see the issue for why that one needs a human decision rather than mechanical alignment. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * CI: set -eo pipefail on the sphinx-tojupyter step Addresses Copilot review feedback on #185. `shell: bash -l {0}` is a custom shell spec, so GitHub does not inject `-eo pipefail` — it only does that for the bare `shell: bash` shorthand, which expands to `bash --noprofile --norc -eo pipefail {0}`. Without it, this step's exit code is that of the trailing `cp`, so a failing `jb build` was masked. `--keep-going` made that worse rather than better: it forces Sphinx to emit output despite the errors, so the .ipynb files exist, `cp` succeeds, and the step goes green. The flag added in this PR to surface failures was producing the artifacts that hid them. Scope is exactly one step — an audit of ci.yml shows every other step is either single-command (its exit code is the command's) or uses the default shell, which does carry `-e`. Note the English source repo lecture-python.myst has the byte-identical pattern, so this is inherited from the standard rather than introduced here, and it deviates from the strict parity this PR set out to establish. Reported upstream so the standard can catch up. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
1 parent ebdf378 commit 23c6245

1 file changed

Lines changed: 17 additions & 5 deletions

File tree

.github/workflows/ci.yml

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ jobs:
4747
branch: main
4848
name: build-cache
4949
path: _build
50+
- name: Clear stale Sphinx environment
51+
shell: bash -l {0}
52+
run: rm -rf _build/.doctrees
5053
# # Build Assets (Download Notebooks and PDF via LaTeX)
5154
# - name: Build PDF from LaTeX
5255
# shell: bash -l {0}
@@ -63,13 +66,22 @@ jobs:
6366
- name: Build Download Notebooks (sphinx-tojupyter)
6467
shell: bash -l {0}
6568
run: |
66-
jb build lectures --path-output ./ --builder=custom --custom-builder=jupyter
69+
# `shell: bash -l {0}` is a custom shell spec, so GitHub does not inject
70+
# `-eo pipefail` (it only does that for the bare `shell: bash` shorthand).
71+
# Without this, a failing `jb build` would be masked by the trailing
72+
# mkdir/cp, whose exit code becomes the step's — and `--keep-going`
73+
# guarantees the .ipynb files exist for `cp` to succeed on.
74+
set -eo pipefail
75+
jb build lectures -n -W --keep-going --path-output ./ --builder=custom --custom-builder=jupyter
6776
mkdir -p _build/html/_notebooks
6877
cp -u _build/jupyter/*.ipynb _build/html/_notebooks
78+
- name: Upload Execution Reports (Download Notebooks)
79+
uses: actions/upload-artifact@v7
80+
if: failure()
81+
with:
82+
name: execution-reports-notebooks
83+
path: _build/jupyter/reports
6984
# Build HTML (Website)
70-
# BUG: rm .doctress to remove `sphinx` rendering issues for ipywidget mimetypes
71-
# and clear the sphinx cache for building final HTML documents.
72-
# rm -r _build/.doctrees
7385
- name: Build HTML
7486
shell: bash -l {0}
7587
run: |
@@ -78,7 +90,7 @@ jobs:
7890
uses: actions/upload-artifact@v7
7991
if: failure()
8092
with:
81-
name: execution-reports
93+
name: execution-reports-html
8294
path: _build/html/reports
8395
- name: Preview Deploy to Netlify
8496
uses: nwtgck/actions-netlify@v4.0

0 commit comments

Comments
 (0)