| # 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: |
| 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@b4ffde65f46336ab88eb53be808477a3936bae11 |
| with: |
| repository: flutter/flutter |
| token: ${{ github.token }} |
| path: flutter |
| ref: master |
| # 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 fetch origin $RELEASE_BRANCH |
| git fetch origin master |
| git checkout -b $RELEASE_BRANCH --track origin/$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/master/.github/PR_TEMPLATE/PULL_REQUEST_CP_TEMPLATE.md |
| - name: Create PR on CP success |
| if: ${{ steps.attempt-cp.conclusion == 'success' }} |
| uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 |
| with: |
| base: ${{ env.RELEASE_BRANCH }} |
| branch: cp-${{ env.CHANNEL }}-${{ env.COMMIT_SHA }} |
| path: flutter |
| token: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }} |
| labels: | |
| cp: review |
| title: '[${{ env.CHANNEL }}-cherrypick] cherrypicks commit ${{ env.COMMIT_SHA }} from PR ${{ github.event.pull_request.title }}' |
| body-path: PULL_REQUEST_CP_TEMPLATE.md |
| - 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.FLUTTERMIRRORINGBOT_TOKEN }} |