feat(install): enhance grokkit-install script with checksum verification and version flexibility
All checks were successful
CI / Test (push) Successful in 33s
CI / Lint (push) Successful in 22s
CI / Build (push) Successful in 19s
Release / Create Release (push) Successful in 35s

- Strip leading 'v' from VERSION for flexible invocation
- Add robust checksum download and verification using sha256sum or shasum
- Handle missing checksum tools or entries gracefully with warnings
- Update asset naming to include 'v' prefix consistently
- Improve platform detection formatting and add trap for temp dir cleanup
- Minor echo message updates for better user feedback
This commit is contained in:
Gregory Gauthier 2026-03-30 11:06:50 +01:00
parent 7ffdb2c289
commit 509e02b2e8

View File

@ -1,11 +1,14 @@
#!/usr/bin/env bash #!/usr/bin/env bash
set -euo pipefail set -euo pipefail
VERSION=${VERSION:-${1:?Provide VERSION env or arg, e.g. VERSION=1.0.0 bash grokkit-install.sh}} VERSION=${VERSION:-${1:?Provide VERSION env or arg, e.g. VERSION=0.3.2 bash grokkit-install.sh}}
# Strip leading 'v' if present (makes invocation flexible)
VERSION=${VERSION#v}
GITEA_BASE=https://repos.gmgauthier.com/gmgauthier/grokkit GITEA_BASE=https://repos.gmgauthier.com/gmgauthier/grokkit
# Detect platform # Platform detection
OS=$(uname -s | tr '[:upper:]' '[:lower:]') OS=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$OS" in case "$OS" in
linux) OS=linux ;; linux) OS=linux ;;
@ -23,28 +26,48 @@ ASSET="grokkit-${OS}-${ARCH}-v${VERSION}.tar.gz"
echo "Installing grokkit ${VERSION} for ${OS}/${ARCH}..." echo "Installing grokkit ${VERSION} for ${OS}/${ARCH}..."
TEMP_DIR=$(mktemp -d) TEMP_DIR=$(mktemp -d)
#trap 'rm -rf "${TEMP_DIR}" EXIT' trap 'rm -rf "${TEMP_DIR}"' EXIT
cd "${TEMP_DIR}" cd "${TEMP_DIR}"
# Download # Download asset + checksums
echo "Downloading From ${GITEA_BASE}/releases/download/v${VERSION}/${ASSET}" echo "Downloading ${ASSET}..."
curl -fL "${GITEA_BASE}/releases/download/v${VERSION}/${ASSET}" -o asset.tar.gz curl -fL "${GITEA_BASE}/releases/download/v${VERSION}/${ASSET}" -o asset.tar.gz
#echo "Downloading checksums..."
#curl -fL "${GITEA_BASE}/releases/download/v${VERSION}/checksums.txt" -o checksums.txt
# Verify checksum echo "Downloading checksums.txt..."
#echo "Verifying checksums..." curl -fL "${GITEA_BASE}/releases/download/v${VERSION}/checksums.txt" -o checksums.txt
#HASH=$(grep " ${ASSET}$" checksums.txt | cut -d " " -f1)
#echo "${HASH} asset.tar.gz" | shasum -a 256 --check - || { echo "Checksum mismatch!"; exit 1; } # Robust checksum verification
echo "Verifying checksum..."
CHECKSUM_CMD=""
if command -v sha256sum >/dev/null 2>&1; then
CHECKSUM_CMD="sha256sum"
elif command -v shasum >/dev/null 2>&1; then
CHECKSUM_CMD="shasum -a 256"
fi
if [ -n "$CHECKSUM_CMD" ] && [ -f checksums.txt ]; then
# Extract hash (handles "build/..." prefix in checksums.txt)
HASH=$(grep -oE '[0-9a-f]{64}\s+build/[^ ]*' checksums.txt | grep "${ASSET}" | cut -d' ' -f1)
if [ -z "$HASH" ]; then
echo "⚠️ No checksum entry found for ${ASSET} continuing without verification"
else
echo "${HASH} asset.tar.gz" | $CHECKSUM_CMD --check - || {
echo "❌ Checksum mismatch for ${ASSET}!"
exit 1
}
echo "✅ Checksum verified successfully"
fi
else
echo "⚠️ Checksum tool not found (sha256sum/shasum) skipping verification"
fi
# Extract # Extract
echo "Extracting asset" echo "Extracting asset..."
tar xzf asset.tar.gz tar xzf asset.tar.gz
BINARY="grokkit-${OS}-${ARCH}" BINARY="grokkit-${OS}-${ARCH}"
# Install # Install
echo "Installing ${BINARY}..."
INSTALL_DIR="${HOME}/.local/bin" INSTALL_DIR="${HOME}/.local/bin"
mkdir -p "${INSTALL_DIR}" mkdir -p "${INSTALL_DIR}"
mv "${BINARY}" "${INSTALL_DIR}/grokkit" mv "${BINARY}" "${INSTALL_DIR}/grokkit"