Skip to content

chore: Enhance PR merge notification messages #8

chore: Enhance PR merge notification messages

chore: Enhance PR merge notification messages #8

Workflow file for this run

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
});
}