xref: /aosp_15_r20/external/bpftool/scripts/gh-label-release-assets.sh (revision 858ea5e570667251cdc31d3fe7b846b591105938)
1#!/usr/bin/env bash
2
3set -o errexit
4set -o nounset
5set -o pipefail
6
7# Use this script to add labels to GitHub release assets for a given release.
8#
9# Based on the following console workflow:
10#
11# gh api \
12#     '/repos/qmonnet/bpftool/releases/tags/v7.2.0-snapshot.0' \
13#     --jq '.id'
14# gh api \
15#     '/repos/qmonnet/bpftool/releases/96330927/assets' \
16#     --jq '.[] | select(.name == "bpftool-amd64.tar.gz").id'
17# gh api \
18#     --method PATCH \
19#     -H "Accept: application/vnd.github+json" \
20#     -H "X-GitHub-Api-Version: 2022-11-28" \
21#     '/repos/qmonnet/bpftool/releases/assets/100280866' \
22#     -f name='bpftool-arm64.tar.gz' \
23#     -f label='Compressed binary (arm64)'
24
25REPO="libbpf/bpftool"
26
27usage() {
28    echo "Update asset labels for bpftool releases"
29    echo "Usage:"
30    echo "  $0 [options] <release_tag>"
31    echo ""
32    echo "OPTIONS"
33    echo " -h       display this help"
34    exit "$1"
35}
36
37OPTIND=1
38while getopts "h" opt; do
39    case "$opt" in
40    h)
41        usage 0
42        ;;
43    *)
44        usage 1
45        ;;
46    esac
47done
48shift $((OPTIND-1))
49[[ "${1:-}" = "--" ]] && shift
50
51# Get release tag from command line
52if [[ "$#" -lt 1 ]]; then
53    echo "error: missing release tag"
54    usage 1
55fi
56release_tag="$1"
57echo "repo: ${REPO}, release tag: ${release_tag}"
58
59# Add labels to set for given asset names here:
60declare -A assets_labels=(
61    ["bpftool-libbpf-${release_tag}-sources.tar.gz"]="Source code, including libbpf submodule (tar.gz)"
62)
63
64# Get release ID
65release_id="$(gh api "/repos/${REPO}/releases/tags/${release_tag}" --jq '.id')"
66echo "  found release ID ${release_id}"
67
68# For each label to set, get asset ID, prompt user for confirmation, set label
69for asset_name in "${!assets_labels[@]}"; do
70    asset_id="$(gh api "/repos/${REPO}/releases/${release_id}/assets" \
71        --jq ".[] | select(.name == \"${asset_name}\").id")"
72    echo "  found asset ID ${asset_id}"
73
74    echo "asset '${asset_name}': add label '${assets_labels[${asset_name}]}'"
75    answer=""
76    read -rp 'proceed? [y/N]: ' answer
77
78    case "${answer}" in
79        y|yes|Y|Yes|YES)
80            gh api \
81                --method PATCH \
82                -H 'Accept: application/vnd.github+json' \
83                -H 'X-GitHub-Api-Version: 2022-11-28' \
84                "/repos/${REPO}/releases/assets/${asset_id}" \
85                -f label="${assets_labels[${asset_name}]}"
86            ;;
87        *)
88            echo "cancelled"
89            ;;
90    esac
91done
92