# Copyright 2023 The Flutter Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

name: Cherry-pick Labeled PR to Release Branch

on:
  pull_request_target:
    branches: master
    types: [labeled]

permissions: write-all

jobs:
  cherrypick_to_release:
    name: cherrypick_to_release
    runs-on: ubuntu-latest
    if: |
      (github.event.label.name == format('cp{0} beta', ':') || github.event.label.name == format('cp{0} stable', ':')) &&
      (github.event.pull_request.merged == true)
    steps:
      - name: Get Release Channel
        run: |
          echo "CHANNEL=$(echo ${{ github.event.label.name }} | cut -d ':' -f 2 | xargs)" >> $GITHUB_ENV
      - name: Get Release Candidate Branch
        run: |
          RELEASE_BRANCH=$(curl https://raw.githubusercontent.com/flutter/flutter/$CHANNEL/bin/internal/release-candidate-branch.version)
          echo "RELEASE_BRANCH=$(echo $RELEASE_BRANCH | tr -d '\n')" >> $GITHUB_ENV
      - name: Get Cherry Pick PR
        run: |
          echo "COMMIT_SHA=$(echo ${{ github.event.pull_request.merge_commit_sha }})" >> $GITHUB_ENV
      - name: Checkout Flutter Repo
        uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29
        with:
          repository: flutteractionsbot/flutter
          path: flutter
          ref: master
          persist-credentials: false
          # Checkout all history commits on master branch, so that the cp commit is a known object
          fetch-depth: 0
      # use same name when checking out branch, since the marketplace action does a hard reset.
      - name: Attempt CP
        id: attempt-cp
        working-directory: ./flutter
        run: |
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"
          git remote add upstream https://github.com/flutter/flutter.git
          git fetch upstream $RELEASE_BRANCH
          git fetch upstream master
          git checkout -b cp-${CHANNEL}-${COMMIT_SHA} --track upstream/$RELEASE_BRANCH
          git cherry-pick $COMMIT_SHA
      # TODO(xilaizhang): remove this step once the template is available on release branches.
      - name: Get CP Template
        run: |
          curl -o PULL_REQUEST_CP_TEMPLATE.md https://raw.githubusercontent.com/flutter/flutter/main/.github/PR_TEMPLATE/PULL_REQUEST_CP_TEMPLATE.md
      - name: Create PR on CP success
        if: ${{ steps.attempt-cp.conclusion == 'success' }}
        working-directory: ./flutter
        id: create-pr
        run: |
          git push https://${{ env.GITHUB_TOKEN }}@github.com/flutteractionsbot/flutter cp-${CHANNEL}-${COMMIT_SHA}
          {
            echo 'PR_URL<<EOF'
            gh pr create --title "[CP-${CHANNEL}]${PR_TITLE}" --body-file ../PULL_REQUEST_CP_TEMPLATE.md --base ${RELEASE_BRANCH} --label "cp: review" --repo flutter/flutter --head flutteractionsbot:cp-${CHANNEL}-${COMMIT_SHA}
            echo EOF
          } >> "$GITHUB_ENV"
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
          PR_TITLE: ${{ github.event.pull_request.title }}
      - name: Leave Comment on CP success
        if: ${{ steps.create-pr.conclusion == 'success' }}
        run: |
          echo $PR_URL
          NEW_PR_NUMBER="${PR_URL##*/}"
          SUCCESS_MSG=" @${{ github.actor }} please fill out the PR description above, afterwards the release team will review this request."
          gh pr comment $NEW_PR_NUMBER -R flutter/flutter -b "${SUCCESS_MSG}"
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
      - name: Leave Comment on CP failure
        if: ${{ failure() && steps.attempt-cp.conclusion == 'failure' }}
        run: |
          FAILURE_MSG="Failed to create CP due to merge conflicts.<br>"
          FAILURE_MSG+="You will need to create the PR manually. See [the cherrypick wiki](https://github.com/flutter/flutter/wiki/Flutter-Cherrypick-Process) for more info."
          gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "${FAILURE_MSG}"
        env:
          GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
