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