Skip to content

Commit 7c4e54d

Browse files
committed
add option to keep v prefix in tag
Signed-off-by: André Bauer <andre.bauer@staffbase.com>
1 parent b514425 commit 7c4e54d

4 files changed

Lines changed: 43 additions & 3 deletions

File tree

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ These keys mirror the [Swarmia Deployment API](https://help.swarmia.com/settings
127127
| `docker-image` | Docker Image | |
128128
| `docker-custom-tag` | Docker Custom Tag to be set on the image | |
129129
| `docker-tag-timestamp` | Insert a UTC timestamp into `dev`/`main`/`master` branch tags (`dev-<timestamp>-<short-sha>`) to make them sortable for Flux image automation | `false` |
130+
| `docker-tag-keep-v-prefix` | Keep the leading `v` on release (`v*`) tags (`v1.2.3` → `v1.2.3`). Default strips it (`v1.2.3` → `1.2.3`) | `false` |
130131
| `docker-username` | Username for the Docker Registry | |
131132
| `docker-password` | Password for the Docker Registry | |
132133
| `docker-file` | Dockerfile | `./Dockerfile` |
@@ -163,7 +164,7 @@ The generated image tag depends on the Git ref:
163164
| `dev` branch | `dev-<short-sha>` | `dev-<utc-timestamp>-<short-sha>` | `dev` |
164165
| `main` branch | `main-<short-sha>` | `main-<utc-timestamp>-<short-sha>` | `main` |
165166
| `master` branch | `master-<short-sha>` | `master-<utc-timestamp>-<short-sha>` | `master` |
166-
| `v*` tag (prod) | the version, e.g. `2025.50.14` (CalVer) | _(unchanged)_ | `latest` |
167+
| `v*` tag (prod) | the version with the `v` stripped, e.g. `v2025.50.14` → `2025.50.14` (or kept with `docker-tag-keep-v-prefix: 'true'`) | _(unchanged)_ | `latest` |
167168
| other branch | `<short-sha>` (not pushed) | _(unchanged)_ | — |
168169

169170
By default branch tags keep the legacy `<prefix>-<short-sha>` shape. Set

action.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,10 @@ inputs:
2121
description: 'Insert a UTC timestamp into dev/main/master branch tags (e.g. dev-20260602143055-<short-sha>) to make them sortable for Flux image automation. Opt-in; defaults to the legacy <prefix>-<short-sha> format.'
2222
required: false
2323
default: 'false'
24+
docker-tag-keep-v-prefix:
25+
description: 'Keep the leading "v" on release (v*) tags (v1.2.3 -> v1.2.3). Opt-in; defaults to stripping it (v1.2.3 -> 1.2.3).'
26+
required: false
27+
default: 'false'
2428
docker-username:
2529
description: 'Username for the Docker Registry'
2630
required: false
@@ -117,6 +121,7 @@ runs:
117121
env:
118122
INPUT_DOCKER_CUSTOM_TAG: ${{ inputs.docker-custom-tag }}
119123
INPUT_DOCKER_TAG_TIMESTAMP: ${{ inputs.docker-tag-timestamp }}
124+
INPUT_DOCKER_TAG_KEEP_V_PREFIX: ${{ inputs.docker-tag-keep-v-prefix }}
120125
INPUT_DOCKER_DISABLE_RETAGGING: ${{ inputs.docker-disable-retagging }}
121126
INPUT_DOCKER_REGISTRY: ${{ inputs.docker-registry }}
122127
INPUT_DOCKER_IMAGE: ${{ inputs.docker-image }}

scripts/generate-tags.sh

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
# Generates Docker image tags based on the current Git ref.
33
#
44
# Required env vars: GITHUB_REF, GITHUB_SHA, INPUT_DOCKER_REGISTRY, INPUT_DOCKER_IMAGE
5-
# Optional env vars: INPUT_DOCKER_CUSTOM_TAG, INPUT_DOCKER_DISABLE_RETAGGING
5+
# Optional env vars: INPUT_DOCKER_CUSTOM_TAG, INPUT_DOCKER_DISABLE_RETAGGING,
6+
# INPUT_DOCKER_TAG_TIMESTAMP, INPUT_DOCKER_TAG_KEEP_V_PREFIX
67
#
78
# Outputs (via GITHUB_OUTPUT): build, latest, push, tag, tag_list
89

@@ -65,7 +66,13 @@ elif [[ $GITHUB_REF == refs/heads/dev ]]; then
6566
LATEST="dev"
6667
PUSH="true"
6768
elif [[ $GITHUB_REF == refs/tags/v* ]]; then
68-
TAG="${GITHUB_REF:11}"
69+
# By default the leading "v" is stripped (v1.2.3 -> 1.2.3). Set
70+
# INPUT_DOCKER_TAG_KEEP_V_PREFIX=true to keep it (v1.2.3 -> v1.2.3).
71+
if [[ "${INPUT_DOCKER_TAG_KEEP_V_PREFIX:-false}" == "true" ]]; then
72+
TAG="${GITHUB_REF#refs/tags/}"
73+
else
74+
TAG="${GITHUB_REF:11}"
75+
fi
6976
LATEST="latest"
7077
PUSH="true"
7178
BUILD="${INPUT_DOCKER_DISABLE_RETAGGING:-false}"

tests/generate-tags.bats

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ setup() {
1414
# Timestamp suffix is opt-in; default off so the legacy <prefix>-<sha> format
1515
# is the baseline. Tests that exercise the suffix set the flag explicitly.
1616
unset INPUT_DOCKER_TAG_TIMESTAMP
17+
# Keeping the "v" prefix on release tags is opt-in; default off.
18+
unset INPUT_DOCKER_TAG_KEEP_V_PREFIX
1719
# Pin the timestamp so the opt-in branch tags are deterministic in tests.
1820
export BUILD_TIMESTAMP="20260602143055"
1921
}
@@ -143,6 +145,31 @@ teardown() {
143145
assert_output_value "push" "true"
144146
}
145147

148+
@test "version tag strips the v prefix by default" {
149+
export GITHUB_REF="refs/tags/v1.2.3"
150+
run "$SCRIPT"
151+
assert_success
152+
assert_output_value "tag" "1.2.3"
153+
}
154+
155+
@test "version tag keeps the v prefix when flag is enabled" {
156+
export INPUT_DOCKER_TAG_KEEP_V_PREFIX="true"
157+
export GITHUB_REF="refs/tags/v1.2.3"
158+
run "$SCRIPT"
159+
assert_success
160+
assert_output_value "tag" "v1.2.3"
161+
assert_output_value "latest" "latest"
162+
assert_output_value "push" "true"
163+
}
164+
165+
@test "keep-v-prefix flag does not affect non-v tags" {
166+
export INPUT_DOCKER_TAG_KEEP_V_PREFIX="true"
167+
export GITHUB_REF="refs/tags/release-1"
168+
run "$SCRIPT"
169+
assert_success
170+
assert_output_value "tag" "release-1"
171+
}
172+
146173
@test "version tag uses docker-disable-retagging for build flag" {
147174
export GITHUB_REF="refs/tags/v1.2.3"
148175
export INPUT_DOCKER_DISABLE_RETAGGING="true"

0 commit comments

Comments
 (0)