From f55af9cd5f7b663f49c33917ed62727c32bb99b8 Mon Sep 17 00:00:00 2001 From: lgtm <1gtm@users.noreply.github.com> Date: Tue, 16 Jun 2020 02:53:29 -0700 Subject: [PATCH] [cherry-pick] Add workflow to cherry pick commits to master (#29) (#36) /cherry-pick Signed-off-by: Tamal Saha Co-authored-by: Tamal Saha --- .github/workflows/cherry-pick.yml | 30 +++++++++++++++++++ hack/scripts/cherry-pick.sh | 48 +++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 .github/workflows/cherry-pick.yml create mode 100755 hack/scripts/cherry-pick.sh diff --git a/.github/workflows/cherry-pick.yml b/.github/workflows/cherry-pick.yml new file mode 100644 index 000000000..4f5bb962b --- /dev/null +++ b/.github/workflows/cherry-pick.yml @@ -0,0 +1,30 @@ +name: cherry-pick + +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v1 + + - name: Prepare git + run: | + git config --global user.name "1gtm" + git config --global user.email "1gtm@appscode.com" + + - name: Install GitHub CLI + run: | + curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1 + sudo mv bin/hub /usr/local/bin + + - name: Update release branches + env: + GITHUB_USER: 1gtm + GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + run: | + ./hack/scripts/cherry-pick.sh diff --git a/hack/scripts/cherry-pick.sh b/hack/scripts/cherry-pick.sh new file mode 100755 index 000000000..a25224415 --- /dev/null +++ b/hack/scripts/cherry-pick.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# Copyright The Stash Authors. +# +# Licensed 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. + +set -eou pipefail + +should_cherry_pick() { + while IFS=$': \t' read -r -u9 marker v; do + if [ "$marker" = "/cherry-pick" ]; then + return 0 + fi + done 9< <(git show -s --format=%b) + return 1 +} + +should_cherry_pick || { + echo "Skipped cherry picking." + echo "To automatically cherry pick, add /cherry-pick to commit message body." + exit 0 +} + +git remote set-url origin https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git + +while IFS=/ read -r -u9 repo branch; do + git checkout $branch + pr_branch="master-${GITHUB_SHA:0:8}"${branch#"release"} + git checkout -b $pr_branch + git cherry-pick --strategy=recursive -X theirs $GITHUB_SHA + git push -u origin HEAD -f + hub pull-request \ + --base $branch \ + --labels automerge \ + --message "[cherry-pick] $(git show -s --format=%s)" \ + --message "$(git show -s --format=%b | sed --expression='/\/cherry-pick/d')" || true + sleep 2 +done 9< <(git branch -r | grep release)