Skip to content

Check if image already exists #17

Check if image already exists

Check if image already exists #17

Workflow file for this run

name: Build dev image
on:
push:
workflow_dispatch:
inputs:
# FIXME
build_type:
type: choice
required: true
description: 'Build Type (ignored if using artifacts from prior run)'
default: 'Release'
options:
- 'Release'
- 'Debug'
#cudaq_wheels:
# type: choice
# required: true
# description: 'CUDA-Q wheel source (released version from PyPI or Custom built using .cudaq_version in repo)'
# default: 'Custom'
# options:
# - 'Custom'
# - 'PyPI'
#artifacts_from_run:
# type: string
# description: Optional argument to take artifacts from a prior run of this workflow; facilitates rerunning a failed workflow without re-building the artifacts.
# required: false
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-cudaqx-dev:
name: Build CUDA-QX Dev Image
if: ${{ false && github.repository == 'NVIDIA/cudaqx' }}
strategy:
matrix:
platform: [amd64, arm64]
fail-fast: false
runs-on: linux-${{ matrix.platform }}-cpu8
steps:
- name: Login to GitHub CR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Get code
uses: actions/checkout@v4
with:
set-safe-directory: true
- name: Get required CUDA-Q version
id: get-cudaq-version
uses: ./.github/actions/get-cudaq-version
- name: Get additional metadata
id: get-cudaq-version-short
run: |
shortref=$(echo "${{ steps.get-cudaq-version.outputs.ref }}" | head -c8)
commit_date=$(curl -s "https://api.github.com/repos/NVIDIA/cuda-quantum/commits/${{ steps.get-cudaq-version.outputs.ref }}" | jq -r '.commit.committer.date' | cut -dT -f1)
echo "shortref=$shortref" >> $GITHUB_OUTPUT
echo "commit_date=$commit_date" >> $GITHUB_OUTPUT
- name: Check if image already exists
id: check-image
run: |
IMAGE_TAG="${{ steps.get-cudaq-version-short.outputs.commit_date }}-${{ steps.get-cudaq-version-short.outputs.shortref }}-${{ matrix.platform }}"
CONTAINER_VERSION_METADATA=$(curl -s -L -H "Accept: applicat/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" "https://api.github.com/orgs/NVIDIA/packages/container/cudaqx-dev/versions")
CONTAINER_TAGS=$(echo $CONTAINER_VERSION_METADATA | jq -r '.[] | .metadata.container.tags[]')
if echo "$CONTAINER_TAGS" | grep -qx "$IMAGE_TAG"; then
echo "Image tag $IMAGE_TAG already exists. Skipping build."
echo "IMAGE_EXISTS=true" >> $GITHUB_OUTPUT
else
echo "Image tag $IMAGE_TAG does not exist. Proceeding with build."
echo "IMAGE_EXISTS=false" >> $GITHUB_OUTPUT
fi
- name: Set up context for buildx
if: ${{ steps.check-image.outputs.IMAGE_EXISTS == 'false' }}
run: |
docker context create builder_context
shell: bash --noprofile --norc -euo pipefail {0}
- name: Set up buildx runner
if: ${{ steps.check-image.outputs.IMAGE_EXISTS == 'false' }}
uses: docker/setup-buildx-action@v3
with:
endpoint: builder_context
driver-opts: network=host
- name: Build dev image
if: ${{ steps.check-image.outputs.IMAGE_EXISTS == 'false' }}
uses: docker/build-push-action@v5
with:
file: ./docker/build_env/cudaqx.dev.Dockerfile
tags: |
ghcr.io/nvidia/cudaqx-dev:${{ steps.get-cudaq-version-short.outputs.commit_date }}-${{ steps.get-cudaq-version-short.outputs.shortref }}-${{ matrix.platform }}
ghcr.io/nvidia/cudaqx-dev:${{ steps.get-cudaq-version-short.outputs.shortref }}-${{ matrix.platform }}
ghcr.io/nvidia/cudaqx-dev:latest-${{ matrix.platform }}
platforms: linux/${{ matrix.platform }}
push: true
build-cudaqx-pydev:
name: Build CUDA-QX Python Dev Image
if: ${{ false && github.repository == 'NVIDIA/cudaqx' }}
strategy:
matrix:
python: ['3.10', '3.11', '3.12']
platform: ['amd64', 'arm64']
fail-fast: false
runs-on: linux-${{ matrix.platform }}-cpu8
steps:
- name: Login to GitHub CR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Get code
uses: actions/checkout@v4
with:
set-safe-directory: true
- name: Get required CUDA-Q version
id: get-cudaq-version
uses: ./.github/actions/get-cudaq-version
- name: Get additional metadata
id: get-cudaq-version-short
run: |
shortref=$(echo "${{ steps.get-cudaq-version.outputs.ref }}" | head -c8)
commit_date=$(curl -s "https://api.github.com/repos/NVIDIA/cuda-quantum/commits/${{ steps.get-cudaq-version.outputs.ref }}" | jq -r '.commit.committer.date' | cut -dT -f1)
echo "shortref=$shortref" >> $GITHUB_OUTPUT
echo "commit_date=$commit_date" >> $GITHUB_OUTPUT
- name: Check if image already exists
id: check-image
run: |
IMAGE_TAG="${{ steps.get-cudaq-version-short.outputs.commit_date }}-${{ steps.get-cudaq-version-short.outputs.shortref }}-${{ matrix.platform }}"
CONTAINER_VERSION_METADATA=$(curl -s -L -H "Accept: applicat/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" "https://api.github.com/orgs/NVIDIA/packages/container/cudaqx-dev/versions")
CONTAINER_TAGS=$(echo $CONTAINER_VERSION_METADATA | jq -r '.[] | .metadata.container.tags[]')
if echo "$CONTAINER_TAGS" | grep -qx "$IMAGE_TAG"; then
echo "Image tag $IMAGE_TAG already exists. Skipping build."
echo "IMAGE_EXISTS=true" >> $GITHUB_OUTPUT
else
echo "Image tag $IMAGE_TAG does not exist. Proceeding with build."
echo "IMAGE_EXISTS=false" >> $GITHUB_OUTPUT
fi
- name: Set up context for buildx
if: ${{ steps.check-image.outputs.IMAGE_EXISTS == 'false' }}
run: |
docker context create builder_context
shell: bash --noprofile --norc -euo pipefail {0}
- name: Set up buildx runner
if: ${{ steps.check-image.outputs.IMAGE_EXISTS == 'false' }}
uses: docker/setup-buildx-action@v3
with:
endpoint: builder_context
driver-opts: network=host
- name: Build pydev image
if: ${{ steps.check-image.outputs.IMAGE_EXISTS == 'false' }}
uses: docker/build-push-action@v5
with:
file: ./docker/build_env/cudaqx.wheel.Dockerfile
build-args: |
base_image=ghcr.io/nvidia/cuda-quantum-devdeps:manylinux-${{ matrix.platform }}-cu12.0-gcc11-main
python_version=${{ matrix.python }}
tags: |
ghcr.io/nvidia/cudaqx-dev:${{ steps.get-cudaq-version-short.outputs.commit_date }}-${{ steps.get-cudaq-version-short.outputs.shortref }}-py${{ matrix.python }}-${{ matrix.platform }}
ghcr.io/nvidia/cudaqx-dev:${{ steps.get-cudaq-version-short.outputs.shortref }}-py${{ matrix.python }}-${{ matrix.platform }}
ghcr.io/nvidia/cudaqx-dev:latest-py${{ matrix.python }}-${{ matrix.platform }}
platforms: linux/${{ matrix.platform }}
push: true
cleanup:
name: Cleanup
needs: [build-cudaqx-dev, build-cudaqx-pydev]
runs-on: ubuntu-latest
if: ${{ github.repository == 'NVIDIA/cudaqx' }}
steps:
- name: Delete untagged images
uses: actions/delete-package-versions@v5
with:
package-name: cudaqx-dev
package-type: 'container'
min-versions-to-keep: 0
delete-only-untagged-versions: 'true'
token: ${{ github.token }}