From 15c147cf93c2e0d1cb9940756d8328150d68d289 Mon Sep 17 00:00:00 2001 From: Ocasta Date: Tue, 4 Feb 2025 21:45:15 -0800 Subject: [PATCH] fix check changeset git action --- .github/workflows/check-changeset.yml | 91 +++++++++++++++++++-------- 1 file changed, 64 insertions(+), 27 deletions(-) diff --git a/.github/workflows/check-changeset.yml b/.github/workflows/check-changeset.yml index 9d8f7a3469..48ffc1ca41 100644 --- a/.github/workflows/check-changeset.yml +++ b/.github/workflows/check-changeset.yml @@ -18,18 +18,31 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 with: fetch-depth: 0 + ref: ${{ github.event.pull_request.head.sha }} - name: Check for changeset id: check-changeset run: | + # Debug info + echo "Current directory: $(pwd)" + echo "PR Base Ref: ${{ github.event.pull_request.base.ref }}" + echo "PR Head Ref: ${{ github.event.pull_request.head.ref }}" + echo "PR Head SHA: ${{ github.event.pull_request.head.sha }}" + echo "Git status:" + git status + # Get list of changed files - CHANGED_FILES=$(git diff --name-only origin/main...HEAD) + git fetch origin ${{ github.event.pull_request.base.ref }} + CHANGED_FILES=$(git diff --name-only origin/${{ github.event.pull_request.base.ref }} HEAD) echo "Changed files:" echo "$CHANGED_FILES" + echo "Listing .changeset directory:" + ls -la .changeset/ + # Check if any of the changed files are in docs/ or .github/ DOCS_ONLY=true while IFS= read -r file; do @@ -45,38 +58,62 @@ jobs: exit 0 fi - # Count number of changeset files (excluding README.md) - CHANGESETS=$(find .changeset -name "*.md" ! -name "README.md" | wc -l | tr -d ' ') - echo "Number of changesets: $CHANGESETS" + # Check if any changeset files are in the changed files + CHANGESET_IN_PR=false + while IFS= read -r file; do + if [[ "$file" =~ ^\.changeset/.*\.md$ && "$file" != ".changeset/README.md" ]]; then + echo "Found changeset file in PR: $file" + CHANGESET_IN_PR=true + break + fi + done <<< "$CHANGED_FILES" - if [ "$CHANGESETS" -eq 0 ]; then - echo "::error::No changeset file found. Please run 'npm run changeset' to create one." - exit 1 + if [ "$CHANGESET_IN_PR" = false ]; then + # Double check local changeset files as backup + CHANGESETS=$(find .changeset -name "*.md" ! -name "README.md" | wc -l | tr -d ' ') + echo "Number of local changesets: $CHANGESETS" + + if [ "$CHANGESETS" -eq 0 ]; then + echo "::error::No changeset file found in PR changes or local directory. Please run 'npm run changeset' to create one." + exit 1 + fi fi - - name: Find Comment - uses: peter-evans/find-comment@45803def666fc704971eff4c7d57d650f81ae24a # v3 + - name: Comment on PR if: failure() - id: find-comment + uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7 with: - issue-number: ${{ github.event.pull_request.number }} - comment-author: "github-actions[bot]" - body-includes: This PR requires a changeset + script: | + const message = `This PR requires a changeset since it includes user-facing changes. Please: - - name: Create Comment - uses: peter-evans/create-or-update-comment@23ff15e22924c50649c1d63cc73f02f16fc0a8e8 # v4 - if: failure() && steps.find-comment.outputs.comment-id == '' - with: - issue-number: ${{ github.event.pull_request.number }} - body: | - This PR requires a changeset since it includes user-facing changes. Please: - - 1. Run `npm run changeset` locally + 1. Run \`npm run changeset\` locally 2. Choose the appropriate version bump: - - `major` for breaking changes (1.0.0 → 2.0.0) - - `minor` for new features (1.0.0 → 1.1.0) - - `patch` for bug fixes (1.0.0 → 1.0.1) + - \`major\` for breaking changes (1.0.0 → 2.0.0) + - \`minor\` for new features (1.0.0 → 1.1.0) + - \`patch\` for bug fixes (1.0.0 → 1.0.1) 3. Write a clear description of your changes 4. Commit the generated changeset file - Note: Documentation-only changes do not require a changeset. + Note: Documentation-only changes do not require a changeset.`; + + // Get existing comments + const comments = await github.rest.issues.listComments({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number + }); + + // Check if we already commented + const botComment = comments.data.find(comment => + comment.user.login === 'github-actions[bot]' && + comment.body.includes('This PR requires a changeset') + ); + + if (!botComment) { + await github.rest.issues.createComment({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + body: message + }); + }