4343 - name : Validate versioning and changelog
4444 if : steps.check-changes.outputs.has_changes == 'true'
4545 run : |
46+ set -e
4647 PACKAGE_DIR="packages/ui"
4748
49+ echo "::group::Version Validation"
50+ echo "Starting validation for package: $PACKAGE_DIR"
51+
4852 # Get current version from package.json
4953 CURRENT_VERSION=$(node -e "console.log(require('./$PACKAGE_DIR/package.json').version)")
5054 echo "Current version in package.json: $CURRENT_VERSION"
5559 echo "Base version in package.json: $BASE_VERSION"
5660
5761 # Validate version format and check if version was increased (semantic versioning)
62+ echo "Validating version format and increment..."
5863 VERSION_CHECK=$(node -e "
5964 const semver = require('semver');
6065 const current = '$CURRENT_VERSION';
@@ -96,11 +101,18 @@ jobs:
96101 " 2>&1)
97102
98103 VERSION_CHECK_EXIT=$?
104+
105+ echo "Full version check output:"
106+ echo "$VERSION_CHECK"
107+
99108 VERSION_CHECK_OUTPUT=$(echo "$VERSION_CHECK" | head -1)
109+ echo "First line of output: $VERSION_CHECK_OUTPUT"
100110
101111 if [ $VERSION_CHECK_EXIT -ne 0 ]; then
112+ echo "::error file=$PACKAGE_DIR/package.json::Version validation failed"
102113 case "$VERSION_CHECK_OUTPUT" in
103114 "INVALID_CURRENT")
115+ echo "::error::Current version '$CURRENT_VERSION' is not a valid semantic version!"
104116 echo "❌ ERROR: Current version '$CURRENT_VERSION' is not a valid semantic version!"
105117 echo "Please use semantic versioning format (e.g., 1.0.0, 1.0.1, 1.1.0, 2.0.0)"
106118 exit 1
@@ -110,6 +122,7 @@ jobs:
110122 echo "Assuming version bump is valid (first release or manual version)"
111123 ;;
112124 "SAME_VERSION")
125+ echo "::error file=$PACKAGE_DIR/package.json::Version was not bumped!"
113126 echo "❌ ERROR: Version in package.json was not bumped!"
114127 echo "Current version: $CURRENT_VERSION"
115128 echo "Base version: $BASE_VERSION"
@@ -120,6 +133,7 @@ jobs:
120133 PATCH_VER=$(echo "$VERSION_CHECK" | grep "PATCH=" | cut -d= -f2)
121134 MINOR_VER=$(echo "$VERSION_CHECK" | grep "MINOR=" | cut -d= -f2)
122135 MAJOR_VER=$(echo "$VERSION_CHECK" | grep "MAJOR=" | cut -d= -f2)
136+ echo "::error file=$PACKAGE_DIR/package.json::Version must be greater than base version!"
123137 echo "❌ ERROR: Version must be greater than the base version!"
124138 echo "Current version: $CURRENT_VERSION"
125139 echo "Base version: $BASE_VERSION"
@@ -130,16 +144,30 @@ jobs:
130144 echo " - Major: $BASE_VERSION -> $MAJOR_VER"
131145 exit 1
132146 ;;
147+ *)
148+ echo "::error::Unknown version validation error"
149+ echo "❌ ERROR: Unknown version validation error"
150+ echo "Full output was:"
151+ echo "$VERSION_CHECK"
152+ exit 1
153+ ;;
133154 esac
134155 else
135156 echo "✅ Version was bumped from $BASE_VERSION to $CURRENT_VERSION (valid semver increment)"
136157 fi
158+ echo "::endgroup::"
137159
160+ echo "::group::Package Lock Validation"
138161 # Verify version in package-lock.json matches package.json
139162 LOCKFILE_TOP_VERSION=$(node -e "console.log(require('./$PACKAGE_DIR/package-lock.json').version)")
140163 LOCKFILE_PACKAGE_VERSION=$(node -e "console.log(require('./$PACKAGE_DIR/package-lock.json').packages[''].version)")
141164
165+ echo "package.json version: $CURRENT_VERSION"
166+ echo "package-lock.json top-level version: $LOCKFILE_TOP_VERSION"
167+ echo "package-lock.json packages[''].version: $LOCKFILE_PACKAGE_VERSION"
168+
142169 if [ "$LOCKFILE_TOP_VERSION" != "$CURRENT_VERSION" ]; then
170+ echo "::error file=$PACKAGE_DIR/package-lock.json::Version mismatch in package-lock.json (top-level)!"
143171 echo "❌ ERROR: Version mismatch in package-lock.json (top-level)!"
144172 echo "package.json version: $CURRENT_VERSION"
145173 echo "package-lock.json top-level version: $LOCKFILE_TOP_VERSION"
@@ -148,6 +176,7 @@ jobs:
148176 fi
149177
150178 if [ "$LOCKFILE_PACKAGE_VERSION" != "$CURRENT_VERSION" ]; then
179+ echo "::error file=$PACKAGE_DIR/package-lock.json::Version mismatch in package-lock.json (packages[''])!"
151180 echo "❌ ERROR: Version mismatch in package-lock.json (packages[''])!"
152181 echo "package.json version: $CURRENT_VERSION"
153182 echo "package-lock.json packages[''].version: $LOCKFILE_PACKAGE_VERSION"
@@ -156,10 +185,16 @@ jobs:
156185 fi
157186
158187 echo "✅ Version in package-lock.json matches package.json: $CURRENT_VERSION (both top-level and packages[''])"
188+ echo "::endgroup::"
159189
190+ echo "::group::Changelog Validation"
160191 # Check if changelog has entry for this version
161192 CHANGELOG_FILE="$PACKAGE_DIR/CHANGELOG.md"
193+ echo "Checking changelog file: $CHANGELOG_FILE"
194+ echo "Looking for version: $CURRENT_VERSION"
195+
162196 if ! grep -q "^## \\[$CURRENT_VERSION\\]" "$CHANGELOG_FILE"; then
197+ echo "::error file=$CHANGELOG_FILE::Changelog entry for version $CURRENT_VERSION not found!"
163198 echo "❌ ERROR: Changelog entry for version $CURRENT_VERSION not found!"
164199 echo "Please add a changelog entry in $CHANGELOG_FILE with the format:"
165200 echo "## [$CURRENT_VERSION] - YYYY-MM-DD"
@@ -171,16 +206,20 @@ jobs:
171206 # Verify changelog entry is not empty (has content after the version header)
172207 CHANGELOG_LINE=$(grep -n "^## \\[$CURRENT_VERSION\\]" "$CHANGELOG_FILE" | cut -d: -f1)
173208 if [ -z "$CHANGELOG_LINE" ]; then
209+ echo "::error file=$CHANGELOG_FILE::Could not find changelog entry line"
174210 echo "❌ ERROR: Could not find changelog entry line"
175211 exit 1
176212 fi
177213
214+ echo "Changelog entry found at line: $CHANGELOG_LINE"
215+
178216 # Check if there's content after the version header (skip empty entries)
179217 NEXT_VERSION_LINE=$(tail -n +$((CHANGELOG_LINE + 1)) "$CHANGELOG_FILE" | grep -n "^## \\[" | head -1 | cut -d: -f1)
180218 if [ -z "$NEXT_VERSION_LINE" ]; then
181219 # This is the latest version, check if there's any content after the header
182220 LINES_AFTER_HEADER=$(tail -n +$((CHANGELOG_LINE + 1)) "$CHANGELOG_FILE" | grep -v '^$' | head -1)
183221 if [ -z "$LINES_AFTER_HEADER" ]; then
222+ echo "::error file=$CHANGELOG_FILE::Changelog entry for version $CURRENT_VERSION is empty!"
184223 echo "❌ ERROR: Changelog entry for version $CURRENT_VERSION is empty!"
185224 echo "Please add at least one change entry (Added, Changed, Fixed, etc.)"
186225 exit 1
@@ -189,10 +228,15 @@ jobs:
189228 # Check if there's content between this version and the next
190229 LINES_BETWEEN=$(sed -n "$((CHANGELOG_LINE + 1)),$((CHANGELOG_LINE + NEXT_VERSION_LINE - 1))p" "$CHANGELOG_FILE" | grep -v '^$' | head -1)
191230 if [ -z "$LINES_BETWEEN" ]; then
231+ echo "::error file=$CHANGELOG_FILE::Changelog entry for version $CURRENT_VERSION is empty!"
192232 echo "❌ ERROR: Changelog entry for version $CURRENT_VERSION is empty!"
193233 echo "Please add at least one change entry (Added, Changed, Fixed, etc.)"
194234 exit 1
195235 fi
196236 fi
197- echo "✅ Changelog entry for version $CURRENT_VERSION has content"
237+
238+ echo "✅ Changelog entry for version $CURRENT_VERSION has content"
239+ echo "::endgroup::"
240+
241+ echo "::notice::All validations passed successfully!"
198242
0 commit comments