name: Label Cherry Pick

on:
  pull_request_target:
    types:
      - labeled
      - closed

jobs:
  prepare_branch_list:
    runs-on: ubuntu-latest
    if: |
      github.event.pull_request.merged == true &&
      github.event.pull_request.merge_commit_sha != null
    outputs:
      target_branch: ${{ steps.set-branches.outputs.target_branch }}
    steps:
    - name: Set Branches
      id: set-branches
      env:
        PR_LABELS: ${{ toJson(github.event.pull_request.labels) }}
        EVENT_ACTION: ${{ github.event.action }}
        LABEL_NAME: ${{ github.event.label.name }}
        BASE_REF: ${{ github.base_ref }}
      run: |
        if [[ $EVENT_ACTION == 'closed' ]]; then
          # Get a list of the labels from the PR.
          labels=$(echo "$PR_LABELS" | jq -r '.[].name')
        else
          # Or get the label that was added on the merged PR.
          labels=$LABEL_NAME
        fi

        branches=("24.lts.1+" "23.lts.1+" "22.lts.1+" "21.lts.1+" "20.lts.1+" "19.lts.1+" "rc_11" "COBALT_9")
        filtered_branches=()
        for branch in "${branches[@]}"; do
          if [[ $branch == $BASE_REF ]]; then
            continue
          fi
          if [[ ${labels[@]} =~ "cp-$branch" ]]; then
            filtered_branches+=("$branch")
          fi
        done

        echo "target_branch=$(echo -n "${filtered_branches[@]}" | jq -cRs 'split(" ")')" >> $GITHUB_OUTPUT

  cherry_pick:
    runs-on: ubuntu-latest
    permissions:
      issues: write
    needs: prepare_branch_list
    if: needs.prepare_branch_list.outputs.target_branch != '[]'
    strategy:
      matrix:
        target_branch: ${{ fromJson(needs.prepare_branch_list.outputs.target_branch) }}
    env:
      ACCESS_TOKEN: ${{ secrets.CHERRY_PICK_TOKEN }}
      REPOSITORY: ${{ github.repository }}
      GITHUB_REF: ${{ github.ref }}
      MERGE_COMMIT_SHA: ${{ github.event.pull_request.merge_commit_sha }}
      CHERRY_PICK_BRANCH: cherry-pick-${{ matrix.target_branch }}-${{ github.event.pull_request.number }}
    steps:
      - name: Checkout repository
        uses: kaidokert/checkout@v3.5.999
        timeout-minutes: 30
        with:
          ref: ${{ matrix.target_branch }}
          fetch-depth: 0
          persist-credentials: false

      - name: Setup Git
        run: |
          git config --global user.name "GitHub Release Automation"
          git config --global user.email "github@google.com"

      - name: Cherry pick merge commit
        id: cherry-pick
        continue-on-error: true
        run: |
          set -x
          git fetch origin ${{ matrix.target_branch }}

          set +e
          # Select the first parent as the mainline tree. This is necessary if
          # the commit has multiple parents as the cherry-pick will fail otherwise.
          git cherry-pick -x --mainline=1 ${MERGE_COMMIT_SHA}
          RES=$?
          set -e
          if [ ${RES} -ne 0 ]; then
            # If the cherry pick failed due to a merge conflict we can
            # add the conflicting file and create the commit anyway.
            git add .
            git cherry-pick --continue
          fi
          exit ${RES}

      - name: Create Pull Request
        id: create-pr
        continue-on-error: true
        uses: peter-evans/create-pull-request@2b011faafdcbc9ceb11414d64d0573f37c774b04 # v4.2.3
        with:
          token: ${{ secrets.CHERRY_PICK_TOKEN }}
          draft: ${{ steps.cherry-pick.outcome == 'failure' }}
          base: ${{ matrix.target_branch }}
          branch: ${{ env.CHERRY_PICK_BRANCH }}
          committer: GitHub Release Automation <github@google.com>
          reviewers: ${{ github.event.pull_request.user.login }}
          title: "Cherry pick PR #${{ github.event.pull_request.number }}: ${{ github.event.pull_request.title }}"
          body: |
            Refer to the original PR: https://github.com/${{ github.repository }}/pull/${{ github.event.pull_request.number }}

            ${{ github.event.pull_request.body }}

      - name: Comment on failure
        uses: actions/github-script@v6
        with:
          github-token: ${{ secrets.CHERRY_PICK_TOKEN }}
          script: |
            if ('${{ steps.create-pr.outputs.pull-request-number }}' == '') {
              // Comment on the originating PR if creating a cherry pick PR failed.
              github.rest.issues.createComment({
                issue_number: context.payload.number,
                owner: context.repo.owner,
                repo: context.repo.repo,
                body: '> [!IMPORTANT]\n> Creating the cherry pick PR failed! Check the log at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} for details.'
              });
            } else if ('${{ steps.cherry-pick.outcome }}' == 'failure') {
              // Comment on the new PR if the cherry pick failed.
              github.rest.issues.createComment({
                issue_number: '${{ steps.create-pr.outputs.pull-request-number }}',
                owner: context.repo.owner,
                repo: context.repo.repo,
                body: '> [!IMPORTANT]\n> There were merge conflicts while cherry picking! Check out [${{ env.CHERRY_PICK_BRANCH }}](${{ github.repository }}/tree/${{ env.CHERRY_PICK_BRANCH }}) and fix the conflicts before proceeding. Check the log at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} for details.'
              });
            }
