diff --git a/.github/workflows/pr-greeter.yml b/.github/workflows/pr-greeter.yml new file mode 100644 index 0000000000000..3c90917eb643b --- /dev/null +++ b/.github/workflows/pr-greeter.yml @@ -0,0 +1,27 @@ +name: PR Greeter + +on: + pull_request_target: + types: [ opened ] + +permissions: + pull-requests: write + +jobs: + greet: + runs-on: ubuntu-latest + if: github.repository == 'DavidSpickett/llvm-project' + steps: + - name: Setup Automation Script + run: | + curl -O -L --fail https://raw.githubusercontent.com/"$GITHUB_REPOSITORY"/main/llvm/utils/git/github-automation.py + curl -O -L --fail https://raw.githubusercontent.com/"$GITHUB_REPOSITORY"/main/llvm/utils/git/requirements.txt + chmod a+x github-automation.py + pip install -r requirements.txt + + - name: Greet Author + run: | + ./github-automation.py \ + --token '${{ secrets.GITHUB_TOKEN }}' \ + pr-greeter \ + --issue-number "${{ github.event.pull_request.number }}" diff --git a/README.md b/README.md index 4ae7eaf9b083a..64ca27cf734c1 100644 --- a/README.md +++ b/README.md @@ -40,3 +40,5 @@ chat](https://discord.gg/xS7Z362), The LLVM project has adopted a [code of conduct](https://llvm.org/docs/CodeOfConduct.html) for participants to all modes of communication within the project. + +...t diff --git a/llvm/utils/git/github-automation.py b/llvm/utils/git/github-automation.py index ad1878d411939..be4962b8093ce 100755 --- a/llvm/utils/git/github-automation.py +++ b/llvm/utils/git/github-automation.py @@ -211,6 +211,35 @@ def _get_curent_team(self) -> Optional[github.Team.Team]: return None +class PRGreeter: + def __init__(self, token: str, repo: str, pr_number: int): + repo = github.Github(token).get_repo(repo) + self.pr = repo.get_issue(pr_number).as_pull_request() + + def run(self) -> bool: + # We assume that this is only called for a PR that has just been opened. + + # This text is using Markdown formatting. + comment = f"""\ +Thank you for submitting a Pull Request (PR) to the LLVM Project! + +You can add reviewers by using the "Reviewers" section on this page. + +If this is not working for you, it's probably because you don't have write +permissions for the repository. In which case you can instead tag reviewers by +name in a comment by using `@` followed by their GitHub username. + +If you have received no comments on your PR for a week, you can request a review +by "ping"ing the PR by adding a comment “Ping”. The common courtesy "ping" rate +is once a week. Please remember that you are asking for valuable time from other developers. + +If you have further questions, they may be answered by the [LLVM GitHub User Guide](https://llvm.org/docs/GitHub.html). + +You can also ask questions in a comment on this PR, on the [LLVM Discord](https://discord.com/invite/xS7Z362) or on the [forums](https://discourse.llvm.org/).""" + self.pr.as_issue().create_comment(comment) + return True + + def setup_llvmbot_git(git_dir="."): """ Configure the git repo in `git_dir` with the llvmbot account so @@ -655,6 +684,9 @@ def execute_command(self) -> bool: pr_subscriber_parser.add_argument("--label-name", type=str, required=True) pr_subscriber_parser.add_argument("--issue-number", type=int, required=True) +pr_greeter_parser = subparsers.add_parser("pr-greeter") +pr_greeter_parser.add_argument("--issue-number", type=int, required=True) + release_workflow_parser = subparsers.add_parser("release-workflow") release_workflow_parser.add_argument( "--llvm-project-dir", @@ -705,6 +737,9 @@ def execute_command(self) -> bool: args.token, args.repo, args.issue_number, args.label_name ) pr_subscriber.run() +elif args.command == "pr-greeter": + pr_greeter = PRGreeter(args.token, args.repo, args.issue_number) + pr_greeter.run() elif args.command == "release-workflow": release_workflow = ReleaseWorkflow( args.token,