1
0
Fork 0
mirror of https://github.com/aevea/action-kaniko.git synced 2025-04-18 00:18:14 +02:00

Compare commits

...

40 commits

Author SHA1 Message Date
Alex Viscreanu
be5ce625a5
docs: add warning about kaniko lacking maintainers 2024-11-07 19:00:36 +01:00
renovate[bot]
58af85fb13 chore(deps): update gcr.io/kaniko-project/executor docker tag to v1.23.2 2024-11-07 18:55:15 +01:00
renovate[bot]
9223ef89b8 chore(deps): update gcr.io/kaniko-project/executor docker tag to v1.22.0 2024-04-22 22:50:48 +02:00
renovate[bot]
12a3a8cc81 chore(deps): update aevea/commitsar docker digest to e4aed72 2024-04-22 22:47:31 +02:00
renovate[bot]
977090a03e chore(deps): update aevea/release-notary docker digest to 690915b 2024-04-22 22:47:22 +02:00
Jason Kratz
fd47216104
fix: correctly handle multi-line tag digests output
kaniko outputs each tag on a new line, so users that push multiple tags
at once would get an error as the output wasn't prepared to handle multi-line
text
2024-04-22 22:38:37 +02:00
renovate[bot]
8de7c88b27 chore(deps): update gcr.io/kaniko-project/executor docker tag to v1.21.1 2024-03-08 13:50:40 +01:00
ykyr
ef9c4ca42e fix: entrypoint ARGS remove new line 2024-03-08 13:50:15 +01:00
Alex Viscreanu
16c18d6aee
ci: fix release notary action
explicitly define entrypoint and args
2024-01-20 11:24:51 +01:00
Theo Cabrerizo Diem
ec00be49b7
refactor: make entrypoint script more posix compliant
remove most of the 'bashisms' in the script, improve quoting, escaping
and make more consistent regarding references to variable names
2024-01-20 11:02:40 +01:00
renovate[bot]
4f9a6a7f2c chore(deps): update gcr.io/kaniko-project/executor docker tag to v1.20.0 2024-01-20 10:27:37 +01:00
Theo Cabrerizo Diem
81a26cb33a
feat: expand output variables
add output variables for digests and if image was refreshed or not
2024-01-11 22:51:21 +01:00
Mikael Elkiaer
17bff7af73
fix(ghcr): omit separator in case image is prefixed with dash or slash
this allows local pushing to the repo running the action
2024-01-11 22:25:33 +01:00
Idriss Neumann
a95ae7d706
fix(kaniko): workaround for passing arguments containing spaces
set up input field separator as null and use eval to run kaniko executor
2024-01-11 22:21:21 +01:00
renovate[bot]
10b098cb52 chore(deps): update aevea/commitsar docker digest to 8d2db4e 2024-01-11 22:05:46 +01:00
renovate[bot]
4387eb381c chore(deps): update actions/checkout action to v4 2024-01-11 22:05:22 +01:00
Mikhail Nacharov
ca098255c5 feat: output built image reference 2024-01-11 22:04:49 +01:00
Alex Viscreanu
e54575cc70
chore(deps): bump kaniko to v1.19.2 and update dependencies 2024-01-11 22:02:42 +01:00
renovate[bot]
78060c4e9d chore(deps): update aevea/release-notary docker digest to b77e86c 2022-12-27 21:25:52 +01:00
renovate[bot]
98d5caab7f chore(deps): update aevea/commitsar docker digest to 18c604f 2022-12-27 21:22:59 +01:00
renovate[bot]
83ddee1c8b chore(deps): update gcr.io/kaniko-project/executor docker tag to v1.9.1 2022-12-27 21:20:48 +01:00
Doron Somech
57fd639926 fix: use version 1.7.0 of kaniko
Version 1.8.0 and above breaks reproducible builds.

