Nightly Homebrew bottles of OpenMS built from the
nightly branch of OpenMS/OpenMS.
brew install openms/openms/openms # TOPP command-line tools (pulls in libopenms)
brew install openms/openms/openms-gui # TOPPView, TOPPAS, INIFileEditor
brew install openms/openms/libopenms # only the C++ library, e.g. to build against itOr brew tap openms/openms and then brew install openms.
| Formula | Contents | Depends on |
|---|---|---|
libopenms |
libOpenMS, libOpenSwathAlgo, libOpenMS_CLI, headers, CMake package, share/OpenMS (incl. PeptDeep models) |
— |
openms |
TOPP command-line tools, share/OpenMS/TOOLS/OpenMS-TOPP.tsv (keg-only) |
libopenms |
openms-gui |
libOpenMS_GUI, TOPPView, TOPPAS, INIFileEditor (app bundles on macOS), ExecutePipeline, ImageCreator; only these entry points are linked into bin |
libopenms, openms, Qt |
openms is keg-only: its ~150 tools have generic names (FileInfo clashes with leptonica's
fileinfo on case-insensitive file systems) and are not linked into HOMEBREW_PREFIX/bin. To use
them, add them to PATH:
export PATH="$(brew --prefix openms)/bin:$PATH"They find their tool registry relative to themselves, so no other setup is needed. openms-gui
lays out the GUI in libexec as a merged installation (libexec/bin holds the GUI tools plus
links to all TOPP tools, libexec/share/OpenMS/TOOLS both registries), so TOPPView and TOPPAS
find the TOPP tools without openms being linked. On macOS, link the apps with
ln -sf "$(brew --prefix openms-gui)"/Applications/*.app /Applications/.
The three formulae are built from the same OpenMS commit: libopenms with BUILD_TOPP_TOOLS=OFF WITH_GUI=OFF, the other two against the installed libopenms with
OPENMS_USE_INSTALLED_LIBRARY=ON (OpenMS#10339).
Their versions must always match exactly. pyOpenMS is intentionally not packaged here.
Upgrading from the earlier all-in-one openms formula: libopenms takes over the library files
(link_overwrite), so brew upgrade openms works without manual unlinking.
Bottles are built with the same brew commands brew test-bot runs (install --build-bottle,
bottle --json, audit, reinstall from the bottle, linkage --test, test; see
build-bottles.sh) and published with brew pr-upload to
GitHub Packages, like homebrew-core. brew test-bot --only-formulae itself is not used, because it
uninstalls and reinstalls the whole dependency tree around every formula, which took about half of
each CI run. The bottle downloads of the dependency trees are kept in the Actions cache, keyed on
the exact dependency versions.
nightly.yml: triggered by OpenMS/OpenMS after thenightlybranch moves (repository_dispatch, typeopenms-nightly), with a daily fallback at 04:00 UTC and manualworkflow_dispatch. It- pins all three formulae to the
nightlycommit (bump-nightly.py): source tarball, versionX.Y.Z-pre.YYYYMMDD, andresources for everything OpenMS' CMake would download (FetchContent deps, PeptDeep ONNX models; onlylibopenmsneeds them), read from OpenMS' CMake files at that commit; - builds bottles on macOS and Linux (
build.yml); - uploads them to
ghcr.io/openms/openmsand pushes the bottle commit tomain.
- pins all three formulae to the
tests.yml/publish.yml: the standardbrew tap-newpull request flow (build as above, thenbrew pr-pull) for manual formula changes.
A full OpenMS build takes hours on hosted runners, so CI keeps a
ccache per runner OS in the Actions cache. The formulae only use it when
HOMEBREW_OPENMS_CCACHE and HOMEBREW_OPENMS_CCACHE_DIR are set (CI only). The cache is saved
by the nightly run (default-branch scope, saved even on failure) and restored by every run,
including pull requests.
Add to .github/workflows/update_nightly.yml after the nightly branch is updated, using a token
(e.g. the OpenMS GitHub App) with contents: write on this repository:
- name: Build Homebrew bottles
if: steps.compare_branches.outputs.behind == 'true' || inputs.force
run: gh api repos/OpenMS/homebrew-openms/dispatches -f event_type=openms-nightly -f "client_payload[sha]=$(git rev-parse HEAD)"
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}The formulae are written to homebrew-core rules (offline build, no vendored downloads, tests).
For submission, replace the nightly url/version with a release tarball, drop livecheck
skip and the ccache_args hook.