From 210b90a32d1798c21890283ba9134bfa812c7051 Mon Sep 17 00:00:00 2001 From: Altan Orhon Date: Mon, 16 Oct 2023 16:53:18 -0700 Subject: [PATCH] Return to Apptainer --- .github/workflows/apptainer-image.yml | 34 ++++++++++++++++++ .github/workflows/docker-publish.yml | 51 --------------------------- Dockerfile | 25 ------------- Singularity | 14 ++++++++ 4 files changed, 48 insertions(+), 76 deletions(-) create mode 100644 .github/workflows/apptainer-image.yml delete mode 100644 .github/workflows/docker-publish.yml delete mode 100644 Dockerfile create mode 100644 Singularity diff --git a/.github/workflows/apptainer-image.yml b/.github/workflows/apptainer-image.yml new file mode 100644 index 0000000..84e88f2 --- /dev/null +++ b/.github/workflows/apptainer-image.yml @@ -0,0 +1,34 @@ +name: Singularity Build +on: + push: + # Edit the branches here if you want to change deploy behavior + branches: + - main + - master + tags: + - release-* + +jobs: + build-and-push-image: + runs-on: ubuntu-latest + name: Build Apptainer image + permissions: + contents: read + packages: write + steps: + - name: Install Apptainer + run: deb=$(curl -w "%{filename_effective}" -LO https://github.com/apptainer/apptainer/releases/download/v1.2.4/apptainer_1.2.4_amd64.deb) && sudo apt install -y "./$deb"; rm -f "$deb"; unset deb + - name: Check out code for the container build + uses: actions/checkout@v4 + - name: Build Container + run: | + apptainer build container.sif Singularity + tag=$(echo "${recipe/Singularity\./}") + [ "$tag" == "Singularity" ] && tag=latest + # Build the container and name by tag + echo "Tag is $tag." + echo "tag=$tag" >> $GITHUB_ENV + - name: Login and Deploy Container + run: | + apptainer remote login -u ${{ github.actor }} -p ${{ secrets.GITHUB_TOKEN }} oras://ghcr.io + apptainer push container.sif oras://ghcr.io/${{ github.repository }}:${tag} diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml deleted file mode 100644 index e09d448..0000000 --- a/.github/workflows/docker-publish.yml +++ /dev/null @@ -1,51 +0,0 @@ -# -name: Create and publish a Docker image - -# Configures this workflow to run every time a change is pushed to the branch called `release`. -on: - push: - branches: ['release'] - -# Defines two custom environment variables for the workflow. These are used for the Container registry domain, and a name for the Docker image that this workflow builds. -env: - REGISTRY: ghcr.io - IMAGE_NAME: ${{ github.repository }} - -# There is a single job in this workflow. It's configured to run on the latest available version of Ubuntu. -jobs: - build-and-push-image: - runs-on: ubuntu-latest - # Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job. - permissions: - contents: read - packages: write - # - steps: - - name: Checkout repository - uses: actions/checkout@v4 - # Uses the `docker/login-action` action to log in to the Container registry registry using the account and password that will publish the packages. Once published, the packages are scoped to the account defined here. - - name: Log in to the Container registry - uses: docker/login-action@65b78e6e13532edd9afa3aa52ac7964289d1a9c1 - with: - registry: ${{ env.REGISTRY }} - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - # This step uses [docker/metadata-action](https://github.com/docker/metadata-action#about) to extract tags and labels that will be applied to the specified image. The `id` "meta" allows the output of this step to be referenced in a subsequent step. The `images` value provides the base name for the tags and labels. - - name: Extract metadata (tags, labels) for Docker - id: meta - uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 - with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} - tags: | - type=raw,value=latest - type=sha - # This step uses the `docker/build-push-action` action to build the image, based on your repository's `Dockerfile`. If the build succeeds, it pushes the image to GitHub Packages. - # It uses the `context` parameter to define the build's context as the set of files located in the specified path. For more information, see "[Usage](https://github.com/docker/build-push-action#usage)" in the README of the `docker/build-push-action` repository. - # It uses the `tags` and `labels` parameters to tag and label the image with the output from the "meta" step. - - name: Build and push Docker image - uses: docker/build-push-action@f2a1d5e99d037542a71f64918e516c093c6f3fc4 - with: - context: . - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 12aa120..0000000 --- a/Dockerfile +++ /dev/null @@ -1,25 +0,0 @@ -ARG MICROMAMBA_TAG=jammy-cuda-12.1.1 -ARG SLEAP_PYTHON_VERSION=3.7.12 -ARG SLEAP_VERSION=1.3.3 -ARG IMAGE_VERSION=0.1.0 - -# Use the specified base image -FROM mambaorg/micromamba:${MICROMAMBA_TAG:-jammy-cuda-12.1.1} - -# Automatically activate base environment for mamba/conda -ENV MAMBA_DOCKERFILE_ACTIVATE=1 - -# Install sleap -RUN micromamba install -y -n base python="${SLEAP_PYTHON_VERSION:-3.7.12}" -c conda-forge -c nvidia -c sleap -c anaconda sleap=1.3.3 - -ARG BUILD_DATE -LABEL org.label-schema.build-date=$BUILD_DATE \ - org.label-schema.name="SLEAP" \ - org.label-schema.description="A container for running SLEAP" - - - -LABEL org.opencontainers.image.authors='altan@uw.edu' \ - org.opencontainers.image.name='SLEAP' \ - org.opencontainers.image.licenses='MIT' \ - org.opencontainers.image.version="${IMAGE_VERSION:-0.1.0}-$SLEAP_VERSION}" diff --git a/Singularity b/Singularity new file mode 100644 index 0000000..7ded288 --- /dev/null +++ b/Singularity @@ -0,0 +1,14 @@ +Bootstrap: docker +From: mambaorg/micromamba:{{ MICROMAMBA_TAG }} + +%arguments + MICROMAMBA_TAG=jammy-cuda-12.1.1 + SLEAP_PYTHON_VERSION=3.7.12 + SLEAP_VERSION=1.3.3 + +%environment + export MAMBA_DOCKERFILE_ACTIVATE=1 + +%post + micromamba install -y -n base python={{ SLEAP_PYTHON_VERSION }} -c conda-forge -c nvidia -c sleap -c anaconda sleap={{ SLEAP_VERSION }} +