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