https://github.com/GoogleContainerTools/kaniko/issues/2005
2022-05-13 16:59:27 +02:00
Doron Somech
c97b90ade3 chore(deps): update crane to 0.8.0 2022-05-13 16:59:27 +02:00
Doron Somech
1200c08dba fix: downloading manifest doesn't work for github packages 2022-05-13 16:59:27 +02:00
Renovate Bot
a4abaead48 chore(deps): update actions/checkout action to v3 2022-03-31 11:32:10 +02:00
Renovate Bot
59bc747ae2 chore(deps): update aevea/release-notary digest to 03e771a 2022-03-31 11:31:45 +02:00
Renovate Bot
548ad7dd4a chore(deps): update aevea/commitsar digest to 27ea5e5 2022-03-31 11:31:37 +02:00
Sandro Modarelli
20173de989 feat: adding debug flag 2022-03-31 11:29:47 +02:00
Sandro Modarelli
17f90e5aa4 fix: use complete image name when computing latest target 2022-03-31 11:29:47 +02:00
Alex
a5055cd007 docs: update references to github's package registry host 2022-02-21 15:27:55 +01:00
Alex
3e397648f8 fix(ci): use updated github container registry host 2022-02-21 15:25:01 +01:00
Alex Viscreanu
dc591110cc fix: update github container registry host 2022-02-21 15:21:10 +01:00
Julien Semaan
8e9a423400 fix: tag with latest only when its config is true 2022-01-24 10:46:25 +01:00
Alex Viscreanu
f16a14fc0f fix(ci): fetch all necessary commits for commitsar and release notary 2022-01-24 10:45:57 +01:00
Renovate Bot
8bd3e02fd2 chore(deps): update actions/checkout action to v2 2022-01-24 10:13:55 +01:00
Renovate Bot
571e42aef3 chore(deps): update aevea/release-notary docker digest to 8b26ced 2022-01-24 10:11:09 +01:00
Renovate Bot
e846d42497 chore(deps): update aevea/commitsar docker digest to b77adeb 2022-01-24 10:04:50 +01:00
Renovate Bot
b7f0f661e3 chore(deps): update aevea/release-notary docker digest to fad8346 2022-01-24 10:04:40 +01:00
Dmitry Tsoy
7033a0543d fix: long base64 string may contain new-line
if the base64 string has more than 76 characters, it is wrapped with \n
2022-01-24 10:03:08 +01:00
Doron Somech
e03153c634 fix: don't push image when skip_unchanged_digest is set
Kaniko default behavior changed, `--tarPath` alone is not enough to skip the push to registry, `--no-push` is now required as well.

Reference:
GoogleContainerTools/kaniko#1503
2021-09-21 11:52:28 +02:00
7 changed files with 105 additions and 62 deletions

View file

@ -6,6 +6,8 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
name: Verify commit messages name: Verify commit messages
steps: steps:
- uses: actions/checkout@v1 - uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run commitsar - name: Run commitsar
uses: docker://aevea/commitsar@sha256:caf5539dd03309a539906c7ad45c2ecc0ae86a1ee2bf5dc538d7986c523526f3 uses: docker://aevea/commitsar@sha256:e4aed72de9a00b990a53c678ad51fbe9bd04e127a617d10beab0ef0204b1dfa0

View file

@ -11,7 +11,7 @@ jobs:
- name: GitHub Package Registry - name: GitHub Package Registry
uses: aevea/action-kaniko@master uses: aevea/action-kaniko@master
with: with:
registry: docker.pkg.github.com registry: ghcr.io
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
image: kaniko image: kaniko
cache: true cache: true

View file

@ -10,17 +10,22 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Check out code - name: Check out code
uses: actions/checkout@v1 uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Release Notary Action - name: Release Notary Action
uses: docker://aevea/release-notary@sha256:5eef3c539deb5397457a6acf001ef80df6004ec52bc4b8a0eac0577ad92759d0 uses: docker://aevea/release-notary@sha256:690915bf87458fd8eb1e1ff0be34b33377f920eda3f38b96c62ecbf897c831f4
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
entrypoint: release-notary
args: publish
- name: GitHub Package Registry - name: GitHub Package Registry
uses: aevea/action-kaniko@master uses: aevea/action-kaniko@master
with: with:
registry: docker.pkg.github.com registry: ghcr.io
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
image: kaniko image: kaniko
cache: true cache: true

