From a5e252b3b1dce0fdf6fdf10c80c4df9301bf30ad Mon Sep 17 00:00:00 2001 From: estebanthi Date: Thu, 26 Mar 2026 14:39:51 +0100 Subject: [PATCH] Allow extra image tags on non-tag builds --- .github/workflows/docker-build-publish.yml | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/.github/workflows/docker-build-publish.yml b/.github/workflows/docker-build-publish.yml index 279ae7d..77050da 100644 --- a/.github/workflows/docker-build-publish.yml +++ b/.github/workflows/docker-build-publish.yml @@ -50,6 +50,14 @@ on: description: > Multiline build args, one per line: KEY=VALUE (values may include spaces) + extra_tags: + description: > + Optional extra tags to apply to each image. + Accepts JSON array (e.g. ["latest", "main"]) or newline-separated list. + required: false + type: string + default: "" + env: description: > Multiline env vars, one per line: KEY=VALUE @@ -138,6 +146,7 @@ jobs: env: IMAGES: ${{ inputs.images }} BUILD_ARGS: ${{ inputs.build_args }} + EXTRA_TAGS_INPUT: ${{ inputs.extra_tags }} CI_TOKEN: ${{ secrets.ci_token }} TRIVY_SEVERITY: ${{ inputs.trivy_severity }} run: | @@ -177,6 +186,25 @@ jobs: VERSION_TAGS+=("latest") fi + EXTRA_TAGS=() + if [ -n "$EXTRA_TAGS_INPUT" ]; then + if echo "$EXTRA_TAGS_INPUT" | jq -e . >/dev/null 2>&1; then + if ! echo "$EXTRA_TAGS_INPUT" | jq -e 'type == "array"' >/dev/null 2>&1; then + echo "inputs.extra_tags must be a JSON array" >&2 + exit 1 + fi + mapfile -t EXTRA_TAGS < <(echo "$EXTRA_TAGS_INPUT" | jq -r '.[]') + else + while IFS= read -r line; do + trimmed="${line#"${line%%[![:space:]]*}"}" + trimmed="${trimmed%"${trimmed##*[![:space:]]}"}" + [ -z "$trimmed" ] && continue + case "$trimmed" in \#*) continue;; esac + EXTRA_TAGS+=("$trimmed") + done <<< "$EXTRA_TAGS_INPUT" + fi + fi + BUILD_ARG_FLAGS=() BUILD_ARGS_JSON="{}" if [ -n "$BUILD_ARGS" ]; then @@ -256,6 +284,9 @@ jobs: for ver in "${VERSION_TAGS[@]}"; do TAGS+=("$FULL_IMAGE:$ver") done + for extra in "${EXTRA_TAGS[@]}"; do + TAGS+=("$FULL_IMAGE:$extra") + done TAGS_JSON=$(printf '%s\n' "${TAGS[@]}" | jq -R . | jq -s .) TARGET_NAME="img_${IDX}" @@ -315,6 +346,9 @@ jobs: for ver in "${VERSION_TAGS[@]}"; do TAGS+=("$FULL_IMAGE:$ver") done + for extra in "${EXTRA_TAGS[@]}"; do + TAGS+=("$FULL_IMAGE:$extra") + done TAG_ARGS=() for tag in "${TAGS[@]}"; do