Skip to content

Commit 9220ee3

Browse files
authored
chore: CI validates release tag against CMakeLists.txt (#11374)
I just made this mistake again (twice!) and had to redo `v4.24.1` and `v4.25.2`. Let's prevent it from happening.
1 parent 130d3cb commit 9220ee3

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

.github/workflows/ci.yml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,50 @@ jobs:
106106
TAG_NAME="${GITHUB_REF##*/}"
107107
echo "RELEASE_TAG=$TAG_NAME" >> "$GITHUB_OUTPUT"
108108
109+
- name: Validate CMakeLists.txt version matches tag
110+
if: steps.set-release.outputs.RELEASE_TAG != ''
111+
run: |
112+
echo "Validating CMakeLists.txt version matches tag ${{ steps.set-release.outputs.RELEASE_TAG }}"
113+
114+
# Extract version values from CMakeLists.txt
115+
CMAKE_MAJOR=$(grep -E "^set\(LEAN_VERSION_MAJOR " src/CMakeLists.txt | grep -oE '[0-9]+')
116+
CMAKE_MINOR=$(grep -E "^set\(LEAN_VERSION_MINOR " src/CMakeLists.txt | grep -oE '[0-9]+')
117+
CMAKE_PATCH=$(grep -E "^set\(LEAN_VERSION_PATCH " src/CMakeLists.txt | grep -oE '[0-9]+')
118+
CMAKE_IS_RELEASE=$(grep -E "^set\(LEAN_VERSION_IS_RELEASE " src/CMakeLists.txt | grep -oE '[0-9]+')
119+
120+
# Expected values from tag parsing
121+
TAG_MAJOR="${{ steps.set-release.outputs.LEAN_VERSION_MAJOR }}"
122+
TAG_MINOR="${{ steps.set-release.outputs.LEAN_VERSION_MINOR }}"
123+
TAG_PATCH="${{ steps.set-release.outputs.LEAN_VERSION_PATCH }}"
124+
125+
ERRORS=""
126+
127+
if [[ "$CMAKE_MAJOR" != "$TAG_MAJOR" ]]; then
128+
ERRORS+="LEAN_VERSION_MAJOR: expected $TAG_MAJOR, found $CMAKE_MAJOR\n"
129+
fi
130+
if [[ "$CMAKE_MINOR" != "$TAG_MINOR" ]]; then
131+
ERRORS+="LEAN_VERSION_MINOR: expected $TAG_MINOR, found $CMAKE_MINOR\n"
132+
fi
133+
if [[ "$CMAKE_PATCH" != "$TAG_PATCH" ]]; then
134+
ERRORS+="LEAN_VERSION_PATCH: expected $TAG_PATCH, found $CMAKE_PATCH\n"
135+
fi
136+
if [[ "$CMAKE_IS_RELEASE" != "1" ]]; then
137+
ERRORS+="LEAN_VERSION_IS_RELEASE: expected 1, found $CMAKE_IS_RELEASE\n"
138+
fi
139+
140+
if [[ -n "$ERRORS" ]]; then
141+
echo "::error::Version mismatch between tag and src/CMakeLists.txt"
142+
echo ""
143+
echo "Tag ${{ steps.set-release.outputs.RELEASE_TAG }} expects version $TAG_MAJOR.$TAG_MINOR.$TAG_PATCH"
144+
echo "But src/CMakeLists.txt has mismatched values:"
145+
echo -e "$ERRORS"
146+
echo ""
147+
echo "Fix src/CMakeLists.txt, delete the tag, and re-tag."
148+
exit 1
149+
fi
150+
151+
echo "Version validation passed: $TAG_MAJOR.$TAG_MINOR.$TAG_PATCH"
152+
109153
# 0: PRs without special label
110154
# 1: PRs with `merge-ci` label, merge queue checks, master commits
111155
# 2: nightlies

0 commit comments

Comments
 (0)