Files
agent-manager/install.sh
T
bruno 38d38d51e3 fix: install.sh acceptait seulement l'entrée 'am' dans l'archive de release
Le pipeline CI publie am-linux-x86_64.tar.gz avec une entrée nommée 'am-linux-x86_64' (pas 'am') : le test [ -f $tmpdir/am ] échouait et le script retombait sur cargo install depuis les sources alors que le binaire précompilé existe. Recherche flexible du premier fichier extrait (am | am-$platform-$arch | n'importe quel fichier). Vérifié : extraction réelle du tar.gz v1.0.1 → ELF statique trouvé.
2026-08-20 09:32:00 -04:00

100 lines
3.3 KiB
Bash

#!/bin/sh
# agent-manager (am) — installateur Linux / macOS / WSL
#
# One-liner :
# curl -fsSL https://git.dracodev.net/Projets/agent-manager/raw/branch/main/install.sh | sh
#
# Télécharge le binaire de la dernière release Gitea ; à défaut, compile via
# cargo install --git. Relancez le script pour mettre à jour.
set -eu
BASE_URL="${AM_BASE_URL:-https://git.dracodev.net/Projets/agent-manager}"
API_URL="${AM_API_URL:-https://git.dracodev.net/api/v1/repos/Projets/agent-manager}"
INSTALL_DIR="${AM_INSTALL_DIR:-$HOME/.local/bin}"
GIT_URL="$BASE_URL.git"
fail() { echo "erreur: $1" >&2; exit 1; }
arch=$(uname -m)
case "$arch" in
x86_64|amd64) arch="x86_64" ;;
aarch64|arm64) arch="aarch64" ;;
*) fail "architecture non supportée: $arch" ;;
esac
os=$(uname -s | tr '[:upper:]' '[:lower:]')
case "$os" in
linux) platform="linux" ;;
darwin) platform="macos" ;;
*) fail "système non supporté: $os" ;;
esac
install_from_source() {
if ! command -v cargo >/dev/null 2>&1; then
fail "pas de binaire précompilé pour $arch et cargo est absent — installez Rust (https://rustup.rs) puis relancez"
fi
echo "Installation depuis les sources (cargo install --git $GIT_URL)…"
cargo install --git "$GIT_URL" --locked
echo ""
echo "OK — am est installé dans ~/.cargo/bin/am"
echo "Essayez : am list | am doctor (mise à jour : relancez ce script)"
exit 0
}
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
tag=""
if command -v curl >/dev/null 2>&1; then
release=$(curl -fsSL --connect-timeout 15 "$API_URL/releases/latest" 2>/dev/null || true)
tag=$(printf '%s' "$release" | grep -o '"tag_name"[[:space:]]*:[[:space:]]*"[^"]*"' | head -n 1 | cut -d'"' -f4)
fi
installed=""
if [ -n "$tag" ] && command -v curl >/dev/null 2>&1; then
asset="am-$platform-$arch.tar.gz"
url="$BASE_URL/releases/download/$tag/$asset"
echo "Téléchargement de $url …"
if curl -fsSL --connect-timeout 20 -o "$tmpdir/am.tar.gz" "$url"; then
tar -xzf "$tmpdir/am.tar.gz" -C "$tmpdir" 2>/dev/null || true
# L'entrée de l'archive varie selon le pipeline CI : « am » ou
# « am-linux-x86_64 » (nom de la release). Prendre le premier fichier
# extrait.
bin=""
for cand in "$tmpdir/am" "$tmpdir/am-$platform-$arch" "$tmpdir/am-$arch" "$tmpdir"/*; do
if [ -f "$cand" ] && [ -z "$bin" ]; then
bin="$cand"
fi
done
if [ -n "$bin" ]; then
mkdir -p "$INSTALL_DIR"
cp "$bin" "$INSTALL_DIR/am"
chmod +x "$INSTALL_DIR/am"
installed=1
fi
fi
fi
if [ -z "$installed" ]; then
echo "Binaire précompilé indisponible — installation depuis les sources…"
install_from_source
fi
case ":$PATH:" in
*":$INSTALL_DIR:"*) ;;
*)
echo "Astuce : $INSTALL_DIR n'est pas dans votre PATH"
if [ -f "$HOME/.profile" ] && ! grep -qF "$INSTALL_DIR" "$HOME/.profile"; then
echo "export PATH="$INSTALL_DIR:\$PATH"" >> "$HOME/.profile"
echo "Ajouté à ~/.profile (reconnectez-vous pour en profiter)"
fi
;;
esac
"$INSTALL_DIR/am" --version || true
echo ""
echo "OK — 'am' est installé. Essayez :"
echo " am list"
echo " am doctor"
echo "Mise à jour : relancez ce script."