# 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 " \ -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 " \ -F "attachment=@dist/am-windows-x86_64.zip" \ https://git.dracodev.net/api/v1/repos/Projets/agent-manager/releases//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