Build and Push Container images - 3.2.Final #46
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build and Push Container images - 3.2.Final | |
env: | |
IMAGE_BASE_NAME: "quay.io/quarkus-super-heroes" | |
MANDREL_IMAGE: "quay.io/quarkus/ubi-quarkus-mandrel-builder-image" | |
MANDREL_VERSION: "23.0" | |
LATEST_IMAGE_TAG: "latest" | |
BRANCH: 3.2.Final | |
on: | |
workflow_run: | |
workflows: | |
- "Basic build and test" | |
branches: | |
- 3.2.Final | |
types: | |
- completed | |
workflow_dispatch: | |
concurrency: | |
group: "workflow = ${{ github.workflow }}, ref = ${{ github.event.workflow_run.head_branch || github.event.ref || github.ref }}" | |
cancel-in-progress: false | |
jobs: | |
build-jvm-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 == '3.2.Final'))) | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
java: | |
- '17' | |
project: | |
- event-statistics | |
- rest-fights | |
- rest-heroes | |
- rest-villains | |
- ui-super-heroes | |
arch: | |
- amd64 | |
- arm64 | |
name: "Build JVM images (${{ matrix.arch }}-${{ matrix.project }}-java${{ matrix.java }})" | |
steps: | |
- name: Calculate Ref (workflow_run event) | |
if: github.event_name == 'workflow_run' | |
run: echo "REF=${{ github.event.workflow_run.head_commit.id }}" >> $GITHUB_ENV | |
- name: Calculate Ref (workflow_dispatch event) | |
if: github.event_name == 'workflow_dispatch' | |
run: echo "REF=${{ github.sha }}" >> $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 }} | |
run: | | |
if [[ ${{ matrix.java }} == '17' ]]; then | |
echo "JVM_DOCKERFILE=Dockerfile.jvm" >> "$GITHUB_ENV" | |
else | |
echo "JVM_DOCKERFILE=Dockerfile.jvm${{ matrix.java }}" >> "$GITHUB_ENV" | |
fi | |
- name: Create container tags | |
working-directory: ${{ matrix.project }} | |
run: echo "CONTAINER_TAG=java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.arch }}" >> $GITHUB_ENV | |
- name: Set up QEMU | |
if: matrix.arch == 'arm64' | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: ${{ matrix.arch }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
install: true | |
- name: Build JVM image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) | |
working-directory: ${{ matrix.project }} | |
run: | | |
./mvnw -B clean package -DskipTests \ | |
-Dmaven.compiler.release=${{ matrix.java }} \ | |
-Dquarkus.http.host=0.0.0.0 \ | |
-Dquarkus.container-image.build=true \ | |
-Dquarkus.container-image.push=false \ | |
-Dquarkus.container-image.tag=${{ env.CONTAINER_TAG }} \ | |
-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 }}) | |
uses: ishworkh/[email protected] | |
with: | |
image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}" | |
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 == '3.2.Final'))) | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
java: | |
- '17' | |
project: | |
- event-statistics | |
- rest-fights | |
- rest-heroes | |
- rest-villains | |
- ui-super-heroes | |
arch: | |
- amd64 | |
- arm64 | |
name: "Build Native images (${{ matrix.arch }}-${{ matrix.project }}-java${{ matrix.java }})" | |
steps: | |
- name: Calculate Ref (workflow_run event) | |
if: github.event_name == 'workflow_run' | |
run: echo "REF=${{ github.event.workflow_run.head_commit.id }}" >> $GITHUB_ENV | |
- name: Calculate Ref (workflow_dispatch event) | |
if: github.event_name == 'workflow_dispatch' | |
run: echo "REF=${{ github.sha }}" >> $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 container tag | |
working-directory: ${{ matrix.project }} | |
run: echo "CONTAINER_TAG=native-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.arch }}" >> $GITHUB_ENV | |
- name: Set up QEMU | |
if: matrix.arch == 'arm64' | |
uses: docker/setup-qemu-action@v3 | |
with: | |
platforms: ${{ matrix.arch }} | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
with: | |
install: true | |
- name: Build native image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) | |
working-directory: ${{ matrix.project }} | |
run: | | |
./mvnw -B clean package -DskipTests -Pnative \ | |
-Dmaven.compiler.release=${{ matrix.java }} \ | |
-Dquarkus.http.host=0.0.0.0 \ | |
-Dquarkus.native.container-build=true \ | |
-Dquarkus.native.builder-image=${{ env.MANDREL_IMAGE }}:${{ env.MANDREL_VERSION }}-java${{ matrix.java }} \ | |
-Dquarkus.native.container-runtime-options=--platform=linux/${{ matrix.arch }} \ | |
-Dquarkus.container-image.build=true \ | |
-Dquarkus.container-image.push=false \ | |
-Dquarkus.container-image.tag=${{ env.CONTAINER_TAG }} \ | |
-Dquarkus.docker.buildx.platform=linux/${{ matrix.arch }} | |
- name: Save native Image (${{ matrix.project }}-java${{ matrix.java }}-${{ matrix.arch }}) | |
uses: ishworkh/[email protected] | |
with: | |
image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}" | |
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 == '3.2.Final'))) | |
needs: | |
- build-jvm-images | |
- build-native-images | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
java: | |
- '17' | |
kind: | |
- "" | |
- "native-" | |
project: | |
- event-statistics | |
- rest-fights | |
- rest-heroes | |
- rest-villains | |
- ui-super-heroes | |
arch: | |
- amd64 | |
- arm64 | |
name: "Push app images (${{ matrix.arch }}-${{ matrix.project }}-${{ matrix.kind }}java${{ matrix.java }})" | |
steps: | |
- name: Calculate Ref (workflow_run event) | |
if: github.event_name == 'workflow_run' | |
run: echo "REF=${{ github.event.workflow_run.head_commit.id }}" >> $GITHUB_ENV | |
- name: Calculate Ref (workflow_dispatch event) | |
if: github.event_name == 'workflow_dispatch' | |
run: echo "REF=${{ github.sha }}" >> $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 container tag (JVM) | |
if: matrix.kind == '' | |
working-directory: ${{ matrix.project }} | |
run: echo "CONTAINER_TAG=java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.arch }}" >> $GITHUB_ENV | |
- name: Create container tag (native) | |
if: matrix.kind == 'native-' | |
working-directory: ${{ matrix.project }} | |
run: echo "CONTAINER_TAG=native-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}-${{ matrix.arch }}" >> $GITHUB_ENV | |
- name: Get saved images (${{ matrix.project }}:${{ env.CONTAINER_TAG }}) | |
uses: ishworkh/[email protected] | |
with: | |
image: "${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}:${{ env.CONTAINER_TAG }}" | |
- name: Login to quay | |
uses: docker/login-action@v3 | |
with: | |
registry: quay.io | |
username: ${{ secrets.QUAY_REPO_USERNAME }} | |
password: ${{ secrets.QUAY_REPO_TOKEN }} | |
- name: Push images | |
working-directory: ${{ matrix.project }} | |
run: "docker push -a ${{ env.IMAGE_BASE_NAME }}/${{ matrix.project }}" | |
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 == '3.2.Final'))) | |
needs: push-app-images | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
java: | |
- '17' | |
kind: | |
- "" | |
- "native-" | |
project: | |
- event-statistics | |
- rest-fights | |
- rest-heroes | |
- rest-villains | |
- ui-super-heroes | |
name: Create app multiarch manifests (${{ matrix.project }}-${{ matrix.kind }}java${{ matrix.java }}) | |
steps: | |
- name: Calculate Ref (workflow_run event) | |
if: github.event_name == 'workflow_run' | |
run: echo "REF=${{ github.event.workflow_run.head_commit.id }}" >> $GITHUB_ENV | |
- name: Calculate Ref (workflow_dispatch event) | |
if: github.event_name == 'workflow_dispatch' | |
run: echo "REF=${{ github.sha }}" >> $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 container tag (JVM) | |
if: matrix.kind == '' | |
working-directory: ${{ matrix.project }} | |
run: echo "CONTAINER_TAG=java${{ matrix.java }}-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV | |
- name: Create container tag (native) | |
if: matrix.kind == 'native-' | |
working-directory: ${{ matrix.project }} | |
run: echo "CONTAINER_TAG=native-${{ env.LATEST_IMAGE_TAG }}-${{ env.BRANCH }}" >> $GITHUB_ENV | |
- 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 }}:${{ 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 }} | |
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 == '3.2.Final')) | |
needs: | |
- create-app-multiarch-manifests | |
uses: quarkusio/quarkus-super-heroes/.github/workflows/create-deploy-resources.yml@main | |
secrets: inherit | |
with: | |
commit_id: ${{ github.event.workflow_run.head_commit.id }} | |
branch: ${{ github.event.workflow_run.head_branch }} | |
deploy-resources-workflow-dispatch: | |
if: ((github.event_name == 'workflow_dispatch') && (github.repository == 'quarkusio/quarkus-super-heroes')) && ((github.ref_name == '3.2.Final')) | |
needs: | |
- create-app-multiarch-manifests | |
uses: quarkusio/quarkus-super-heroes/.github/workflows/create-deploy-resources.yml@main | |
secrets: inherit | |
with: | |
commit_id: ${{ github.sha }} | |
branch: ${{ github.ref_name }} | |
cleanup-artifacts: | |
needs: | |
- deploy-resources-workflow-run | |
- deploy-resources-workflow-dispatch | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- name: Delete artifacts | |
env: | |
WEBHOOK_SECRET: ${{ secrets.WEBHOOK_SECRET }} | |
run: | | |
echo "::add-mask::$WEBHOOK_SECRET" | |
curl --verbose --fail --show-error --location --request POST "https://api.github.com/repos/$GITHUB_REPOSITORY/dispatches" --header "Authorization: token $WEBHOOK_SECRET" --header 'Content-Type: application/json' --header 'Accept: application/vnd.github.everest-preview+json' --data-raw "{ \"event_type\": \"delete_all_artifacts\", \"client_payload\": {\"parent_runid\": \"$GITHUB_RUN_ID\", \"parent_repo\": \"$GITHUB_REPOSITORY\"} }" |