4.4 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.
docker run --rm -v "${PWD}:/work" -w /work -e CARGO_TARGET_DIR=/tmp/target-musl \
rust:1.94-alpine sh -c "apk add --no-cache build-base && \
rustup target add x86_64-unknown-linux-musl aarch64-unknown-linux-musl && \
cargo build --release --locked --target x86_64-unknown-linux-musl && \
cargo build --release --locked --target aarch64-unknown-linux-musl && \
mkdir -p dist && \
cp /tmp/target-musl/x86_64-unknown-linux-musl/release/am dist/am-linux-x86_64 && \
cp /tmp/target-musl/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.1
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 à soumettredist/rpm/am.spec→ rpmbuild -bb (avec am-linux-x86_64.tar.gz dans ~/rpmbuild/SOURCES)- Paquet deb :
packaging/deb/make-deb.sh 0.4.1→ dist/am_0.4.1_amd64.deb
4. Créer la release sur Gitea
Via l'interface web : Releases > New Release, tag v0.4.1, 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.1","name":"v0.4.1","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.1 && git push origin v0.4.1
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