diff --git a/.github/workflows/issues-notify-plugin-authors.py b/.github/workflows/issues-notify-plugin-authors.py new file mode 100644 index 0000000..3989d50 --- /dev/null +++ b/.github/workflows/issues-notify-plugin-authors.py @@ -0,0 +1,73 @@ +import os +import sys + +from github import Auth, Github + +token = os.environ["GITHUB_TOKEN"] +repo_name = os.environ["REPOSITORY"] +issue_number = os.environ["ISSUE_NUMBER"] + +auth = Auth.Token(token) +gh = Github(auth=auth) +repo = gh.get_repo(repo_name) + +if issue_number.isdigit(): + issue_number = int(issue_number) +else: + print("Issue number is not numeric!") + sys.exit(1) + + +issue = repo.get_issue(issue_number) +body = issue.body +lines = body.splitlines() + +try: + title_index = lines.index("### Plugin") +except ValueError: + print("No Plugin title found!") + sys.exit(0) + + +for i in range(title_index + 1, len(lines)): + if lines[i]: + break + +plugin = lines[i].strip() +plugin_split = plugin.split('/') + +# The Plugin field is free text, so accept both the canonical "/" id and +# a bare plugin name, and skip quietly on anything else instead of failing the run. +if len(plugin_split) == 2: + plugin_name = plugin_split[1].strip() +elif len(plugin_split) == 1: + plugin_name = plugin_split[0] +else: + print(f"Unknown format of plugin name, got {plugin}") + sys.exit(0) + +if not plugin_name: + print("No plugin name given!") + sys.exit(0) + +manifest_file = f"{plugin_name}/plugin.toml" + +if os.path.exists(manifest_file): + file_commits = repo.get_commits(path=manifest_file).reversed + author = file_commits[0].author + + if author is not None: + author = author.login + else: + print("Author name is null, returning!") + sys.exit(1) +else: + print(f"Plugin manifest doesn't exist, {manifest_file}") + sys.exit(0) + + +if author: + issue.create_comment(f"CC @{author}") +else: + print("Could not get the author.") + sys.exit(1) diff --git a/.github/workflows/issues-notify-plugin-authors.yml b/.github/workflows/issues-notify-plugin-authors.yml new file mode 100644 index 0000000..65bc06c --- /dev/null +++ b/.github/workflows/issues-notify-plugin-authors.yml @@ -0,0 +1,32 @@ +name: Notify Plugin Authors for Issues + +on: + issues: + types: [opened] + +permissions: + contents: read + issues: write + +jobs: + notify-plugin-authors: + runs-on: ubuntu-latest + if: github.repository == 'noctalia-dev/community-plugins' + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v7 + with: + python-version: '3.14' + cache: 'pip' + cache-dependency-path: | + .github/workflows/notify-plugin-authors-requirements.txt + + - name: Install dependencies + run: pip install -r .github/workflows/notify-plugin-authors-requirements.txt + + - name: Notify Authors + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPOSITORY: ${{ github.repository }} + ISSUE_NUMBER: ${{ github.event.issue.number }} + run: python3 .github/workflows/issues-notify-plugin-authors.py diff --git a/.github/workflows/notify-plugin-authors-requirements.txt b/.github/workflows/notify-plugin-authors-requirements.txt new file mode 100644 index 0000000..5a267cc --- /dev/null +++ b/.github/workflows/notify-plugin-authors-requirements.txt @@ -0,0 +1 @@ +PyGithub==2.9.1