From 5c9b98a926b0840bf1551d50a9a7943547f8dabf Mon Sep 17 00:00:00 2001 From: David Gwilliam Date: Tue, 31 Mar 2026 20:01:41 -0700 Subject: [PATCH] feat: add PR workflow with bump type analysis --- .gitea/workflows/pr.yml | 91 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 .gitea/workflows/pr.yml diff --git a/.gitea/workflows/pr.yml b/.gitea/workflows/pr.yml new file mode 100644 index 0000000..ba1d989 --- /dev/null +++ b/.gitea/workflows/pr.yml @@ -0,0 +1,91 @@ +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 + });