This repository builds standalone installers for Tomviz from conda-forge packages.
| Platform | Format | Notes |
|---|---|---|
| macOS x64 | .dmg |
Unsigned — sign/notarize internally before distribution |
| macOS ARM | .dmg |
Unsigned — sign/notarize internally before distribution |
| Windows | .msi, .zip |
MSI is unsigned — sign internally before distribution |
| Linux | .tar.gz |
Relocatable bundle, extract anywhere |
| Linux (RHEL8/9) | .rpm |
Installs to /opt/tomviz; relocatable via --prefix |
| Linux | .flatpak |
Single-file bundle, org.freedesktop.Platform runtime |
All Linux formats wrap the same relocatable conda-forge bundle (package.py
conda-pack), so they stay in lockstep: the.tar.gzis the raw bundle, the.rpmdrops it into/opt/tomvizwith desktop integration, and the.flatpakcopies it into the sandbox's/app.
- Check: A scheduled GitHub Action polls conda-forge every 6 hours for new tomviz releases
- Build: When a new version is detected, it creates a conda environment with tomviz, uses
conda-packto make it relocatable, and wraps it in platform-specific bundles - Release: Uploads installers as GitHub Releases
Every bundle includes the conda-forge gpl variant of ffmpeg, which tomviz's
movie export runs (as a separate process) to encode H.264 MP4s; only the gpl
variant links libx264, which the export's quality control requires. Because the
ffmpeg executable is GPL, package.py copies its license texts and a
source-availability notice into share/licenses/ffmpeg/ inside the bundle
(tomviz itself remains 3-clause BSD; running a GPL executable as a subprocess
does not change that). verify.py checks the binary is present, is the gpl
variant, encodes a test MP4 with the exact arguments tomviz uses, and that the
license files made it into the bundle.
The Linux and Windows bundles include the CUDA 12.9 build of libtomo, which
provides libtomo-accel for the TomoPy operator's "Use GPU (CUDA)" option
(GPU SIRT and MLEM). The build runners have no GPU, so package.py sets
CONDA_OVERRIDE_CUDA=12.9 for the solve and pins ParaView's viskores to its
CPU build. Only libtomo-accel links the CUDA libraries (NVIDIA NPP), so the
bundles still run without an NVIDIA GPU; using the option needs an NVIDIA
driver that supports CUDA 12. There is no CUDA build for macOS. verify.py
checks that libtomo-accel and NPP made it into the bundle.
cd packaging
conda env create -f environment.yml
conda activate tomviz-package
# The newest tomviz on conda-forge for Python 3.14, as CI picks it
VERSION=$(python ../.github/scripts/latest_conda_forge_tomviz.py 3.14 | cut -d' ' -f1)
python package.py --tomviz-version "$VERSION" --python-version 3.14
TOMVIZ_VERSION="$VERSION" cpack --config CPackConfig.cmake # .tar.gz / .dmg / .msiBoth consume the bundle staged by package.py (_build/install/tomviz),
with VERSION set as above:
cd packaging
python package.py --tomviz-version "$VERSION" --python-version 3.14
# RPM (relocatable, installs to /opt/tomviz)
bash linux/build_rpm.sh --staged _build/install --version "$VERSION" --out _build
# Flatpak (single-file bundle)
bash flatpak/build_flatpak.sh --staged _build/install --version "$VERSION" --out _buildThe committed linux/tomviz.spec and flatpak/org.tomviz.Tomviz.yaml are the
configuration files needed to rebuild each package.
Build + test locally via Docker (handles RHEL containers / flatpak sandbox;
uses linux/amd64 emulation on Apple Silicon). Both take an optional version
and Python version, defaulting to the newest tomviz on conda-forge and 3.14:
bash packaging/linux/build_and_test_rpm_local.sh # RPM on Rocky 8 + 9
bash packaging/flatpak/build_and_test_flatpak_local.sh # Flatpak smoke testBoth mirror the CI tests: structural verification, install, headless smoke test under software GL, and (for the RPM) a relocation test at a non-default prefix.
Releases in this repo are built automatically for every conda-forge update, but they are not auto-published to OpenChemistry/tomviz. The macOS DMGs and Windows MSI produced by CI are unsigned, and publishing unsigned binaries to the user-facing repo would trigger Gatekeeper/SmartScreen warnings for end users.
Instead, specific releases are hand-picked, signed, and published manually:
- Pick a release from this repo's GitHub Releases page.
- Download the macOS DMGs (x64 and ARM) and the Windows MSI.
- Sign and notarize the DMGs, and sign the MSI, using the internal signing process.
- Create a matching release on
OpenChemistry/tomvizand upload the signed DMGs and MSI along with the Linux artifacts from this repo's release.