Files
nano_metrics/deploy/release.sh
T
Gilles Soulier c526a6e5ca fix: cross-compilation musl pour release multi-arch
- rumqttc : use-native-tls → use-rustls (supprime dépendance OpenSSL)
- .cargo/config.toml (racine) : linkers musl + CC/AR pour ring aarch64
- deploy/release.sh : passe CC_aarch64_unknown_linux_musl au build
- .gitignore : règle config.toml affinée (exclut cargo configs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-22 19:42:08 +02:00

104 lines
3.2 KiB
Bash
Executable File

#!/usr/bin/env bash
# Compile le binaire release et publie une release Gitea avec le binaire en asset.
# Usage : ./deploy/release.sh v0.1.0
# ./deploy/release.sh v0.1.1 "Description du changement"
set -euo pipefail
REPO_API="https://git.maison43gil.com/api/v1/repos/gilles/nano_metrics"
TOKEN_FILE="$(dirname "$0")/../repo.md"
# Lire le token depuis repo.md
TOKEN=$(grep -oP '(?<=\*\*Token\*\* : ).*' "$TOKEN_FILE" | tr -d '[:space:]')
if [ -z "$TOKEN" ]; then
echo "ERREUR : token Gitea introuvable dans repo.md"
exit 1
fi
TAG="${1:-}"
if [ -z "$TAG" ]; then
echo "Usage : $0 <tag> [description]"
echo "Exemple : $0 v0.1.0"
exit 1
fi
DESCRIPTION="${2:-Release $TAG}"
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
CARGO_TOML="$ROOT/agent/Cargo.toml"
# ── 1. Compiler pour toutes les cibles supportées ──────────────────────────
echo "=== Compilation de l'agent ==="
TARGETS=("x86_64-unknown-linux-musl" "aarch64-unknown-linux-musl")
LABELS=("linux-amd64" "linux-arm64")
mkdir -p "$ROOT/dist"
for i in "${!TARGETS[@]}"; do
TARGET="${TARGETS[$i]}"
LABEL="${LABELS[$i]}"
echo "$TARGET ($LABEL)..."
# Installer la cible si absente
rustup target add "$TARGET" 2>/dev/null || true
# Compiler (CC requis par la crate ring pour les cibles musl cross)
CC_aarch64_unknown_linux_musl=aarch64-linux-gnu-gcc \
AR_aarch64_unknown_linux_musl=aarch64-linux-gnu-ar \
cargo build --release \
--manifest-path "$CARGO_TOML" \
--target "$TARGET" \
2>&1 | tail -3
SRC="$ROOT/agent/target/$TARGET/release/nanometrics-agent"
if [ ! -f "$SRC" ]; then
echo " AVERTISSEMENT : binaire introuvable pour $TARGET, ignoré"
continue
fi
DEST="$ROOT/dist/nanometrics-agent-$LABEL"
cp "$SRC" "$DEST"
strip "$DEST" 2>/dev/null || true
echo " OK : $(du -sh "$DEST" | cut -f1)"
done
# ── 2. Créer la release Gitea ──────────────────────────────────────────────
echo ""
echo "=== Création de la release Gitea $TAG ==="
RELEASE_JSON=$(curl -sf \
-H "Authorization: token $TOKEN" \
-H "Content-Type: application/json" \
-X POST "$REPO_API/releases" \
-d "{
\"tag_name\": \"$TAG\",
\"name\": \"$TAG\",
\"body\": \"$DESCRIPTION\",
\"draft\": false,
\"prerelease\": false
}")
RELEASE_ID=$(echo "$RELEASE_JSON" | python3 -c "import sys,json; print(json.load(sys.stdin)['id'])")
echo "Release ID : $RELEASE_ID"
# ── 3. Uploader les binaires comme assets ─────────────────────────────────
echo ""
echo "=== Upload des binaires ==="
for LABEL in "${LABELS[@]}"; do
ASSET="$ROOT/dist/nanometrics-agent-$LABEL"
[ -f "$ASSET" ] || continue
ASSET_NAME="nanometrics-agent-$LABEL"
echo "→ Upload $ASSET_NAME..."
curl -sf \
-H "Authorization: token $TOKEN" \
-F "attachment=@$ASSET;filename=$ASSET_NAME" \
"$REPO_API/releases/$RELEASE_ID/assets" \
> /dev/null
echo " OK"
done
echo ""
echo "✓ Release $TAG publiée : https://git.maison43gil.com/gilles/nano_metrics/releases/tag/$TAG"