From 1df7ce51ab1ab0a7a275ceef097d9375dc9fffbd Mon Sep 17 00:00:00 2001 From: Eric Deandrea Date: Thu, 21 Dec 2023 09:45:46 -0500 Subject: [PATCH] Create and push both openai and azure-openai images to quay --- .../workflows/build-push-container-images.yml | 343 ++++++++++++++---- .github/workflows/simple-build-test.yml | 70 ++-- 2 files changed, 298 insertions(+), 115 deletions(-) diff --git a/.github/workflows/build-push-container-images.yml b/.github/workflows/build-push-container-images.yml index f9effc416e..eb55e6e774 100644 --- a/.github/workflows/build-push-container-images.yml +++ b/.github/workflows/build-push-container-images.yml @@ -28,17 +28,18 @@ jobs: java: - '17' project: - - event-statistics - - rest-fights - - rest-heroes - - rest-villains - - rest-narration - - grpc-locations - - ui-super-heroes + - { name: event-statistics } + - { name: rest-fights } + - { name: rest-heroes } + - { name: rest-villains } + - { name: rest-narration, openai-type: openai } + - { name: rest-narration, openai-type: azure-openai } + - { name: grpc-locations } + - { name: ui-super-heroes } arch: - amd64 - arm64 - name: "Build JVM images (${{ matrix.arch }}-${{ matrix.project }}-java${{ matrix.java }})" + name: "Build JVM images (${{ matrix.arch }}-${{ matrix.project.name }}-java${{ matrix.java }}-${{ matrix.project.openai-type }})" steps: - name: Calculate Branch (workflow_run event) if: github.event_name == 'workflow_run' @@ -65,7 +66,7 @@ jobs: cache: maven - name: Create env vars - working-directory: ${{ matrix.project }} + working-directory: ${{ matrix.project.name }} run: | echo "QUARKUS_VERSION=$(./mvnw help:evaluate -Dexpression=quarkus.platform.version -q -DforceStdout)" >> $GITHUB_ENV && echo "APP_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV && @@ -75,10 +76,21 @@ jobs: echo "JVM_DOCKERFILE=Dockerfile.jvm${{ matrix.java }}" >> "$GITHUB_ENV" fi + - name: Create OpenAI env vars + if: matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "QUARKUS_PROFILE=${{ matrix.project.openai-type }}" >> $GITHUB_ENV + - name: Create container tags - working-directory: ${{ matrix.project }} + if: matrix.project.openai-type == '' + working-directory: ${{ matrix.project.name }} run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-java${{ matrix.java }}" >> $GITHUB_ENV + - name: Create container tags (with OpenAI flavors) + if: matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-java${{ matrix.java }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + - name: Set up QEMU if: matrix.arch == 'arm64' uses: docker/setup-qemu-action@v3 @@ -90,8 +102,8 @@ jobs: with: install: true - - name: Build JVM image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) - working-directory: ${{ matrix.project }} + - name: Build JVM image (${{ matrix.project.name }}-java${{ matrix.java }}-${{ matrix.arch }}-${{ matrix.project.openai-type }}) + working-directory: ${{ matrix.project.name }} run: | ./mvnw -B clean package -DskipTests \ -Dmaven.compiler.release=${{ matrix.java }} \ @@ -102,10 +114,10 @@ jobs: -Dquarkus.docker.dockerfile-jvm-path=src/main/docker/${{ env.JVM_DOCKERFILE }} \ -Dquarkus.docker.buildx.platform=linux/${{ matrix.arch }} - - name: Save JVM Image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) + - name: Save JVM Image (${{ matrix.project.name }}-java${{ matrix.java }}-${{ matrix.arch }}-${{ matrix.project.openai-type }}) uses: ishworkh/docker-image-artifact-upload@v1 with: - image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}" + image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}" build-native-images: if: ((github.event_name == 'workflow_dispatch') || ((github.event_name == 'workflow_run') && ((github.event.workflow_run.event == 'push') || (github.event.workflow_run.event == 'workflow_dispatch')) && (github.event.workflow_run.conclusion == 'success'))) && ((github.repository == 'quarkusio/quarkus-super-heroes') && ((github.event.workflow_run.head_branch == 'main'))) @@ -116,17 +128,18 @@ jobs: java: - '17' project: - - event-statistics - - rest-fights - - rest-heroes - - rest-villains - - rest-narration - - grpc-locations - - ui-super-heroes + - { name: event-statistics } + - { name: rest-fights } + - { name: rest-heroes } + - { name: rest-villains } + - { name: rest-narration, openai-type: openai } + - { name: rest-narration, openai-type: azure-openai } + - { name: grpc-locations } + - { name: ui-super-heroes } arch: - amd64 - arm64 - name: "Build Native images (${{ matrix.arch }}-${{ matrix.project }}-java${{ matrix.java }})" + name: "Build Native images (${{ matrix.arch }}-${{ matrix.project.name }}-java${{ matrix.java }}-${{ matrix.project.openai-type }})" steps: - name: Calculate Branch (workflow_run event) if: github.event_name == 'workflow_run' @@ -153,15 +166,26 @@ jobs: cache: maven - name: Create env vars - working-directory: ${{ matrix.project }} + working-directory: ${{ matrix.project.name }} run: | echo "QUARKUS_VERSION=$(./mvnw help:evaluate -Dexpression=quarkus.platform.version -q -DforceStdout)" >> $GITHUB_ENV && \ echo "APP_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV + - name: Create OpenAI env vars + if: matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "QUARKUS_PROFILE=${{ matrix.project.openai-type }}" >> $GITHUB_ENV + - name: Create container tags - working-directory: ${{ matrix.project }} + if: matrix.project.openai-type == '' + working-directory: ${{ matrix.project.name }} run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-native" >> $GITHUB_ENV + - name: Create container tags (with OpenAI flavors) + if: matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-native-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + - name: Set up QEMU if: matrix.arch == 'arm64' uses: docker/setup-qemu-action@v3 @@ -173,8 +197,8 @@ jobs: with: install: true - - name: Build native image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) - working-directory: ${{ matrix.project }} + - name: Build native image (${{ matrix.project.name }}-java${{ matrix.java }}-${{ matrix.arch }}-${{ matrix.project.openai-type }}) + working-directory: ${{ matrix.project.name }} run: | ./mvnw -B clean package -DskipTests -Pnative \ -Dmaven.compiler.release=${{ matrix.java }} \ @@ -187,10 +211,10 @@ jobs: -Dquarkus.container-image.tag=${{ env.CONTAINER_TAG }}-${{ matrix.arch }} \ -Dquarkus.docker.buildx.platform=linux/${{ matrix.arch }} - - name: Save native Image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) + - name: Save native Image (${{ matrix.project.name }}-java${{ matrix.java }}-${{ matrix.arch }}-${{ matrix.project.openai-type }}) uses: ishworkh/docker-image-artifact-upload@v1 with: - image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}" + image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}" push-app-images: if: ((github.event_name == 'workflow_dispatch') || ((github.event_name == 'workflow_run') && ((github.event.workflow_run.event == 'push') || (github.event.workflow_run.event == 'workflow_dispatch')) && (github.event.workflow_run.conclusion == 'success'))) && ((github.repository == 'quarkusio/quarkus-super-heroes') && ((github.event.workflow_run.head_branch == 'main'))) @@ -206,17 +230,18 @@ jobs: - "" - "native-" project: - - event-statistics - - rest-fights - - rest-heroes - - rest-villains - - rest-narration - - grpc-locations - - ui-super-heroes + - { name: event-statistics } + - { name: rest-fights } + - { name: rest-heroes } + - { name: rest-villains } + - { name: rest-narration, openai-type: openai } + - { name: rest-narration, openai-type: azure-openai } + - { name: grpc-locations } + - { name: ui-super-heroes } arch: - amd64 - arm64 - name: "Push app images (${{ matrix.arch }}-${{ matrix.project }}-${{ matrix.kind }}java${{ matrix.java }})" + name: "Push app images (${{ matrix.arch }}-${{ matrix.project.name }}-${{ matrix.kind }}java${{ matrix.java }}-${{ matrix.project.openai-type }})" steps: - name: Calculate Branch (workflow_run event) if: github.event_name == 'workflow_run' @@ -243,45 +268,75 @@ jobs: cache: maven - name: Create env vars - working-directory: ${{ matrix.project }} + working-directory: ${{ matrix.project.name }} run: | echo "QUARKUS_VERSION=$(./mvnw help:evaluate -Dexpression=quarkus.platform.version -q -DforceStdout)" >> $GITHUB_ENV && echo "APP_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV - name: Create CONTAINER_TAG (JVM) - if: matrix.kind == '' - working-directory: ${{ matrix.project }} + if: (matrix.kind == '') && (matrix.project.openai-type == '') + working-directory: ${{ matrix.project.name }} run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-${{ matrix.kind }}java${{ matrix.java }}" >> $GITHUB_ENV - name: Create CONTAINER_TAG (native) - if: matrix.kind == 'native-' - working-directory: ${{ matrix.project }} + if: (matrix.kind == 'native-') && (matrix.project.openai-type == '') + working-directory: ${{ matrix.project.name }} run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-native" >> $GITHUB_ENV + - name: Create CONTAINER_TAG (JVM with OpenAI flavors) + if: (matrix.kind == '') && matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-${{ matrix.kind }}java${{ matrix.java }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + + - name: Create CONTAINER_TAG (native with OpenAI flavors) + if: (matrix.kind == 'native-') && matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-native-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + - name: Create ADDITIONAL_TAG (JVM - main branch) if: (env.BRANCH == 'main') && (matrix.kind == '') - working-directory: ${{ matrix.project }} - run: echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}" >> $GITHUB_ENV + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi - name: Create ADDITIONAL_TAG (JVM - other branch) if: (env.BRANCH != 'main') && (matrix.kind == '') - working-directory: ${{ matrix.project }} - run: echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi - name: Create ADDITIONAL_TAG (Native - main branch) if: (env.BRANCH == 'main') && (matrix.kind == 'native-') - working-directory: ${{ matrix.project }} - run: echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}" >> $GITHUB_ENV + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi - name: Create ADDITIONAL_TAG (Native - other branch) if: (env.BRANCH != 'main') && (matrix.kind == 'native-') - working-directory: ${{ matrix.project }} - run: echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi - - name: Get saved images (${{ matrix.project }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}) + - name: Get saved images (${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}) uses: ishworkh/docker-image-artifact-download@v1 with: - image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}" + image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }}" - name: Login to quay uses: docker/login-action@v3 @@ -291,12 +346,12 @@ jobs: password: ${{ secrets.QUAY_REPO_TOKEN }} - name: Tag image - working-directory: ${{ matrix.project }} - run: "docker tag ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }} ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.ADDITIONAL_TAG }}-${{ matrix.arch }}" + working-directory: ${{ matrix.project.name }} + run: "docker tag ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-${{ matrix.arch }} ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.ADDITIONAL_TAG }}-${{ matrix.arch }}" - name: Push images - working-directory: ${{ matrix.project }} - run: "docker push -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}" + working-directory: ${{ matrix.project.name }} + run: "docker push -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}" create-app-multiarch-manifests: if: ((github.event_name == 'workflow_dispatch') || ((github.event_name == 'workflow_run') && ((github.event.workflow_run.event == 'push') || (github.event.workflow_run.event == 'workflow_dispatch')) && (github.event.workflow_run.conclusion == 'success'))) && ((github.repository == 'quarkusio/quarkus-super-heroes') && ((github.event.workflow_run.head_branch == 'main'))) @@ -310,16 +365,141 @@ jobs: - "" - "native-" project: - - event-statistics - - rest-fights - - rest-heroes - - rest-villains + - { name: event-statistics } + - { name: rest-fights } + - { name: rest-heroes } + - { name: rest-villains } + - { name: rest-narration, openai-type: openai } + - { name: rest-narration, openai-type: azure-openai } + - { name: grpc-locations } + - { name: ui-super-heroes } + name: Create app multiarch manifests (${{ matrix.project.name }}-${{ matrix.kind }}java${{ matrix.java }}-${{ matrix.project.openai-type }}) + steps: + - name: Calculate Branch (workflow_run) + if: github.event_name == 'workflow_run' + run: | + echo "REF=${{ github.event.workflow_run.head_commit.id }}" >> $GITHUB_ENV + echo "BRANCH=${{ github.event.workflow_run.head_branch }}" >> $GITHUB_ENV + + - name: Calculate Branch (workflow_dispatch event) + if: github.event_name == 'workflow_dispatch' + run: | + echo "REF=${{ github.sha }}" >> $GITHUB_ENV + echo "BRANCH=${{ github.ref_name }}" >> $GITHUB_ENV + + - name: Checkout from ${{ env.REF }} + uses: actions/checkout@v4 + with: + ref: ${{ env.REF }} + + - name: Setup Java + uses: actions/setup-java@v4 + with: + java-version: ${{ matrix.java }} + distribution: temurin + cache: maven + + - name: Create env vars + working-directory: ${{ matrix.project.name }} + run: | + echo "QUARKUS_VERSION=$(./mvnw help:evaluate -Dexpression=quarkus.platform.version -q -DforceStdout)" >> $GITHUB_ENV && + echo "APP_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV + + - name: Create CONTAINER_TAG (JVM) + if: (matrix.kind == '') && (matrix.project.openai-type == '') + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-${{ matrix.kind }}java${{ matrix.java }}" >> $GITHUB_ENV + + - name: Create CONTAINER_TAG (native) + if: (matrix.kind == 'native-') && (matrix.project.openai-type == '') + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-native" >> $GITHUB_ENV + + - name: Create CONTAINER_TAG (JVM with OpenAI flavors) + if: (matrix.kind == '') && matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-${{ matrix.kind }}java${{ matrix.java }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + + - name: Create CONTAINER_TAG (native with OpenAI flavors) + if: (matrix.kind == 'native-') && matrix.project.openai-type + working-directory: ${{ matrix.project.name }} + run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-native-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + + - name: Create ADDITIONAL_TAG (JVM - main branch) + if: (env.BRANCH == 'main') && (matrix.kind == '') + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi + + - name: Create ADDITIONAL_TAG (JVM - other branch) + if: (env.BRANCH != 'main') && (matrix.kind == '') + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi + + - name: Create ADDITIONAL_TAG (Native - main branch) + if: (env.BRANCH == 'main') && (matrix.kind == 'native-') + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi + + - name: Create ADDITIONAL_TAG (Native - other branch) + if: (env.BRANCH != 'main') && (matrix.kind == 'native-') + working-directory: ${{ matrix.project.name }} + run: | + if [[ ${{ matrix.project.openai-type }} == '' ]]; then + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + else + echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.project.openai-type }}" >> $GITHUB_ENV + fi + + - name: Login to quay + uses: docker/login-action@v3 + with: + registry: quay.io + username: ${{ secrets.QUAY_REPO_USERNAME }} + password: ${{ secrets.QUAY_REPO_TOKEN }} + + - name: Create and push multi-arch JVM manifests + shell: bash + run: | + docker manifest create ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }} \ + -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-amd64 \ + -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }}-arm64 + docker manifest push ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.CONTAINER_TAG }} + docker manifest create ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.ADDITIONAL_TAG }} \ + -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.ADDITIONAL_TAG }}-amd64 \ + -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.ADDITIONAL_TAG }}-arm64 + docker manifest push ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project.name }}:${{ env.ADDITIONAL_TAG }} + + tag-openai-app-multiarch-manifests: + if: ((github.event_name == 'workflow_run') && ((github.event.workflow_run.event == 'push') || (github.event.workflow_run.event == 'workflow_dispatch')) && (github.event.workflow_run.conclusion == 'success') && (github.repository == 'quarkusio/quarkus-super-heroes')) && ((github.event.workflow_run.head_branch == 'main')) + needs: create-app-multiarch-manifests + runs-on: ubuntu-latest + strategy: + matrix: + java: + - '17' + kind: + - "" + - "native-" + project: - rest-narration - - grpc-locations - - ui-super-heroes - name: Create app multiarch manifests (${{ matrix.project }}-${{ matrix.kind }}java${{ matrix.java }}) + name: Tag OpenAI app multiarch manifests (${{ matrix.project }}-${{ matrix.kind }}java${{ matrix.java }}) steps: - - name: Calculate Branch (workflow_run event) + - name: Calculate Branch (workflow_run) if: github.event_name == 'workflow_run' run: | echo "REF=${{ github.event.workflow_run.head_commit.id }}" >> $GITHUB_ENV @@ -349,7 +529,7 @@ jobs: echo "QUARKUS_VERSION=$(./mvnw help:evaluate -Dexpression=quarkus.platform.version -q -DforceStdout)" >> $GITHUB_ENV && echo "APP_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV - - name: Create CONTAINER_TAG (JVM) + - name: Create Container tags (JVM) if: matrix.kind == '' working-directory: ${{ matrix.project }} run: echo "CONTAINER_TAG=${{ env.APP_VERSION }}-quarkus-${{ env.QUARKUS_VERSION }}-${{ matrix.kind }}java${{ matrix.java }}" >> $GITHUB_ENV @@ -379,6 +559,11 @@ jobs: working-directory: ${{ matrix.project }} run: echo "ADDITIONAL_TAG=${{ matrix.kind }}${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + install: true + - name: Login to quay uses: docker/login-action@v3 with: @@ -386,22 +571,27 @@ jobs: username: ${{ secrets.QUAY_REPO_USERNAME }} password: ${{ secrets.QUAY_REPO_TOKEN }} - - name: Create and push multi-arch JVM manifests + - name: Tag images + working-directory: ${{ matrix.project }} shell: bash run: | - docker manifest create ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }} \ - -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}-amd64 \ - -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}-arm64 - docker manifest push ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }} - docker manifest create ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.ADDITIONAL_TAG }} \ - -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.ADDITIONAL_TAG }}-amd64 \ - -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.ADDITIONAL_TAG }}-arm64 - docker manifest push ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.ADDITIONAL_TAG }} + openai_container_tag="${{ env.CONTAINER_TAG }}-openai" + openai_additional_tag="${{ env.ADDITIONAL_TAG }}-openai" + + for platform in "linux/amd64" "linux/arm64" + do + docker pull --platform $platform ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:$openai_container_tag + docker pull --platform $platform ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:$openai_additional_tag + done + + docker tag ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:$openai_container_tag ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }} + docker tag ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:$openai_additional_tag ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.ADDITIONAL_TAG }} + + docker push -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }} deploy-resources-workflow-run: if: ((github.event_name == 'workflow_run') && ((github.event.workflow_run.event == 'push') || (github.event.workflow_run.event == 'workflow_dispatch')) && (github.event.workflow_run.conclusion == 'success') && (github.repository == 'quarkusio/quarkus-super-heroes')) && ((github.event.workflow_run.head_branch == 'main')) - needs: - - create-app-multiarch-manifests + needs: tag-openai-app-multiarch-manifests uses: quarkusio/quarkus-super-heroes/.github/workflows/create-deploy-resources.yml@main secrets: inherit with: @@ -410,8 +600,7 @@ jobs: deploy-resources-workflow-dispatch: if: ((github.event_name == 'workflow_dispatch') && (github.repository == 'quarkusio/quarkus-super-heroes')) && ((github.ref_name == 'main')) - needs: - - create-app-multiarch-manifests + needs: tag-openai-app-multiarch-manifests uses: quarkusio/quarkus-super-heroes/.github/workflows/create-deploy-resources.yml@main secrets: inherit with: diff --git a/.github/workflows/simple-build-test.yml b/.github/workflows/simple-build-test.yml index 5a3cb07350..9baa7be12d 100644 --- a/.github/workflows/simple-build-test.yml +++ b/.github/workflows/simple-build-test.yml @@ -59,14 +59,15 @@ jobs: java: - '17' project: - - event-statistics - - rest-fights - - rest-heroes - - rest-villains - - rest-narration - - grpc-locations - - ui-super-heroes - name: "build-test-${{ matrix.project }}-${{ matrix.java }}" + - { name: event-statistics } + - { name: rest-fights } + - { name: rest-heroes } + - { name: rest-villains } + - { name: rest-narration, openai-type: openai } + - { name: rest-narration, openai-type: azure-openai } + - { name: grpc-locations } + - { name: ui-super-heroes } + name: "build-test-${{ matrix.project.name }}-${{ matrix.java }}-${{ matrix.project.openai-type }}" steps: - uses: actions/checkout@v4 @@ -77,19 +78,15 @@ jobs: distribution: temurin cache: maven - - name: "build-test-jvm-${{ matrix.project }}-java-${{ matrix.java }}" - working-directory: ${{ matrix.project }} + - name: Create env vars + if: matrix.project.openai-type + working-directory: ${{ matrix.project.name }} run: | - ./mvnw -B clean verify \ - -Dquarkus.http.host=0.0.0.0 \ - -Dmaven.compiler.release=${{ matrix.java }} + echo "QUARKUS_PROFILE=${{ matrix.project.openai-type }}" >> $GITHUB_ENV && \ + echo "QUARKUS_TEST_INTEGRATION_TEST_PROFILE=${{ matrix.project.openai-type }}" >> $GITHUB_ENV - - name: Build/test with Azure OpenAI - if: matrix.project == 'rest-narration' - working-directory: ${{ matrix.project }} - env: - QUARKUS_PROFILE: azure-openai - QUARKUS_TEST_INTEGRATION_TEST_PROFILE: azure-openai + - name: "build-test-jvm-${{ matrix.project.name }}-java-${{ matrix.java }}-${{ matrix.project.openai-type }}" + working-directory: ${{ matrix.project.name }} run: | ./mvnw -B clean verify \ -Dquarkus.http.host=0.0.0.0 \ @@ -104,14 +101,15 @@ jobs: java: - '17' project: - - event-statistics - - rest-fights - - rest-heroes - - rest-villains - - rest-narration - - grpc-locations - - ui-super-heroes - name: "native-build-test-${{ matrix.project }}" + - { name: event-statistics } + - { name: rest-fights } + - { name: rest-heroes } + - { name: rest-villains } + - { name: rest-narration, openai-type: openai } + - { name: rest-narration, openai-type: azure-openai } + - { name: grpc-locations } + - { name: ui-super-heroes } + name: "native-build-test-${{ matrix.project.name }}-${{ matrix.project.openai-type }}" steps: - uses: actions/checkout@v4 @@ -140,19 +138,15 @@ jobs: architecture: x64 cache: maven - - name: "build-test-native-${{ matrix.project }}-java-${{ matrix.java }}" - working-directory: ${{ matrix.project }} + - name: Create env vars + if: matrix.project.openai-type + working-directory: ${{ matrix.project.name }} run: | - ./mvnw -B clean verify -Pnative \ - -Dquarkus.http.host=0.0.0.0 \ - -Dmaven.compiler.release=${{ matrix.java }} + echo "QUARKUS_PROFILE=${{ matrix.project.openai-type }}" >> $GITHUB_ENV && \ + echo "QUARKUS_TEST_INTEGRATION_TEST_PROFILE=${{ matrix.project.openai-type }}" >> $GITHUB_ENV - - name: Build/test with Azure OpenAI - if: matrix.project == 'rest-narration' - working-directory: ${{ matrix.project }} - env: - QUARKUS_PROFILE: azure-openai - QUARKUS_TEST_INTEGRATION_TEST_PROFILE: azure-openai + - name: "build-test-native-${{ matrix.project.name }}-java-${{ matrix.java }}-${{ matrix.project.openai-type }}" + working-directory: ${{ matrix.project.name }} run: | ./mvnw -B clean verify -Pnative \ -Dquarkus.http.host=0.0.0.0 \