From b6cc2eed04850f6f15f5cec8114d46d0fd7d4a4b Mon Sep 17 00:00:00 2001 From: Doron Somech Date: Sat, 20 Jun 2020 14:37:54 +0300 Subject: [PATCH] feat: tag_with_latest option to add additional latest tag With skip digest unchanged it is not enough the push the current tag, which is probably semvar, we also need to push the latest, so we can later check if the latest digest equal current tag --- 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..."