summaryrefslogtreecommitdiffstats
path: root/src/script/ceph-backport.sh
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-27 18:24:20 +0000
commit483eb2f56657e8e7f419ab1a4fab8dce9ade8609 (patch)
treee5d88d25d870d5dedacb6bbdbe2a966086a0a5cf /src/script/ceph-backport.sh
parentInitial commit. (diff)
downloadceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.tar.xz
ceph-483eb2f56657e8e7f419ab1a4fab8dce9ade8609.zip
Adding upstream version 14.2.21.upstream/14.2.21upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/script/ceph-backport.sh')
-rwxr-xr-xsrc/script/ceph-backport.sh158
1 files changed, 158 insertions, 0 deletions
diff --git a/src/script/ceph-backport.sh b/src/script/ceph-backport.sh
new file mode 100755
index 00000000..cf1b7f26
--- /dev/null
+++ b/src/script/ceph-backport.sh
@@ -0,0 +1,158 @@
+#!/bin/bash -e
+#
+# ceph-backport.sh
+#
+# Ceph backporting script
+#
+# Assumes you have forked ceph/ceph.git, cloned your fork, and are running the
+# script in the local clone!
+#
+# With this script, backporting workflow for backport issue
+# http://tracker.ceph.com/issues/19206 (a jewel backport)
+# becomes something like this:
+#
+# git remote add ceph http://github.com/ceph/ceph.git
+# git fetch ceph
+# git checkout -b wip-19206-jewel ceph/jewel
+# git cherry-pick -x ...
+# ceph-backport.sh 19206 jewel
+#
+# The script takes care of opening the backport PR, updating the tracker issue,
+# and cross-linking the backport PR with the tracker issue.
+#
+# However, before you start you will need to find the right values for
+# the following:
+#
+# redmine_key # "My account" -> "API access key" -> "Show"
+# redmine_user_id # "Logged in as foobar", click on foobar link, Redmine User ID
+ # is in the URL, i.e. http://tracker.ceph.com/users/[redmine_user_id]
+# github_token # https://github.com/settings/tokens -> Generate new token ->
+ # ensure it has "Full control of private repositories" scope
+# github_user # Your github username
+#
+# Once you have the actual values for these three variables, create a file
+# $HOME/bin/backport_common.sh with the following contents
+#
+# redmine_key=[your_redmine_key]
+# redmine_user_id=[your_redmine_user_id]
+# github_token=[your_github_personal_access_token]
+# github_user=[your_github_username]
+#
+# Obviously, since this file contains secrets, you should protect it from
+# exposure using all available means (restricted file privileges, encrypted
+# filesystem, etc.). Without correct values for these four variables, this
+# script will not work!
+#
+#
+
+function deprecation_warning {
+ echo "*******************"
+ echo "DEPRECATION WARNING"
+ echo "*******************"
+ echo
+ echo "This is an outdated, unmaintained version of ceph-backport.sh. Using this"
+ echo "version can have unpredictable results. It is recommended to use the"
+ echo "version from the \"master\" branch, instead. In other words, use this:"
+ echo
+ echo "https://github.com/ceph/ceph/blob/master/src/script/ceph-backport.sh"
+ echo
+}
+
+if [[ "$@" =~ "--version" ]] ; then
+ deprecation_warning
+ echo "$0: version 14.2.0 (DEPRECATED - DO NOT USE)"
+ exit 0
+fi
+
+deprecation_warning
+echo "Sleeping for 5 seconds to give you time to hit CTRL-C..."
+sleep 5
+
+source $HOME/bin/backport_common.sh
+
+function failed_required_variable_check () {
+ local varname=$1
+ echo "$0: $varname not defined. Did you create $HOME/bin/backport_common.sh?"
+ echo "(For instructions, see comment block at beginning of script)"
+ exit 1
+}
+
+test "$redmine_key" || failed_required_variable_check redmine_key
+test "$redmine_user_id" || failed_required_variable_check redmine_user_id
+test "$github_token" || failed_required_variable_check github_token
+test "$github_user" || failed_required_variable_check github_user
+
+function usage () {
+ echo "Usage:"
+ echo " $0 [BACKPORT_TRACKER_ISSUE_NUMBER] [MILESTONE]"
+ echo
+ echo "Example:"
+ echo " $0 19206 jewel"
+ echo
+ echo "If MILESTONE is not given on the command line, the script will"
+ echo "try to use the value of the MILESTONE environment variable, if set."
+ echo
+ echo "The script must be run from inside the local git clone"
+ exit 1
+}
+
+[[ $1 != ?(-)+([0-9]) ]] && usage
+issue=$1
+echo "Backport issue: $issue"
+
+milestone=
+test "$2" && milestone="$2"
+if [ -z "$milestone" ] ; then
+ test "$MILESTONE" && milestone="$MILESTONE"
+fi
+test "$milestone" || usage
+echo "Milestone: $milestone"
+
+# ------------------------------------
+# How to find out the milestone number
+# ------------------------------------
+# can't seem to extract the milestone number with the API
+# milestone numbers can be obtained with:
+# curl --verbose -X GET https://api.github.com/repos/ceph/ceph/milestones
+
+if [[ "x$milestone" = "xhammer" ]] ; then
+ milestone_number=5
+ target_branch=hammer
+elif [[ "x$milestone" = "xjewel" ]] ; then
+ milestone_number=8
+ target_branch=jewel
+elif [[ "x$milestone" = "xkraken" ]] ; then
+ milestone_number=9
+ target_branch=kraken
+elif [[ "x$milestone" = "xluminous" ]] ; then
+ milestone_number=10
+ target_branch=luminous
+elif [[ "x$milestone" = "xmimic" ]] ; then
+ milestone_number=11
+ target_branch=mimic
+else
+ echo "Please enter hammer, jewel, kraken, luminous, or mimic"
+ exit 1
+fi
+echo "Milestone is $milestone and milestone number is $milestone_number"
+
+if [ $(curl --silent http://tracker.ceph.com/issues/$issue.json | jq -r .issue.tracker.name) != "Backport" ]
+then
+ echo "http://tracker.ceph.com/issues/$issue is not a backport (edit and change tracker?)"
+ exit 1
+fi
+
+title=$(curl --silent 'http://tracker.ceph.com/issues/'$issue.json?key=$redmine_key | jq .issue.subject | tr -d '\\"')
+echo "Issue title: $title"
+
+git push -u origin wip-$issue-$milestone
+number=$(curl --silent --data-binary '{"title":"'"$title"'","head":"'$github_user':wip-'$issue-$milestone'","base":"'$target_branch'","body":"http://tracker.ceph.com/issues/'$issue'"}' 'https://api.github.com/repos/ceph/ceph/pulls?access_token='$github_token | jq .number)
+echo "Opened pull request $number"
+
+component=core ; curl --silent --data-binary '{"milestone":'$milestone_number',"assignee":"'$github_user'","labels":["bug fix","'$component'"]}' 'https://api.github.com/repos/ceph/ceph/issues/'$number'?access_token='$github_token
+firefox https://github.com/ceph/ceph/pull/$number
+redmine_status=2 # In Progress
+curl --verbose -X PUT --header 'Content-type: application/json' --data-binary '{"issue":{"description":"https://github.com/ceph/ceph/pull/'$number'","status_id":'$redmine_status',"assigned_to_id":'$redmine_user_id'}}' 'http://tracker.ceph.com/issues/'$issue.json?key=$redmine_key
+echo "Staged http://tracker.ceph.com/issues/$issue"
+
+firefox http://tracker.ceph.com/issues/$issue