From 6343430b0c1a4e7217d82d9725d33636c40ac254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Suszy=C5=84ski?= Date: Wed, 19 Apr 2023 20:46:18 +0200 Subject: [PATCH 1/3] Support for UBI 8 and 9 --- .github/workflows/build-images.yml | 32 ++++++++++++++++++++------ .github/workflows/push-images.yml | 33 +++++++++++++++++++++------ pom.xml | 15 ++++++++---- quarkus-binary-s2i/pom.xml | 2 +- quarkus-graalvm-builder-image/pom.xml | 2 +- quarkus-mandrel-builder-image/pom.xml | 2 +- quarkus-micro-base-image/pom.xml | 2 +- quarkus-native-s2i/pom.xml | 2 +- 8 files changed, 67 insertions(+), 23 deletions(-) diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index 7d0a721f..ee51791d 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -18,6 +18,9 @@ jobs: strategy: fail-fast: false matrix: + ubi: + - "default" + - "9.1" include: - name: "base images" modules: "quarkus-distroless-base-image,quarkus-micro-base-image" @@ -39,23 +42,32 @@ jobs: args: "-Polder-graalvm" steps: - - run: | + - id: prepare + run: | # Re-claim some disk space sudo swapoff -a sudo rm -f /swapfile sudo apt-get clean - docker rmi $(docker image ls -aq) + docker image ls -aq | xargs -r docker rmi df -h - - uses: actions/checkout@v1 + + # Set up UBI params + if [ "${{ matrix.ubi }}" != "default" ]; then + IFS='.' read -r ubi_major ubi_minor <<< "${{ matrix.ubi }}" + echo "ubi-args='-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}'" >> "$GITHUB_OUTPUT" + else + echo "ubi-args=" >> "$GITHUB_OUTPUT" + fi + - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '17' - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 with: install: true - name: Inspect builder @@ -65,8 +77,14 @@ jobs: echo "Status: ${{ steps.buildx.outputs.status }}" echo "Flags: ${{ steps.buildx.outputs.flags }}" echo "Platforms: ${{ steps.buildx.outputs.platforms }}" - - name: Build ${{ matrix.name }} - run: mvn install --projects ${{ matrix.modules }} --also-make -DskipTests ${{ matrix.args }} + - name: Build ${{ matrix.name }} on ${{ matrix.ubi }} + run: + mvn install + --projects ${{ matrix.modules }} + --also-make + -DskipTests + ${{ matrix.args }} + ${{ steps.prepare.outputs.ubi-args }} - name: Print ${{ matrix.name}} if: always() run: docker images \ No newline at end of file diff --git a/.github/workflows/push-images.yml b/.github/workflows/push-images.yml index d87b736f..479f120f 100644 --- a/.github/workflows/push-images.yml +++ b/.github/workflows/push-images.yml @@ -13,6 +13,9 @@ jobs: strategy: fail-fast: false matrix: + ubi: + - "ubi8" + - "ubi9" include: - name: "base images" modules: "quarkus-distroless-base-image,quarkus-micro-base-image" @@ -33,23 +36,32 @@ jobs: modules: "quarkus-graalvm-builder-image" args: "-Polder-graalvm" steps: - - run: | + - id: prepare + run: | # Re-claim some disk space sudo swapoff -a sudo rm -f /swapfile sudo apt-get clean - docker rmi $(docker image ls -aq) + docker image ls -aq | xargs -r docker rmi df -h - - uses: actions/checkout@v1 + + # Set up UBI params + if [ "${{ matrix.ubi }}" != "default" ]; then + IFS='.' read -r ubi_major ubi_minor <<< "${{ matrix.ubi }}" + echo "ubi-args='-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}'" >> "$GITHUB_OUTPUT" + else + echo "ubi-args=" >> "$GITHUB_OUTPUT" + fi + - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: distribution: 'temurin' java-version: '17' - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 with: install: true - name: Inspect builder @@ -65,8 +77,15 @@ jobs: registry: quay.io username: ${{ secrets.QUAY_USER }} password: ${{ secrets.QUAY_TOKEN }} - - name: Build images - run: mvn install --projects ${{ matrix.modules }} --also-make -DskipTests -Ppush ${{ matrix.args }} + - name: Build images on ${{ matrix.ubi }} + run: + mvn install + --projects ${{ matrix.modules }} + --also-make + -DskipTests + -Ppush + ${{ matrix.args }} + ${{ steps.prepare.outputs.ubi-args }} - name: Print ${{ matrix.name}} if: always() run: | diff --git a/pom.xml b/pom.xml index 8666f940..3e2184e8 100644 --- a/pom.xml +++ b/pom.xml @@ -33,10 +33,17 @@ 17 17 - - registry.access.redhat.com/ubi8/ubi-minimal:8.7 - - registry.access.redhat.com/ubi8-micro:8.7 + + ubi + ${ubi.rel.major}.${ubi.rel.minor} + + + + 8 + 7 + + registry.access.redhat.com/ubi${ubi.rel.major}/ubi-minimal:${ubi.release} + registry.access.redhat.com/ubi${ubi.rel.major}-micro:${ubi.release} false diff --git a/quarkus-binary-s2i/pom.xml b/quarkus-binary-s2i/pom.xml index f3157822..d39d0008 100644 --- a/quarkus-binary-s2i/pom.xml +++ b/quarkus-binary-s2i/pom.xml @@ -33,7 +33,7 @@ --dockerfile-dir=${project.basedir}/target/docker --ubi-minimal=${ubi-min.base} - --out=quay.io/quarkus/ubi-quarkus-native-binary-s2i:2.0 + --out=quay.io/quarkus/${ubi.tag}-quarkus-native-binary-s2i:2.0 --basedir=${project.basedir} --dry-run=${jdock.dry-run} diff --git a/quarkus-graalvm-builder-image/pom.xml b/quarkus-graalvm-builder-image/pom.xml index 4fe5491b..8959ee59 100644 --- a/quarkus-graalvm-builder-image/pom.xml +++ b/quarkus-graalvm-builder-image/pom.xml @@ -34,7 +34,7 @@ --dockerfile-dir=${project.basedir}/target/docker --ubi-minimal=${ubi-min.base} - --out=quay.io/quarkus/ubi-quarkus-graalvmce-builder-image + --out=quay.io/quarkus/${ubi.tag}-quarkus-graalvmce-builder-image --in=${images.file} --dry-run=${jdock.dry-run} diff --git a/quarkus-mandrel-builder-image/pom.xml b/quarkus-mandrel-builder-image/pom.xml index 04fad72a..c75771a4 100644 --- a/quarkus-mandrel-builder-image/pom.xml +++ b/quarkus-mandrel-builder-image/pom.xml @@ -34,7 +34,7 @@ --dockerfile-dir=${project.basedir}/target/docker --ubi-minimal=${ubi-min.base} - --out=quay.io/quarkus/ubi-quarkus-mandrel-builder-image + --out=quay.io/quarkus/${ubi.tag}-quarkus-mandrel-builder-image --in=${images.file} --dry-run=${jdock.dry-run} diff --git a/quarkus-micro-base-image/pom.xml b/quarkus-micro-base-image/pom.xml index 0d94940f..f36ab4ca 100644 --- a/quarkus-micro-base-image/pom.xml +++ b/quarkus-micro-base-image/pom.xml @@ -34,7 +34,7 @@ --dockerfile-dir=${pom.basedir}/target/docker --ubi-minimal=${ubi-min.base} --ubi-micro=${ubi-micro.base} - --out=quay.io/quarkus/quarkus-micro-image:2.0 + --out=quay.io/quarkus/${ubi.tag}-quarkus-micro-image:2.0 --dry-run=${jdock.dry-run} diff --git a/quarkus-native-s2i/pom.xml b/quarkus-native-s2i/pom.xml index 9f0c8b59..7a26d6cf 100644 --- a/quarkus-native-s2i/pom.xml +++ b/quarkus-native-s2i/pom.xml @@ -33,7 +33,7 @@ --dockerfile-dir=${project.basedir}/target/docker --ubi-minimal=${ubi-min.base} - --out=quay.io/quarkus/ubi-quarkus-graalvmce-s2i + --out=quay.io/quarkus/${ubi.tag}-quarkus-graalvmce-s2i --in=${project.basedir}/graalvm.yaml --basedir=${project.basedir} --dry-run=${jdock.dry-run} From 8283de288ebbddc70c9efb8e7a84de8db02d684d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Suszy=C5=84ski?= Date: Wed, 19 Apr 2023 20:55:12 +0200 Subject: [PATCH 2/3] Restore the Quarkus Micro Base Image name --- .github/workflows/build-images.yml | 4 +--- .github/workflows/push-images.yml | 2 +- quarkus-micro-base-image/pom.xml | 3 ++- .../src/main/java/io/quarkus/images/Build.java | 5 ++++- .../src/main/java/io/quarkus/images/Push.java | 5 ++++- .../src/main/java/io/quarkus/images/QuarkusMicro.java | 5 ++++- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index ee51791d..8549bfe7 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -5,8 +5,6 @@ on: branches: - main push: - branches: - - main paths-ignore: - '.build/**' @@ -54,7 +52,7 @@ jobs: # Set up UBI params if [ "${{ matrix.ubi }}" != "default" ]; then IFS='.' read -r ubi_major ubi_minor <<< "${{ matrix.ubi }}" - echo "ubi-args='-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}'" >> "$GITHUB_OUTPUT" + echo "ubi-args=-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}" >> "$GITHUB_OUTPUT" else echo "ubi-args=" >> "$GITHUB_OUTPUT" fi diff --git a/.github/workflows/push-images.yml b/.github/workflows/push-images.yml index 479f120f..0472b85d 100644 --- a/.github/workflows/push-images.yml +++ b/.github/workflows/push-images.yml @@ -48,7 +48,7 @@ jobs: # Set up UBI params if [ "${{ matrix.ubi }}" != "default" ]; then IFS='.' read -r ubi_major ubi_minor <<< "${{ matrix.ubi }}" - echo "ubi-args='-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}'" >> "$GITHUB_OUTPUT" + echo "ubi-args=-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}" >> "$GITHUB_OUTPUT" else echo "ubi-args=" >> "$GITHUB_OUTPUT" fi diff --git a/quarkus-micro-base-image/pom.xml b/quarkus-micro-base-image/pom.xml index f36ab4ca..30e4259c 100644 --- a/quarkus-micro-base-image/pom.xml +++ b/quarkus-micro-base-image/pom.xml @@ -34,7 +34,8 @@ --dockerfile-dir=${pom.basedir}/target/docker --ubi-minimal=${ubi-min.base} --ubi-micro=${ubi-micro.base} - --out=quay.io/quarkus/${ubi.tag}-quarkus-micro-image:2.0 + --ubi-tag=${ubi.tag} + --out=quay.io/quarkus/quarkus-micro-image:2.0 --dry-run=${jdock.dry-run} diff --git a/quarkus-micro-base-image/src/main/java/io/quarkus/images/Build.java b/quarkus-micro-base-image/src/main/java/io/quarkus/images/Build.java index 99c929c0..b7f8be85 100644 --- a/quarkus-micro-base-image/src/main/java/io/quarkus/images/Build.java +++ b/quarkus-micro-base-image/src/main/java/io/quarkus/images/Build.java @@ -18,6 +18,9 @@ public class Build implements Callable { @CommandLine.Option(names = { "--ubi-micro" }, description = "The UBI Micro base image") private String micro; + @CommandLine.Option(names = { "--ubi-tag" }, description = "The tag to add to the output image tag") + private String ubiTag; + @CommandLine.Option(names = { "--out" }, description = "The output image") private String output; @@ -31,7 +34,7 @@ public class Build implements Callable { @Override public Integer call() throws Exception { JDock.setDockerFileDir(dockerFileDir); - QuarkusMicro.define(minimal, micro, output) + QuarkusMicro.define(minimal, micro, output, ubiTag) .buildLocalImages(dryRun); return 0; diff --git a/quarkus-micro-base-image/src/main/java/io/quarkus/images/Push.java b/quarkus-micro-base-image/src/main/java/io/quarkus/images/Push.java index 99acb97f..af73c637 100644 --- a/quarkus-micro-base-image/src/main/java/io/quarkus/images/Push.java +++ b/quarkus-micro-base-image/src/main/java/io/quarkus/images/Push.java @@ -18,6 +18,9 @@ public class Push implements Callable { @CommandLine.Option(names = { "--ubi-micro" }, description = "The UBI Micro base image") private String micro; + @CommandLine.Option(names = { "--ubi-tag" }, description = "The tag to add to the output image tag") + private String ubiTag; + @CommandLine.Option(names = { "--out" }, description = "The output image") private String output; @@ -31,7 +34,7 @@ public class Push implements Callable { @Override public Integer call() throws Exception { JDock.setDockerFileDir(dockerFileDir); - QuarkusMicro.define(minimal, micro, output) + QuarkusMicro.define(minimal, micro, output, ubiTag) .buildAndPush(); return 0; } diff --git a/quarkus-micro-base-image/src/main/java/io/quarkus/images/QuarkusMicro.java b/quarkus-micro-base-image/src/main/java/io/quarkus/images/QuarkusMicro.java index 06282057..326b28da 100644 --- a/quarkus-micro-base-image/src/main/java/io/quarkus/images/QuarkusMicro.java +++ b/quarkus-micro-base-image/src/main/java/io/quarkus/images/QuarkusMicro.java @@ -4,7 +4,7 @@ public class QuarkusMicro { - static MultiArchImage define(String minimal, String micro, String output) { + static MultiArchImage define(String minimal, String micro, String output, String ubiTag) { MultiStageDockerFile img = Dockerfile.multistages() .stage("ubi", Dockerfile.from(minimal)) .stage("scratch", Dockerfile.from(micro)) @@ -12,6 +12,9 @@ static MultiArchImage define(String minimal, String micro, String output) { .copyFromStage("ubi", "/usr/lib64/libgcc_s.so.1") .copyFromStage("ubi", "/usr/lib64/libstdc++.so.6") .copyFromStage("ubi", "/usr/lib64/libz.so.1")); + if (!"ubi".equals(ubiTag)) { + output = output + '-' + ubiTag; + } return new MultiArchImage(output, Map.of( "arm64", img, "amd64", img)); From c4466343fde99cb23077251d54038e6f6608a768 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Chris=20Suszy=C5=84ski?= Date: Thu, 20 Apr 2023 15:22:50 +0200 Subject: [PATCH 3/3] Correct the build matrix --- .github/workflows/build-images.yml | 89 ++++++++++++++++++++-------- .github/workflows/push-images.yml | 93 ------------------------------ pom.xml | 8 +-- 3 files changed, 69 insertions(+), 121 deletions(-) delete mode 100644 .github/workflows/push-images.yml diff --git a/.github/workflows/build-images.yml b/.github/workflows/build-images.yml index 8549bfe7..9df1c32e 100644 --- a/.github/workflows/build-images.yml +++ b/.github/workflows/build-images.yml @@ -1,4 +1,4 @@ -name: Continuous Integration Build +name: Build on: pull_request: @@ -7,37 +7,54 @@ on: push: paths-ignore: - '.build/**' + deployment: + schedule: + - cron: '0 0 * * 0' + workflow_dispatch: jobs: build-images: - name: Build images + name: Build and Push images runs-on: ubuntu-latest strategy: fail-fast: false matrix: - ubi: - - "default" - - "9.1" include: - - name: "base images" - modules: "quarkus-distroless-base-image,quarkus-micro-base-image" - args: "" - - name: "s2i images" - modules: "quarkus-binary-s2i,quarkus-native-s2i" - args: "" - - name: "mandrel builder images" - modules: "quarkus-mandrel-builder-image" - args: "" - - name: "mandrel builder images 21 and 22.0" - modules: "quarkus-mandrel-builder-image" - args: "-Polder-mandrel" - - name: "graalvm ce builder images" - modules: "quarkus-graalvm-builder-image" - args: "" - - name: "graalvm ce builder images 21 and 22.0" - modules: "quarkus-graalvm-builder-image" - args: "-Polder-graalvm" + # Distroless image + - modules: quarkus-distroless-base-image + + # Default UBI base image + - modules: quarkus-micro-base-image + ubi: default + - modules: quarkus-binary-s2i,quarkus-native-s2i + ubi: default + - modules: quarkus-mandrel-builder-image + ubi: default + - modules: quarkus-mandrel-builder-image + args: -Polder-mandrel + ubi: default + - modules: quarkus-graalvm-builder-image + ubi: default + - modules: quarkus-graalvm-builder-image + args: -Polder-graalvm + ubi: default + + # UBI 9 base image + - modules: quarkus-micro-base-image + ubi: "9.1" + - modules: quarkus-binary-s2i,quarkus-native-s2i + ubi: "9.1" + - modules: quarkus-mandrel-builder-image + ubi: "9.1" + - modules: quarkus-mandrel-builder-image + args: -Polder-mandrel + ubi: "9.1" + - modules: quarkus-graalvm-builder-image + ubi: "9.1" + - modules: quarkus-graalvm-builder-image + args: -Polder-graalvm + ubi: "9.1" steps: - id: prepare @@ -50,12 +67,26 @@ jobs: df -h # Set up UBI params - if [ "${{ matrix.ubi }}" != "default" ]; then + if [ -n "${{ matrix.ubi }}" ] && [ "${{ matrix.ubi }}" != "default" ]; then IFS='.' read -r ubi_major ubi_minor <<< "${{ matrix.ubi }}" echo "ubi-args=-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}" >> "$GITHUB_OUTPUT" else echo "ubi-args=" >> "$GITHUB_OUTPUT" fi + + # Should publish images? + publish_types=(deployment schedule workflow_dispatch) + inarray=$(echo ${publish_types[@]} | grep -o "${{ github.event_name }}" | wc -w) + if (( inarray )) || \ + [ "${{ github.event_name }}" == "push" ] && \ + [ "${{ github.repository }}" == 'quarkusio/quarkus-images' ] && \ + [ "${{ github.ref }}" == 'main' ]; then + echo "publish=true" >> "$GITHUB_OUTPUT" + echo 'publish-args=-Ppush' >> "$GITHUB_OUTPUT + else + echo "publish=false" >> "$GITHUB_OUTPUT" + echo 'publish-args=' >> "$GITHUB_OUTPUT + fi - uses: actions/checkout@v3 - uses: actions/setup-java@v3 with: @@ -75,6 +106,15 @@ jobs: echo "Status: ${{ steps.buildx.outputs.status }}" echo "Flags: ${{ steps.buildx.outputs.flags }}" echo "Platforms: ${{ steps.buildx.outputs.platforms }}" + + - name: Login to GitHub Container Registry + if: ${{ steps.prepare.outputs.publish == 'true' }} + uses: docker/login-action@v2 + with: + registry: quay.io + username: ${{ secrets.QUAY_USER }} + password: ${{ secrets.QUAY_TOKEN }} + - name: Build ${{ matrix.name }} on ${{ matrix.ubi }} run: mvn install @@ -83,6 +123,7 @@ jobs: -DskipTests ${{ matrix.args }} ${{ steps.prepare.outputs.ubi-args }} + ${{ steps.prepare.outputs.publish-args }} - name: Print ${{ matrix.name}} if: always() run: docker images \ No newline at end of file diff --git a/.github/workflows/push-images.yml b/.github/workflows/push-images.yml deleted file mode 100644 index 0472b85d..00000000 --- a/.github/workflows/push-images.yml +++ /dev/null @@ -1,93 +0,0 @@ -name: Push Images to Quay -on: - deployment: - schedule: - - cron: '0 0 * * 0' - workflow_dispatch: - -jobs: - - build-images: - name: Build and Push images - runs-on: ubuntu-latest - strategy: - fail-fast: false - matrix: - ubi: - - "ubi8" - - "ubi9" - include: - - name: "base images" - modules: "quarkus-distroless-base-image,quarkus-micro-base-image" - args: "" - - name: "s2i images" - modules: "quarkus-binary-s2i,quarkus-native-s2i" - args: "" - - name: "mandrel builder images" - modules: "quarkus-mandrel-builder-image" - args: "" - - name: "mandrel builder images 21 and 22.0" - modules: "quarkus-mandrel-builder-image" - args: "-Polder-mandrel" - - name: "graalvm ce builder images" - modules: "quarkus-graalvm-builder-image" - args: "" - - name: "graalvm ce builder images 21 and 22.0" - modules: "quarkus-graalvm-builder-image" - args: "-Polder-graalvm" - steps: - - id: prepare - run: | - # Re-claim some disk space - sudo swapoff -a - sudo rm -f /swapfile - sudo apt-get clean - docker image ls -aq | xargs -r docker rmi - df -h - - # Set up UBI params - if [ "${{ matrix.ubi }}" != "default" ]; then - IFS='.' read -r ubi_major ubi_minor <<< "${{ matrix.ubi }}" - echo "ubi-args=-Dubi.tag=ubi${ubi_major} -Dubi.rel.major=${ubi_major} -Dubi.rel.minor=${ubi_minor}" >> "$GITHUB_OUTPUT" - else - echo "ubi-args=" >> "$GITHUB_OUTPUT" - fi - - uses: actions/checkout@v3 - - uses: actions/setup-java@v3 - with: - distribution: 'temurin' - java-version: '17' - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v2 - with: - install: true - - name: Inspect builder - run: | - echo "Name: ${{ steps.buildx.outputs.name }}" - echo "Endpoint: ${{ steps.buildx.outputs.endpoint }}" - echo "Status: ${{ steps.buildx.outputs.status }}" - echo "Flags: ${{ steps.buildx.outputs.flags }}" - echo "Platforms: ${{ steps.buildx.outputs.platforms }}" - - name: Login to GitHub Container Registry - uses: docker/login-action@v2 - with: - registry: quay.io - username: ${{ secrets.QUAY_USER }} - password: ${{ secrets.QUAY_TOKEN }} - - name: Build images on ${{ matrix.ubi }} - run: - mvn install - --projects ${{ matrix.modules }} - --also-make - -DskipTests - -Ppush - ${{ matrix.args }} - ${{ steps.prepare.outputs.ubi-args }} - - name: Print ${{ matrix.name}} - if: always() - run: | - df -h - docker images \ No newline at end of file diff --git a/pom.xml b/pom.xml index 3e2184e8..9afaffdd 100644 --- a/pom.xml +++ b/pom.xml @@ -33,15 +33,15 @@ 17 17 - - ubi - ${ubi.rel.major}.${ubi.rel.minor} - 8 7 + + ubi + ${ubi.rel.major}.${ubi.rel.minor} + registry.access.redhat.com/ubi${ubi.rel.major}/ubi-minimal:${ubi.release} registry.access.redhat.com/ubi${ubi.rel.major}-micro:${ubi.release}