From 545c3b4f4a039700c9b10d15daba7e30c30015dc Mon Sep 17 00:00:00 2001 From: David Slusser Date: Tue, 29 Jul 2025 15:59:58 -0700 Subject: [PATCH 1/2] testing workflow --- .../workflows/build_and_publish_docker.yaml | 77 +++++++++++++++++++ src/docker/Dockerfile | 4 + 2 files changed, 81 insertions(+) create mode 100644 .github/workflows/build_and_publish_docker.yaml diff --git a/.github/workflows/build_and_publish_docker.yaml b/.github/workflows/build_and_publish_docker.yaml new file mode 100644 index 0000000..b04b16a --- /dev/null +++ b/.github/workflows/build_and_publish_docker.yaml @@ -0,0 +1,77 @@ +name: Build and Push Docker Image + +on: + release: + types: [created] + workflow_dispatch: + push: + tags: + - '[0-9]+.[0-9]+.[0-9]+-dev' + - '[0-9]+.[0-9]+.[0-9]+-dev.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+-rc' + - '[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+' + - '[0-9]+.[0-9]+.[0-9]+' + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + name: Build and Push Docker Image + runs-on: ubuntu-latest + + permissions: + contents: read + packages: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract tag name + id: vars + run: | + TAG_NAME=${GITHUB_REF#refs/tags/} + echo "tag=${TAG_NAME}" >> $GITHUB_OUTPUT + # Check if it's a release version (not a pre-release) + if [[ "$TAG_NAME" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "latest=true" >> $GITHUB_OUTPUT + else + echo "latest=false" >> $GITHUB_OUTPUT + fi + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: src/docker/Dockerfile + push: true + build-args: | + IMAGE_TAG=${{ steps.vars.outputs.tag }} + tags: | + ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.tag }} + ${{ steps.vars.outputs.latest == 'true' && format('{0}/{1}:latest', env.REGISTRY, env.IMAGE_NAME) || '' }} + labels: | + org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.version=${{ steps.vars.outputs.tag }} + org.opencontainers.image.created=${{ github.event.head_commit.timestamp || github.event.release.published_at || github.event.repository.updated_at }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.title=${{ github.repository }} + + - name: Confirm tags pushed + run: | + echo "Published ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.tag }}" + if [ "${{ steps.vars.outputs.latest }}" = "true" ]; then + echo "Also tagged as :latest" + fi diff --git a/src/docker/Dockerfile b/src/docker/Dockerfile index d7e3c67..8a73246 100644 --- a/src/docker/Dockerfile +++ b/src/docker/Dockerfile @@ -22,6 +22,10 @@ RUN pip install .[docker] # === STAGE 2: Runtime with only necessary files === FROM python:3.12-alpine +ARG IMAGE_TAG=dev +ENV IMAGE_TAG=${IMAGE_TAG} + + ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1 From 6e2267f5c059f17d600c500dcb6d1eefb97da64a Mon Sep 17 00:00:00 2001 From: David Slusser Date: Tue, 29 Jul 2025 16:11:55 -0700 Subject: [PATCH 2/2] testing workflow --- .github/workflows/build_and_publish_docker.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/build_and_publish_docker.yaml b/.github/workflows/build_and_publish_docker.yaml index b04b16a..22ed477 100644 --- a/.github/workflows/build_and_publish_docker.yaml +++ b/.github/workflows/build_and_publish_docker.yaml @@ -43,8 +43,10 @@ jobs: id: vars run: | TAG_NAME=${GITHUB_REF#refs/tags/} + IMAGE_NAME_LOWER=$(echo "${GITHUB_REPOSITORY}" | tr '[:upper:]' '[:lower:]') echo "tag=${TAG_NAME}" >> $GITHUB_OUTPUT - # Check if it's a release version (not a pre-release) + echo "image_name=${IMAGE_NAME_LOWER}" >> $GITHUB_OUTPUT + if [[ "$TAG_NAME" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then echo "latest=true" >> $GITHUB_OUTPUT else @@ -55,15 +57,13 @@ jobs: uses: docker/build-push-action@v5 with: context: . - file: src/docker/Dockerfile + file: ./src/docker/Dockerfile push: true - build-args: | - IMAGE_TAG=${{ steps.vars.outputs.tag }} tags: | - ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.vars.outputs.tag }} - ${{ steps.vars.outputs.latest == 'true' && format('{0}/{1}:latest', env.REGISTRY, env.IMAGE_NAME) || '' }} + ghcr.io/${{ steps.vars.outputs.image_name }}:${{ steps.vars.outputs.tag }} + ${{ steps.vars.outputs.latest == 'true' && format('ghcr.io/{0}:latest', steps.vars.outputs.image_name) || '' }} labels: | - org.opencontainers.image.source=https://github.com/${{ github.repository }} + org.opencontainers.image.source=${{ github.repositoryUrl }} org.opencontainers.image.version=${{ steps.vars.outputs.tag }} org.opencontainers.image.created=${{ github.event.head_commit.timestamp || github.event.release.published_at || github.event.repository.updated_at }} org.opencontainers.image.revision=${{ github.sha }}