chore: Enhance PR merge notification messages #8
Workflow file for this run
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: First PR Merged Welcome | |
| on: | |
| pull_request_target: | |
| types: [closed] | |
| jobs: | |
| welcome-on-merge: | |
| # Only run if the PR was actually merged, not just closed | |
| if: github.event.pull_request.merged == true | |
| runs-on: ubuntu-latest | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - name: Thank contributor and ask for star | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| // Sleep for 3 seconds to ensure the API reflects the PR merge | |
| await new Promise(resolve => setTimeout(resolve, 3000)); | |
| const { owner, repo } = context.repo; | |
| const creator = context.payload.pull_request.user.login; | |
| // Fetch all merged PRs by this user | |
| const response = await github.rest.pulls.list({ | |
| owner, | |
| repo, | |
| state: 'closed', | |
| creator: creator | |
| }); | |
| // Filter to ensure we only count merged PRs | |
| const mergedPrs = response.data.filter(pr => pr.merged_at !== null); | |
| // Check if the user has starred the repo | |
| let hasStarred = false; | |
| try { | |
| await github.rest.activity.checkRepoIsStarredByAuthenticatedUser({ | |
| owner, | |
| repo | |
| }); | |
| hasStarred = true; | |
| } catch (error) { | |
| // 404 means the user hasn't starred the repo | |
| hasStarred = false; | |
| } | |
| // Determine the case and generate appropriate message | |
| let message; | |
| // CASE 1: First merged PR + Already starred | |
| if (mergedPrs.length === 1 && hasStarred) { | |
| message = ` | |
| 🎊 **Welcome, @${creator}!** Your first contribution has been merged! 🚀 | |
| Thank you so much for your support and for giving us a ⭐ star! It truly means a lot and helps other developers discover our project. We're excited to have you as part of our community! | |
| `; | |
| } | |
| // CASE 2: First merged PR + Hasn't starred | |
| else if (mergedPrs.length === 1 && !hasStarred) { | |
| message = ` | |
| 🎊 **Welcome, @${creator}!** Your first contribution has been merged! 🚀 | |
| Thank you for helping improve the project! If you find this tool useful, please consider giving us a ⭐ **star on GitHub**—it helps more developers find our work and motivates us to keep improving! | |
| `; | |
| } | |
| // CASE 3: Multiple merged PRs + Already starred | |
| else if (mergedPrs.length > 1 && hasStarred) { | |
| message = ` | |
| ✨ **Thank you, @${creator}!** Another great contribution merged! 🚀 | |
| We truly appreciate your continued support and the ⭐ star you gave us. Your contributions are making a real difference! | |
| `; | |
| } | |
| // CASE 4: Multiple merged PRs + Hasn't starred | |
| else if (mergedPrs.length > 1 && !hasStarred) { | |
| message = ` | |
| ✨ **Thank you, @${creator}!** Another great contribution merged! 🚀 | |
| You've been a fantastic contributor! If you haven't already, please consider giving us a ⭐ **star on GitHub**—it helps the project grow and lets other developers know about it! | |
| `; | |
| } | |
| // Post the comment if a message was generated | |
| if (message) { | |
| await github.rest.issues.createComment({ | |
| owner, | |
| repo, | |
| issue_number: context.payload.pull_request.number, | |
| body: message | |
| }); | |
| } |