diff --git a/.github/workflows/issue-subscriber.yml b/.github/workflows/issue-subscriber.yml --- a/.github/workflows/issue-subscriber.yml +++ b/.github/workflows/issue-subscriber.yml @@ -10,26 +10,16 @@ runs-on: ubuntu-latest if: github.repository == 'llvm/llvm-project' steps: + - name: Setup Automation Script + run: | + curl -O -L https://raw.githubusercontent.com/$GITHUB_REPOSITORY/$GITHUB_SHA/llvm/utils/git/github-automation.py + chmod a+x github-automation.py + pip install PyGithub + - name: Update watchers - uses: actions/github-script@v5 - with: - github-token: ${{ secrets.ISSUE_MENTION_SECRET }} - script: | - const teamname = "issue-subscribers-" + context.payload.label.name.replace(/ /g, "-").replace(":","-").replace("/","-"); - const comment = "@llvm/" + teamname; - try { - // This will throw an exception if the team does not exist and no - // comment will be created. - team = await github.rest.teams.getByName({ - org: context.repo.owner, - team_slug: teamname - }); - github.rest.issues.createComment({ - issue_number: context.issue.number, - owner: context.repo.owner, - repo: context.repo.repo, - body: comment - }); - } catch (e){ - console.log(e); - } + run: | + ./github-automation.py \ + --token ${{ secrets.ISSUE_SUBSCRIBER_TOKEN }} \ + issue-subscriber \ + --issue-number ${{ github.event.issue.number }} \ + --label-name ${{ github.event.label.name }} diff --git a/llvm/utils/git/github-automation.py b/llvm/utils/git/github-automation.py new file mode 100755 --- /dev/null +++ b/llvm/utils/git/github-automation.py @@ -0,0 +1,55 @@ +#!/usr/bin/env python3 +# +# ======- github-automation - LLVM GitHub Automation Routines--*- python -*--==# +# +# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +# See https://llvm.org/LICENSE.txt for license information. +# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +# +# ==-------------------------------------------------------------------------==# + +import argparse +import github +import os + + + +class IssueSubscriber: + + def __init__(self, args): + self.repo = github.Github(args.token).get_repo(args.repo) + self.org = github.Github(args.token).get_organization(self.repo.organization.login) + self.issue = self.repo.get_issue(args.issue_number) + self.team_name = 'issue-subscribers-{}'.format(args.label_name).lower() + + def run(self): + for team in self.org.get_teams(): + if self.team_name != team.name.lower(): + continue + comment = '@llvm/{}'.format(team.slug) + self.issue.create_comment(comment) + return True + return False + + +def get_default_repo(): + default = os.getenv('GITHUB_REPOSITORY') + if not default: + default = 'llvm/llvm-project' + return default + + +parser = argparse.ArgumentParser() +parser.add_argument('--token', type=str, required=True) +parser.add_argument('--repo', type=str, default=get_default_repo()) +subparsers = parser.add_subparsers(dest='command') + +issue_subscriber_parser = subparsers.add_parser('issue-subscriber') +issue_subscriber_parser.add_argument('--label-name', type=str, required=True) +issue_subscriber_parser.add_argument('--issue-number', type=int, required=True) + +args = parser.parse_args() + +if args.command == 'issue-subscriber': + issue_subscriber = IssueSubscriber(args) + issue_subscriber.run()