Skip to content

Commit 19715e1

Browse files
committed
feat: validate release tags against stadium list
- Add validation for stadium names against official A-Z list from CHANGELOG.md - Validate semver format matches X.Y.Z pattern - Fail fast with helpful error messages before writing outputs - Prevent invalid tags like v1.0.0-aztec or v1.0.0-foobar from proceeding
1 parent 70bde95 commit 19715e1

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

.github/workflows/dotnet-cd.yml

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,14 +29,40 @@ jobs:
2929
id: version
3030
run: |
3131
TAG_NAME=${GITHUB_REF#refs/tags/}
32-
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
3332
3433
# Extract semver (e.g., v1.0.0-azteca -> 1.0.0)
3534
SEMVER=$(echo $TAG_NAME | sed -E 's/^v([0-9]+\.[0-9]+\.[0-9]+)-.*/\1/')
36-
echo "semver=$SEMVER" >> $GITHUB_OUTPUT
3735
3836
# Extract stadium name (e.g., v1.0.0-azteca -> azteca)
3937
STADIUM=$(echo $TAG_NAME | sed -E 's/^v[0-9]+\.[0-9]+\.[0-9]+-//')
38+
39+
# Validate semver format (X.Y.Z)
40+
if ! echo "$SEMVER" | grep -Eq '^[0-9]+\.[0-9]+\.[0-9]+$'; then
41+
echo "❌ Error: Invalid semantic version '$SEMVER' extracted from tag '$TAG_NAME'"
42+
echo "Expected format: v{MAJOR}.{MINOR}.{PATCH}-{STADIUM} (e.g., v1.0.0-azteca)"
43+
exit 1
44+
fi
45+
46+
# Valid stadium names (A-Z from CHANGELOG.md)
47+
VALID_STADIUMS="azteca bernabeu centenario dusseldorf ekaterinburg frankfurt gelsenkirchen hardrock ibnbatouta johannesburg kazan lusail maracana nantes olympiastadion parcdesprinces qatar974 rosebowl sansiro toronto ullevi volgograd wembley xiamen yokohama zentralstadion"
48+
49+
# Validate stadium name against the list
50+
if [ -z "$STADIUM" ]; then
51+
echo "❌ Error: Stadium name is empty in tag '$TAG_NAME'"
52+
echo "Expected format: v{MAJOR}.{MINOR}.{PATCH}-{STADIUM} (e.g., v1.0.0-azteca)"
53+
exit 1
54+
fi
55+
56+
if ! echo "$VALID_STADIUMS" | grep -qw "$STADIUM"; then
57+
echo "❌ Error: Invalid stadium name '$STADIUM' in tag '$TAG_NAME'"
58+
echo "Valid stadiums (A-Z): $VALID_STADIUMS"
59+
echo "See CHANGELOG.md for the complete list"
60+
exit 1
61+
fi
62+
63+
# Export validated outputs
64+
echo "tag_name=$TAG_NAME" >> $GITHUB_OUTPUT
65+
echo "semver=$SEMVER" >> $GITHUB_OUTPUT
4066
echo "stadium=$STADIUM" >> $GITHUB_OUTPUT
4167
4268
echo "📦 Release version: $SEMVER"

0 commit comments

Comments
 (0)