mulled-biopixi
mulled-biopixi turns a Biopixi-compatible Pixi environment into a
local mulled container build. It reads pixi.toml from the current directory by default, uses the
linux-64 solve in pixi.lock to pin the direct Conda dependencies, publishes direct L1 path
packages into an indexed local channel, and calls Galaxy's mull_targets implementation.
Installation
Until the package is published to PyPI, install it directly from GitHub:
uv tool install git+https://github.com/jmchilton/mulled-biopixi.git
Then run it in a Biopixi-compatible project:
mulled-biopixi --dry-run
mulled-biopixi --command build-and-test --test 'samtools --version'
The dry run is useful on any host. A real build needs Docker. With current stable
galaxy-tool-util, the CLI downloads a checksum-pinned Involucro 1.2.0 into the project's ignored
.mulled-biopixi/ cache and injects --platform linux/amd64, allowing Docker Desktop to emulate
the Biopixi profile platform on Apple Silicon. Galaxy's development implementation exposes this
platform directly, and the compatibility path switches off automatically when that API is present.
The shim also pre-pulls the amd64 Conda and destination base images with the modern Docker CLI;
this avoids Involucro's older embedded Docker client attempting a pull against newer daemons. The
pre-pull safeguard remains active when Galaxy supplies native platform support because its current
Involucro 1.2.0 binary has the same Docker 29 limitation.
Translation contract
- The manifest selects the effective direct dependencies:
[dependencies]plus Linux target overrides from[target.linux-64.dependencies]. - The lock supplies exact registry-package versions and build strings. Manifest ranges alone are not reproducible container inputs.
- Explicit dependency channel qualifiers are preserved in the mulled package name.
- A direct path dependency gets its concrete version from its package
pixi.toml, is built withpixi publish --target-channel ... --target-platform linux-64, and is then resolved by mulled from that localfile://channel. - Only roots are passed to mulled. Conda resolves their transitive closure inside the image, which matches the Biopixi L4 target-set rule.
This is intentionally not another complete Biopixi validator. It rejects unsupported shapes when they would make the build ambiguous, while relying on the caller's L1-or-higher assumption for the full profile contract.
Current limits
- Recursive path-package graphs are detected but not published. Supporting them needs a proper topological package publication workflow and a decision about rewriting source dependencies.
- The local channel lives at
.mulled-biopixi/channelby default and is not pushed anywhere. osx-arm64can be present in the workspace, but container construction always uses the profile'slinux-64environment and produceslinux/amd64. Foreign-architecture builds depend on the Docker daemon's binfmt/QEMU support and will be slower than native builds.- The integration uses Galaxy's importable
mull_targetsfunction. That API is practical and tested within Galaxy, but is not documented as a separately versioned public library contract. - Galaxy's base-image selection performs one full Conda metadata search per root. Under amd64 emulation this can dominate build time even when the eventual package solve and image wrap are quick.
Development
Create the locked development environment and run the complete local CI suite:
uv sync
make ci
The individual commands are make format, make lint, make typing, make test, and
make dist. Install the repository hook with make pre-commit. Maintainers can follow the
release checklist to publish a
version through PyPI Trusted Publishing.
This project is licensed under the MIT License.
Metadata
Release files for mulled-biopixi 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| mulled_biopixi-0.1.0.tar.gz | 10.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mulled_biopixi-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.3 kB
Release files / mulled_biopixi-0.1.0.tar.gz
| Download URL | mulled_biopixi-0.1.0.tar.gz |
|---|---|
| Size | 10.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0cb549479ac848786b73632fce99c6b6e5db0f63d7f83dd224fab174dd4f8ff5
|
|
BLAKE2b-256 checksum How to use checksums |
11a8fefd1abfffcaa8eb5e07ce6d177e916728ab49666b80f18c62ad8452e4be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.
Transparency logRelease files / mulled_biopixi-0.1.0-py3-none-any.whl
| Download URL | mulled_biopixi-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
78e105dccea19edc7375350f45d3a5526ce2efd558342e32ac32ccac98ca3883
|
|
BLAKE2b-256 checksum How to use checksums |
8806fc809d7efbb7a35838039e2440211f1eccc5345381a1241fcdd33de4f45d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 31, 2026.
Transparency log