Files
op-packages/honk/honk_toolchain.sh
T

74 lines
2.6 KiB
Bash
Executable File

#!/usr/bin/env bash
# Resolve the toolchain pins for the honk commit pinned by the package Makefile.
#
# ./honk/honk_toolchain.sh [--src DIR] [Makefile]
#
# Prints HONK_SRC_URL / HONK_SRC_VERSION plus BPF_LINKER_VERSION / SHA256 and
# ZIG_VERSION, read from that commit's .github/ci/pins.env and release.yml (or
# from --src when the source is already checked out).
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SRC_DIR=""
MAKEFILE=""
while [ $# -gt 0 ]; do
case "$1" in
--src) SRC_DIR="${2:?--src needs a directory}"; shift 2 ;;
*) MAKEFILE="$1"; shift ;;
esac
done
MAKEFILE="${MAKEFILE:-${HONK_MAKEFILE:-$SCRIPT_DIR/Makefile}}"
[ -f "$MAKEFILE" ] || { echo "ERROR: Makefile not found: $MAKEFILE" >&2; exit 1; }
URL=$(sed -n 's/^[[:space:]]*HONK_SRC_URL:=//p' "$MAKEFILE" | head -n 1)
REV=$(sed -n 's/^[[:space:]]*HONK_SRC_VERSION:=//p' "$MAKEFILE" | head -n 1)
[ -n "$URL" ] && [ -n "$REV" ] || {
echo "ERROR: HONK_SRC_URL / HONK_SRC_VERSION missing in $MAKEFILE" >&2
exit 1
}
if [ -n "$SRC_DIR" ]; then
SRC_DIR="$(cd "$SRC_DIR" && pwd)"
PINS_FILE="$SRC_DIR/.github/ci/pins.env"
RELEASE_FILE="$SRC_DIR/.github/workflows/release.yml"
[ -f "$PINS_FILE" ] && [ -f "$RELEASE_FILE" ] || {
echo "ERROR: $SRC_DIR is not a honk checkout with .github metadata" >&2
exit 1
}
else
REPO_PATH="${URL#https://github.com/}"
REPO_PATH="${REPO_PATH%.git}"
RAW="https://raw.githubusercontent.com/${REPO_PATH}/${REV}"
fetch() {
curl -fsSL --retry 3 "$1" || { echo "ERROR: failed to fetch $1" >&2; exit 1; }
}
PINS_FILE="$(mktemp)"
RELEASE_FILE="$(mktemp)"
trap 'rm -f "$PINS_FILE" "$RELEASE_FILE"' EXIT
fetch "${RAW}/.github/ci/pins.env" > "$PINS_FILE"
fetch "${RAW}/.github/workflows/release.yml" > "$RELEASE_FILE"
fi
BPF_LINKER_VERSION=$(sed -n 's/^BPF_LINKER_VERSION=//p' "$PINS_FILE" | head -n 1)
BPF_LINKER_SHA256=$(sed -n 's/^BPF_LINKER_SHA256=//p' "$PINS_FILE" | head -n 1)
[ -n "$BPF_LINKER_VERSION" ] && [ -n "$BPF_LINKER_SHA256" ] || {
echo "ERROR: BPF_LINKER_VERSION / BPF_LINKER_SHA256 missing in $PINS_FILE" >&2
exit 1
}
ZIG_VERSION=$(awk '
/setup-zig/ { seen = 1; next }
seen && /^[[:space:]]*version:[[:space:]]*/ {
sub(/^[[:space:]]*version:[[:space:]]*/, "")
gsub(/[[:space:]"]/, "")
print
exit
}
' "$RELEASE_FILE")
[ -n "$ZIG_VERSION" ] || { echo "ERROR: no setup-zig version in $RELEASE_FILE" >&2; exit 1; }
printf 'HONK_SRC_URL=%s\nHONK_SRC_VERSION=%s\nBPF_LINKER_VERSION=%s\nBPF_LINKER_SHA256=%s\nZIG_VERSION=%s\n' \
"$URL" "$REV" "$BPF_LINKER_VERSION" "$BPF_LINKER_SHA256" "$ZIG_VERSION"