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