Files
agent-manager/RELEASING.md
T
bruno 4c60ab5bcc
release / linux (push) Failing after 22s
release / windows (push) Canceled after 0s
release / macos (push) Canceled after 0s
docs : methode de build linux musl avec cargo-zigbuild (aarch64 + x86_64) dans RELEASING.md
2026-08-17 13:42:53 -04:00

4.9 KiB

Publier une release

Les installateurs one-liner (install.sh et install.ps1), la commande am self-update et les paquets (scoop/winget/homebrew) consomment les artefacts attachés à la dernière release du dépôt Gitea (https://git.dracodev.net/Projets/agent-manager). Sans binaire pour la plateforme, les installateurs retombent sur cargo install --git.

La phase 1 (v0.4.1) a ajouté le pipeline CI (issue #42) : sur chaque tag v*, .gitea/workflows/release.yml construit Linux (x86_64 + aarch64 musl statiques), Windows (x86_64) et macOS (x86_64 + aarch64) et publie la release. La procédure locale ci-dessous reste disponible pour produire manuellement les mêmes artefacts (ou les plateformes sans runner CI).

1. Bumper la version

Dans Cargo.toml (ex. 0.4.1), puis cargo check pour mettre à jour Cargo.lock, et lancer toute la batterie :

cargo test --locked          # 240+ tests
cargo clippy --all-targets -- -D warnings   # si possible

2. Produire les binaires et les archives

Windows (x86_64) — natif

scripts/build-release.ps1    # target/release/am.exe -> dist/am-windows-x86_64.zip

Linux — binaire STATIQUE (musl), compatible toutes distributions,

y compris Debian 12 (glibc 2.36) — ne JAMAIS publier un binaire glibc

compilé sur une base récente.

# cargo-zigbuild : zig (~50 Mo) fournit le linker croisé pour les DEUX
# cibles musl (rust:1.94-alpine n'embarque pas de compilateur croisé
# aarch64 : 'aarch64-linux-musl-gcc not found').
docker run --rm -v "${PWD}:/work" -w /work -e CARGO_TARGET_DIR=/tmp/am-target \
  -e CARGO_INCREMENTAL=0 rust:1.94-alpine sh -c "apk add --no-cache build-base zip curl >/dev/null && \
  rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl && \
  curl -fsSL https://ziglang.org/download/0.14.1/zig-x86_64-linux-0.14.1.tar.xz -o /tmp/zig.tar.xz && \
  tar -xf /tmp/zig.tar.xz -C /opt && \
  export PATH=/opt/zig-x86_64-linux-0.14.1:\$PATH && \
  cargo install cargo-zigbuild --locked && \
  cargo zigbuild --release --locked --target x86_64-unknown-linux-musl --target aarch64-unknown-linux-musl && \
  mkdir -p dist && \
  cp /tmp/am-target/x86_64-unknown-linux-musl/release/am dist/am-linux-x86_64 && \
  cp /tmp/am-target/aarch64-unknown-linux-musl/release/am dist/am-linux-aarch64 && \
  cd dist && tar -czf am-linux-x86_64.tar.gz am-linux-x86_64 && \
  tar -czf am-linux-aarch64.tar.gz am-linux-aarch64"

macOS (x86_64 + aarch64) — via CI (runner macOS) :

# le job 'macos' du workflow release.yml produit :
#   am-macos-x86_64.tar.gz  am-macos-aarch64.tar.gz
# (compilation croisée macOS impossible depuis Windows/Linux ; sans
# runner macOS, ces archives manquent et l'install.sh compile depuis
# les sources sur macOS, ce qui reste fonctionnel.)

Vérifier chaque archive : am version doit répondre, et am doctor ne doit signaler aucune dépendance manquante.

3. Rendre les manifests de packaging (issue #42)

Une fois toutes les archives dans dist/ :

scripts/render-manifests.ps1 -Version 0.4.2

Ce script rend, avec la version et les sha256 réels :

  • dist/scoop/am.json → scoop install dist/scoop/am.json (ou à ajouter à un bucket ; checkver/autoupdate inclus)
  • dist/winget/*.yaml → à soumettre à microsoft/winget-pkgs (winget install BrunoDracodev.AgentManager)
  • dist/homebrew/am.rb → à servir via un tap, ou à soumettre
  • dist/rpm/am.spec → rpmbuild -bb (avec am-linux-x86_64.tar.gz dans ~/rpmbuild/SOURCES)
  • Paquet deb : packaging/deb/make-deb.sh 0.4.2 → dist/am_0.4.2_amd64.deb

4. Créer la release sur Gitea

Via l'interface web : Releases > New Release, tag v0.4.2, attacher les archives. Ou via l'API (jeton Gitea requis) :

curl -X POST -H "Authorization: token <JETON>" \
  -H "Content-Type: application/json" \
  -d '{"tag_name":"v0.4.2","name":"v0.4.2","body":"notes de version"}' \
  https://git.dracodev.net/api/v1/repos/Projets/agent-manager/releases

curl -X POST -H "Authorization: token <JETON>" \
  -F "attachment=@dist/am-windows-x86_64.zip" \
  https://git.dracodev.net/api/v1/repos/Projets/agent-manager/releases/<id>/assets?name=am-windows-x86_64.zip

# idem pour am-linux-x86_64.tar.gz, am-linux-aarch64.tar.gz,
# am-macos-x86_64.tar.gz, am-macos-aarch64.tar.gz (si CI) et
# checksums.txt.

5. Tag git (déclenche aussi le pipeline CI)

git tag v0.4.2 && git push origin v0.4.2

Conventions de nommage (attendues par les installateurs et self-update)

  • am-windows-x86_64.zip (contient am.exe)
  • am-linux-x86_64.tar.gz (contient am)
  • am-linux-aarch64.tar.gz (contient am)
  • am-macos-x86_64.tar.gz / am-macos-aarch64.tar.gz (contiennent am)

Vérification finale

am self-update --check     # doit annoncer la nouvelle version
am self-update             # met à jour le binaire courant