View file

@ -2,18 +2,18 @@ FROM alpine as certs
RUN apk --update add ca-certificates RUN apk --update add ca-certificates
FROM gcr.io/kaniko-project/executor:debug FROM gcr.io/kaniko-project/executor:v1.23.2-debug
SHELL ["/busybox/sh", "-c"] SHELL ["/busybox/sh", "-c"]
RUN wget -O /kaniko/jq \ RUN wget -O /kaniko/jq \
https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 && \ https://github.com/jqlang/jq/releases/download/jq-1.7.1/jq-linux64 && \
chmod +x /kaniko/jq && \ chmod +x /kaniko/jq && \
wget -O /kaniko/reg \ wget -O /kaniko/reg \
https://github.com/genuinetools/reg/releases/download/v0.16.1/reg-linux-386 && \ https://github.com/genuinetools/reg/releases/download/v0.16.1/reg-linux-386 && \
chmod +x /kaniko/reg && \ chmod +x /kaniko/reg && \
wget -O /crane.tar.gz \ wget -O /crane.tar.gz \
https://github.com/google/go-containerregistry/releases/download/v0.1.1/go-containerregistry_Linux_x86_64.tar.gz && \ https://github.com/google/go-containerregistry/releases/download/v0.17.0/go-containerregistry_Linux_x86_64.tar.gz && \
tar -xvzf /crane.tar.gz crane -C /kaniko && \ tar -xvzf /crane.tar.gz crane -C /kaniko && \
rm /crane.tar.gz rm /crane.tar.gz

View file

@ -1,5 +1,8 @@
# Kaniko image builder # Kaniko image builder
> [!WARNING]
> The kaniko project no longer seems to [have maintainers](https://github.com/GoogleContainerTools/kaniko/issues/3348). Keep this in mind before deciding to use kaniko as your image builder.
This Action uses the [kaniko](https://github.com/GoogleContainerTools/kaniko) executor instead of the docker daemon. Kaniko builds the image This Action uses the [kaniko](https://github.com/GoogleContainerTools/kaniko) executor instead of the docker daemon. Kaniko builds the image
by extracting the filesystem of the base image, making the changes in the user space, snapshotting any change and appending it to the base by extracting the filesystem of the base image, making the changes in the user space, snapshotting any change and appending it to the base
image filesystem. image filesystem.
@ -56,6 +59,7 @@ the most used values. So, technically there is a single required argument
| path | Path to the build context. Defaults to `.` | false | . | | path | Path to the build context. Defaults to `.` | false | . |
| tag_with_latest | Tags the built image with additional latest tag | false | | | tag_with_latest | Tags the built image with additional latest tag | false | |
| target | Sets the target stage to build | false | | | target | Sets the target stage to build | false | |
| debug | Enables trace for entrypoint.sh | false | |
**Here is where it gets specific, as the optional arguments become required depending on the registry targeted** **Here is where it gets specific, as the optional arguments become required depending on the registry targeted**
@ -83,7 +87,7 @@ with:
cache_registry: aevea/cache cache_registry: aevea/cache
``` ```
### [docker.pkg.github.com](https://github.com/features/packages) ### [ghcr.io](https://github.com/features/packages)
GitHub's docker registry is a bit special. It doesn't allow top-level images, so this action will prefix any image with the GitHub namespace. GitHub's docker registry is a bit special. It doesn't allow top-level images, so this action will prefix any image with the GitHub namespace.
If you want to push your image like `aevea/action-kaniko/kaniko`, you'll only need to pass `kaniko` to this action. If you want to push your image like `aevea/action-kaniko/kaniko`, you'll only need to pass `kaniko` to this action.
@ -93,7 +97,7 @@ passed by default, it will have to be explicitly set up.
```yaml ```yaml
with: with:
registry: docker.pkg.github.com registry: ghcr.io
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
image: kaniko image: kaniko
``` ```
@ -104,7 +108,7 @@ cache layers to that image instead
```yaml ```yaml
with: with:
registry: docker.pkg.github.com registry: ghcr.io
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
image: kaniko image: kaniko
cache: true cache: true
@ -167,10 +171,16 @@ Example:
```yaml ```yaml
with: with:
registry: docker.pkg.github.com registry: ghcr.io
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.GITHUB_TOKEN }}
image: kaniko image: kaniko
strip_tag_prefix: pre- strip_tag_prefix: pre-
``` ```
for the tag `pre-0.1` will push `kaniko:0.1`, as the `pre-` part will be stripped from the tag name. for the tag `pre-0.1` will push `kaniko:0.1`, as the `pre-` part will be stripped from the tag name.
## Outputs
### `image`
Full reference to the built image with registry and tag.

