diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 87415f1..084c90f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,7 +4,7 @@ # - 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 +# upload plugin description to https://cube.chrisproject.org/api/v1/ name: build @@ -20,7 +20,7 @@ jobs: test: name: Unit tests if: False - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 - uses: docker/setup-buildx-action@v3 @@ -43,7 +43,7 @@ jobs: name: Build if: github.event_name == 'push' || github.event_name == 'release' # needs: [ test ] # uncomment to require passing tests - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Stop docker @@ -72,105 +72,65 @@ jobs: - name: Get git tag id: git_info if: startsWith(github.ref, 'refs/tags/') - run: echo "tag=${GITHUB_REF##*/}" >> $GITHUB_OUTPUT - - name: Get project info + run: echo "::set-output name=tag::${GITHUB_REF##*/}" + - name: Decide image tag name id: determine env: - git_tag: ${{ steps.git_info.outputs.tag }} + git_tag: ${{ steps.git_info.outputs.tag }} run: | repo="${GITHUB_REPOSITORY,,}" # to lower case # if build triggered by tag, use tag name tag="${git_tag:-latest}" - - # if tag is a version number prefixed by 'v', remove the 'v' - if [[ "$tag" =~ ^v[0-9].* ]]; then - tag="${tag:1}" - fi - dock_image=$repo:$tag - echo $dock_image - echo "dock_image=$dock_image" >> $GITHUB_OUTPUT - echo "repo=$repo" >> $GITHUB_OUTPUT + echo $dock_image + echo "::set-output name=dock_image::$dock_image" + echo "::set-output name=repo::$repo" - - uses: actions/checkout@v4 - # 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 + - uses: actions/checkout@v2 + + # QEMU is for emulating non-x86_64 platforms + - uses: docker/setup-qemu-action@v1 + # buildx is the next-generation docker image builder + - uses: docker/setup-buildx-action@v1 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 + # save some time during rebuilds + - name: Cache Docker layers + uses: actions/cache@v2 with: - context: . - file: ./Dockerfile - tags: localhost/${{ steps.determine.outputs.dock_image }} - load: true - 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 - # which are expected. File contents are not compared. - - name: Run examples - id: run_examples - run: | - if ! [ -d 'examples/incoming/' ] || ! [ -d 'examples/outgoing/' ]; then - echo "No examples." - exit 0 - fi - - 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)" \ - -v "$PWD/examples/incoming:/incoming:ro" \ - -v "$output_dir:/outgoing:rw" \ - $dock_image $cmd /incoming /outgoing - - for expected_file in $(find examples/outgoing -type f); do - fname="${expected_file##*/}" - out_path="$output_dir/$fname" - printf "Checking output %s exists..." "$out_path" - if [ -f "$out_path" ]; then - echo "ok" - else - echo "not found" - exit 1 - fi - done + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- - name: Login to DockerHub id: dockerhub_login - uses: docker/login-action@v2 + uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Login to GitHub Container Registry - uses: docker/login-action@v2 + uses: docker/login-action@v1 with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} + 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@v2 + id: docker_build with: - context: . - file: ./Dockerfile - 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: true - cache-from: type=local,src=/tmp/.buildx-cache - cache-to: type=local,dest=/tmp/.buildx-cache + context: . + file: ./Dockerfile + tags: | + ${{ steps.determine.outputs.dock_image }} + localhost:5000/${{ steps.determine.outputs.dock_image }} + ghcr.io/${{ steps.determine.outputs.dock_image }} + platforms: linux/amd64 + push: true + cache-from: type=local,src=/tmp/.buildx-cache + cache-to: type=local,dest=/tmp/.buildx-cache - name: Get plugin meta id: pluginmeta @@ -180,29 +140,27 @@ jobs: docker pull localhost:5000/$dock_image docker tag localhost:5000/$dock_image $dock_image script=$(docker inspect --format '{{ (index .Config.Cmd 0) }}' $dock_image) - docker run --rm $dock_image $script --json > /tmp/description.json - jq <<< "$json" # pretty print in log - - echo "::set-output name=json::$json" - echo "::set-output name=title::$(jq -r '.title' <<< "$json")" + docker run --rm $dock_image $script --json \ + | jq '. += {"name":"pl-lld_inference", "dock_image": "'$dock_image'", "public_repo": "'${{ github.server_url }}/${{ github.repository }}'" }' \ + > /tmp/description.json + + - name: Update DockerHub description + uses: peter-evans/dockerhub-description@v2 + continue-on-error: true # it is not crucial that this works + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + short-description: ${{ steps.pluginmeta.outputs.title }} + readme-filepath: ./README.rst + repository: ${{ steps.determine.outputs.repo }} - name: Upload ChRIS Plugin id: upload if: github.ref_type == 'tag' - uses: FNNDSC/upload-chris-plugin@v1 - with: - description_json: ${{ steps.pluginmeta.outputs.json }} - username: ${{ secrets.CHRISPROJECT_USERNAME }} - password: ${{ secrets.CHRISPROJECT_PASSWORD }} - chris_url: https://cube.chrisproject.org/api/v1/ - compute_names: NERC - - - 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 + uses: FNNDSC/upload-chris-plugin@main with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} - short-description: ${{ steps.upload.outputs.title }} - readme-filepath: ./README.md \ No newline at end of file + description_file: /tmp/description.json + username: ${{ secrets.CHRISPROJECT_USERNAME }} + password: ${{ secrets.CHRISPROJECT_PASSWORD }} + chris_url: https://cube.chrisproject.org/api/v1/ + compute_names: NERC \ No newline at end of file diff --git a/setup.py b/setup.py index 18c03c9..cc96c69 100755 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ setup( name = 'lld_inference', - version = '2.2.14', + version = '2.2.15', description = 'An app to run LLD inference', author = 'FNNDSC', author_email = 'dev@babyMRI.org',