feat(installer): fetch latest SDRconnect/RigControl build hashes from upstream

Introduce dynamic resolution of git build hashes by fetching the upstream
installer script and parsing the values, with fallbacks to built-in defaults
and support for user overrides via environment variables.

Add fetch_gitbuilds() to retrieve and parse hashes, and resolve_artifacts()
to populate artifact filenames and URLs based on resolved hashes.

Call these functions early in main() to ensure up-to-date artifacts before
downloading. Skip upstream fetch if DONOTDOWNLOAD=1 is set.
This commit is contained in:
Greg Gauthier 2026-05-01 20:35:25 +01:00
parent 681180b811
commit b430c23506

View File

@ -11,23 +11,30 @@ set -Eeuo pipefail
# CONFIG
#######################################
SDRCONNECT_GITBUILD="a4b8da76b"
RIGCONTROL_GITBUILD="4a50e06"
# Build hashes are resolved at runtime from the upstream installer
# (https://www.sdrplay.com/software/install.sh). The values below are used
# as fallbacks if upstream is unreachable, and are also honoured as user
# overrides when set in the environment before invocation.
_SDRCONNECT_GITBUILD_USER_SET="${SDRCONNECT_GITBUILD+set}"
_RIGCONTROL_GITBUILD_USER_SET="${RIGCONTROL_GITBUILD+set}"
: "${SDRCONNECT_GITBUILD:=a4b8da76b}"
: "${RIGCONTROL_GITBUILD:=4a50e06}"
UPSTREAM_INSTALLER_URL="https://www.sdrplay.com/software/install.sh"
SDRCONNECT_DIR="/opt/sdrconnect"
RIGCONTROL_DIR="/opt/rigcontrol"
SDRCONNECT_TAR_X86_64="sdrconnect_linux-x64_${SDRCONNECT_GITBUILD}.tar.gz"
SDRCONNECT_TAR_ARM64="sdrconnect_linux-arm64_${SDRCONNECT_GITBUILD}.tar.gz"
RIGCONTROL_TAR_X86_64="rigcontrol_linux-x64_${RIGCONTROL_GITBUILD}.tar.gz"
RIGCONTROL_TAR_ARM64="rigcontrol_linux-arm64_${RIGCONTROL_GITBUILD}.tar.gz"
SDRCONNECT_URL_X86_64="https://www.sdrplay.com/software/${SDRCONNECT_TAR_X86_64}"
SDRCONNECT_URL_ARM64="https://www.sdrplay.com/software/${SDRCONNECT_TAR_ARM64}"
RIGCONTROL_URL_X86_64="https://www.sdrplay.com/software/${RIGCONTROL_TAR_X86_64}"
RIGCONTROL_URL_ARM64="https://www.sdrplay.com/software/${RIGCONTROL_TAR_ARM64}"
# Artifact filenames and URLs depend on the resolved build hashes and are
# populated by resolve_artifacts() after fetch_gitbuilds() runs.
SDRCONNECT_TAR_X86_64=""
SDRCONNECT_TAR_ARM64=""
RIGCONTROL_TAR_X86_64=""
RIGCONTROL_TAR_ARM64=""
SDRCONNECT_URL_X86_64=""
SDRCONNECT_URL_ARM64=""
RIGCONTROL_URL_X86_64=""
RIGCONTROL_URL_ARM64=""
PROFILE_SCRIPT="/etc/profile.d/sdrconnect.sh"
UDEV_RULES="/etc/udev/rules.d/66-sdrplay.rules"
@ -312,6 +319,60 @@ show_license() {
esac
}
#######################################
# VERSION RESOLUTION
#######################################
fetch_gitbuilds(){
if [[ "${DONOTDOWNLOAD:-0}" == "1" ]]; then
info "DONOTDOWNLOAD=1: skipping upstream version lookup"
return
fi
if [[ "$DRY_RUN" -eq 1 ]]; then
info "[DRY-RUN] would fetch $UPSTREAM_INSTALLER_URL for current build hashes"
return
fi
info "Fetching current build hashes from upstream..."
local upstream
if ! upstream=$(curl -fsSL --retry 2 "$UPSTREAM_INSTALLER_URL" 2>/dev/null); then
warn "Could not fetch $UPSTREAM_INSTALLER_URL; using built-in fallback hashes"
return
fi
local up_sdrc up_rig
up_sdrc=$(grep -E '^SDRCONNECT_GITBUILD=' <<<"$upstream" | head -1 | cut -d'"' -f2)
up_rig=$(grep -E '^RIGCONTROL_GITBUILD=' <<<"$upstream" | head -1 | cut -d'"' -f2)
if [[ "$_SDRCONNECT_GITBUILD_USER_SET" == "set" ]]; then
info "Honouring SDRCONNECT_GITBUILD override: $SDRCONNECT_GITBUILD"
elif [[ -n "$up_sdrc" ]]; then
SDRCONNECT_GITBUILD="$up_sdrc"
else
warn "Could not parse SDRCONNECT_GITBUILD from upstream; using fallback $SDRCONNECT_GITBUILD"
fi
if [[ "$_RIGCONTROL_GITBUILD_USER_SET" == "set" ]]; then
info "Honouring RIGCONTROL_GITBUILD override: $RIGCONTROL_GITBUILD"
elif [[ -n "$up_rig" ]]; then
RIGCONTROL_GITBUILD="$up_rig"
else
warn "Could not parse RIGCONTROL_GITBUILD from upstream; using fallback $RIGCONTROL_GITBUILD"
fi
info "Resolved SDRconnect=$SDRCONNECT_GITBUILD, RigControl=$RIGCONTROL_GITBUILD"
}
resolve_artifacts(){
SDRCONNECT_TAR_X86_64="sdrconnect_linux-x64_${SDRCONNECT_GITBUILD}.tar.gz"
SDRCONNECT_TAR_ARM64="sdrconnect_linux-arm64_${SDRCONNECT_GITBUILD}.tar.gz"
RIGCONTROL_TAR_X86_64="rigcontrol_linux-x64_${RIGCONTROL_GITBUILD}.tar.gz"
RIGCONTROL_TAR_ARM64="rigcontrol_linux-arm64_${RIGCONTROL_GITBUILD}.tar.gz"
SDRCONNECT_URL_X86_64="https://www.sdrplay.com/software/${SDRCONNECT_TAR_X86_64}"
SDRCONNECT_URL_ARM64="https://www.sdrplay.com/software/${SDRCONNECT_TAR_ARM64}"
RIGCONTROL_URL_X86_64="https://www.sdrplay.com/software/${RIGCONTROL_TAR_X86_64}"
RIGCONTROL_URL_ARM64="https://www.sdrplay.com/software/${RIGCONTROL_TAR_ARM64}"
}
#######################################
# DOWNLOAD
#######################################
@ -576,6 +637,9 @@ main(){
check_dependencies
ensure_sudo
fetch_gitbuilds
resolve_artifacts
[[ "$ARCH" == "x86_64" ]] && {
U1="$SDRCONNECT_URL_X86_64"; U2="$RIGCONTROL_URL_X86_64"
F1="$SDRCONNECT_TAR_X86_64"; F2="$RIGCONTROL_TAR_X86_64"