blob: 5931a98c4b6a9f8537fd2c0546bc13d5bb416e19 [file] [log] [blame]
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#!/bin/bash
set -e
ORIGIN_PR_LABELS=$(echo "$ORIGIN_PR_LABELS_JSON" | jq -r '.[]')
echo "::group::Origin Info"
echo "Origin PR Number: $ORIGIN_PR_NUMBER"
echo "Origin PR Title: $ORIGIN_PR_TITLE"
echo "Origin PR Labels: $ORIGIN_PR_LABELS"
echo "GitHub SHA: $GITHUB_SHA"
echo "Trigger Label Prefix: $TRIGER_LABEL_PREFIX"
echo "Author Email: $AUTHOR_EMAIL"
echo "Author Name: $AUTHOR_NAME"
echo "Assignees: $ASSIGNEES"
echo "::endgroup::"
AUTO_CHERRY_PICK_LABEL="bot/auto-cherry-pick"
AUTO_CHERRY_PICK_FAILED_LABEL="bot/auto-cherry-pick-failed"
AUTO_CHERRY_PICK_COMPLETED_LABEL="bot/auto-cherry-pick-completed"
for label in ${ORIGIN_PR_LABELS[@]}; do
if [[ "$label" == "$TRIGER_LABEL_PREFIX"* ]]; then
TARGET_BRANCH="release-${label##*-}"
AUTO_CREATE_PR_BRANCH="$TARGET_BRANCH-auto-cherry-pick-$ORIGIN_PR_NUMBER"
AUTO_CHERRY_PICK_VERSION_LABEL="bot/auto-cherry-pick-for-$TARGET_BRANCH"
echo "::group::Generate Info"
echo "Target Branch: $TARGET_BRANCH"
echo "Auto Create PR Branch: $AUTO_CREATE_PR_BRANCH"
echo "Auto Cherry Pick Version Label: $AUTO_CHERRY_PICK_VERSION_LABEL"
echo "::endgroup::"
echo "::group::Git Cherry Pick"
git config --global user.email "$AUTHOR_EMAIL"
git config --global user.name "$AUTHOR_NAME"
git remote update
git fetch --all
git checkout -b $AUTO_CREATE_PR_BRANCH origin/$TARGET_BRANCH
git cherry-pick -m 1 $GITHUB_SHA || (
gh pr comment $ORIGIN_PR_NUMBER --body "🤖 The current file has a conflict, and the pr cannot be automatically created."
gh pr edit $ORIGIN_PR_NUMBER --add-label $AUTO_CHERRY_PICK_FAILED_LABEL
exit 1
)
git push origin $AUTO_CREATE_PR_BRANCH
echo "::endgroup::"
echo "::group::GitHub Auto Create PR"
AUTO_CREATED_PR_LINK=$(gh pr create \
-B $TARGET_BRANCH \
-H $AUTO_CREATE_PR_BRANCH \
-t "cherry-pick #$ORIGIN_PR_NUMBER $ORIGIN_PR_TITLE" \
-b "cherry-pick #$ORIGIN_PR_NUMBER $ORIGIN_PR_TITLE" \
-a $ASSIGNEES)
gh pr comment $ORIGIN_PR_NUMBER --body "🤖 Target: #$TARGET_BRANCH cherry pick finished successfully 🎉!"
gh pr edit $ORIGIN_PR_NUMBER --add-label $AUTO_CHERRY_PICK_COMPLETED_LABEL || (
gh label create $AUTO_CHERRY_PICK_COMPLETED_LABEL -c "#0E8A16" -d "auto cherry pick completed"
gh pr edit $ORIGIN_PR_NUMBER --add-label $AUTO_CHERRY_PICK_COMPLETED_LABEL
)
gh pr comment $AUTO_CREATED_PR_LINK --body "🤖 this a auto create pr!cherry picked from #$ORIGIN_PR_NUMBER."
gh pr edit $AUTO_CREATED_PR_LINK --add-label "$AUTO_CHERRY_PICK_LABEL,$AUTO_CHERRY_PICK_VERSION_LABEL" || (
gh label create $AUTO_CHERRY_PICK_LABEL -c "#0E8A16" -d "auto cherry pick pr" -f
gh label create $AUTO_CHERRY_PICK_VERSION_LABEL -c "#5319E7" -d "auto cherry pick pr for $TARGET_BRANCH" -f
gh pr edit $AUTO_CREATED_PR_LINK --add-label "$AUTO_CHERRY_PICK_LABEL,$AUTO_CHERRY_PICK_VERSION_LABEL"
)
echo "::endgroup::"
fi
done