@@ -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