Skip to content

Commit b681dcb

Browse files
committed
fix(ci): reject unsafe release dispatch tags
1 parent 111cff7 commit b681dcb

1 file changed

Lines changed: 24 additions & 6 deletions

File tree

‎.github/workflows/release.yml‎

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,18 @@ jobs:
8686
run: |
8787
set -euo pipefail
8888
TAG="${DISPATCH_TAG:-$RELEASE_TAG}"
89+
case "$TAG" in
90+
""|*[!A-Za-z0-9._-]*)
91+
echo "::error::release tag is empty or contains invalid characters"
92+
exit 1
93+
;;
94+
esac
8995
case "$TAG" in
9096
v[0-9]*) ;;
9197
*) echo "::error::'$TAG' does not look like a release tag (vX.Y.Z)"; exit 1 ;;
9298
esac
93-
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
94-
echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
99+
printf '%s\n' "tag=$TAG" >> "$GITHUB_OUTPUT"
100+
printf '%s\n' "version=${TAG#v}" >> "$GITHUB_OUTPUT"
95101
# ghcr requires a lowercase repository path, and unlike metadata-action,
96102
# buildx's `--output name=` does no lowercasing — a mixed-case owner
97103
# makes the digest push fail with "invalid reference format".
@@ -183,12 +189,18 @@ jobs:
183189
run: |
184190
set -euo pipefail
185191
TAG="${DISPATCH_TAG:-$RELEASE_TAG}"
192+
case "$TAG" in
193+
""|*[!A-Za-z0-9._-]*)
194+
echo "::error::release tag is empty or contains invalid characters"
195+
exit 1
196+
;;
197+
esac
186198
case "$TAG" in
187199
v[0-9]*) ;;
188200
*) echo "::error::'$TAG' does not look like a release tag (vX.Y.Z)"; exit 1 ;;
189201
esac
190-
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
191-
echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
202+
printf '%s\n' "tag=$TAG" >> "$GITHUB_OUTPUT"
203+
printf '%s\n' "version=${TAG#v}" >> "$GITHUB_OUTPUT"
192204
193205
- name: Download digests
194206
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
@@ -412,12 +424,18 @@ jobs:
412424
run: |
413425
set -euo pipefail
414426
TAG="${DISPATCH_TAG:-$RELEASE_TAG}"
427+
case "$TAG" in
428+
""|*[!A-Za-z0-9._-]*)
429+
echo "::error::release tag is empty or contains invalid characters"
430+
exit 1
431+
;;
432+
esac
415433
case "$TAG" in
416434
v[0-9]*) ;;
417435
*) echo "::error::'$TAG' does not look like a release tag (vX.Y.Z)"; exit 1 ;;
418436
esac
419-
echo "tag=$TAG" >> "$GITHUB_OUTPUT"
420-
echo "version=${TAG#v}" >> "$GITHUB_OUTPUT"
437+
printf '%s\n' "tag=$TAG" >> "$GITHUB_OUTPUT"
438+
printf '%s\n' "version=${TAG#v}" >> "$GITHUB_OUTPUT"
421439
422440
- name: Checkout release tag
423441
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

0 commit comments

Comments
 (0)