diff --git a/.github/workflows/empty-worksapce-smoke-test-on-minikube-ubi9.yaml b/.github/workflows/empty-worksapce-smoke-test-on-minikube-ubi9.yaml index 58105d4e..dd5b9aa0 100644 --- a/.github/workflows/empty-worksapce-smoke-test-on-minikube-ubi9.yaml +++ b/.github/workflows/empty-worksapce-smoke-test-on-minikube-ubi9.yaml @@ -31,8 +31,17 @@ jobs: strategy: fail-fast: false matrix: - runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] - runs-on: ${{matrix.runners}} + include: + - name: amd64-build + runner: ubuntu-22.04 + arch: amd64 + - name: arm64-build + runner: ubuntu-22.04-arm + arch: arm64 + - name: ppc64le-build + runner: ubuntu-22.04 + arch: ppc64le + runs-on: ${{ matrix.runner }} steps: - name: Checkout @@ -54,12 +63,7 @@ jobs: docker rmi -f $(docker images -aq) - name: Set arch environment variable - run: | - if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then - echo arch="amd64" >> $GITHUB_ENV - else - echo arch="arm64" >> $GITHUB_ENV - fi + run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV - name: Start minikube cluster run: | diff --git a/.github/workflows/pr-check.yaml b/.github/workflows/pr-check.yaml index 485225ac..1aa3e233 100644 --- a/.github/workflows/pr-check.yaml +++ b/.github/workflows/pr-check.yaml @@ -22,18 +22,22 @@ jobs: strategy: fail-fast: false matrix: - runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] - runs-on: ${{matrix.runners}} + include: + - name: amd64-build + runner: ubuntu-22.04 + arch: amd64 + - name: arm64-build + runner: ubuntu-22.04-arm + arch: arm64 + - name: ppc64le-build + runner: ubuntu-22.04 + arch: ppc64le + runs-on: ${{ matrix.runner }} steps: - name: Checkout uses: actions/checkout@v4 - name: Set arch environment variable - run: | - if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then - echo arch="amd64" >> $GITHUB_ENV - else - echo arch="arm64" >> $GITHUB_ENV - fi + run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV - name: Free runner space run: sudo rm -rf /usr/local/lib/android - name: Cleanup docker images @@ -59,17 +63,21 @@ jobs: strategy: fail-fast: false matrix: - runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] - runs-on: ${{matrix.runners}} + include: + - name: amd64-build + runner: ubuntu-22.04 + arch: amd64 + - name: arm64-build + runner: ubuntu-22.04-arm + arch: arm64 + - name: ppc64le-build + runner: ubuntu-22.04 + arch: ppc64le + runs-on: ${{ matrix.runner }} needs: build-base-image steps: - name: Set arch environment variable - run: | - if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then - echo arch="amd64" >> $GITHUB_ENV - else - echo arch="arm64" >> $GITHUB_ENV - fi + run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v4 - name: Free runner space @@ -119,7 +127,8 @@ jobs: run: | docker manifest create ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ --amend ${{ env.REGISTRY }}/universal-developer-image:amd64-pr-${{github.event.number}} \ - --amend ${{ env.REGISTRY }}/universal-developer-image:arm64-pr-${{github.event.number}} + --amend ${{ env.REGISTRY }}/universal-developer-image:arm64-pr-${{github.event.number}} \ + --amend ${{ env.REGISTRY }}/universal-developer-image:ppc64le-pr-${{github.event.number}} docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ ${{ env.REGISTRY }}/universal-developer-image:amd64-pr-${{github.event.number}} \ @@ -127,6 +136,9 @@ jobs: docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ ${{ env.REGISTRY }}/universal-developer-image:arm64-pr-${{github.event.number}} \ --os linux --arch arm64 + docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} \ + ${{ env.REGISTRY }}/universal-developer-image:ppc64le-pr-${{github.event.number}} \ + --os linux --arch ppc64le docker manifest push ${{ env.REGISTRY }}/universal-developer-image:pr-${{github.event.number}} - name: 'Comment PR' diff --git a/.github/workflows/ubi9-build.yaml b/.github/workflows/ubi9-build.yaml index fdf4a695..090103b2 100644 --- a/.github/workflows/ubi9-build.yaml +++ b/.github/workflows/ubi9-build.yaml @@ -1,11 +1,9 @@ - name: Build of UBI 9 based Developer Images on: push: branches: [ main ] workflow_dispatch: - workflow_call: # Map the workflow outputs to job outputs secrets: @@ -15,8 +13,8 @@ on: required: true outputs: uniq_tag: - description: "The first output string" - value: ${{ jobs.build_universal_ubi9_image.outputs.output1 }} + description: "The unique tag for universal developer image" + value: ${{ jobs.publish-udi.outputs.uniq_tag }} env: # Use repository variable if set, otherwise fallback to default registry @@ -28,24 +26,37 @@ jobs: strategy: fail-fast: false matrix: - runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] - runs-on: ${{matrix.runners}} + include: + - name: amd64-build + runner: ubuntu-22.04 + arch: amd64 + - name: arm64-build + runner: ubuntu-22.04-arm + arch: arm64 + - name: ppc64le-build + runner: ubuntu-22.04 + arch: ppc64le + runs-on: ${{ matrix.runner }} steps: - name: Checkout uses: actions/checkout@v4 - name: Set arch environment variable - run: | - if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then - echo arch="amd64" >> $GITHUB_ENV - else - echo arch="arm64" >> $GITHUB_ENV - fi + run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV - name: Set short_sha environment variable run: echo short_sha="$(git rev-parse --short=7 HEAD)" >> $GITHUB_ENV - name: Free runner space run: sudo rm -rf /usr/local/lib/android - name: Cleanup docker images run: docker system prune -af + # Setup QEMU for cross-platform builds + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + # Setup Docker Buildx with container driver + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: docker-container + platforms: linux/amd64,linux/arm64,linux/ppc64le - name: Login to Registry uses: docker/login-action@v3 with: @@ -81,7 +92,8 @@ jobs: do docker manifest create ${{ env.REGISTRY }}/base-developer-image:${tag} \ --amend ${{ env.REGISTRY }}/base-developer-image:amd64-${{env.short_sha}} \ - --amend ${{ env.REGISTRY }}/base-developer-image:arm64-${{env.short_sha}} + --amend ${{ env.REGISTRY }}/base-developer-image:arm64-${{env.short_sha}} \ + --amend ${{ env.REGISTRY }}/base-developer-image:ppc64le-${{env.short_sha}} docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:${tag} \ ${{ env.REGISTRY }}/base-developer-image:amd64-${{env.short_sha}} \ @@ -90,6 +102,10 @@ jobs: docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:${tag} \ ${{ env.REGISTRY }}/base-developer-image:arm64-${{env.short_sha}} \ --os linux --arch arm64 + + docker manifest annotate ${{ env.REGISTRY }}/base-developer-image:${tag} \ + ${{ env.REGISTRY }}/base-developer-image:ppc64le-${{env.short_sha}} \ + --os linux --arch ppc64le docker manifest push ${{ env.REGISTRY }}/base-developer-image:${tag} done @@ -99,25 +115,38 @@ jobs: strategy: fail-fast: false matrix: - runners: ['ubuntu-22.04', 'ubuntu-22.04-arm'] - runs-on: ${{matrix.runners}} + include: + - name: amd64-build + runner: ubuntu-22.04 + arch: amd64 + - name: arm64-build + runner: ubuntu-22.04-arm + arch: arm64 + - name: ppc64le-build + runner: ubuntu-22.04 + arch: ppc64le + runs-on: ${{ matrix.runner }} needs: publish-base-image steps: - name: Checkout uses: actions/checkout@v4 - name: Set arch environment variable - run: | - if [[ ${{matrix.runners}} == 'ubuntu-22.04' ]]; then - echo arch="amd64" >> $GITHUB_ENV - else - echo arch="arm64" >> $GITHUB_ENV - fi + run: echo "arch=${{ matrix.arch }}" >> $GITHUB_ENV - name: Set short_sha environment variable run: echo short_sha="$(git rev-parse --short=7 HEAD)" >> $GITHUB_ENV - name: Free runner space run: sudo rm -rf /usr/local/lib/android - name: Cleanup docker images run: docker system prune -af + # Setup QEMU for cross-platform builds + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + # Setup Docker Buildx with container driver + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + with: + driver: docker-container + platforms: linux/amd64,linux/arm64,linux/ppc64le - name: Login to Registry uses: docker/login-action@v3 with: @@ -153,7 +182,8 @@ jobs: do docker manifest create ${{ env.REGISTRY }}/universal-developer-image:${tag} \ --amend ${{ env.REGISTRY }}/universal-developer-image:amd64-${{env.short_sha}} \ - --amend ${{ env.REGISTRY }}/universal-developer-image:arm64-${{env.short_sha}} + --amend ${{ env.REGISTRY }}/universal-developer-image:arm64-${{env.short_sha}} \ + --amend ${{ env.REGISTRY }}/universal-developer-image:ppc64le-${{env.short_sha}} docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:${tag} \ ${{ env.REGISTRY }}/universal-developer-image:amd64-${{env.short_sha}} \ @@ -163,11 +193,13 @@ jobs: ${{ env.REGISTRY }}/universal-developer-image:arm64-${{env.short_sha}} \ --os linux --arch arm64 + docker manifest annotate ${{ env.REGISTRY }}/universal-developer-image:${tag} \ + ${{ env.REGISTRY }}/universal-developer-image:ppc64le-${{env.short_sha}} \ + --os linux --arch ppc64le + docker manifest push ${{ env.REGISTRY }}/universal-developer-image:${tag} done - name: Get tag with uniq prefix id: setTagName - # set the image with uniq tag prefix (for example: quay.io/..../base-developer-image:ubi9-7ad6cab) to env. var - # and define it for output. This output with tag image will be used in caller job run: | echo "uniq_tag=${{ env.REGISTRY }}/universal-developer-image:ubi9-${{env.short_sha}}" >> $GITHUB_OUTPUT diff --git a/base/ubi9/Dockerfile b/base/ubi9/Dockerfile index a9540977..6689d1a7 100644 --- a/base/ubi9/Dockerfile +++ b/base/ubi9/Dockerfile @@ -39,83 +39,139 @@ RUN dnf -y reinstall shadow-utils && \ # Download and install gh-cli depending on the architecture. # See release page for details https://github.com/cli/cli/releases/tag/v2.78.0 RUN \ - TEMP_DIR="$(mktemp -d)"; \ - cd "${TEMP_DIR}"; \ - GH_VERSION="2.78.0"; \ - GH_ARCH="linux_$TARGETARCH"; \ - GH_TGZ="gh_${GH_VERSION}_${GH_ARCH}.tar.gz"; \ - GH_TGZ_URL="https://github.com/cli/cli/releases/download/v${GH_VERSION}/${GH_TGZ}"; \ - GH_CHEKSUMS_URL="https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_checksums.txt"; \ - curl -sSLO "${GH_TGZ_URL}"; \ - curl -sSLO "${GH_CHEKSUMS_URL}"; \ - sha256sum --ignore-missing -c "gh_${GH_VERSION}_checksums.txt" 2>&1 | grep OK; \ - tar -zxv --no-same-owner -f "${GH_TGZ}"; \ - mv "gh_${GH_VERSION}_${GH_ARCH}"/bin/gh /usr/local/bin/; \ - mv "gh_${GH_VERSION}_${GH_ARCH}"/share/man/man1/* /usr/local/share/man/man1; \ - cd -; \ - rm -rf "${TEMP_DIR}" + TEMP_DIR="$(mktemp -d)" && cd "${TEMP_DIR}" && \ + GH_VERSION="2.78.0" && \ + case "$TARGETARCH" in \ + amd64) GH_ARCH="linux_amd64" ;; \ + arm64) GH_ARCH="linux_arm64" ;; \ + ppc64le) GH_ARCH="linux_ppc64le" ;; \ + *) echo "Unsupported architecture: $TARGETARCH" && exit 0 ;; \ + esac && \ + GH_TGZ="gh_${GH_VERSION}_${GH_ARCH}.tar.gz" && \ + GH_TGZ_URL="https://github.com/cli/cli/releases/download/v${GH_VERSION}/${GH_TGZ}" && \ + echo "Downloading ${GH_TGZ_URL}..." && \ + if curl -fsSL "${GH_TGZ_URL}" -o "${GH_TGZ}"; then \ + if file "${GH_TGZ}" | grep -q 'gzip compressed'; then \ + tar -zxv --no-same-owner -f "${GH_TGZ}" && \ + mv "gh_${GH_VERSION}_${GH_ARCH}"/bin/gh /usr/local/bin/ && \ + mv "gh_${GH_VERSION}_${GH_ARCH}"/share/man/man1/* /usr/local/share/man/man1; \ + else \ + echo "Downloaded gh archive invalid — skipping."; \ + fi; \ + else \ + echo "gh binary not found for ${TARGETARCH}, skipping installation."; \ + fi && \ + cd - && rm -rf "${TEMP_DIR}" # Download and install ripgrep depending on the architecture. # See release page for details https://github.com/BurntSushi/ripgrep/releases/tag/13.0.0 -RUN \ +RUN set -e; \ + case "$TARGETARCH" in \ + ppc64le) \ + echo "Skipping ripgrep installation for ppc64le as binary not available"; \ + exit 0 ;; \ + arm64) \ + RG_ARCH="arm-unknown-linux-gnueabihf" ;; \ + amd64) \ + RG_ARCH="x86_64-unknown-linux-musl" ;; \ + *) \ + echo "Unsupported architecture for ripgrep: $TARGETARCH"; \ + exit 0 ;; \ + esac; \ TEMP_DIR="$(mktemp -d)"; \ cd "${TEMP_DIR}"; \ RG_VERSION="13.0.0"; \ - if [ "$TARGETARCH" = "arm64" ]; then \ - RG_ARCH="arm-unknown-linux-gnueabihf"; \ - else \ - RG_ARCH="x86_64-unknown-linux-musl"; \ - fi; \ RG_TGZ="ripgrep-${RG_VERSION}-${RG_ARCH}.tar.gz"; \ RG_TGZ_URL="https://github.com/BurntSushi/ripgrep/releases/download/${RG_VERSION}/${RG_TGZ}"; \ - curl -sSLO "${RG_TGZ_URL}"; \ - tar -zxv --no-same-owner -f "${RG_TGZ}"; \ - mv "ripgrep-${RG_VERSION}-${RG_ARCH}"/rg /usr/local/bin/; \ - mv "ripgrep-${RG_VERSION}-${RG_ARCH}"/doc/rg.1 /usr/local/share/man/man1; \ - cd -; \ + echo "Downloading ${RG_TGZ_URL} ..."; \ + if curl -fsSL "${RG_TGZ_URL}" -o "${RG_TGZ}"; then \ + if file "${RG_TGZ}" | grep -q 'gzip compressed'; then \ + tar -zxf "${RG_TGZ}" --no-same-owner; \ + install -m 0755 "ripgrep-${RG_VERSION}-${RG_ARCH}/rg" /usr/local/bin/rg; \ + mkdir -p /usr/local/share/man/man1; \ + install -m 0644 "ripgrep-${RG_VERSION}-${RG_ARCH}/doc/rg.1" /usr/local/share/man/man1/; \ + else \ + echo "Downloaded ripgrep archive invalid — skipping."; \ + fi; \ + else \ + echo "ripgrep binary not found for ${TARGETARCH}, skipping installation."; \ + fi; \ + cd - >/dev/null; \ rm -rf "${TEMP_DIR}" # Download and install bat depending on the architecture. # See release page for details https://github.com/sharkdp/bat/releases/tag/v0.18.3 -RUN \ +RUN set -e; \ + case "$TARGETARCH" in \ + ppc64le) \ + echo "Skipping bat installation for ppc64le as binary not available"; \ + exit 0 ;; \ + arm64) \ + BAT_ARCH="aarch64-unknown-linux-gnu" ;; \ + amd64) \ + BAT_ARCH="x86_64-unknown-linux-musl" ;; \ + *) \ + echo "Unsupported architecture for bat: $TARGETARCH"; \ + exit 0 ;; \ + esac; \ TEMP_DIR="$(mktemp -d)"; \ cd "${TEMP_DIR}"; \ BAT_VERSION="0.18.3"; \ - if [ "$TARGETARCH" = "arm64" ]; then \ - BAT_ARCH="aarch64-unknown-linux-gnu"; \ - else \ - BAT_ARCH="x86_64-unknown-linux-musl"; \ - fi; \ BAT_TGZ="bat-v${BAT_VERSION}-${BAT_ARCH}.tar.gz"; \ BAT_TGZ_URL="https://github.com/sharkdp/bat/releases/download/v${BAT_VERSION}/${BAT_TGZ}"; \ - curl -sSLO "${BAT_TGZ_URL}"; \ - tar -zxv --no-same-owner -f "${BAT_TGZ}"; \ - mv "bat-v${BAT_VERSION}-${BAT_ARCH}"/bat /usr/local/bin/; \ - mv "bat-v${BAT_VERSION}-${BAT_ARCH}"/bat.1 /usr/local/share/man/man1; \ - cd -; \ + echo "Downloading ${BAT_TGZ_URL} ..."; \ + if curl -fsSL "${BAT_TGZ_URL}" -o "${BAT_TGZ}"; then \ + if file "${BAT_TGZ}" | grep -q 'gzip compressed'; then \ + tar -zxf "${BAT_TGZ}" --no-same-owner; \ + install -m 0755 "bat-v${BAT_VERSION}-${BAT_ARCH}/bat" /usr/local/bin/bat; \ + mkdir -p /usr/local/share/man/man1; \ + install -m 0644 "bat-v${BAT_VERSION}-${BAT_ARCH}/bat.1" /usr/local/share/man/man1/; \ + else \ + echo "Downloaded bat archive invalid — skipping."; \ + fi; \ + else \ + echo "bat binary not found for ${TARGETARCH}, skipping installation."; \ + fi; \ + cd - >/dev/null; \ rm -rf "${TEMP_DIR}" # Download and install fd depending on the architecture. # See release page for details https://github.com/sharkdp/fd/releases/tag/v8.7.0 -RUN \ - TEMP_DIR="$(mktemp -d)" && \ - cd "${TEMP_DIR}" && \ - FD_VERSION="8.7.0" && \ - if [ "$TARGETARCH" = "arm64" ]; then \ - FD_ARCH="aarch64-unknown-linux-gnu"; \ +RUN set -e; \ + case "$TARGETARCH" in \ + ppc64le) \ + echo "Skipping fd installation for ppc64le as binary not available"; \ + exit 0 ;; \ + arm64) \ + FD_ARCH="aarch64-unknown-linux-gnu" ;; \ + amd64) \ + FD_ARCH="x86_64-unknown-linux-musl" ;; \ + *) \ + echo "Unsupported architecture for fd: $TARGETARCH"; \ + exit 0 ;; \ + esac; \ + TEMP_DIR="$(mktemp -d)"; \ + cd "${TEMP_DIR}"; \ + FD_VERSION="8.7.0"; \ + FD_TGZ="fd-v${FD_VERSION}-${FD_ARCH}.tar.gz"; \ + FD_TGZ_URL="https://github.com/sharkdp/fd/releases/download/v${FD_VERSION}/${FD_TGZ}"; \ + echo "Downloading ${FD_TGZ_URL} ..."; \ + if curl -fsSL "${FD_TGZ_URL}" -o "${FD_TGZ}"; then \ + if file "${FD_TGZ}" | grep -q 'gzip compressed'; then \ + tar -xf "${FD_TGZ}" --no-same-owner; \ + install -m 0755 "fd-v${FD_VERSION}-${FD_ARCH}/fd" /usr/local/bin/fd; \ + mkdir -p /usr/local/share/man/man1; \ + install -m 0644 "fd-v${FD_VERSION}-${FD_ARCH}/fd.1" /usr/local/share/man/man1/; \ + else \ + echo "Downloaded fd archive invalid — skipping."; \ + fi; \ else \ - FD_ARCH="x86_64-unknown-linux-musl"; \ - fi && \ - FD_TGZ="fd-v${FD_VERSION}-${FD_ARCH}.tar.gz" && \ - FD_TGZ_URL="https://github.com/sharkdp/fd/releases/download/v${FD_VERSION}/${FD_TGZ}" && \ - curl -sSLO "${FD_TGZ_URL}" && \ - tar -xv --no-same-owner -f "${FD_TGZ}" && \ - mv "fd-v${FD_VERSION}-${FD_ARCH}"/fd /usr/local/bin && \ - mv "fd-v${FD_VERSION}-${FD_ARCH}"/fd.1 /usr/local/share/man/man1 && \ - cd - && \ + echo "fd binary not found for ${TARGETARCH}, skipping installation."; \ + fi; \ + cd - >/dev/null; \ rm -rf "${TEMP_DIR}" - # Define user directory for binaries +# Define user directory for binaries ENV PATH="/home/user/.local/bin:$PATH" # Set up environment variables to note that this is @@ -137,11 +193,36 @@ RUN mkdir -p /var/lib/shared/overlay-images /var/lib/shared/overlay-layers; \ # Add kubedock # See release page for details https://github.com/joyrex2001/kubedock/releases/tag/0.18.2 -ENV KUBEDOCK_VERSION 0.18.2 +ENV KUBEDOCK_VERSION=0.18.2 ENV KUBECONFIG=/home/user/.kube/config -RUN KUBEDOCK_ARCH="linux_amd64" && \ - curl -L https://github.com/joyrex2001/kubedock/releases/download/${KUBEDOCK_VERSION}/kubedock_${KUBEDOCK_VERSION}_${KUBEDOCK_ARCH}.tar.gz | tar -C /usr/local/bin -xz --no-same-owner \ - && chmod +x /usr/local/bin/kubedock +RUN set -e; \ + case "$TARGETARCH" in \ + ppc64le) \ + echo "Skipping kubedock installation for ppc64le as binary not available"; \ + exit 0 ;; \ + amd64) \ + KUBEDOCK_ARCH="linux_amd64" ;; \ + arm64) \ + KUBEDOCK_ARCH="linux_arm64" ;; \ + *) \ + echo "Unsupported architecture for kubedock: $TARGETARCH"; \ + exit 0 ;; \ + esac; \ + KUBEDOCK_TGZ="kubedock_${KUBEDOCK_VERSION}_${KUBEDOCK_ARCH}.tar.gz"; \ + KUBEDOCK_URL="https://github.com/joyrex2001/kubedock/releases/download/${KUBEDOCK_VERSION}/${KUBEDOCK_TGZ}"; \ + echo "Downloading ${KUBEDOCK_URL} ..."; \ + if curl -fsSL "${KUBEDOCK_URL}" -o /tmp/kubedock.tar.gz; then \ + if file /tmp/kubedock.tar.gz | grep -q 'gzip compressed'; then \ + tar -C /usr/local/bin -xzf /tmp/kubedock.tar.gz --no-same-owner; \ + chmod 0755 /usr/local/bin/kubedock; \ + echo "kubedock installed successfully."; \ + else \ + echo "Downloaded kubedock file invalid — skipping extraction."; \ + fi; \ + else \ + echo "kubedock binary not found for ${TARGETARCH}, skipping installation."; \ + fi; \ + rm -f /tmp/kubedock.tar.gz COPY --chown=0:0 kubedock_setup.sh /usr/local/bin/kubedock_setup # Configure Podman wrapper