tolgee / tolgee-platform

Developer & translator friendly web-based localization platform
https://tolgee.io
Other
1.7k stars 166 forks source link

Implement messages to celebrate successful PR contributions #2598

Open Mayank77maruti opened 4 hours ago

Mayank77maruti commented 4 hours ago

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 commented 2 hours ago

You can create a PR if you wish. :)