diff --git a/Dockerfile b/Dockerfile index 0a0b73b..50c394a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM gcr.io/kaniko-project/executor:v1.21.0-debug +FROM gcr.io/kaniko-project/executor:v1.24.0-debug SHELL ["/busybox/sh", "-c"] @@ -6,12 +6,12 @@ SHELL ["/busybox/sh", "-c"] RUN set -eux; \ case "$(arch)" in \ 'x86_64') \ - url='https://github.com/google/go-containerregistry/releases/download/v0.19.0/go-containerregistry_Linux_x86_64.tar.gz'; \ - sha256='daa629648e1d1d10fc8bde5e6ce4176cbc0cd48a32211b28c3fd806e0fa5f29b'; \ + url='https://github.com/google/go-containerregistry/releases/download/v0.20.6/go-containerregistry_Linux_x86_64.tar.gz'; \ + sha256='c1d593d01551f2c9a3df5ca0a0be4385a839bd9b86d4a76e18d7b17d16559127'; \ ;; \ 'aarch64') \ - url='https://github.com/google/go-containerregistry/releases/download/v0.19.0/go-containerregistry_Linux_arm64.tar.gz'; \ - sha256='d439957c1a9d6bc0870be921e25753a7fa67bf2b2691b77ce48a6fc25bc719a0'; \ + url='https://github.com/google/go-containerregistry/releases/download/v0.20.6/go-containerregistry_Linux_arm64.tar.gz'; \ + sha256='fc0515857bc38e4ddd2d37a5ab03fb5959449c7b2d4ad759bcc1174ac0cad91b'; \ ;; \ *) echo >&2 "error: unsupported architecture '$arch' (likely packaging update needed)"; exit 1 ;; \ esac; \ diff --git a/README.md b/README.md index b140b47..46d0ae1 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Viscreanu. ```yaml steps: - name: Build docker image - uses: https://code.thetadev.de/ThetaDev/action-kaniko@v1 + uses: https://code.thetadev.de/actions/kaniko@v1 with: image: thetadev256/test-actions-helloworld2 username: thetadev256 @@ -218,3 +218,16 @@ Example: `thetadev256/test-actions-helloworld2:main` Full reference to the built image with registry and tag. Example: `thetadev256/test-actions-helloworld2:main` + +## Dockerfile build arguments + +Action-Kaniko automatically sets build arguments to allow for different dockerfile actions +depending on the OS and architecture the image is build for. + +The supported arguments are: + +- `TARGETPLATFORM` (example: linux/amd64) +- `TARGETOS` (example: linux) +- `TARGETARCH` (example: amd64) +- `TARGETARCH_ALT` (alternative architecture name, x86_64 for amd64, otherwise the same as TARGETARCH) +- `TARGETVARIANT` (third docker platform parameter like ARM version) diff --git a/entrypoint.sh b/entrypoint.sh index 2a9af5c..9e5967c 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -96,7 +96,27 @@ if [ -n "$INPUT_PLATFORMS" ]; then DESTINATION="--no-push --tarPath /kaniko/build/${platformFn}.tar --destination $IMAGE" DIGEST="--image-name-tag-with-digest-file=/kaniko/build/${platformFn}_image-tag-digest" - runKaniko "${ARGS} --custom-platform=${platform} $DESTINATION $DIGEST" + targetos=$(echo "$platform" | cut -d/ -f1) + targetarch=$(echo "$platform" | cut -d/ -f2) + targetvariant=$(echo "$platform" | cut -d/ -f3) + + case "$targetarch" in + 'amd64') targetarchAlt="x86_64" ;; + 'arm64') targetarchAlt="aarch64" ;; + 'i386') targetarchAlt="i686" ;; + '386') targetarchAlt="i686" ;; + 'ppc64le') targetarchAlt="powerpc64le" ;; + 'arm') + case "$targetvariant" in + 'v5') targetarchAlt="armv5te" ;; + 'v7') targetarchAlt="armv7" ;; + *) targetarchAlt="arm" ;; + esac + ;; + *) targetarchAlt="$targetarch" ;; + esac + + runKaniko "${ARGS} --custom-platform=${platform} --build-arg TARGETPLATFORM='${platform}' --build-arg TARGETOS='${targetos}' --build-arg TARGETARCH='${targetarch}' --build-arg TARGETARCH_ALT='${targetarchAlt}' --build-arg TARGETVARIANT='${targetvariant}' $DESTINATION $DIGEST" echo "✅ $platform image built: $(head -n 1 "/kaniko/build/${platformFn}_image-tag-digest")" done @@ -113,14 +133,13 @@ if [ -n "$INPUT_PLATFORMS" ]; then DIGESTS="$DIGESTS -m $digest" done - TAGS="-t $IMAGE" - if [ -n "$IMAGE_LATEST" ]; then - TAGS="$TAGS -t $IMAGE_LATEST" - fi - - manifest_cmd="crane index append $TAGS $DIGESTS" + manifest_cmd="crane index append -t $IMAGE $DIGESTS" echo "Building manifest: $manifest_cmd" IMAGE_TAG_DIGEST=$(eval "$manifest_cmd") + + if [ -n "$IMAGE_LATEST" ]; then + crane tag "$IMAGE" latest + fi else # Build and push image for the default platform echo "⚒️ Building image $IMAGE"