mirror of
https://github.com/Quad4-Software/MeshChatX.git
synced 2026-08-18 09:49:09 -04:00
113 lines
3.5 KiB
Bash
Executable file
113 lines
3.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Pre-download the electron-builder AppImage toolset into ELECTRON_BUILDER_CACHE.
|
|
# GitHub release CDN over HTTP/2 (got inside electron-builder) often resets the
|
|
# TLS stream after freeze has already finished (read ECONNRESET). curl HTTP/1.1
|
|
# plus --retry-all-errors matches scripts/ci/setup-task.sh.
|
|
#
|
|
# Pins must match package.json build.toolsets.appimage and the sha256 in
|
|
# app-builder-lib toolsets/linux.js for that version (electron-builder 26.15.3:
|
|
# appimage@1.0.2).
|
|
set -euo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/../.." && pwd)"
|
|
cd "$ROOT"
|
|
|
|
APPIMAGE_TOOLSET="1.0.2"
|
|
FILENAME="appimage-tools-runtime-20251108.tar.gz"
|
|
SHA256="a784a8c26331ec2e945c23d6bdb14af5c9df27f5939825d84b8709c61dc81eb0"
|
|
RELEASE_NAME="appimage@${APPIMAGE_TOOLSET}"
|
|
URL="https://github.com/electron-userland/electron-builder-binaries/releases/download/${RELEASE_NAME}/${FILENAME}"
|
|
|
|
pkg_toolset="$(node -p "require('./package.json').build.toolsets.appimage" 2>/dev/null || true)"
|
|
if [ "$pkg_toolset" != "$APPIMAGE_TOOLSET" ]; then
|
|
echo "github-warm-appimage-tools.sh: package.json build.toolsets.appimage is '${pkg_toolset:-missing}', script pin is '${APPIMAGE_TOOLSET}'" >&2
|
|
echo "Update APPIMAGE_TOOLSET, FILENAME, and SHA256 in this script to match app-builder-lib." >&2
|
|
exit 1
|
|
fi
|
|
|
|
electron_builder_cache_dir() {
|
|
if [ -n "${ELECTRON_BUILDER_CACHE:-}" ]; then
|
|
case "${ELECTRON_BUILDER_CACHE}" in
|
|
/*)
|
|
printf '%s\n' "${ELECTRON_BUILDER_CACHE}"
|
|
return
|
|
;;
|
|
esac
|
|
fi
|
|
if [ -n "${XDG_CACHE_HOME:-}" ]; then
|
|
case "${XDG_CACHE_HOME}" in
|
|
/*)
|
|
printf '%s\n' "${XDG_CACHE_HOME}/electron-builder"
|
|
return
|
|
;;
|
|
esac
|
|
fi
|
|
printf '%s\n' "${HOME}/.cache/electron-builder"
|
|
}
|
|
|
|
CACHE_DIR="$(electron_builder_cache_dir)"
|
|
DEST_DIR="${CACHE_DIR}/${RELEASE_NAME}"
|
|
DEST="${DEST_DIR}/${FILENAME}"
|
|
mkdir -p "$DEST_DIR"
|
|
|
|
hash_ok() {
|
|
[ -f "$1" ] || return 1
|
|
local actual
|
|
actual="$(sha256sum "$1" | cut -d' ' -f1)"
|
|
[ "$actual" = "$SHA256" ]
|
|
}
|
|
|
|
if hash_ok "$DEST"; then
|
|
echo "github-warm-appimage-tools.sh: using cached ${DEST}"
|
|
exit 0
|
|
fi
|
|
|
|
if [ "${MESHCHATX_OFFLINE_BUILD:-0}" = "1" ]; then
|
|
echo "github-warm-appimage-tools.sh: MESHCHATX_OFFLINE_BUILD=1 but ${DEST} is missing or checksum-mismatched" >&2
|
|
exit 1
|
|
fi
|
|
|
|
download_release() {
|
|
dest="$1"
|
|
url="$2"
|
|
token="${GITHUB_TOKEN:-${GH_TOKEN:-}}"
|
|
if [ -n "$token" ]; then
|
|
curl -fsSL --http1.1 \
|
|
--retry 8 \
|
|
--retry-all-errors \
|
|
--retry-delay 4 \
|
|
--retry-max-time 180 \
|
|
--connect-timeout 20 \
|
|
--max-time 180 \
|
|
-H "Authorization: Bearer ${token}" \
|
|
-o "$dest" \
|
|
"$url"
|
|
else
|
|
curl -fsSL --http1.1 \
|
|
--retry 8 \
|
|
--retry-all-errors \
|
|
--retry-delay 4 \
|
|
--retry-max-time 180 \
|
|
--connect-timeout 20 \
|
|
--max-time 180 \
|
|
-o "$dest" \
|
|
"$url"
|
|
fi
|
|
}
|
|
|
|
TMP="${DEST}.tmp"
|
|
rm -f "$TMP" "$DEST"
|
|
echo "github-warm-appimage-tools.sh: downloading ${FILENAME} (${RELEASE_NAME})"
|
|
download_release "$TMP" "$URL"
|
|
|
|
ACTUAL="$(sha256sum "$TMP" | cut -d' ' -f1)"
|
|
if [ "$ACTUAL" != "$SHA256" ]; then
|
|
echo "github-warm-appimage-tools.sh: SHA256 mismatch for ${FILENAME}" >&2
|
|
echo " expected: ${SHA256}" >&2
|
|
echo " got: ${ACTUAL}" >&2
|
|
rm -f "$TMP"
|
|
exit 1
|
|
fi
|
|
|
|
mv -f "$TMP" "$DEST"
|
|
echo "github-warm-appimage-tools.sh: cached ${DEST} (${ACTUAL})"
|