#!/usr/bin/env bash # Descarga un artefacto del release fijado del motor (fenandosr/clusterlog) # y verifica su checksum contra checksums.txt del mismo release. Nunca usa # `latest`: la versión viene de .clusterlog-version. set -euo pipefail ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" ENGINE_REPO="${CLUSTERLOG_ENGINE_REPO:-fenandosr/clusterlog}" VERSION="$(cat "$ROOT/.clusterlog-version")" KIND="${1:?uso: fetch-engine.sh }" DEST="${2:?uso: fetch-engine.sh }" BASE_URL="https://github.com/${ENGINE_REPO}/releases/download/${VERSION}" TMP="$(mktemp -d)" trap 'rm -rf "$TMP"' EXIT case "$KIND" in bin) os="$(uname -s | tr '[:upper:]' '[:lower:]')" arch="$(uname -m)" case "$arch" in x86_64) arch=amd64 ;; aarch64) arch=arm64 ;; esac asset="clusterlog_${os}_${arch}.tar.gz" ;; templates) asset="clusterlog-templates_${VERSION}.tar.gz" ;; *) echo "Tipo de artefacto desconocido: $KIND (use bin o templates)" >&2 exit 1 ;; esac echo "Descargando $asset (clusterlog $VERSION, $ENGINE_REPO)..." curl -fsSL -o "$TMP/checksums.txt" "$BASE_URL/checksums.txt" curl -fsSL -o "$TMP/$asset" "$BASE_URL/$asset" expected="$(grep " $asset\$" "$TMP/checksums.txt" | awk '{print $1}')" if [ -z "$expected" ]; then echo "ERROR: $asset no aparece en checksums.txt del release $VERSION" >&2 exit 1 fi computed="$(sha256sum "$TMP/$asset" | awk '{print $1}')" if [ "$computed" != "$expected" ]; then echo "ERROR: checksum no coincide para $asset" >&2 echo " esperado: $expected" >&2 echo " obtenido: $computed" >&2 exit 1 fi echo "Checksum verificado." case "$KIND" in bin) mkdir -p "$(dirname "$DEST")" tar xzf "$TMP/$asset" -C "$TMP" clusterlog install -m 0755 "$TMP/clusterlog" "$DEST" echo "Binario en $DEST ($("$DEST" version 2>/dev/null || true))" ;; templates) rm -rf "$DEST" mkdir -p "$DEST" tar xzf "$TMP/$asset" -C "$DEST" echo "Plantillas en $DEST" ;; esac