From 79ed56ad9077c248c8190727af52fd3f4ca496e8 Mon Sep 17 00:00:00 2001 From: Doron Somech Date: Sat, 20 Jun 2020 14:37:54 +0300 Subject: [PATCH] feat: Add tag_with_latest option for tagging with latest additionally When skipping the push on unchanged digests, it's not enough to push the current tag, which is probably semver, we also need to push the latest, so we can later check if the latest digest equals the currently built image --- README.md | 1 + action.yml | 3 +++ entrypoint.sh | 16 ++++++++++++++++ 3 files changed, 20 insertions(+) diff --git a/README.md b/README.md index 54ac7cf..7b4569f 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,7 @@ the most used values. So, technically there is a single required argument | strip_tag_prefix | Prefix to be stripped from the tag | false | | | skip_unchanged_digest | Avoids pushing the image if the build generated the same digest | false | | | path | Path to the build context. Defaults to `.` | false | . | +| tag_with_latest | Tags the built image with additional latest tag | false | | **Here is where it gets specific, as the optional arguments become required depending on the registry targeted** diff --git a/action.yml b/action.yml index df1708d..a31b0dc 100644 --- a/action.yml +++ b/action.yml @@ -48,6 +48,9 @@ inputs: skip_unchanged_digest: description: "Avoids pushing the image if the build generated the same digest" required: false + tag_with_latest: + description: "Tags the built image with additional latest tag" + required: false runs: using: "docker" image: "Dockerfile" diff --git a/entrypoint.sh b/entrypoint.sh index 95bd64a..4f944e1 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -10,6 +10,7 @@ export TAG=${TAG#$INPUT_STRIP_TAG_PREFIX} export USERNAME=${INPUT_USERNAME:-$GITHUB_ACTOR} export PASSWORD=${INPUT_PASSWORD:-$GITHUB_TOKEN} export REPOSITORY=$IMAGE +export IMAGE_LATEST=${INPUT_TAG_WITH_LATEST:+"$IMAGE:latest"} export IMAGE=$IMAGE:$TAG export CONTEXT_PATH=${INPUT_PATH} @@ -32,6 +33,10 @@ if [ "$REGISTRY" == "docker.pkg.github.com" ]; then export IMAGE="$IMAGE_NAMESPACE/$IMAGE" export REPOSITORY="$IMAGE_NAMESPACE/$REPOSITORY" + if [ ! -z $IMAGE_LATEST ]; then + export IMAGE_LATEST="$IMAGE_NAMESPACE/$IMAGE_LATEST" + fi + if [ ! -z $INPUT_CACHE_REGISTRY ]; then export INPUT_CACHE_REGISTRY="$REGISTRY/$IMAGE_NAMESPACE/$INPUT_CACHE_REGISTRY" fi @@ -41,6 +46,10 @@ if [ "$REGISTRY" == "docker.io" ]; then export REGISTRY="index.${REGISTRY}/v1/" else export IMAGE="$REGISTRY/$IMAGE" + + if [ ! -z $IMAGE_LATEST ]; then + export IMAGE_LATEST="$REGISTRY/$IMAGE_LATEST" + fi fi export CACHE=${INPUT_CACHE:+"--cache=true"} @@ -54,6 +63,9 @@ if [ ! -z $INPUT_SKIP_UNCHANGED_DIGEST ]; then export DESTINATION="--no-push --digest-file digest" else export DESTINATION="--destination $IMAGE" + if [ ! -z $IMAGE_LATEST ]; then + export DESTINATION="$DESTINATION --destination $IMAGE_LATEST" + fi fi export ARGS="$CACHE $CONTEXT $DOCKERFILE $DESTINATION $INPUT_EXTRA_ARGS" @@ -88,6 +100,10 @@ if [ ! -z $INPUT_SKIP_UNCHANGED_DIGEST ]; then fi export DESTINATION="--destination $IMAGE" + if [ ! -z $IMAGE_LATEST ]; then + export DESTINATION="$DESTINATION --destination $IMAGE_LATEST" + fi + export ARGS="$CACHE $CONTEXT $DOCKERFILE $DESTINATION $INPUT_EXTRA_ARGS" echo "Pushing image..."