Skip to content
Closed

Pypi #23

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
64 commits
Select commit Hold shift + click to select a range
3ab7b2a
Fixes docker and pyproject.
Nov 13, 2025
672ecb6
Merge pull request #3 from cymis/feature/acl
johnchase Feb 1, 2026
6096344
Adds pipeline parsing
Feb 17, 2026
290b212
Adds pipeline parsing
Feb 17, 2026
ee33e61
Fixes merge conflict in pyproject.toml
Feb 22, 2026
72c0122
Fixes merge conflict
Feb 22, 2026
51317a1
Adds pipeline cli interface
Feb 22, 2026
23e11e7
Adds arguments
Feb 22, 2026
cfa1f88
removes example
Feb 22, 2026
c88913b
Adds dummy progress
Feb 24, 2026
7d6223d
Adds dummy progress
Feb 24, 2026
b7c2948
Small refactor
Feb 24, 2026
50eea45
fix merge conflict
Feb 24, 2026
b315230
Adjusts progress bars
Feb 25, 2026
2394ada
Adds param grouping
Feb 25, 2026
18c57bd
Fixes runtime
Feb 26, 2026
b43259e
Adds serial qiime runner with docker
Feb 28, 2026
fba097e
Fizes output name issue
Mar 4, 2026
c543564
Merge pull request #4 from cymis/run-command
johnchase Mar 6, 2026
73fc12a
Merge pull request #5 from cymis/arguments-file
johnchase Mar 6, 2026
cc1ac17
Merge pull request #6 from cymis/progress-bars
johnchase Mar 6, 2026
a731f5e
removes example
Mar 6, 2026
740f781
restores qapi
Mar 7, 2026
97b5dc2
Merge pull request #8 from cymis/qapi
johnchase Mar 7, 2026
0ee4e28
Adds ability to add single plugins
Mar 8, 2026
17bbee7
Addresses github pr review
Mar 8, 2026
b7fbb28
Merge pull request #7 from cymis/run-fix
johnchase Mar 8, 2026
f35e155
Merge pull request #9 from cymis/single-plugin-add
johnchase Mar 8, 2026
a841ff1
Fixes pipeline/config merge
Mar 10, 2026
09b04ed
Merge pull request #10 from cymis/fix-config
johnchase Mar 10, 2026
77ee15d
Removes uv lock
Mar 10, 2026
a4ded9d
Merge branch 'dev' of github.com:cymis/adagio-cli into dev
Mar 10, 2026
a2e21c8
Adds readme
Mar 10, 2026
3236e7f
Merge pull request #11 from cymis/improve-readme
johnchase Mar 10, 2026
79ac361
feat(execution): add modular task-environment executor with Docker la…
Mar 13, 2026
0c9d6dc
Refactor
Mar 13, 2026
9c1911f
Add cache-backed task result reuse
Mar 20, 2026
afdec7e
Adds caching
Mar 20, 2026
36987d6
Merge pull request #12 from cymis/task-containers-x
johnchase Mar 20, 2026
08f6d47
Fixes remove cache command
Mar 20, 2026
a7e9a74
Fixes error formatting
Mar 20, 2026
d93767f
Merge pull request #14 from cymis/fix-formatting
johnchase Mar 20, 2026
96c050a
Adds config toml
Mar 20, 2026
980f316
Adds explicit architecture check
Mar 24, 2026
b45559c
Temporary move imports to be lazy
Mar 25, 2026
61e5d05
Adds apptainer support
Mar 25, 2026
5ee9aee
Fizes bug where host packages were injected into container
Mar 26, 2026
0dabb01
Adds param descriptions to help
Mar 27, 2026
31a7077
Adds pipeline summary commmand
Mar 27, 2026
adaa841
Writes files to disk as they are created
Mar 27, 2026
6dd6b17
Adds collection support
Mar 31, 2026
6a425ba
fix flicker
Apr 3, 2026
421eee8
Second attempt at fixing flicker
Apr 3, 2026
1c5d563
Next attempt at render
Apr 3, 2026
05d7bb8
Fix flickering tty
Apr 8, 2026
4e1295c
Merge pull request #13 from cymis/codex/adagio-cli-cache-reuse
johnchase Apr 8, 2026
c302dad
Merge pull request #15 from cymis/config-toml
johnchase Apr 8, 2026
e442815
Merge pull request #16 from cymis/add-param-description
johnchase Apr 8, 2026
9b52517
Merge pull request #17 from cymis/show-pipeline
johnchase Apr 8, 2026
34cb7cc
Merge pull request #18 from cymis/collections
johnchase Apr 8, 2026
90276c3
Merge pull request #19 from cymis/apptainer
johnchase Apr 8, 2026
d004981
Adds qapi token submission
Apr 8, 2026
00c7368
Merge pull request #20 from cymis/qapi-token
johnchase Apr 8, 2026
95ae790
Adds pypi automation
Apr 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
changelog:
exclude:
labels:
- skip-changelog
categories:
- title: Breaking Changes
labels:
- breaking
- breaking-change
- title: Features
labels:
- enhancement
- feature
- title: Fixes
labels:
- bug
- fix
- title: CI and Tooling
labels:
- ci
- dependencies
- tooling
- title: Other Changes
labels:
- "*"
70 changes: 70 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
name: CI

