mirror of https://github.com/CGAL/cgal
tag_pr_per_release.sh: allow to relaunch the script if it failed
and code review with GH Copilot
This commit is contained in:
parent
d973d88ac8
commit
938ff88212
|
|
@ -3,58 +3,96 @@
|
|||
# This script requires Github CLI to be installed and configured.
|
||||
# https://cli.github.com/
|
||||
#
|
||||
# example calls within a git repo
|
||||
# bash tag_pr_per_release.sh 4.12 4.12.1
|
||||
# bash tag_pr_per_release.sh 4.12 4.13
|
||||
# bash tag_pr_per_release.sh 4.13 4.13.1
|
||||
# Example calls within a git repo:
|
||||
#
|
||||
# bash tag_pr_per_release.sh 4.12 4.12.1
|
||||
# bash tag_pr_per_release.sh 4.12 4.13
|
||||
# bash tag_pr_per_release.sh 4.13 4.13.1
|
||||
#
|
||||
# After the release of CGAL-5.0 the release manager needs to call:
|
||||
# bash tag_pr_per_release.sh 4.14 5.0
|
||||
#
|
||||
# bash tag_pr_per_release.sh 4.14 5.0
|
||||
#
|
||||
# After the release of CGAL-4.14.1 the release manager needs to call:
|
||||
# bash tag_pr_per_release.sh 4.14 4.14.1
|
||||
#
|
||||
# bash tag_pr_per_release.sh 4.14 4.14.1
|
||||
#
|
||||
# After the release of CGAL-4.14.2 the release manager needs to call:
|
||||
# bash tag_pr_per_release.sh 4.14 4.14.2
|
||||
#
|
||||
# bash tag_pr_per_release.sh 4.14 4.14.2
|
||||
#
|
||||
|
||||
set -e # Exit the script on first error, for safety
|
||||
set -e # Exit the script on the first error, for safety
|
||||
|
||||
err_report() {
|
||||
echo "Error (code $?) on line $(caller)"
|
||||
echo "Error (code $?) on line $(caller)"
|
||||
}
|
||||
|
||||
# Check if GitHub CLI is installed
|
||||
if ! command -v gh &> /dev/null; then
|
||||
echo "GitHub CLI (gh) could not be found. Please install it from https://cli.github.com/"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check if GitHub CLI is authenticated
|
||||
if ! gh auth status &> /dev/null; then
|
||||
echo "GitHub CLI is not authenticated. Please run 'gh auth login' to authenticate."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
trap 'err_report $LINENO' ERR
|
||||
|
||||
PREVIOUS_MAJOR_RELEASE=$1
|
||||
CURRENT_RELEASE=$2
|
||||
|
||||
REMOTE=`git config branch.releases/CGAL-${PREVIOUS_MAJOR_RELEASE}-branch.remote || git config branch.${PREVIOUS_MAJOR_RELEASE}.x-branch.remote`
|
||||
# $REMOTE should be the "cgal" remote, but a CGAL developer may have keep the
|
||||
# name "origin", or set to another one.
|
||||
REMOTE=$(git config branch.releases/CGAL-${PREVIOUS_MAJOR_RELEASE}-branch.remote || git config branch.${PREVIOUS_MAJOR_RELEASE}.x-branch.remote)
|
||||
# $REMOTE should be the "cgal" remote, but a CGAL developer may have kept the
|
||||
# name "origin", or set it to another one.
|
||||
|
||||
# Call git-fetch to refresh the branch, and fetch the references
|
||||
# refs/pull/*/head as well.
|
||||
git fetch --tags "${REMOTE}" `git config --get-all "remote.${REMOTE}.fetch"` '+refs/pull/*/head:refs/pull/*/head'
|
||||
git fetch --tags "${REMOTE}" $(git config --get-all "remote.${REMOTE}.fetch") '+refs/pull/*/head:refs/pull/*/head'
|
||||
|
||||
PR_LIST=`git log --pretty='%D' v${PREVIOUS_MAJOR_RELEASE}..v${CURRENT_RELEASE} | awk 'match($0, /refs\/pull\/([0-9]+)\/head/, a) {print a[1]}' | sort -u`
|
||||
PR_LIST=$(git log --pretty='%D' v${PREVIOUS_MAJOR_RELEASE}..v${CURRENT_RELEASE} | awk 'match($0, /refs\/pull\/([0-9]+)\/head/, a) {print a[1]}' | sort -u)
|
||||
|
||||
echo gh api repos/CGAL/cgal/labels -F name=Merged_in_${CURRENT_RELEASE}
|
||||
for i in ${PR_LIST}; do
|
||||
echo gh pr edit $i --add-label Merged_in_${CURRENT_RELEASE}
|
||||
done
|
||||
echo_gh() {
|
||||
echo "gh $@"
|
||||
}
|
||||
|
||||
exit_code=0
|
||||
|
||||
do_gh() {
|
||||
set +e
|
||||
gh $@
|
||||
local err=$?
|
||||
set -e
|
||||
case "$err" in
|
||||
0|1)
|
||||
;;
|
||||
*)
|
||||
exit $err
|
||||
;;
|
||||
esac
|
||||
}
|
||||
|
||||
create_and_set_label() {
|
||||
local GH=do_gh
|
||||
if [ "$1" == "--dry-run" ]; then
|
||||
GH=echo_gh
|
||||
fi
|
||||
$GH label create Merged_in_${CURRENT_RELEASE}
|
||||
for i in ${PR_LIST}; do
|
||||
$GH pr edit $i --add-label Merged_in_${CURRENT_RELEASE}
|
||||
done
|
||||
}
|
||||
|
||||
create_and_set_label --dry-run
|
||||
read -p "Please confirm operation by typing YES? " -n 4 -r
|
||||
echo
|
||||
if [[ $REPLY =~ ^YES$ ]]; then
|
||||
|
||||
gh api repos/CGAL/cgal/labels -F name=Merged_in_${CURRENT_RELEASE}
|
||||
for i in ${PR_LIST}; do
|
||||
gh pr edit $i --add-label Merged_in_${CURRENT_RELEASE}
|
||||
done
|
||||
|
||||
create_and_set_label
|
||||
else
|
||||
|
||||
echo "Abort"
|
||||
|
||||
echo "Aborted"
|
||||
exit 1
|
||||
fi
|
||||
exit $exit_code
|
||||
|
|
|
|||
Loading…
Reference in New Issue