mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-04-27 11:31:05 +00:00
manual fixes of various issues. Related to: #10951 Signed-off-by: Lukáš Doktor <ldoktor@redhat.com>
185 lines
3.7 KiB
Bash
Executable File
185 lines
3.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Copyright (c) 2020 Intel Corporation
|
|
# Copyright (c) 2024 IBM Corporation
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
set -o errexit
|
|
set -o errtrace
|
|
set -o nounset
|
|
set -o pipefail
|
|
|
|
[[ -n "${DEBUG:-}" ]] && set -o xtrace
|
|
|
|
script_name=${0##*/}
|
|
|
|
#---------------------------------------------------------------------
|
|
|
|
die()
|
|
{
|
|
echo >&2 "$*"
|
|
exit 1
|
|
}
|
|
|
|
usage()
|
|
{
|
|
cat <<EOF
|
|
Usage: ${script_name} [OPTIONS] [command] [arguments]
|
|
|
|
Description: Utility to expand the abilities of the GitHub CLI tool, gh.
|
|
|
|
Command descriptions:
|
|
|
|
list-issues-for-pr List issues linked to a PR.
|
|
list-labels-for-issue List labels, in json format for an issue
|
|
|
|
Commands and arguments:
|
|
|
|
list-issues-for-pr <pr>
|
|
list-labels-for-issue <issue>
|
|
|
|
Options:
|
|
|
|
-h Show this help statement.
|
|
-r <owner/repo> Optional <org/repo> specification. Default: 'kata-containers/kata-containers'
|
|
|
|
Examples:
|
|
|
|
- List issues for a Pull Request 123 in kata-containers/kata-containers repo
|
|
|
|
$ ${script_name} list-issues-for-pr 123
|
|
EOF
|
|
}
|
|
|
|
list_issues_for_pr()
|
|
{
|
|
local pr="${1:-}"
|
|
local repo="${2:-kata-containers/kata-containers}"
|
|
|
|
[[ -z "${pr}" ]] && die "need PR"
|
|
|
|
local commits
|
|
commits=$(gh pr view "${pr}" --repo "${repo}" --json commits --jq .commits[].messageBody)
|
|
|
|
[[ -z "${commits}" ]] && die "cannot determine commits for PR ${pr}"
|
|
|
|
# Extract the issue number(s) from the commits.
|
|
#
|
|
# This needs to be careful to take account of lines like this:
|
|
#
|
|
# fixes 99
|
|
# fixes: 77
|
|
# fixes #123.
|
|
# Fixes: #1, #234, #5678.
|
|
#
|
|
# Note the exclusion of lines starting with whitespace which is
|
|
# specifically to ignore vendored git log comments, which are whitespace
|
|
# indented and in the format:
|
|
#
|
|
# "<git-commit> <git-commit-msg>"
|
|
#
|
|
local issues
|
|
issues=$(echo "${commits}" |\
|
|
grep -v -E "^( | )" |\
|
|
grep -i -E "fixes:* *(#*[0-9][0-9]*)" |\
|
|
tr ' ' '\n' |\
|
|
grep "[0-9][0-9]*" |\
|
|
sed 's/[.,\#]//g' |\
|
|
sort -nu || true)
|
|
|
|
[[ -z "${issues}" ]] && die "cannot determine issues for PR ${pr}"
|
|
|
|
echo "# Issues linked to PR"
|
|
echo "#"
|
|
echo "# Fields: issue_number"
|
|
|
|
local issue
|
|
echo "${issues}" | while read -r issue
|
|
do
|
|
printf "%s\n" "${issue}"
|
|
done
|
|
}
|
|
|
|
list_labels_for_issue()
|
|
{
|
|
local issue="${1:-}"
|
|
|
|
[[ -z "${issue}" ]] && die "need issue number"
|
|
|
|
local labels
|
|
labels=$(gh issue view "${issue}" --repo kata-containers/kata-containers --json labels)
|
|
|
|
[[ -z "${labels}" ]] && die "cannot determine labels for issue ${issue}"
|
|
|
|
echo "${labels}"
|
|
}
|
|
|
|
setup()
|
|
{
|
|
for cmd in gh jq
|
|
do
|
|
command -v "${cmd}" &>/dev/null || die "need command: ${cmd}"
|
|
done
|
|
}
|
|
|
|
handle_args()
|
|
{
|
|
setup
|
|
|
|
local opt
|
|
|
|
while getopts "hr:" opt "$@"
|
|
do
|
|
case "${opt}" in
|
|
h) usage && exit 0 ;;
|
|
r) repo="${OPTARG}" ;;
|
|
*) echo "use '-h' to get list of supprted aruments" && exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
local repo="${repo:-kata-containers/kata-containers}"
|
|
local cmd="${1:-}"
|
|
|
|
case "${cmd}" in
|
|
list-issues-for-pr) ;;
|
|
list-labels-for-issue) ;;
|
|
|
|
"") usage && exit 0 ;;
|
|
*) die "invalid command: '${cmd}'" ;;
|
|
esac
|
|
|
|
# Consume the command name
|
|
shift
|
|
|
|
local issue=""
|
|
local pr=""
|
|
|
|
case "${cmd}" in
|
|
list-issues-for-pr)
|
|
pr="${1:-}"
|
|
|
|
list_issues_for_pr "${pr}" "${repo}"
|
|
;;
|
|
|
|
list-labels-for-issue)
|
|
issue="${1:-}"
|
|
|
|
list_labels_for_issue "${issue}"
|
|
;;
|
|
|
|
*) die "impossible situation: cmd: '${cmd}'" ;;
|
|
esac
|
|
|
|
exit 0
|
|
}
|
|
|
|
main()
|
|
{
|
|
handle_args "$@"
|
|
}
|
|
|
|
main "$@"
|