name: Backport

on:
  pull_request_target:  # zizmor: ignore[dangerous-triggers]
    types:
      - closed
      - labeled

# we create the token we need later on
permissions: {}

jobs:
  backport:
    name: Create backport
    runs-on: ubuntu-latest
    # This workflow only applies to merged PRs; and triggers on a PR being closed, or the backport label being applied.
    # See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target.
    if: >
      github.event.pull_request.merged
      && (
        github.event.action == 'closed'
        ||
          (github.event.action == 'labeled' && contains(github.event.label.name, 'backport/')
        )
      )
    steps:
      - uses: actions/create-github-app-token@0d564482f06ca65fa9e77e2510873638c82206f2 # v1.11.5
        id: app-token
        with:
          app-id: ${{ secrets.POETRY_TOKEN_APP_ID }}
          private-key: ${{ secrets.POETRY_TOKEN_APP_KEY }}
      - uses: tibdex/backport@9565281eda0731b1d20c4025c43339fb0a23812e # v2.0.4
        with:
          github_token: ${{ steps.app-token.outputs.token }}
          title_template: "[<%= base %>] <%= title %>"
          label_pattern: "^backport/(?<base>([^ ]+))$"
