From fe236a76b50465e3c8b69cde0ac82a514fd23eaa Mon Sep 17 00:00:00 2001 From: Seth Hobson Date: Fri, 1 Aug 2025 17:19:23 -0400 Subject: [PATCH] Fix GitHub Actions welcome workflow using best practices Problem Analysis: - Original workflow used complex GitHub search API causing rate limiting issues - Custom first-time contributor detection was unreliable and fragile - Used pull_request instead of pull_request_target for PRs (security issue) - Complex github-script logic prone to failures Solution Implemented: - Replaced custom logic with GitHub's official actions/first-interaction@v1 - Changed to pull_request_target for PR security and reliability - Eliminated API rate limiting issues by removing search calls - Simplified permissions and workflow structure - Added comprehensive welcome messages with community guidelines Benefits: - More reliable first-time contributor detection - No rate limiting issues - Better security with pull_request_target - Easier to maintain using official GitHub action - Consistent messaging across issues and PRs Also included alternative implementation example using garg3133/welcome-new-contributors@v1.2 --- ...e-new-contributors-alternative.yml.example | 102 +++++++++++++ .../workflows/welcome-new-contributors.yml | 143 ++++++++---------- 2 files changed, 169 insertions(+), 76 deletions(-) create mode 100644 .github/workflows/welcome-new-contributors-alternative.yml.example diff --git a/.github/workflows/welcome-new-contributors-alternative.yml.example b/.github/workflows/welcome-new-contributors-alternative.yml.example new file mode 100644 index 0000000..3c8d7a0 --- /dev/null +++ b/.github/workflows/welcome-new-contributors-alternative.yml.example @@ -0,0 +1,102 @@ +# Alternative Welcome Workflow using third-party action +# This is an example implementation using garg3133/welcome-new-contributors +# Rename to .yml and adjust the main workflow if you prefer this approach + +name: Welcome New Contributors (Alternative) + +on: + issues: + types: [opened] + pull_request_target: + types: [opened] + +jobs: + welcome: + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - name: Welcome first-time contributors + uses: garg3133/welcome-new-contributors@v1.2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + issue-message: | + 👋 **Welcome to the Claude Code Agents project, @contributor_name!** + + Thank you for opening your first issue! We appreciate your interest in contributing to our collection of specialized subagents. + + ## 📋 Community Guidelines + + Before we proceed, please take a moment to review our community standards: + + - 📖 **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Our community standards and behavioral expectations + - 🤝 **[Contributing Guidelines](.github/CONTRIBUTING.md)** - How to contribute effectively + - 💬 **[GitHub Discussions](https://github.com/wshobson/agents/discussions)** - For questions and general discussion + + ## 🛡️ Community Values + + We maintain a **respectful, inclusive, and professional environment**. Our community does not tolerate: + - Hate speech, discrimination, or harassment + - Personal attacks or inflammatory language + - Spam, trolling, or off-topic content + - Any content that violates our Code of Conduct + + ## ✅ What Makes a Great Issue + + - Clear, specific problem descriptions + - Steps to reproduce (for bugs) + - Constructive feature requests with use cases + - Professional, respectful language + + ## 🚀 Next Steps + + A maintainer will review your issue soon. Please feel free to: + - Add any additional context if needed + - Respond to questions from maintainers + - Join our [Discussions](https://github.com/wshobson/agents/discussions) + + Thank you for helping make this project better! 🎉 + + pr-message: | + 👋 **Welcome to the Claude Code Agents project, @contributor_name!** + + Thank you for opening your first pull request! We appreciate your interest in contributing to our collection of specialized subagents. + + ## 📋 Community Guidelines + + Before we proceed, please take a moment to review our community standards: + + - 📖 **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Our community standards and behavioral expectations + - 🤝 **[Contributing Guidelines](.github/CONTRIBUTING.md)** - How to contribute effectively + - 💬 **[GitHub Discussions](https://github.com/wshobson/agents/discussions)** - For questions and general discussion + + ## 🛡️ Community Values + + We maintain a **respectful, inclusive, and professional environment**. Our community does not tolerate: + - Hate speech, discrimination, or harassment + - Personal attacks or inflammatory language + - Spam, trolling, or off-topic content + - Any content that violates our Code of Conduct + + ## ✅ What Makes a Great Pull Request + + - Well-documented changes with clear descriptions + - Following existing code style and conventions + - Clear, descriptive commit messages + - Addressing a specific issue or improvement + - Including tests or examples where appropriate + + ## 🚀 Next Steps + + A maintainer will review your pull request soon. Please feel free to: + - Add any additional context about your changes + - Respond to feedback and questions from maintainers + - Join our [Discussions](https://github.com/wshobson/agents/discussions) + + Thank you for helping make this project better! 🎉 + + # Optional: Add labels to first-time contributor issues/PRs + issue-labels: 'first-time-contributor, needs-review' + pr-labels: 'first-time-contributor, needs-review' \ No newline at end of file diff --git a/.github/workflows/welcome-new-contributors.yml b/.github/workflows/welcome-new-contributors.yml index 3320d55..cfe5859 100644 --- a/.github/workflows/welcome-new-contributors.yml +++ b/.github/workflows/welcome-new-contributors.yml @@ -3,7 +3,7 @@ name: Welcome New Contributors on: issues: types: [opened] - pull_request: + pull_request_target: types: [opened] jobs: @@ -14,92 +14,83 @@ jobs: pull-requests: write steps: - - name: Check if first-time contributor - id: check-contributor - uses: actions/github-script@v7 - with: - script: | - const author = context.payload.sender.login; - - // Check if this is their first contribution - const { data: issues } = await github.rest.search.issuesAndPullRequests({ - q: `repo:${context.repo.owner}/${context.repo.repo} author:${author}`, - sort: 'created', - order: 'asc', - per_page: 2 - }); - - const isFirstTime = issues.items.length <= 1; - core.setOutput('is-first-time', isFirstTime); - core.setOutput('author', author); - - console.log(`User ${author} is ${isFirstTime ? 'a first-time' : 'a returning'} contributor`); - - name: Welcome first-time contributors - if: steps.check-contributor.outputs.is-first-time == 'true' - uses: actions/github-script@v7 + uses: actions/first-interaction@v1 with: - script: | - const author = '${{ steps.check-contributor.outputs.author }}'; - const isIssue = context.eventName === 'issues'; - const number = isIssue ? context.payload.issue.number : context.payload.pull_request.number; - - const welcomeMessage = `👋 **Welcome to the Claude Code Agents project, @${author}!** + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: | + 👋 **Welcome to the Claude Code Agents project, @${{ github.actor }}!** -Thank you for your ${isIssue ? 'issue submission' : 'pull request'}! We appreciate your interest in contributing to our collection of specialized subagents. + Thank you for opening your first issue! We appreciate your interest in contributing to our collection of specialized subagents. -## 📋 Community Guidelines + ## 📋 Community Guidelines -Before we proceed, please take a moment to review our community standards: + Before we proceed, please take a moment to review our community standards: -- 📖 **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Our community standards and behavioral expectations -- 🤝 **[Contributing Guidelines](.github/CONTRIBUTING.md)** - How to contribute effectively -- 💬 **[GitHub Discussions](https://github.com/${context.repo.owner}/${context.repo.repo}/discussions)** - For questions and general discussion + - 📖 **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Our community standards and behavioral expectations + - 🤝 **[Contributing Guidelines](.github/CONTRIBUTING.md)** - How to contribute effectively + - 💬 **[GitHub Discussions](https://github.com/wshobson/agents/discussions)** - For questions and general discussion -## 🛡️ Community Values + ## 🛡️ Community Values -We maintain a **respectful, inclusive, and professional environment**. Our community does not tolerate: -- Hate speech, discrimination, or harassment -- Personal attacks or inflammatory language -- Spam, trolling, or off-topic content -- Any content that violates our Code of Conduct + We maintain a **respectful, inclusive, and professional environment**. Our community does not tolerate: + - Hate speech, discrimination, or harassment + - Personal attacks or inflammatory language + - Spam, trolling, or off-topic content + - Any content that violates our Code of Conduct -## ✅ What Makes a Great Contribution + ## ✅ What Makes a Great Issue -${isIssue ? `**For Issues:** -- Clear, specific problem descriptions -- Steps to reproduce (for bugs) -- Constructive feature requests with use cases -- Professional, respectful language` : `**For Pull Requests:** -- Well-documented changes -- Following existing code style -- Clear commit messages -- Addressing a specific issue or improvement`} + **For Issues:** + - Clear, specific problem descriptions + - Steps to reproduce (for bugs) + - Constructive feature requests with use cases + - Professional, respectful language -## 🚀 Next Steps + ## 🚀 Next Steps -A maintainer will review your ${isIssue ? 'issue' : 'pull request'} soon. Please feel free to: -- Add any additional context if needed -- Respond to questions from maintainers -- Join our [Discussions](https://github.com/${context.repo.owner}/${context.repo.repo}/discussions) for general questions + A maintainer will review your issue soon. Please feel free to: + - Add any additional context if needed + - Respond to questions from maintainers + - Join our [Discussions](https://github.com/wshobson/agents/discussions) for general questions -Thank you for helping make this project better! 🎉`; + Thank you for helping make this project better! 🎉 - if (isIssue) { - await github.rest.issues.createComment({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: number, - body: welcomeMessage - }); - } else { - await github.rest.pulls.createReview({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: number, - body: welcomeMessage, - event: 'COMMENT' - }); - } - - console.log(`Welcomed first-time contributor @${author}`); \ No newline at end of file + pr-message: | + 👋 **Welcome to the Claude Code Agents project, @${{ github.actor }}!** + + Thank you for opening your first pull request! We appreciate your interest in contributing to our collection of specialized subagents. + + ## 📋 Community Guidelines + + Before we proceed, please take a moment to review our community standards: + + - 📖 **[Code of Conduct](.github/CODE_OF_CONDUCT.md)** - Our community standards and behavioral expectations + - 🤝 **[Contributing Guidelines](.github/CONTRIBUTING.md)** - How to contribute effectively + - 💬 **[GitHub Discussions](https://github.com/wshobson/agents/discussions)** - For questions and general discussion + + ## 🛡️ Community Values + + We maintain a **respectful, inclusive, and professional environment**. Our community does not tolerate: + - Hate speech, discrimination, or harassment + - Personal attacks or inflammatory language + - Spam, trolling, or off-topic content + - Any content that violates our Code of Conduct + + ## ✅ What Makes a Great Pull Request + + **For Pull Requests:** + - Well-documented changes with clear descriptions + - Following existing code style and conventions + - Clear, descriptive commit messages + - Addressing a specific issue or improvement + - Including tests or examples where appropriate + + ## 🚀 Next Steps + + A maintainer will review your pull request soon. Please feel free to: + - Add any additional context about your changes + - Respond to feedback and questions from maintainers + - Join our [Discussions](https://github.com/wshobson/agents/discussions) for general questions + + Thank you for helping make this project better! 🎉 \ No newline at end of file