Skip to content

Centralize CI on SciML reusable workflows#219

Merged
ChrisRackauckas merged 1 commit into
SciML:mainfrom
ChrisRackauckas-Claude:centralize-ci
Jun 3, 2026
Merged

Centralize CI on SciML reusable workflows#219
ChrisRackauckas merged 1 commit into
SciML:mainfrom
ChrisRackauckas-Claude:centralize-ci

Conversation

@ChrisRackauckas-Claude

Copy link
Copy Markdown
Contributor

Please ignore until reviewed by @ChrisRackauckas.

Summary

Converts the remaining inline CI workflows to the centralized SciML/.github reusable workflows, pinned at @v1, each with secrets: "inherit". Tests.yml was already a tests.yml@v1 caller and is unchanged.

Converted (inline -> central)

Added

  • None — all five central caller types were already present or converted.

Other changes

  • docs/make.jl: added ENV["GKSwstype"] = "100" so Plots/GR examples still render headlessly. The old inline Documenter workflow set this as a job-level env var, but the central documentation.yml@v1 caller exposes no way to inject env vars, so it moves into make.jl.
  • dependabot.yml: removed the crate-ci/typos ignore block (typos is now centralized). The github-actions (weekly, /) and julia (daily, dirs /,/docs,/test, group all-julia-packages *) blocks are preserved.

Checks

  • Runic: ran Runic.main(["--inplace","."]) locally — source already clean (no formatting changes beyond the make.jl edit).
  • Typos: typos . exits 0 — 0 typos fixed.

Behavior notes / risks

  • The old inline Documenter workflow set PYTHON: "" and had a "Fix weird Conda.jl/PyCall.jl/SymPy.jl build error" step. The docs use SymPy (compat 1, 2). SymPy 2 uses PythonCall rather than PyCall/Conda, so the PYTHON="" workaround and the SymPy rebuild step should be obsolete; the central caller does a plain Pkg.develop + Pkg.instantiate. If the docs env resolves SymPy 1 (PyCall), the docs build could regress — watch the Documentation check on this PR.
  • The central documentation caller enables coverage (codecov "docs" flag); the old inline build did not collect coverage. This is the intended end-state behavior.

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

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 ChrisRackauckas marked this pull request as ready for review June 3, 2026 18:19
@ChrisRackauckas ChrisRackauckas merged commit f8eca6f into SciML:main Jun 3, 2026
7 of 9 checks passed
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants