Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development #127

Merged
merged 13 commits into from
Mar 29, 2024
278 changes: 90 additions & 188 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
# os: [ubuntu-latest]
# python-version: ["3.12"]
os: [ubuntu-latest, macos-latest, macos-14]
python-version: ["3.12", "3.11"]
python-version: ["3.12", "3.11", "3.10"]
# include:
# - os: ubuntu-latest
# python-version: "3.9"

steps:
- uses: actions/checkout@v3
Expand Down Expand Up @@ -122,12 +123,6 @@ jobs:
with:
fetch-depth: 0

- name: Install poetry
uses: snok/install-poetry@v1

- name: Install package
run: poetry install

# This action uses Python Semantic Release v8
# What this action does:
# - Determines the next version number based on the commit history
Expand All @@ -140,154 +135,97 @@ jobs:
with:
github_token: ${{ secrets.GITHUB_TOKEN }}

- name: Test Outputs of semantic release step
run: |
echo "${{ steps.release.outputs.released }}"
echo "${{ steps.release.outputs.version }}"
echo "${{ steps.release.outputs.tag }}"

- name: Install packaging-related tool
run:
python3 -m pip install build twine

# Build Package step:
# After semantic release, we should have a new tag if the commit history
# has been updated. If there isnt a new tag, then we dont need to build
# a new package. If there is a new tag, then we need to build a new package
# and publish it to PyPI
- name: Build package
if: steps.release.outputs.released == 'true'
run: |
poetry version ${{ steps.release.outputs.version }}
python -m build --sdist --wheel --outdir dist/ .

- name: Publish package distributions to PyPI
if: steps.release.outputs.released == 'true'
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}

- name: Set up QEMU
if: steps.release.outputs.released == 'true'
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
if: steps.release.outputs.released == 'true'
uses: docker/setup-buildx-action@v3

- name: Login to Docker Hub
if: steps.release.outputs.released == 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Login to the GitHub Container Registry
if: steps.release.outputs.released == 'true'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v3
with:
images: |
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ steps.release.outputs.tag }}
ghcr.io/${{ github.repository }}/nbiatoolkit:${{ steps.release.outputs.tag }}

- name: Build
if: steps.release.outputs.released == 'true'
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ steps.release.outputs.tag }}
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest
ghcr.io/${{ github.repository }}/nbiatoolkit:${{ steps.release.outputs.tag }}
ghcr.io/${{ github.repository }}/nbiatoolkit:latest
labels: ${{ steps.meta.outputs.labels }}

test_install_withPyPi:
Publish-To-PyPi:
needs: Continuous-Deployment
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, macos-14]
python-version: ["3.12", "3.11", "3.10"]

if: needs.Continuous-Deployment.outputs.released == 'true'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Checkout code
uses: actions/checkout@v3

- name: Set up Python ${{ matrix.python-version }}
- name: Set up Python 3.12
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
python-version: 3.12

- name: Install using PyPi
run: |
pip install nbiatoolkit;
NBIAToolkit
- name: Install Package-Building Tool
run:
python3 -m pip install build twine

- name: Build package
run:
python3 -m build --sdist --wheel --outdir dist/

test_image_with_new_tag:
- name: Publish to PyPI
uses: pypa/gh-action-pypi-publish@release/v1
with:
verbose: true
user: __token__
password: ${{ secrets.PYPI_API_TOKEN }}

Build-Docker-Images:
needs: Continuous-Deployment
if: needs.Continuous-Deployment.outputs.released == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Test Image With new Tag
run: |
# test image with latest tag
docker run --rm \
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }} \
NBIAToolkit
- name: Set up QEMU
if: steps.release.outputs.released == 'true'
uses: docker/setup-qemu-action@v3

- name: Set up Docker Buildx
if: steps.release.outputs.released == 'true'
uses: docker/setup-buildx-action@v3

test_image_with_latest_tag:
needs: Continuous-Deployment
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2

- name: Test Image with "latest" Tag
run: |
docker run --rm \
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest \
NBIAToolkit
- name: Login to Docker Hub
if: steps.release.outputs.released == 'true'
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

Update-README:
needs: Continuous-Deployment
runs-on: ubuntu-latest
# if: jobs.Continuous-Deployment.outputs.released == 'true'
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Login to the GitHub Container Registry
if: steps.release.outputs.released == 'true'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Get Current branch
run: |
echo "Current branch is: ${{ github.ref }}"
echo "Current branch is: ${{ github.head_ref }}"
echo "Current branch is: ${{ github.base_ref }}"
echo "Current branch is: ${{ github.event_name }}"
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v3
with:
images: |
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }}
ghcr.io/${{ github.repository }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }}

# if main, then git pull main
if [ "${{ github.ref }}" == "refs/heads/main" ]; then
git pull origin main
fi
- name: Build and push Docker images
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
file: ./Dockerfile
push: true
tags: |
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }}
${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:latest
ghcr.io/${{ github.repository }}/nbiatoolkit:${{ needs.Continuous-Deployment.outputs.tag }}
ghcr.io/${{ github.repository }}/nbiatoolkit:latest
labels: ${{ steps.meta.outputs.labels }}

Test-PyPi-Install:
needs: Publish-To-PyPi
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, macos-14]
python-version: ["3.12", "3.11", "3.10"]

