llvm/.github/workflows/issue-release-workflow.yml

# This contains the workflow definitions that allow users to test backports
# to the release branch using comments on issues.
#
# /cherry-pick <commit> <...>
#
# This comment will attempt to cherry-pick the given commits to the latest
# release branch (release/Y.x) and if successful, push the result to a branch
# on github.
#
# /branch <owner>/<repo>/<branch>
#
# This comment will create a pull request from <branch> to the latest release
# branch.

name: Issue Release Workflow

permissions:
  contents: read

on:
  issue_comment:
    types:
      - created
      - edited
  issues:
    types:
      - opened

env:
  COMMENT_BODY: ${{ github.event.action == 'opened' && github.event.issue.body || github.event.comment.body  }}

jobs:
  backport-commits:
    name: Backport Commits
    runs-on: ubuntu-latest
    permissions:
      issues: write
      pull-requests: write
    if: >-
      (github.repository == 'llvm/llvm-project') &&
      !startswith(github.event.comment.body, '<!--IGNORE-->') &&
      contains(github.event.action == 'opened' && github.event.issue.body || github.event.comment.body, '/cherry-pick')
    steps:
      - name: Fetch LLVM sources
        uses: actions/checkout@v4
        with:
          repository: llvm/llvm-project
          # GitHub stores the token used for checkout and uses it for pushes
          # too, but we want to use a different token for pushing, so we need
          # to disable persist-credentials here.
          persist-credentials: false
          fetch-depth: 0

      - name: Setup Environment
        run: |
          pip install --require-hashes -r ./llvm/utils/git/requirements.txt
          ./llvm/utils/git/github-automation.py --token ${{ github.token }} setup-llvmbot-git

      - name: Backport Commits
        run: |
          printf "%s" "$COMMENT_BODY" |
          ./llvm/utils/git/github-automation.py \
          --repo "$GITHUB_REPOSITORY" \
          --token "${{ secrets.RELEASE_WORKFLOW_PR_CREATE }}" \
          release-workflow \
          --branch-repo-token ${{ secrets.RELEASE_WORKFLOW_PUSH_SECRET }} \
          --issue-number ${{ github.event.issue.number }} \
          --requested-by ${{ (github.event.action == 'opened' && github.event.issue.user.login) || github.event.comment.user.login }} \
          auto