#!/bin/bash # build-image.sh — build the StakeSquid dshackle fork image with a WIRE-CORRECT version. # # dRPC edges record each provider's dshackle version (Global.version, sent in every # Describe response and SubscribeChainStatus BuildInfo) and deprioritize providers # whose string doesn't match the expected release. gradle's getVersion() only yields # the clean release string on an EXACT tag match; one patch commit past the tag would # report "-SNAPSHOT" to every edge. So: force-move the base release tag onto the # patch HEAD locally before building (never push that tag), which makes our build # report exactly what stock drpcorg/dshackle: reports (verified against a # live gateway: version.app=0.79.10). # # Usage: ./build-image.sh [base-tag] [suffix] # base-tag: upstream release our branch is based on (default v0.79.10) # suffix: local image tag suffix (default ss1) -> stakesquid/dshackle:- # # Per upstream release: rebase reload-removal onto the new tag, bump the default here, # rerun. Distribute with: docker save stakesquid/dshackle:- | ssh docker load set -euo pipefail cd "$(dirname "$0")" BASE_TAG=${1:-v0.79.10} SUFFIX=${2:-ss1} VER=${BASE_TAG#v} git tag -f "$BASE_TAG" HEAD >/dev/null # local only - makes getVersion() exact-match docker build -q -t drpc-dshackle . >/dev/null export JAVA_HOME=${JAVA_HOME:-/usr/lib/jvm/java-21-openjdk-amd64} ./gradlew jibDockerBuild -Djib.to.image="stakesquid/dshackle:${VER}-${SUFFIX}" -x test echo "--- wire version check (must equal stock ${VER}):" docker run --rm --entrypoint cat "stakesquid/dshackle:${VER}-${SUFFIX}" \ /app/resources/version.properties