# fix diverged branch
git fetch origin ${{ github.head_ref }}
git checkout ${{ github.head_ref }}
steps:
- uses: actions/checkout@v3

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
Expand All @@ -296,57 +234,21 @@ jobs:

- name: Install using PyPi
run: |
# update pip
pip install .
pip install nbiatoolkit;
NBIAToolkit

- name: Update README code block
run: |
awk '/``` bash NBIAToolkit-Output/ {
print "``` bash NBIAToolkit-Output";
print "> NBIAToolkit --version";
system("NBIAToolkit --version");
f=1;
next
} f && /```/ {
print "```";
f=0;
next
} !f' README.md > temp && mv temp README.md

- name: Commit and push changes
Test-Docker-Image:
needs: Build-Docker-Images
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest]
docker_tag: ["latest", "${{ needs.Continuous-Deployment.outputs.tag }}"]

steps:
- uses: actions/checkout@v3

- name: Install using Docker
run: |
LATEST_TAG=$(curl -s \
"https://api.github.com/repos/${{ github.repository }}/releases/latest" \
| jq -r .tag_name | sed 's/^v//')
echo "LATEST_TAG=${LATEST_TAG}"
# Check for changes
if [[ $(git status --porcelain) ]]; then
# Changes are present
echo "Changes found. Committing and pushing..."

git config --global user.name 'jjjermiah'
git config --global user.email 'jjjermiah@users.noreply.github.com'

# Add all changes
git add .

# Commit with a timestamp
git commit -m "chore: Update README: $LATEST_TAG"

# Push changes to the remote repository
# if github.head_ref is not null
# then push to the branch
# else push to the base branch
if [ -n "${{ github.head_ref }}" ]; then
git push origin HEAD:${{ github.head_ref }}
else
git push origin HEAD:${{ github.ref }}
fi


echo "Changes committed and pushed successfully."
else
# No changes
echo "No changes found. Nothing to commit or push."
fi
docker pull ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ matrix.docker_tag }};
docker run --rm ${{ secrets.DOCKERHUB_USERNAME }}/nbiatoolkit:${{ matrix.docker_tag }} NBIAToolkit
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,11 @@
![GitHub repo size](https://img.shields.io/github/repo-size/jjjermiah/nbia-toolkit)
[![Docker Pulls](https://img.shields.io/docker/pulls/jjjermiah/nbiatoolkit)](https://hub.docker.com/r/jjjermiah/nbiatoolkit)

![GitHub milestone details](https://img.shields.io/github/milestones/progress-percent/jjjermiah/nbia-toolkit/1?style=flat-square&label=1.0.0%20Stable%20Release%20Milestone&link=https%3A%2F%2Fgithub.com%2Fjjjermiah%2Fnbia-toolkit%2Fmilestone%2F1)![GitHub milestone details](https://img.shields.io/github/milestones/progress/jjjermiah/nbia-toolkit/1?style=flat-square&label=%20&link=https%3A%2F%2Fgithub.com%2Fjjjermiah%2Fnbia-toolkit%2Fmilestone%2F1)
[![GitHub issues](https://img.shields.io/github/issues/jjjermiah/nbia-toolkit)](https://github.com/jjjermiah/nbia-toolkit/issues)
![GitHub last commit](https://img.shields.io/github/last-commit/jjjermiah/nbia-toolkit)

## Table of Contents

- [Features](#features)
- [Installation](#installation)
- [Python Usage](#python-usage)
Expand All @@ -43,7 +43,7 @@
- ***Validate doownloads with MD5 checksums*** for downloaded images
- **Auto-sort** DICOM files using a user-defined pattern of DICOM tags with specialized ***DICOMSorter class***

![SequenceDiagram](https://www.mermaidchart.com/raw/ce7f489f-bf58-4827-aedb-e379ed7bffd3?theme=dark&version=v0.1&format=svg)
See [Developer Notes](devnotes/README.md) for more details on the features and the development process.

## Installation

Expand Down Expand Up @@ -93,10 +93,10 @@ For quick access to the NBIA, the toolkit also provides a command line interface
/ |/ / __ |/ // /| | / / / __ \/ __ \/ / //_/ / __/
/ /| / /_/ // // ___ |/ / / /_/ / /_/ / / ,< / / /_
/_/ |_/_____/___/_/ |_/_/ \____/\____/_/_/|_/_/\__/

Version: 1.0.1

Available CLI tools:
Available CLI tools:

getCollections [-h] [-u USERNAME] [-pw PASSWORD] [-p PREFIX]
[-o OUTPUTFILE] [--version]
Expand Down
14 changes: 14 additions & 0 deletions devnotes/CI-CD_2024-03-17.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Continuous Integration and Continuous Deployment Diagram

```mermaid
graph LR
A[Push or Pull Request\nto main] --> B[Unit-Tests]
B --> C[Codecov]
B --> D[Continuous-Deployment]
D --> E[Publish-To-PyPi]
D --> F[Build-Docker-Images]
E --> G[Test-PyPi-Install]
F --> H[Test-Docker-Image]
A --> I[Build-Documentation]

```
4 changes: 4 additions & 0 deletions devnotes/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Developer Notes

[CI-CD](CI-CD_2024-03-17.md)
[Sequence Diagram](Sequence-diagram_2024-03-17.md)
Loading
Loading