workflows: Make issue-subscriber more robust for labels with special characters

Also, replace the existing actionscript implementation with a python
script that can be run outside of GitHub Actions.  The intention is
that going forward, all github action functionality would be implemented
in this script.

Reviewed By: kwk

Differential Revision: https://reviews.llvm.org/D116762
This commit is contained in:
Tom Stellard 2022-01-14 17:08:01 -08:00
parent 21dad9a522
commit a2adebf409
2 changed files with 62 additions and 22 deletions

View File

@ -10,26 +10,16 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
if: github.repository == 'llvm/llvm-project' if: github.repository == 'llvm/llvm-project'
steps: 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 - name: Update watchers
uses: actions/github-script@v5 run: |
with: ./github-automation.py \
github-token: ${{ secrets.ISSUE_MENTION_SECRET }} --token ${{ secrets.ISSUE_SUBSCRIBER_TOKEN }} \
script: | issue-subscriber \
const teamname = "issue-subscribers-" + context.payload.label.name.replace(/ /g, "-").replace(":","-").replace("/","-"); --issue-number ${{ github.event.issue.number }} \
const comment = "@llvm/" + teamname; --label-name ${{ github.event.label.name }}
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);
}

View File

@ -0,0 +1,50 @@
#!/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:
@property
def team_name(self) -> str:
return self._team_name
def __init__(self, token:str, repo:str, issue_number:int, label_name:str):
self.repo = github.Github(token).get_repo(repo)
self.org = github.Github(token).get_organization(self.repo.organization.login)
self.issue = self.repo.get_issue(issue_number)
self._team_name = 'issue-subscribers-{}'.format(label_name).lower()
def run(self) -> bool:
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
parser = argparse.ArgumentParser()
parser.add_argument('--token', type=str, required=True)
parser.add_argument('--repo', type=str, default=os.getenv('GITHUB_REPOSITORY', 'llvm/llvm-project'))
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.token, args.repo, args.issue_number, args.label_name)
issue_subscriber.run()