Skip to content

Fix CI: Julia 1.11 matrix, xvfb for GLMakie, pi_n472 include, action bumps - #53

Merged
kalidke merged 6 commits into
mainfrom
fix/ci-julia-1.11
Sep 8, 2026
Merged

Fix CI: Julia 1.11 matrix, xvfb for GLMakie, pi_n472 include, action bumps#53
kalidke merged 6 commits into
mainfrom
fix/ci-julia-1.11

Conversation

@kalidke

@kalidke kalidke commented Sep 8, 2026

Copy link
Copy Markdown
Member

Summary

Makes CI runnable again and fixes the Linux load break. Every open PR currently shows the same three red checks for reasons unrelated to the PRs themselves; this branch addresses all of them.

CI (.github/workflows/CI.yml)

  • Matrix: Julia 1.11 and 1 (was 1.10 + nightly). Project.toml requires 1.11 and uses a [sources] entry for DAQmx, a 1.11+ feature, so the 1.10 job could never resolve. Nightly is dropped; it fails on a Julia-internal error.
  • GLMakie needs an X display even to precompile, so both jobs start an Xvfb server and export DISPLAY, and julia-runtest, julia-docdeploy and the doctest step run under xvfb-run -a.
  • Folds in the dependabot bumps: julia-actions/cache@v3 (Bump julia-actions/cache from 2 to 3 #47), codecov/codecov-action@v6 (Bump codecov/codecov-action from 5 to 6 #48), julia-actions/setup-julia@v3 (Bump julia-actions/setup-julia from 2 to 3 #49). Those three PRs can be closed once this merges.

Linux load break

  • HardwareImplementations.jl included pi_N472/PI_N472.jl while the directory is pi_n472/.

Docs

  • makedocs aborted on :missing_docs (90 docstrings not in the manual). Now a warning via warnonly=[:missing_docs].

Fixes surfaced by actually running the tests

  • SimulatedCamera never imported export_state/initialize/shutdown, so the generic export_state(::SimCamera) hit the AbstractInstrument stub. Its attribute dict also read CameraFormat/CameraROI fields that do not exist.
  • PI exported its internal getposition/servo/stopmotion helpers, making those names ambiguous at top level after using MicroscopeControl. The StageInterface methods for PIStage already wrap them, so the helpers are no longer exported (still reachable as PI.getposition etc.).
  • test/runtests.jl referenced names and fields that do not exist (setexposuretime, setroi!, SimStage, light.power) and had never passed. Rewritten against the real simulated-device API, including an export_state to HDF5 round trip.

Verification (local, Linux, Julia 1.12.6, under xvfb-run)

  • using MicroscopeControl loads.
  • Pkg.test(): 115 passed, 0 failed.
  • docs/make.jl builds and doctest(MicroscopeControl) passes.

🤖 Generated with Claude Code

https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe

kalidke and others added 6 commits September 8, 2026 14:32
Project.toml requires julia 1.11 and uses a [sources] entry for DAQmx
(a 1.11+ feature), so the 1.10 job could never resolve. Nightly is
dropped: it fails on a Julia-internal error unrelated to this package.

GLMakie is a hard dependency and needs an X display even to precompile,
so both jobs start an Xvfb server and export DISPLAY, and julia-runtest,
julia-docdeploy and the doctest step run under xvfb-run.

Folds in the dependabot bumps: julia-actions/cache v3 (#47),
codecov/codecov-action v6 (#48), julia-actions/setup-julia v3 (#49).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe
The include said pi_N472/ while the directory is pi_n472/, which broke
loading on case-sensitive filesystems (Linux, including CI).

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe
makedocs aborted with :missing_docs (90 docstrings not in the manual),
which would keep the Documentation job red even with a display.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe
SimulatedCamera did not import export_state/initialize/shutdown from
MicroscopeControl, so its export_state was a private function and the
generic call hit the AbstractInstrument stub. Its attribute dict also
read CameraFormat/CameraROI fields that do not exist (width, bit_depth,
origin_x, ...); map them to the real fields.

PI exported its internal getposition/servo/stopmotion helpers, which
made those names ambiguous at the top level for anyone doing
"using MicroscopeControl"; the StageInterface methods for PIStage in
interface_methods.jl already wrap them, so stop exporting the helpers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe
The previous tests referenced names and fields that do not exist
(setexposuretime, setroi!, SimStage, light.power, attrs["Type"]) and
had never passed. Cover SimCamera capture/sequence/live data shapes in
the (H, W, N) convention, SimStage3d/2d/1d motion, SimLight power and
on/off, and an export_state -> HDF5 round trip for every sim device.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe
…SPLAY

julia-docdeploy@v1 builds the docs with the prefix quoted as a single
word, so 'xvfb-run -a' is looked up as one command and exits 127. The
job-level Xvfb server already provides DISPLAY, which is sufficient.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011qRMiDoUf47KiBzTKpdnAe
@kalidke
kalidke merged commit 2b1fc93 into main Sep 8, 2026
3 checks passed
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.

1 participant