Skip to content

Commit

Permalink
[cherry-pick] Add workflow to cherry pick commits to master (#25) (#32)
Browse files Browse the repository at this point in the history
/cherry-pick

Signed-off-by: Tamal Saha <[email protected]>
  • Loading branch information
1gtm authored Jun 16, 2020
1 parent 2179a5b commit ee1d54b
Show file tree
Hide file tree
Showing 2 changed files with 78 additions and 0 deletions.
30 changes: 30 additions & 0 deletions .github/workflows/cherry-pick.yml
Original file line number Diff line number Diff line change
@@ -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 "[email protected]"
- 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
48 changes: 48 additions & 0 deletions hack/scripts/cherry-pick.sh
Original file line number Diff line number Diff line change
@@ -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)

0 comments on commit ee1d54b

Please sign in to comment.