on:
push:
branches:
- dev
pull_request:

permissions:
contents: read

jobs:
tests:
name: Tests (Python ${{ matrix.python-version }})
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
python-version: ["3.10", "3.11", "3.12"]

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}

- name: Install uv
run: python -m pip install uv

- name: Install dependencies
run: uv sync --group dev --locked

- name: Run tests
run: uv run pytest

build:
name: Build distribution
runs-on: ubuntu-latest
needs:
- tests

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install uv
run: python -m pip install uv

- name: Install dependencies
run: uv sync --group dev --locked

- name: Build distributions
run: uv run python -m build

- name: Validate distribution metadata
run: uv run python -m twine check dist/*

- name: Upload distributions
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/
65 changes: 65 additions & 0 deletions .github/workflows/publish-testpypi.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
name: Publish to TestPyPI

on:
workflow_dispatch:

permissions:
contents: read

jobs:
build:
name: Build distribution
runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install uv
run: python -m pip install uv

- name: Install dependencies
run: uv sync --group dev --locked

- name: Run tests
run: uv run pytest

- name: Build distributions
run: uv run python -m build

- name: Validate distribution metadata
run: uv run python -m twine check dist/*

- name: Upload distributions
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/

publish:
name: Publish to TestPyPI
runs-on: ubuntu-latest
needs:
- build
environment:
name: testpypi
url: https://test.pypi.org/p/adagio-cli
permissions:
id-token: write

steps:
- name: Download distributions
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/

- name: Publish distribution to TestPyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
repository-url: https://test.pypi.org/legacy/
75 changes: 75 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
name: Publish to PyPI

on:
push:
tags:
- "v*"

permissions:
contents: read

jobs:
build:
name: Build distribution
runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Install uv
run: python -m pip install uv

- name: Install dependencies
run: uv sync --group dev --locked

- name: Run tests
run: uv run pytest

- name: Verify tag matches package version
run: |
PACKAGE_VERSION=$(grep '^version = ' pyproject.toml | head -n 1 | cut -d '"' -f 2)
TAG_VERSION="${GITHUB_REF_NAME#v}"

if [ "$PACKAGE_VERSION" != "$TAG_VERSION" ]; then
echo "Tag version $TAG_VERSION does not match pyproject version $PACKAGE_VERSION"
exit 1
fi

- name: Build distributions
run: uv run python -m build

- name: Validate distribution metadata
run: uv run python -m twine check dist/*

- name: Upload distributions
uses: actions/upload-artifact@v4
with:
name: python-package-distributions
path: dist/

publish:
name: Publish to PyPI
runs-on: ubuntu-latest
needs:
- build
environment:
name: pypi
url: https://pypi.org/p/adagio-cli
permissions:
id-token: write

steps:
- name: Download distributions
uses: actions/download-artifact@v4
with:
name: python-package-distributions
path: dist/

- name: Publish distribution to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
8 changes: 4 additions & 4 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,13 @@ venv/

# Distribution / packaging
*.egg-info/
build/
dist/

# Local test / coverage files
.coverage
.pytest_cache/

# Project lock file
uv.lock

# OS junk
.DS_Store
Thumbs.db
Expand All @@ -30,4 +29,5 @@ Thumbs.db

.ipynb_checkpoints/
.mypy_cache/
runinfo/
.uv-cache/
runinfo/
15 changes: 15 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project follows [Semantic Versioning](https://semver.org/spec/v2.0.0.html)
using [PEP 440](https://packaging.python.org/en/latest/specifications/version-specifiers/) version strings for Python releases.

## [Unreleased]

### Added

- GitHub Actions CI for linting, tests, and build verification.
- Trusted Publishing workflows for manual TestPyPI validation and tagged PyPI releases.
- A release playbook covering changelog, tags, and publish steps.
38 changes: 12 additions & 26 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,36 +1,22 @@
ARG QIIME_BASE_IMAGE=quay.io/qiime2/amplicon:2024.5
FROM ${QIIME_BASE_IMAGE} as base
ARG QIIME_BASE_IMAGE=quay.io/qiime2/amplicon:2026.1
FROM ${QIIME_BASE_IMAGE} AS base

ENV PYTHONUNBUFFERED=1
WORKDIR /app
FROM base AS dev

COPY --from=ghcr.io/astral-sh/uv:0.5.11 /uv /uvx /bin/

ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy

# Development stage
FROM base as dev

RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync --frozen --no-install-project

ENV PYTHONPATH=/app/src

COPY ./pyproject.toml ./uv.lock /app/
COPY ./pyproject.toml /app/
COPY ./README.md /app/
COPY ./src /app/src

RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen
# Skip UV and use QIIME conda env
RUN pip install .

RUN pip uninstall pyOpenSSL -y || true

# is this needed still?
RUN pip3 uninstall pyOpenSSL -y || true

# We can extend this if needed
FROM dev as production
FROM dev AS production
WORKDIR /app

CMD ["adagio", "--help"]

# Set default command
CMD ["uv", "run", "adagio", "--help"]
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Cymis

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
Loading
Loading