Centralize CI on SciML reusable workflows#219
Merged
Conversation
Convert Documentation, Runic (format-check), SpellCheck, and Downgrade workflows to the centralized SciML/.github reusable callers pinned at @v1, each with `secrets: "inherit"`. Tests.yml was already a tests.yml@v1 caller. - Documenter.yml -> documentation.yml@v1 (GKSwstype="100" moved into docs/make.jl to preserve headless GR rendering) - FormatCheck.yml -> runic.yml@v1 - SpellCheck.yml -> spellcheck.yml@v1 - Downgrade.yml -> downgrade.yml@v1 (kept `if: false`, julia-version 1.10, skip Pkg,TOML) - dependabot.yml: drop crate-ci/typos ignore block Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisRackauckas-Claude
pushed a commit
to ChrisRackauckas-Claude/RootedTrees.jl
that referenced
this pull request
Jun 19, 2026
The shared SciML reusable documentation workflow (adopted in SciML#219) runs `Pkg.instantiate()` without `PYTHON=""`, so PyCall builds against the runner's system `python3`. On the current `ubuntu-latest` image that interpreter has no usable `libpython`, so PyCall fails to build during the install step ("Couldn't find libpython; check your PYTHON environment variable"), before `docs/make.jl` even runs. (On older images PyCall built against system python but then `using SymPy` failed at runtime with "No module named sympy".) Make the Documentation job self-contained again and set `PYTHON: ""` on the install and build steps so PyCall uses the private Conda.jl Python into which SymPy installs `sympy`. The reusable workflow exposes no input for this, so it cannot build PyCall/SymPy-dependent docs. Verified locally with Julia 1.12 (CI "1" channel): reproduced both the libpython build failure and the missing-sympy runtime failure, then confirmed a full `docs/make.jl` build succeeds (exit 0) when PyCall is built against Conda. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ChrisRackauckas
added a commit
that referenced
this pull request
Jun 20, 2026
* Fix docs build: point PyCall at Conda Python so SymPy loads The RK order conditions tutorial loads SymPy (via PyCall) in `@setup`/ `@example` blocks. After centralizing CI on the reusable SciML documentation workflow (#219), the build environment no longer sets `PYTHON=""`, so PyCall builds against the system `/usr/bin/python3` on the GitHub runner, which has no `sympy` installed. `using SymPy` then fails with `ModuleNotFoundError: No module named 'sympy'` / `ref of NULL PyObject`, terminating the docs build (`makedocs` errors on `:setup_block`, `:example_block`). Restore the previous behavior in a workflow-independent way by setting `ENV["PYTHON"] = ""` at the top of `docs/make.jl` and rebuilding PyCall and SymPy, which makes PyCall use the private Conda.jl Python where SymPy installs `sympy` automatically. Verified locally with Julia 1.12 (the CI "1" channel): reproduced the failure by building PyCall against a Python without sympy, then ran the full `docs/make.jl` to completion (exit 0; setup/example blocks now succeed). Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> * docs CI: set PYTHON="" so PyCall/SymPy build against Conda The shared SciML reusable documentation workflow (adopted in #219) runs `Pkg.instantiate()` without `PYTHON=""`, so PyCall builds against the runner's system `python3`. On the current `ubuntu-latest` image that interpreter has no usable `libpython`, so PyCall fails to build during the install step ("Couldn't find libpython; check your PYTHON environment variable"), before `docs/make.jl` even runs. (On older images PyCall built against system python but then `using SymPy` failed at runtime with "No module named sympy".) Make the Documentation job self-contained again and set `PYTHON: ""` on the install and build steps so PyCall uses the private Conda.jl Python into which SymPy installs `sympy`. The reusable workflow exposes no input for this, so it cannot build PyCall/SymPy-dependent docs. Verified locally with Julia 1.12 (CI "1" channel): reproduced both the libpython build failure and the missing-sympy runtime failure, then confirmed a full `docs/make.jl` build succeeds (exit 0) when PyCall is built against Conda. Co-Authored-By: Chris Rackauckas <accounts@chrisrackauckas.com> Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: ChrisRackauckas-Claude <accounts@chrisrackauckas.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Please ignore until reviewed by @ChrisRackauckas.
Summary
Converts the remaining inline CI workflows to the centralized SciML/.github reusable workflows, pinned at
@v1, each withsecrets: "inherit".Tests.ymlwas already atests.yml@v1caller and is unchanged.Converted (inline -> central)
documentation.yml@v1runic.yml@v1spellcheck.yml@v1downgrade.yml@v1(keptif: falseper Re-enable downgrade tests once JET compatibility is resolved #213;julia-version: 1.10,skip: Pkg,TOML)Added
Other changes
docs/make.jl: addedENV["GKSwstype"] = "100"so Plots/GR examples still render headlessly. The old inline Documenter workflow set this as a job-level env var, but the centraldocumentation.yml@v1caller exposes no way to inject env vars, so it moves intomake.jl.dependabot.yml: removed thecrate-ci/typosignore block (typos is now centralized). Thegithub-actions(weekly,/) andjulia(daily, dirs/,/docs,/test, group all-julia-packages*) blocks are preserved.Checks
Runic.main(["--inplace","."])locally — source already clean (no formatting changes beyond the make.jl edit).typos .exits 0 — 0 typos fixed.Behavior notes / risks
PYTHON: ""and had a "Fix weird Conda.jl/PyCall.jl/SymPy.jl build error" step. The docs use SymPy (compat1, 2). SymPy 2 uses PythonCall rather than PyCall/Conda, so thePYTHON=""workaround and the SymPy rebuild step should be obsolete; the central caller does a plainPkg.develop + Pkg.instantiate. If the docs env resolves SymPy 1 (PyCall), the docs build could regress — watch the Documentation check on this PR.Branch protection
Check names change (e.g. the format check job is now named "Runic Format Check", spellcheck "Spell Check with Typos", docs "Build and Deploy Documentation"). Any required-status-check rules in branch protection will need updating to the new names.
🤖 Generated with Claude Code