diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml new file mode 100644 index 0000000..9bf3dcb --- /dev/null +++ b/.github/workflows/docker-publish.yml @@ -0,0 +1,72 @@ + +name: Docker Image CI + +on: + push: + # Publish `main` as Docker `latest` image. + branches: + - main + release: + types: [published] + + # Run tests for any PRs. + pull_request: + +env: + IMAGE_NAME: freesurfer + +jobs: + # Push image to GitHub Packages. + # See also https://docs.docker.com/docker-hub/builds/ + push: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Log into GitHub Container Registry + run: echo "${{ secrets.GH_PACKAGES_TOKEN }}" | docker login https://docker.pkg.github.com -u nipreps-bot --password-stdin + + - uses: satackey/action-docker-layer-caching@v0.0.11 + # Ignore the failure of a step and avoid terminating the job. + continue-on-error: true + + - name: Build image + run: docker build . --file Dockerfile --tag $IMAGE_NAME + + - name: Push image to GitHub Container Registry + if: github.event_name == 'release' + run: | + IMAGE_ID=docker.pkg.github.com/${{ github.repository }}/$IMAGE_NAME + # Change all uppercase to lowercase + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') + # Strip git ref prefix from version + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + # Strip "v" prefix from tag name + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') + # Use Docker `latest` tag convention + [ "$VERSION" == "main" ] && VERSION=latest + echo IMAGE_ID=$IMAGE_ID + echo VERSION=$VERSION + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION + + - name: Log into DockerHub Container Registry + run: echo "${{ secrets.DH_PAT }}" | docker login -u niprepsbot --password-stdin + + - name: Push image to DockerHub Container Registry + if: github.event_name == 'release' + run: | + IMAGE_ID=nipreps/${IMAGE_NAME} + # Change all uppercase to lowercase + IMAGE_ID=$(echo $IMAGE_ID | tr '[A-Z]' '[a-z]') + # Strip git ref prefix from version + VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') + # Strip "v" prefix from tag name + [[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') + # Use Docker `latest` tag convention + [ "$VERSION" == "main" ] && VERSION=latest + echo IMAGE_ID=$IMAGE_ID + echo VERSION=$VERSION + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION + docker push $IMAGE_ID:$VERSION + diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a6f5c05 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,56 @@ +# NiPreps lightweight image of FreeSurfer +# +# MIT License +# +# Copyright (c) 2021 The NiPreps Developers +# +# 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. + +# Use our miniconda base +FROM alpine:3.15 + +# Update +RUN apk update && \ + apk upgrade && \ + apk add --update curl && \ + apk add --no-cache tar gzip && \ + rm -rf /var/cache/apk/* + +# Installing freesurfer +RUN curl -sSL https://surfer.nmr.mgh.harvard.edu/pub/dist/freesurfer/6.0.1/freesurfer-Linux-centos6_x86_64-stable-pub-v6.0.1.tar.gz \ + | tar zxv --no-same-owner -C /opt \ + --exclude='freesurfer/diffusion' \ + --exclude='freesurfer/docs' \ + --exclude='freesurfer/fsfast' \ + --exclude='freesurfer/lib/cuda' \ + --exclude='freesurfer/lib/qt' \ + --exclude='freesurfer/matlab' \ + --exclude='freesurfer/mni/share/man' \ + --exclude='freesurfer/subjects/fsaverage_sym' \ + --exclude='freesurfer/subjects/fsaverage3' \ + --exclude='freesurfer/subjects/fsaverage4' \ + --exclude='freesurfer/subjects/cvs_avg35' \ + --exclude='freesurfer/subjects/cvs_avg35_inMNI152' \ + --exclude='freesurfer/subjects/bert' \ + --exclude='freesurfer/subjects/lh.EC_average' \ + --exclude='freesurfer/subjects/rh.EC_average' \ + --exclude='freesurfer/subjects/sample-*.mgz' \ + --exclude='freesurfer/subjects/V1_average' \ + --exclude='freesurfer/trctrain' +