Summary
The ModelingToolkit benchmark environment includes OMJulia, and RCCircuit.jmd, ThermalFluid.jmd, and Multibody_Robot.jmd all create an OMCSession. The current GitHub Actions benchmark path does not provision the omc executable on the self-hosted benchmark runner, so these documents abort when they reach their OpenModelica chunks.
Reproduction on clean master
Tested at 233ae71ca386acce3d4cff5888f7e53755bdfb85:
$ command -v omc
$ echo $?
1
$ julia --project=benchmarks/ModelingToolkit -e 'using OMJulia; OMJulia.OMCSession()'
ERROR: IOError: could not spawn `omc --interactive=zmq -z=julia.382IJqmyRK`: no such file or directory (ENOENT)
Stacktrace:
[1] _spawn_primitive(file::String, cmd::Cmd, stdio::Memory{Union{RawFD, Base.SyncCloseFD, IO}})
@ Base ./process.jl:139
...
[9] OMJulia.ZMQSession(omc::Nothing)
@ OMJulia ~/.julia/packages/OMJulia/typxS/src/omcSession.jl:130
[10] OMJulia.OMCSession(omc::Nothing)
@ OMJulia ~/.julia/packages/OMJulia/typxS/src/omcSession.jl:231
[11] OMJulia.OMCSession()
@ OMJulia ~/.julia/packages/OMJulia/typxS/src/omcSession.jl:211
$ echo $?
1
versioninfo():
Julia Version 1.12.4
Commit 01a2eadb047 (2026-01-06 16:56 UTC)
Build Info:
Official https://julialang.org release
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 128 × AMD EPYC 7502 32-Core Processor
WORD_SIZE: 64
LLVM: libLLVM-18.1.7 (ORCJIT, znver2)
GC: Built with stock GC
Threads: 1 default, 1 interactive, 1 GC (on 128 virtual cores)
The runner host is Ubuntu 22.04.5. The benchmark user belongs to the sudo group but does not have passwordless sudo, so restoring the old apt install commands directly in a per-benchmark setup script would not work under the current account without an accompanying runner configuration change.
Regression point
I bisected the CI configuration between the OpenModelica-enabled Buildkite setup and current master. The first bad commit is:
- 029ff06 — added the GitHub Actions benchmark workflow and build script without migrating OpenModelica provisioning.
The earlier Buildkite path used a benchmark rootfs with OpenModelica preinstalled; that setup originated in:
The remaining Buildkite configuration was later removed in:
The bisect predicate treated a CI path as good only when the selected benchmark build path installed omc or selected an OpenModelica-enabled benchmark rootfs.
Suggested direction
Provision OpenModelica in the self-hosted benchmark runner image/setup, and add an explicit omc --version preflight for the ModelingToolkit benchmark target so a missing system dependency fails before the multi-hour Julia chunks begin. A per-benchmark installer is another option only if the runner account is given the required non-interactive installation permissions.
Summary
The ModelingToolkit benchmark environment includes
OMJulia, andRCCircuit.jmd,ThermalFluid.jmd, andMultibody_Robot.jmdall create anOMCSession. The current GitHub Actions benchmark path does not provision theomcexecutable on the self-hosted benchmark runner, so these documents abort when they reach their OpenModelica chunks.Reproduction on clean
masterTested at
233ae71ca386acce3d4cff5888f7e53755bdfb85:versioninfo():The runner host is Ubuntu 22.04.5. The benchmark user belongs to the
sudogroup but does not have passwordless sudo, so restoring the oldapt installcommands directly in a per-benchmark setup script would not work under the current account without an accompanying runner configuration change.Regression point
I bisected the CI configuration between the OpenModelica-enabled Buildkite setup and current
master. The first bad commit is:The earlier Buildkite path used a benchmark rootfs with OpenModelica preinstalled; that setup originated in:
The remaining Buildkite configuration was later removed in:
The bisect predicate treated a CI path as good only when the selected benchmark build path installed
omcor selected an OpenModelica-enabled benchmark rootfs.Suggested direction
Provision OpenModelica in the self-hosted benchmark runner image/setup, and add an explicit
omc --versionpreflight for the ModelingToolkit benchmark target so a missing system dependency fails before the multi-hour Julia chunks begin. A per-benchmark installer is another option only if the runner account is given the required non-interactive installation permissions.