feat(release): stage GitWorkshop and next node updates
This commit is contained in:
Executable
+82
@@ -0,0 +1,82 @@
|
||||
#!/bin/sh
|
||||
# Install the exact ngit runtime validated for Archipelago source hosting.
|
||||
#
|
||||
# The GitHub release archive contains both `ngit` and `git-remote-nostr`.
|
||||
# Keep version, filenames, and SHA-256 values together so image builds and
|
||||
# OTA updates cannot silently resolve a newer upstream release.
|
||||
|
||||
set -eu
|
||||
|
||||
NGIT_VERSION="2.6.3"
|
||||
NGIT_RELEASE_BASE="https://github.com/DanConwayDev/ngit-cli/releases/download/v${NGIT_VERSION}"
|
||||
X86_64_ASSET="ngit-v${NGIT_VERSION}-x86_64-unknown-linux-gnu.2.17.tar.gz"
|
||||
X86_64_SHA256="81dd9b6a11a4a0feb946e56f55d557dc24075f1dcdda00ac35f9fd01920b9779"
|
||||
AARCH64_ASSET="ngit-v${NGIT_VERSION}-aarch64-unknown-linux-gnu.2.17.tar.gz"
|
||||
AARCH64_SHA256="e9d9437b7574e729b5a5d5cd800ebd668b73e6eb5c5859d52f83114c2f4b08b8"
|
||||
|
||||
install_root="${ARCHIPELAGO_NGIT_INSTALL_ROOT:-}"
|
||||
case "$install_root" in
|
||||
""|/*) ;;
|
||||
*)
|
||||
echo "ARCHIPELAGO_NGIT_INSTALL_ROOT must be empty or absolute" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
install_dir="${install_root}/usr/bin"
|
||||
ngit_bin="${install_dir}/ngit"
|
||||
helper_bin="${install_dir}/git-remote-nostr"
|
||||
|
||||
if [ -x "$ngit_bin" ] && [ -x "$helper_bin" ] && \
|
||||
[ "$($ngit_bin --version 2>/dev/null || true)" = "ngit ${NGIT_VERSION}" ] && \
|
||||
[ "$($helper_bin --version 2>/dev/null || true)" = "v${NGIT_VERSION}" ]; then
|
||||
echo "ngit ${NGIT_VERSION} already installed"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
machine="${ARCHIPELAGO_NGIT_ARCH:-$(uname -m)}"
|
||||
case "$machine" in
|
||||
x86_64|amd64)
|
||||
asset="$X86_64_ASSET"
|
||||
expected_sha256="$X86_64_SHA256"
|
||||
;;
|
||||
aarch64|arm64)
|
||||
asset="$AARCH64_ASSET"
|
||||
expected_sha256="$AARCH64_SHA256"
|
||||
;;
|
||||
*)
|
||||
echo "Unsupported ngit architecture: $machine" >&2
|
||||
exit 2
|
||||
;;
|
||||
esac
|
||||
|
||||
download_dir=$(mktemp -d -t archipelago-ngit.XXXXXX)
|
||||
cleanup() {
|
||||
rm -rf -- "$download_dir"
|
||||
}
|
||||
trap cleanup EXIT HUP INT TERM
|
||||
|
||||
archive="$download_dir/$asset"
|
||||
curl --fail --silent --show-error --location \
|
||||
--proto '=https' --tlsv1.2 \
|
||||
--retry 3 --connect-timeout 20 \
|
||||
--output "$archive" "$NGIT_RELEASE_BASE/$asset"
|
||||
|
||||
actual_sha256=$(sha256sum "$archive" | awk '{print $1}')
|
||||
if [ "$actual_sha256" != "$expected_sha256" ]; then
|
||||
echo "ngit archive checksum mismatch for $asset" >&2
|
||||
echo "expected: $expected_sha256" >&2
|
||||
echo "actual: $actual_sha256" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Extract only the two expected top-level files. Unexpected archive content is
|
||||
# never copied into the host filesystem.
|
||||
tar -xzf "$archive" -C "$download_dir" ngit git-remote-nostr
|
||||
mkdir -p "$install_dir"
|
||||
install -m 0755 "$download_dir/ngit" "$ngit_bin"
|
||||
install -m 0755 "$download_dir/git-remote-nostr" "$helper_bin"
|
||||
|
||||
[ "$($ngit_bin --version)" = "ngit ${NGIT_VERSION}" ]
|
||||
[ "$($helper_bin --version)" = "v${NGIT_VERSION}" ]
|
||||
echo "installed ngit ${NGIT_VERSION} for $machine"
|
||||
Reference in New Issue
Block a user