blob: db49228ed0a99b96e0cb1a219b69ae291d442311 [file] [edit]
name: Revert PR
on:
pull_request_target:
types: [labeled]
jobs:
revert:
name: Revert PR
runs-on: ubuntu-latest
if: github.event.label.name == 'revert_wf'
steps:
- name: Handle Not Merged PR
if: github.event.pull_request.merged != true
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
run: |
gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "Only merged pull requests can be reverted."
gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "revert_wf"
exit 0
- name: Find Reason for Revert
if: github.event.pull_request.merged == true
id: find-reason
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
run: |
REASON=$(gh pr view ${{ github.event.pull_request.number }} -R ${{ github.repository }} --json comments \
--jq '.comments[] | .body | select(startswith("Reason for revert:")) | sub("^Reason for revert:\\s*"; "")' | head -n 1)
if [ -z "$REASON" ]; then
gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "A reason for requesting a revert of ${{ github.repository }}/${{ github.event.pull_request.number }} could not be found or the reason was not properly formatted. Begin a comment with **'Reason for revert:'** to tell the bot why this issue is being reverted."
gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "revert_wf"
echo "found=false" >> $GITHUB_OUTPUT
exit 1
else
echo "REASON=$REASON" >> $GITHUB_ENV
echo "found=true" >> $GITHUB_OUTPUT
fi
- name: Get PR Details
if: steps.find-reason.outputs.found == 'true'
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
ORIGINAL_AUTHOR: ${{ github.event.pull_request.user.login }}
MERGE_COMMIT: ${{ github.event.pull_request.merge_commit_sha }}
run: |
REVIEWER=$(gh api repos/${{ github.repository }}/pulls/${{ github.event.pull_request.number }}/reviews \
--jq '[.[] | select(.state == "APPROVED")] | .[0].user.login')
echo "MERGE_COMMIT=$MERGE_COMMIT" >> $GITHUB_ENV
echo "ORIGINAL_AUTHOR=$ORIGINAL_AUTHOR" >> $GITHUB_ENV
echo "REVIEWER=$REVIEWER" >> $GITHUB_ENV
gh pr view ${{ github.event.pull_request.number }} -R ${{ github.repository }} --json body --jq '.body' > original_pr_body.txt
- name: Checkout Fork
if: steps.find-reason.outputs.found == 'true'
uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3
with:
repository: flutteractionsbot/flutter
path: flutter
ref: master
token: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
fetch-depth: 0
- name: Prepare Git
if: steps.find-reason.outputs.found == 'true'
working-directory: ./flutter
run: |
git config user.name "flutteractionsbot"
git config user.email "<flutter-actions-bot@google.com>"
git remote add upstream https://github.com/flutter/flutter.git
git fetch upstream master
BRANCH_NAME="revert-${{ github.event.pull_request.number }}-$(date +%s)"
echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV
git checkout -b $BRANCH_NAME upstream/master
- name: Revert Commit
if: steps.find-reason.outputs.found == 'true'
id: revert-commit
working-directory: ./flutter
env:
PR_NUMBER: ${{ github.event.pull_request.number }}
run: |
if git revert $MERGE_COMMIT --no-edit; then
echo "success=true" >> $GITHUB_OUTPUT
else
echo "success=false" >> $GITHUB_OUTPUT
gh pr comment $PR_NUMBER -R flutter/flutter -b "Failed to revert commit $MERGE_COMMIT cleanly. Please resolve conflicts manually."
gh pr edit $PR_NUMBER -R ${{ github.repository }} --remove-label "revert_wf"
exit 1
fi
- name: Push and Create PR
if: steps.revert-commit.outputs.success == 'true'
working-directory: ./flutter
env:
GITHUB_TOKEN: ${{ secrets.FLUTTERACTIONSBOT_CP_TOKEN }}
PR_TITLE: ${{ github.event.pull_request.title }}
INITIATOR: ${{ github.event.sender.login }}
run: |
git push origin $BRANCH_NAME
PR_LINK="https://github.com/flutter/flutter/pull/${{ github.event.pull_request.number }}"
echo "Reverts: [$PR_TITLE]($PR_LINK)" > ../pr_body.txt
echo "" >> ../pr_body.txt
echo "Initiated by: @$INITIATOR" >> ../pr_body.txt
echo "" >> ../pr_body.txt
echo "Reason for reverting: $REASON" >> ../pr_body.txt
echo "" >> ../pr_body.txt
echo "Original PR Author: @$ORIGINAL_AUTHOR" >> ../pr_body.txt
echo "" >> ../pr_body.txt
echo "Reviewed By: @$REVIEWER" >> ../pr_body.txt
echo "" >> ../pr_body.txt
echo "The original PR description is provided below:" >> ../pr_body.txt
echo "" >> ../pr_body.txt
cat ../original_pr_body.txt >> ../pr_body.txt
NEW_PR_URL=$(gh pr create \
--title "Revert \"${PR_TITLE}\"" \
--body-file ../pr_body.txt \
--repo flutter/flutter \
--base master \
--head flutteractionsbot:$BRANCH_NAME)
gh pr comment ${{ github.event.pull_request.number }} -R flutter/flutter -b "Successfully created revert PR: $NEW_PR_URL"
gh pr edit ${{ github.event.pull_request.number }} -R ${{ github.repository }} --remove-label "revert_wf"