View file

@ -54,6 +54,12 @@ inputs:
target: target:
description: Sets the target stage to build description: Sets the target stage to build
required: false required: false
debug:
description: Enables trace for entrypoint.sh
required: false
outputs:
image:
description: "Full reference to the built image with registry and tag"
runs: runs:
using: "docker" using: "docker"
image: "Dockerfile" image: "Dockerfile"

View file

@ -1,20 +1,26 @@
#!/busybox/sh #!/busybox/sh
set -e pipefail set -e pipefail
if [ "$INPUT_DEBUG" = "true" ]; then
set -o xtrace
fi
export REGISTRY=${INPUT_REGISTRY:-"docker.io"} export REGISTRY="${INPUT_REGISTRY:-"docker.io"}"
export IMAGE=${INPUT_IMAGE} export IMAGE="$INPUT_IMAGE"
export BRANCH=$(echo ${GITHUB_REF} | sed -E "s/refs\/(heads|tags)\///g" | sed -e "s/\//-/g") export BRANCH=$(echo "$GITHUB_REF" | sed -E "s/refs\/(heads|tags)\///g" | sed -e "s/\//-/g")
export TAG=${INPUT_TAG:-$([ "$BRANCH" == "master" ] && echo latest || echo $BRANCH)} export TAG=${INPUT_TAG:-$([ "$BRANCH" = "master" ] && echo latest || echo "$BRANCH")}
export TAG=${TAG:-"latest"} export TAG="${TAG:-"latest"}"
export TAG=${TAG#$INPUT_STRIP_TAG_PREFIX} export TAG="${TAG#$INPUT_STRIP_TAG_PREFIX}"
export USERNAME=${INPUT_USERNAME:-$GITHUB_ACTOR} export USERNAME="${INPUT_USERNAME:-$GITHUB_ACTOR}"
export PASSWORD=${INPUT_PASSWORD:-$GITHUB_TOKEN} export PASSWORD="${INPUT_PASSWORD:-$GITHUB_TOKEN}"
export REPOSITORY=$IMAGE export REPOSITORY="$IMAGE"
export IMAGE_LATEST=${INPUT_TAG_WITH_LATEST:+"$IMAGE:latest"} export IMAGE="${IMAGE}:${TAG}"
export IMAGE=$IMAGE:$TAG export CONTEXT_PATH="$INPUT_PATH"
export CONTEXT_PATH=${INPUT_PATH}
function ensure() { if [ "$INPUT_TAG_WITH_LATEST" = "true" ]; then
export IMAGE_LATEST="${REPOSITORY}:latest"
fi
ensure() {
if [ -z "${1}" ]; then if [ -z "${1}" ]; then
echo >&2 "Unable to find the ${2} variable. Did you set with.${2}?" echo >&2 "Unable to find the ${2} variable. Did you set with.${2}?"
exit 1 exit 1
@ -28,48 +34,51 @@ ensure "${IMAGE}" "image"
ensure "${TAG}" "tag" ensure "${TAG}" "tag"
ensure "${CONTEXT_PATH}" "path" ensure "${CONTEXT_PATH}" "path"
if [ "$REGISTRY" == "docker.pkg.github.com" ]; then if [ "$REGISTRY" = "ghcr.io" ]; then
IMAGE_NAMESPACE="$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')" IMAGE_NAMESPACE="$(echo $GITHUB_REPOSITORY | tr '[:upper:]' '[:lower:]')"
export IMAGE="$IMAGE_NAMESPACE/$IMAGE" # Set `/` separator, unless image is pre-fixed with dash or slash
export REPOSITORY="$IMAGE_NAMESPACE/$REPOSITORY" [ -n "$REPOSITORY" ] && [[ ! "$REPOSITORY" =~ ^[-/] ]] && SEPARATOR="/"
export IMAGE="$IMAGE_NAMESPACE$SEPARATOR$IMAGE"
export REPOSITORY="$IMAGE_NAMESPACE$SEPARATOR$REPOSITORY"
if [ ! -z $IMAGE_LATEST ]; then if [ -n "$IMAGE_LATEST" ]; then
export IMAGE_LATEST="$IMAGE_NAMESPACE/$IMAGE_LATEST" export IMAGE_LATEST="${IMAGE_NAMESPACE}/${IMAGE_LATEST}"
fi fi
if [ ! -z $INPUT_CACHE_REGISTRY ]; then if [ -n "$INPUT_CACHE_REGISTRY" ]; then
export INPUT_CACHE_REGISTRY="$REGISTRY/$IMAGE_NAMESPACE/$INPUT_CACHE_REGISTRY" export INPUT_CACHE_REGISTRY="${REGISTRY}/${IMAGE_NAMESPACE}/${INPUT_CACHE_REGISTRY}"
fi fi
fi fi
if [ "$REGISTRY" == "docker.io" ]; then if [ "$REGISTRY" = "docker.io" ]; then
export REGISTRY="index.${REGISTRY}/v1/" export REGISTRY="index.${REGISTRY}/v1/"
else else
export IMAGE="$REGISTRY/$IMAGE" export IMAGE="${REGISTRY}/${IMAGE}"
if [ ! -z $IMAGE_LATEST ]; then if [ -n "$IMAGE_LATEST" ]; then
export IMAGE_LATEST="$REGISTRY/$IMAGE_LATEST" export IMAGE_LATEST="${REGISTRY}/${IMAGE_LATEST}"
fi fi
fi fi
export CACHE=${INPUT_CACHE:+"--cache=true"} export CACHE="${INPUT_CACHE:+"--cache=true"}"
export CACHE=$CACHE${INPUT_CACHE_TTL:+" --cache-ttl=$INPUT_CACHE_TTL"} export CACHE="$CACHE"${INPUT_CACHE_TTL:+" --cache-ttl=$INPUT_CACHE_TTL"}
export CACHE=$CACHE${INPUT_CACHE_REGISTRY:+" --cache-repo=$INPUT_CACHE_REGISTRY"} export CACHE="$CACHE"${INPUT_CACHE_REGISTRY:+" --cache-repo=$INPUT_CACHE_REGISTRY"}
export CACHE=$CACHE${INPUT_CACHE_DIRECTORY:+" --cache-dir=$INPUT_CACHE_DIRECTORY"} export CACHE="$CACHE"${INPUT_CACHE_DIRECTORY:+" --cache-dir=$INPUT_CACHE_DIRECTORY"}
export CONTEXT="--context $GITHUB_WORKSPACE/$CONTEXT_PATH" export CONTEXT="--context $GITHUB_WORKSPACE/$CONTEXT_PATH"
export DOCKERFILE="--dockerfile $CONTEXT_PATH/${INPUT_BUILD_FILE:-Dockerfile}" export DOCKERFILE="--dockerfile $CONTEXT_PATH/${INPUT_BUILD_FILE:-Dockerfile}"
export TARGET=${INPUT_TARGET:+"--target=$INPUT_TARGET"} export TARGET=${INPUT_TARGET:+"--target=$INPUT_TARGET"}
export DIGEST="--digest-file /kaniko/digest --image-name-tag-with-digest-file=/kaniko/image-tag-digest"
if [ ! -z $INPUT_SKIP_UNCHANGED_DIGEST ]; then if [ -n "$INPUT_SKIP_UNCHANGED_DIGEST" ]; then
export DESTINATION="--digest-file digest --tarPath image.tar --destination $IMAGE" export DESTINATION="--no-push --tarPath image.tar --destination $IMAGE"
else else
export DESTINATION="--destination $IMAGE" export DESTINATION="--destination $IMAGE"
if [ ! -z $IMAGE_LATEST ]; then if [ -n "$IMAGE_LATEST" ]; then
export DESTINATION="$DESTINATION --destination $IMAGE_LATEST" export DESTINATION="$DESTINATION --destination $IMAGE_LATEST"
fi fi
fi fi
export ARGS="$CACHE $CONTEXT $DOCKERFILE $TARGET $DESTINATION $INPUT_EXTRA_ARGS" export ARGS="$CACHE $CONTEXT $DOCKERFILE $TARGET $DIGEST $DESTINATION $INPUT_EXTRA_ARGS"
cat <<EOF >/kaniko/.docker/config.json cat <<EOF >/kaniko/.docker/config.json
{ {
@ -82,20 +91,31 @@ cat <<EOF >/kaniko/.docker/config.json
} }
EOF EOF
# https://github.com/GoogleContainerTools/kaniko/issues/1803
# https://github.com/GoogleContainerTools/kaniko/issues/1349 # https://github.com/GoogleContainerTools/kaniko/issues/1349
/kaniko/executor --reproducible --force $ARGS export IFS=''
# Removes a trailing new line
ARGS=$(echo "${ARGS}" | sed 's/\n*$//')
kaniko_cmd="/kaniko/executor ${ARGS} --reproducible --force"
echo "Running kaniko command ${kaniko_cmd}"
eval "${kaniko_cmd}"
if [ ! -z $INPUT_SKIP_UNCHANGED_DIGEST ]; then echo "image=$IMAGE" >> "$GITHUB_OUTPUT"
export DIGEST=$(cat digest) echo "digest=$(cat /kaniko/digest)" >> "$GITHUB_OUTPUT"
echo "image-tag-digest<<EOF" >>"$GITHUB_OUTPUT"
echo "$(cat /kaniko/image-tag-digest)" >>"$GITHUB_OUTPUT"
echo 'EOF' >>"$GITHUB_OUTPUT"
if [ "$REGISTRY" == "docker.pkg.github.com" ]; then
wget -q -O manifest --header "Authorization: Basic $(echo -n $USERNAME:$PASSWORD | base64)" https://docker.pkg.github.com/v2/$REPOSITORY/manifests/latest || true
export REMOTE="sha256:$(cat manifest | sha256sum | awk '{ print $1 }')"
else
export REMOTE=$(reg digest -u $USERNAME -p $PASSWORD $REGISTRY/$REPOSITORY | tail -1)
fi
if [ "$DIGEST" == "$REMOTE" ]; then if [ -n "$INPUT_SKIP_UNCHANGED_DIGEST" ]; then
export DIGEST="$(cat /kaniko/digest)"
/kaniko/crane auth login "$REGISTRY" -u "$USERNAME" -p "$PASSWORD"
export REMOTE=$(crane digest "${REGISTRY}/${REPOSITORY}:latest")
if [ "$DIGEST" = "$REMOTE" ]; then
echo "refreshed=false" >> "$GITHUB_OUTPUT"
echo "Digest hasn't changed, skipping, $DIGEST" echo "Digest hasn't changed, skipping, $DIGEST"
echo "Done 🎉️" echo "Done 🎉️"
exit 0 exit 0
@ -103,13 +123,13 @@ if [ ! -z $INPUT_SKIP_UNCHANGED_DIGEST ]; then
echo "Pushing image..." echo "Pushing image..."
/kaniko/crane auth login $REGISTRY -u $USERNAME -p $PASSWORD /kaniko/crane push image.tar "$IMAGE"
/kaniko/crane push image.tar $IMAGE
if [ ! -z $IMAGE_LATEST ]; then if [ -n "$IMAGE_LATEST" ]; then
echo "Tagging latest..." echo "Tagging latest..."
/kaniko/crane tag $IMAGE latest /kaniko/crane tag "$IMAGE" latest
fi fi
echo "refreshed=false" >> "$GITHUB_OUTPUT"
echo "Done 🎉️" echo "Done 🎉️"
fi fi