Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement messages to celebrate successful PR contributions #2598

Open
Mayank77maruti opened this issue Oct 15, 2024 · 1 comment
Open

Implement messages to celebrate successful PR contributions #2598

Mayank77maruti opened this issue Oct 15, 2024 · 1 comment

Comments

@Mayank77maruti
Copy link

Is your feature request related to a problem? Please describe.
Provide congratulatory messages when a new contributor submits their first and second PRs or more. It will motivate contributers to make more valuable pr.

Describe the solution you'd like

name: Celebrating Contributions

on:
  pull_request_target:
    types: [closed]

permissions:
  pull-requests: write

jobs:
  comment_on_merged_pull_request:
    if: github.event.pull_request.merged == true
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: Set Environment Variables
        env:
          AUTHOR: ${{ github.event.pull_request.user.login }}
          REPO: ${{ github.event.repository.name }}
          OWNER: ${{ github.event.repository.owner.login }}
        run: |
          echo "AUTHOR=${AUTHOR}" >> $GITHUB_ENV
          echo "REPO=${REPO}" >> $GITHUB_ENV
          echo "OWNER=${OWNER}" >> $GITHUB_ENV

      - name: Count Merged Pull Requests
        id: count_merged_pull_requests
        uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const author = process.env.AUTHOR;
            const repo = process.env.REPO;
            const owner = process.env.OWNER;
            const { data } = await github.rest.search.issuesAndPullRequests({
              q: `repo:${owner}/${repo} type:pr state:closed author:${author}`
            });
            const prCount = data.items.filter(pr => pr.pull_request.merged_at).length;
            core.exportVariable('PR_COUNT', prCount);

      - name: Comment on the Merged Pull Request
        uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.GITHUB_TOKEN }}
          script: |
            const prCount = parseInt(process.env.PR_COUNT);
            const author = process.env.AUTHOR;
            const mention = 'adhiamboperes'; // Update this if the mention needs to change
            const prNumber = context.payload.pull_request.number;
            const repo = process.env.REPO;

            function getRandomEmoji() {
              const emojis = ['🎉', '🚀', '💪', '🌟', '🏆', '🎊', '🔥', '👏', '🌈', '🚂'];
              return emojis[Math.floor(Math.random() * emojis.length)];
            }

            function getMessage(count) {
              const emoji = getRandomEmoji();
              switch(count) {
                case 1:
                  return `${emoji} **Fantastic work @${author}!** Your very first PR to ${repo} has been merged! 🎉🥳\n\n` +
                         `You've just taken your first step into open-source, and we couldn't be happier to have you onboard. 🙌\n` +
                         `If you're feeling adventurous, why not dive into another issue and keep contributing? The community would love to see more from you! 🚀\n\n` +
                         `For any support, feel free to reach out to the developer onboarding lead: @${mention}. Happy coding! 👩‍💻👨‍💻`;
                case 2:
                  return `${emoji} **Well done @${author}!** Two PRs merged already! 🎉🥳\n\n` +
                         `With your second PR, you're on a roll, and your contributions are already making a difference. 🌟\n` +
                         `Looking forward to seeing even more contributions from you. The developer onboarding lead: @${mention} is here if you need any help! Keep up the great work! 🚀`;
                case 3:
                  return `${emoji} **You're on fire, @${author}!** Three PRs merged and counting! 🔥🎉\n\n` +
                         `Your consistent contributions are truly impressive. You're becoming a valued member of our community! 💖\n` +
                         `Have you considered taking on some more challenging issues? We'd love to see what you can do! 💪\n\n` +
                         `Remember, @${mention} is always here to support you. Keep blazing that trail! 🚀`;
                case 5:
                  return `${emoji} **High five, @${author}!** You've hit the incredible milestone of 5 merged PRs! 🖐️✨\n\n` +
                         `Your dedication to ${repo} is outstanding. You're not just contributing code; you're shaping the future of this project! 🌠\n` +
                         `We'd love to hear your thoughts on the project. Any ideas for new features or improvements? 🤔\n\n` +
                         `@${mention} and the whole team applaud your efforts. You're a superstar! 🌟`;
                case 10:
                  return `${emoji} **Double digits, @${author}!** 10 merged PRs is a massive achievement! 🏆🎊\n\n` +
                         `Your impact on ${repo} is undeniable. You've become a pillar of our community! 🏛️\n` +
                         `We'd be thrilled to have you take on a mentorship role for newer contributors. Interested? 🧑‍🏫\n\n` +
                         `@${mention} and everyone here are in awe of your contributions. You're an open source hero! 🦸‍♀️🦸‍♂️`;
                default:
                  if (count > 10) {
                    return `${emoji} **Incredible, @${author}!** You've merged your ${count}th PR! 🎯🎊\n\n` +
                           `Your ongoing commitment to ${repo} is truly remarkable. You're a driving force in our community! 🚀\n` +
                           `Your contributions are helping to shape the future of this project. What exciting features or improvements do you envision next? 🔮\n\n` +
                           `@${mention} and the entire team are grateful for your dedication. You're an inspiration to us all! 💫`;
                  } else {
                    return `${emoji} **Great job, @${author}!** You've merged your ${count}th PR! 🎊\n\n` +
                           `Your contributions to ${repo} are making a real difference. Keep up the fantastic work! 💪\n` +
                           `Remember, every PR counts and helps improve the project. What will you tackle next? 🤔\n\n` +
                           `@${mention} is here if you need any guidance. Onward and upward! 🚀`;
                  }
              }
            }

            const message = getMessage(prCount);
            
            await github.rest.issues.createComment({
              owner: process.env.OWNER,
              repo: process.env.REPO,
              issue_number: prNumber,
              body: message
            });
@JanCizmar
Copy link
Contributor

You can create a PR if you wish. :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants