name: Pull Request on: pull_request: branches: - main jobs: unit-tests: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run unit tests run: npm run test:run analyze-bump-type: runs-on: ubuntu-latest needs: unit-tests if: success() steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Analyze commits for bump type id: bump_type run: | # Get the merge base and PR commits git fetch origin main:main 2>/dev/null || true MERGE_BASE=$(git merge-base HEAD main 2>/dev/null || echo "HEAD~1") # Analyze commits in this PR COMMITS=$(git log --oneline ${MERGE_BASE}..HEAD 2>/dev/null || git log --oneline -10) echo "Commits in this PR:" echo "$COMMITS" echo "" # Determine bump type if echo "$COMMITS" | grep -qE "(BREAKING CHANGE|!:)"; then BUMP="major" REASON="Breaking change detected in commit messages" elif echo "$COMMITS" | grep -qE "^feat"; then BUMP="minor" REASON="Feature commits detected" else BUMP="patch" REASON="Defaulting to patch (fixes or other changes)" fi echo "Suggested bump type: $BUMP" echo "Reason: $REASON" echo "bump=$BUMP" >> $GITHUB_OUTPUT echo "reason=$REASON" >> $GITHUB_OUTPUT - name: Comment bump type on PR uses: actions/github-script@v7 with: script: | const bump = '${{ steps.bump_type.outputs.bump }}'; const reason = '${{ steps.bump_type.outputs.reason }}'; const comment = ` ## 🏷️ Version Bump Analysis **Suggested bump type:** \`${bump.toUpperCase()}\` **Reason:** ${reason} This PR will bump the version to the next ${bump} version when merged. `; github.rest.issues.createComment({ issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, body: comment });