diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 00000000..4d41ed44 --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,78 @@ +name: Publish Docker image + +on: + pull_request: + paths: + - "Dockerfile" + - "env.yaml" + - ".github/workflows/docker-publish.yml" + - "zamp/**" + - "setup.py" + - "!docs/**" + - "!*.md" + - "!LICENSE" + push: + branches: [main] + paths: + - "Dockerfile" + - "env.yaml" + - ".github/workflows/docker-publish.yml" + - "zamp/**" + - "setup.py" + - "!docs/**" + - "!*.md" + - "!LICENSE" + + release: + types: [published] + +jobs: + push_to_registry: + if: github.repository == 'metagenlab/zAMP' + name: Build + Push Docker image + runs-on: ubuntu-latest + steps: + - name: Check out the repo + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ vars.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Push dev image + uses: docker/build-push-action@v6 + if: github.event_name == 'push' + with: + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/metagenlab/zamp:dev + metagenlab/zamp:dev + + - name: Push release image + uses: docker/build-push-action@v6 + if: github.event_name == 'release' + with: + platforms: linux/amd64,linux/arm64 + push: true + tags: | + ghcr.io/metagenlab/zamp:${{ github.event.release.tag_name }} + ghcr.io/metagenlab/zamp:latest + metagenlab/zamp:${{ github.event.release.tag_name }} + metagenlab/zamp:latest diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..328faaf1 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,22 @@ +FROM mambaorg/micromamba +LABEL org.opencontainers.image.source=https://github.com/metagenlab/zAMP +LABEL org.opencontainers.image.description="Snakemake pipeline for convenient amplicon metagenomics anlysis" +LABEL org.opencontainers.image.licenses=MIT +ENV LANG=C.UTF-8 +ENV SHELL=/bin/bash + +USER root +ENV APT_PKGS="procps ca-certificates" +RUN apt-get update \ + && apt-get install -y --no-install-recommends ${APT_PKGS} \ + && apt-get clean \ + && rm -rf /var/lib/apt /var/lib/dpkg /var/lib/cache /var/lib/log +USER $MAMBA_USER + +COPY --chown=$MAMBA_USER:$MAMBA_USER . /pkg +RUN micromamba config set extract_threads 1 && \ + micromamba install -n base -y -f /pkg/env.yaml && \ + micromamba clean -afy +ARG MAMBA_DOCKERFILE_ACTIVATE=1 +RUN pip install /pkg --no-deps --no-build-isolation --no-cache-dir -vvv +ENV PATH="/opt/conda/bin:$PATH" XDG_CACHE_HOME=/tmp diff --git a/env.yaml b/env.yaml new file mode 100644 index 00000000..6dcff283 --- /dev/null +++ b/env.yaml @@ -0,0 +1,16 @@ +channels: + - conda-forge + - bioconda +dependencies: + - apptainer =1.3.2 + - python =3.12 + - pip + - Click =8.1.3 + - metasnek =0.0.8 + - snaketool-utils =0.0.5 + - snakemake-minimal =8.24 + - snakemake-executor-plugin-slurm =0.11.2 + - attrmap =0.0.7 + - biopython =1.83 + - pandas =2.2.1 +