Skip to content

GitHub Actions ModelingToolkit benchmarks do not provision OpenModelica #1778

Description

@ChrisRackauckas-Claude

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.

Activity

  1. ChrisRackauckas-Claude commented on Sep 1, 2026

    @ChrisRackauckas-Claude
    MemberAuthor

    A rootless technical installation path exists now: conda-forge publishes openmodelica 1.27.0 for linux-64 (https://anaconda.org/conda-forge/openmodelica), so lack of passwordless sudo is no longer the only blocker.

    I did not add that installer to the benchmark setup. OpenModelica's current official license states that an ordinary non-member may use and redistribute it under AGPLv3; the alternative restricted EPL modes require OSMC membership (https://github.com/OpenModelica/OpenModelica/blob/master/OSMC-License.txt). Automatically provisioning that runtime for this MIT repository is therefore a licensing/dependency decision, not a routine CI fix, and needs explicit review.

    There is also a separate first-page blocker: Multibody_Robot.jmd imports the unregistered JuliaComputing/Multibody.jl, whose current license says all rights reserved and limits free use to non-commercial academic teaching/research (https://github.com/JuliaComputing/Multibody.jl/blob/main/LICENSE). The benchmark project does not declare that dependency.

    The actionable choices are now explicit:

    • provision OpenModelica at the runner-image/organization level after licensing review, and separately arrange an approved Multibody source/registry;
    • or retire those external comparisons/pages and keep the publicly resolvable ModelingToolkit measurements.

    I started a local conda solve only to validate feasibility, then aborted it after the license audit; I have not claimed an OMJulia pass and have not opened a provisioning PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions