Skip to content

Commit

Permalink
Update GHA
Browse files Browse the repository at this point in the history
  • Loading branch information
jennydaman committed Sep 27, 2024
1 parent bdc8011 commit d031c62
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 80 deletions.
110 changes: 34 additions & 76 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,5 @@
# Continuous integration testing for ChRIS Plugin.
# https://github.com/FNNDSC/python-chrisapp-template/wiki/Continuous-Integration
#
# - on push and PR: run pytest
# - on push to main: build and push container images as ":latest"
# - on push to semver tag: build and push container image with tag and
# upload plugin description to https://chrisstore.co

name: build

Expand All @@ -13,116 +8,79 @@ on:
branches: [ main ]
tags:
- "v?[0-9]+.[0-9]+.[0-9]+*"
pull_request:
branches: [ main ]

jobs:
build:
name: Build
if: github.event_name == 'push' || github.event_name == 'release'
runs-on: ubuntu-22.04
runs-on: ubuntu-24.04

steps:
- name: Decide image tags
id: info
shell: python
run: |
import os
import itertools
def join_tag(t):
registry, repo, tag = t
return f'{registry}/{repo}:{tag}'.lower()
registries = ['docker.io', 'ghcr.io']
repos = ['${{ github.repository }}']
if '${{ github.ref_type }}' == 'branch':
tags = ['latest']
elif '${{ github.ref_type }}' == 'tag':
tag = '${{ github.ref_name }}'
version = tag[1:] if tag.startswith('v') else tag
tags = ['latest', version]
else:
tags = []
if '${{ github.ref_type }}' == 'tag':
local_tag = join_tag(('ghcr.io', '${{ github.repository }}', version))
else:
local_tag = join_tag(('localhost', '${{ github.repository }}', 'latest'))
product = itertools.product(registries, repos, tags)
tags_csv = ','.join(map(join_tag, product))
outputs = {
'tags_csv' : tags_csv,
'push' : 'true' if tags_csv else 'false',
'local_tag': local_tag
}
with open(os.environ['GITHUB_OUTPUT'], 'a') as out:
for k, v in outputs.items():
out.write(f'{k}={v}\n')
- uses: actions/checkout@v3
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: |
docker.io/${{ github.repository }}
ghcr.io/${{ github.repository }}
tags: |
type=pep440,pattern={{version}}
type=raw,value=latest,enable={{is_default_branch}}
# QEMU is used for non-x86_64 builds
- uses: docker/setup-qemu-action@v3
# buildx adds additional features to docker build
- uses: docker/setup-buildx-action@v3
with:
driver-opts: network=host

# Here, we want to do the docker build twice:
# The first build pushes to our local registry for testing.
# The second build pushes to Docker Hub and ghcr.io
- name: Build (local only)
uses: docker/build-push-action@v3
id: docker_build
with:
context: .
file: ./Dockerfile
tags: ${{ steps.info.outputs.local_tag }}
load: true
cache-from: type=gha
- name: Login to DockerHub
if: (github.event_name == 'push' || github.event_name == 'release') && contains(steps.info.outputs.tags_csv, 'docker.io')
if: github.event_name == 'push' && contains(steps.meta.outputs.tags, 'docker.io')
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Login to GitHub Container Registry
if: (github.event_name == 'push' || github.event_name == 'release') && contains(steps.info.outputs.tags_csv, 'ghcr.io')
if: github.event_name == 'push' && contains(steps.meta.outputs.tag, 'ghcr.io')
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v3
if: (github.event_name == 'push' || github.event_name == 'release')
uses: docker/build-push-action@v6
if: github.event_name == 'push'
with:
context: .
file: ./Dockerfile
tags: ${{ steps.info.outputs.tags_csv }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
# linux/ppc64le not working, see https://github.com/ANTsX/ANTs/issues/1644
platforms: linux/amd64,linux/arm64
push: ${{ steps.info.outputs.push }}
push: true
cache-from: type=gha
cache-to: type=gha,mode=max

- name: Get preferred tag
id: preferred
if: github.ref_type == 'tag'
run: |
echo '${{ fromJSON(steps.meta.outputs.json).tags }}' \
| jq 'map(select(startswith("ghcr.io") and (endswith("latest") | not))).[0]' \
| xargs printf "tag=%s\n"
| tee --append "$GITHUB_OUTPUT"
- name: Upload ChRIS Plugin
id: upload
if: github.ref_type == 'tag'
uses: FNNDSC/upload-chris-plugin@v1
if: steps.preferred.outcome == 'success'
uses: FNNDSC/upload-chris-plugin@main
with:
dock_image: ${{ steps.info.outputs.local_tag }}
dock_image: ${{ steps.preferred.outputs.tag }}
username: ${{ secrets.CHRISPROJECT_USERNAME }}
password: ${{ secrets.CHRISPROJECT_PASSWORD }}
chris_url: https://cube.chrisproject.org/api/v1/
compute_names: host,galena
compute_names: NERC

- name: Update DockerHub description
if: steps.upload.outcome == 'success'
uses: peter-evans/dockerhub-description@v3
uses: peter-evans/dockerhub-description@v4
continue-on-error: true # it is not crucial that this works
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
short-description: ${{ steps.upload.outputs.title }}
readme-filepath: ./README.md
short-description: ${{ steps.upload.outputs.title }} ${{ github.server_url }}/${{ github.repository }}
4 changes: 0 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
FROM docker.io/python:3.12.1-slim-bookworm

LABEL org.opencontainers.image.authors="FNNDSC <dev@babyMRI.org>" \
org.opencontainers.image.title="N4 Bias Field Correction" \
org.opencontainers.image.description="A ChRIS plugin wrapper for N4BiasFieldCorrection"

# install N4BiasFieldCorrection
COPY --from=docker.io/fnndsc/n4biasfieldcorrection:2.5.0 /usr/local/bin/N4BiasFieldCorrection /usr/local/bin/N4BiasFieldCorrection

Expand Down

0 comments on commit d031c62

Please sign in to comment.