Added support for entry variants with branches #3
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Check Version Bump | |
| on: | |
| pull_request: | |
| jobs: | |
| version-bump: | |
| name: Version & Changelog bump | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Detect changed files and version bump | |
| id: detect | |
| run: | | |
| if git rev-parse HEAD^2 >/dev/null 2>&1; then | |
| FILES=$(git diff --name-only HEAD^1 HEAD^2) | |
| else | |
| FILES=$(git diff --name-only HEAD~1 HEAD) | |
| fi | |
| VERSION_FILES_CHANGED=false | |
| echo "$FILES" | grep -qx 'lib/contentstack/version.rb' && VERSION_FILES_CHANGED=true | |
| echo "$FILES" | grep -qx 'CHANGELOG.md' && VERSION_FILES_CHANGED=true | |
| echo "version_files_changed=$VERSION_FILES_CHANGED" >> $GITHUB_OUTPUT | |
| # Only lib/ counts as release-affecting; .github/ and spec/ do not | |
| CODE_CHANGED=false | |
| echo "$FILES" | grep -qE '^lib/' && CODE_CHANGED=true | |
| echo "code_changed=$CODE_CHANGED" >> $GITHUB_OUTPUT | |
| - name: Skip when only test/docs/.github changed | |
| if: steps.detect.outputs.code_changed != 'true' | |
| run: | | |
| echo "No release-affecting files changed (e.g. only spec/docs/.github). Skipping version-bump check." | |
| exit 0 | |
| - name: Fail when version bump was missed | |
| if: steps.detect.outputs.code_changed == 'true' && steps.detect.outputs.version_files_changed != 'true' | |
| run: | | |
| echo "::error::This PR has code changes but no version bump. Please bump the version in lib/contentstack/version.rb and add an entry in CHANGELOG.md." | |
| exit 1 | |
| - name: Check version bump | |
| if: steps.detect.outputs.code_changed == 'true' && steps.detect.outputs.version_files_changed == 'true' | |
| run: | | |
| set -e | |
| GEM_VERSION=$(sed -n 's/.*VERSION = "\(.*\)".*/\1/p' lib/contentstack/version.rb) | |
| if [ -z "$GEM_VERSION" ]; then | |
| echo "::error::Could not read version from lib/contentstack/version.rb" | |
| exit 1 | |
| fi | |
| git fetch --tags --force 2>/dev/null || true | |
| LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || true) | |
| if [ -z "$LATEST_TAG" ]; then | |
| echo "No existing tags found. Skipping version-bump check (first release)." | |
| exit 0 | |
| fi | |
| LATEST_VERSION="${LATEST_TAG#v}" | |
| LATEST_VERSION="${LATEST_VERSION%%-*}" | |
| if [ "$(printf '%s\n' "$LATEST_VERSION" "$GEM_VERSION" | sort -V | tail -1)" != "$GEM_VERSION" ]; then | |
| echo "::error::Version bump required: lib/contentstack/version.rb ($GEM_VERSION) is not greater than latest tag ($LATEST_TAG). Please bump Contentstack::VERSION." | |
| exit 1 | |
| fi | |
| if [ "$GEM_VERSION" = "$LATEST_VERSION" ]; then | |
| echo "::error::Version bump required: lib/contentstack/version.rb ($GEM_VERSION) equals latest tag ($LATEST_TAG). Please bump Contentstack::VERSION." | |
| exit 1 | |
| fi | |
| CHANGELOG_VERSION=$(sed -nE 's/^## Version ([0-9]+\.[0-9]+\.[0-9]+).*/\1/p' CHANGELOG.md | head -1) | |
| if [ -z "$CHANGELOG_VERSION" ]; then | |
| echo "::error::Could not find a version entry in CHANGELOG.md (expected line like '## Version 1.0.0')." | |
| exit 1 | |
| fi | |
| if [ "$CHANGELOG_VERSION" != "$GEM_VERSION" ]; then | |
| echo "::error::CHANGELOG version mismatch: CHANGELOG.md top version ($CHANGELOG_VERSION) does not match lib/contentstack/version.rb ($GEM_VERSION). Please add or update the CHANGELOG entry for $GEM_VERSION." | |
| exit 1 | |
| fi | |
| echo "Version bump check passed: lib/contentstack/version.rb and CHANGELOG.md are at $GEM_VERSION (latest tag: $LATEST_TAG)." |