Avaiga / taipy

Turns Data and AI algorithms into production-ready web applications in no time.
https://www.taipy.io
Apache License 2.0
15.32k stars 1.87k forks source link

Implement messages to celebrate successful PR contributions #2056

Closed Mayank77maruti closed 3 weeks ago

Mayank77maruti commented 3 weeks ago

Description

Provide congratulatory messages when a new contributor submits their first and second PRs or more.

Solution Proposed

This PR introduces a new GitHub Action that automatically posts a comment on a pull request once it has been merged into the main branch.

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

Impact of Solution

When we send some congratulatory message on merged pr the contributer is motivated to contribute more and hence improves opensource contributions

Acceptance Criteria

Code of Conduct

FlorianJacta commented 3 weeks ago

This seems unnecessary. @jrobinAV your thoughts?

jrobinAV commented 3 weeks ago

I agree. We already have too many tools and a too complex flow for the hacktoberfest event. We must simplify it. This makes it more complex.