Skip to content

Commit

Permalink
updated CI workflows
Browse files Browse the repository at this point in the history
  • Loading branch information
Sandip117 committed Jan 22, 2024
1 parent d067020 commit f481fc9
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 75 deletions.
135 changes: 69 additions & 66 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,20 +19,28 @@ on:
jobs:
test:
name: Unit tests
if: false # delete this line to enable automatic testing
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
- uses: docker/setup-buildx-action@v3
- uses: actions/checkout@v3
- uses: docker/setup-buildx-action@v2
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: Build
uses: docker/build-push-action@v5
uses: docker/build-push-action@v3
with:
build-args: extras_require=dev
context: .
load: true
push: false
tags: "localhost/local/app:dev"
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
- name: Run pytest
run: |
docker run -v "$GITHUB_WORKSPACE:/app:ro" -w /app localhost/local/app:dev \
Expand All @@ -45,66 +53,60 @@ jobs:
runs-on: ubuntu-22.04

steps:
- name: Decide image tags
id: info
shell: python
- name: Get git tag
id: git_info
if: startsWith(github.ref, 'refs/tags/')
run: echo "tag=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT
- name: Get project info
id: determine
env:
git_tag: ${{ steps.git_info.outputs.tag }}
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 = []
repo="${GITHUB_REPOSITORY,,}" # to lower case
# if build triggered by tag, use tag name
tag="${git_tag:-latest}"
if '${{ github.ref_type }}' == 'tag':
local_tag = join_tag(('ghcr.io', '${{ github.repository }}', version))
else:
local_tag = join_tag(('localhost', '${{ github.repository }}', 'latest'))
# if tag is a version number prefixed by 'v', remove the 'v'
if [[ "$tag" =~ ^v[0-9].* ]]; then
tag="${tag:1}"
fi
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')
dock_image=$repo:$tag
echo $dock_image
echo "dock_image=$dock_image" >> $GITHUB_OUTPUT
echo "repo=$repo" >> $GITHUB_OUTPUT
- uses: actions/checkout@v3
# QEMU is used for non-x86_64 builds
- uses: docker/setup-qemu-action@v3
- uses: docker/setup-qemu-action@v2
# buildx adds additional features to docker build
- uses: docker/setup-buildx-action@v3
- uses: docker/setup-buildx-action@v2
with:
driver-opts: network=host
# cache slightly improves rebuild time
- name: Cache Docker layers
uses: actions/cache@v3
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
# 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
# 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 }}
tags: localhost/${{ steps.determine.outputs.dock_image }}
load: true
cache-from: type=gha
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache
# If you have a directory called examples/incoming/ and examples/outgoing/, then
# run your ChRIS plugin with no parameters, and assert that it creates all the files
# run your ChRIS plugin with no parameters, and asser that it creates all the files
# which are expected. File contents are not compared.
- name: Run examples
id: run_examples
Expand All @@ -114,7 +116,7 @@ jobs:
exit 0
fi
dock_image=${{ steps.info.outputs.local_tag }}
dock_image=localhost/${{ steps.determine.outputs.dock_image }}
output_dir=$(mktemp -d)
cmd=$(docker image inspect -f '{{ (index .Config.Cmd 0) }}' $dock_image)
docker run --rm -u "$(id -u):$(id -g)" \
Expand All @@ -135,47 +137,48 @@ jobs:
done
- name: Login to DockerHub
if: (github.event_name == 'push' || github.event_name == 'release') && contains(steps.info.outputs.tags_csv, 'docker.io')
uses: docker/login-action@v3
id: dockerhub_login
uses: docker/login-action@v2
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')
uses: docker/login-action@v3
uses: docker/login-action@v2
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')
if: github.event_name == 'push' || github.event_name == 'release'
with:
context: .
file: ./Dockerfile
tags: ${{ steps.info.outputs.tags_csv }}
tags: |
docker.io/${{ steps.determine.outputs.dock_image }}
ghcr.io/${{ steps.determine.outputs.dock_image }}
# if non-x86_84 architectures are supported, add them here
platforms: linux/amd64 #,linux/arm64,linux/ppc64le
push: ${{ steps.info.outputs.push }}
cache-to: type=gha,mode=max
push: true
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,dest=/tmp/.buildx-cache

- name: Upload ChRIS Plugin
id: upload
if: github.ref_type == 'tag'
uses: FNNDSC/upload-chris-plugin@v1
with:
dock_image: ${{ steps.info.outputs.local_tag }}
username: ${{ secrets.CHRISPROJECT_USERNAME }}
password: ${{ secrets.CHRISPROJECT_PASSWORD }}
chris_url: https://cube.chrisproject.org/api/v1/
compute_names: host,galena
- name: Get plugin meta
id: pluginmeta
run: |
repo=${{ steps.determine.outputs.repo }}
dock_image=${{ steps.determine.outputs.dock_image }}
docker run --rm localhost/$dock_image chris_plugin_info > /tmp/description.json
jq < /tmp/description.json # pretty print in log
echo "title=$(jq -r '.title' < /tmp/description.json)" >> $GITHUB_OUTPUT
- name: Update DockerHub description
if: steps.upload.outcome == 'success'
uses: peter-evans/dockerhub-description@v3
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 }}
short-description: ${{ steps.pluginmeta.outputs.title }}
readme-filepath: ./README.md
repository: ${{ steps.determine.outputs.repo }}
16 changes: 7 additions & 9 deletions dicom_dirSend.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
logger.opt(colors = True)
logger.add(sys.stderr, format=logger_format)

__version__ = '1.0.0'
__version__ = '1.0.2'

DISPLAY_TITLE = r"""
_ _ _ _ _ _____ _
Expand All @@ -38,18 +38,16 @@
""" + "\t\t -- version " + __version__ + " --\n\n"


parser = ArgumentParser(description='!!!CHANGE ME!!! An example ChRIS plugin which '
'counts the number of occurrences of a given '
'word in text files.',
parser = ArgumentParser(description='A ChRIS plugin to send DICOMs to a remote PACS store',
formatter_class=ArgumentDefaultsHelpFormatter)
parser.add_argument('-f', '--fileFilter', default='dcm', type=str,
help='input file filter glob')
parser.add_argument('-n', '--host', default='0.0.0.0', type=str,
help='input file filter glob')
help='Host IP')
parser.add_argument('-p', '--port', default='4242', type=str,
help='input file filter glob')
help='Host port')
parser.add_argument('-a', '--aetTitle', default='CHRISLOCAL', type=str,
help='input file filter glob')
help='AET title')
parser.add_argument('-V', '--version', action='version',
version=f'%(prog)s {__version__}')

Expand Down Expand Up @@ -111,8 +109,8 @@ def main(options: Namespace, inputdir: Path, outputdir: Path):
shell = jobber({'verbosity': 1, 'noJobLogging': True})
for input_file, output_file in mapper:
LOG(f"Sending input file: ---->{input_file.name}<---- to {options.aetTitle}")
str_cmd = (f"storescu "
f"-aet {options.aetTitle}"
str_cmd = (f"storescu"
f" -aet {options.aetTitle}"
f" -aec {options.aetTitle}"
f" {options.host}"
f" {options.port}"
Expand Down

0 comments on commit f481fc9

Please sign in to comment.