prepare first release with graceful shutdown + containerfile + push to #4

Merged
qpismont merged 5 commits from 1.0 into main 2026-06-12 22:38:25 +02:00
Owner

prepare first release with graceful shutdown + containerfile + push to hub script

prepare first release with graceful shutdown + containerfile + push to hub script
qpismont added 1 commit 2026-06-10 21:23:53 +02:00
Author
Owner
@Herald
Herald reviewed 2026-06-10 21:33:03 +02:00
Herald left a comment
Collaborator

Review Feedback

5 issues found.


Summary

Les modifications apportées dans ce PR introduisent correctement un arrêt gracieux (graceful shutdown) via CancellationToken de tokio-util, une capture des signaux SIGTERM/SIGINT, ainsi qu'un Containerfile pour construire l'image Docker et un script de build/push. L'architecture générale est saine. Cependant, quelques points de robustesse sont à améliorer : version de Rust non stable, image de base Debian en version testing, portabilité des signaux (Linux only), import inutile, et précision du script de push. Pour une première release, ces ajustements garantiront une meilleure maintenabilité et reproductibilité.


Cost: $0.00098065

## Review Feedback ### 5 issues found. --- ### Summary Les modifications apportées dans ce PR introduisent correctement un arrêt gracieux (graceful shutdown) via `CancellationToken` de `tokio-util`, une capture des signaux SIGTERM/SIGINT, ainsi qu'un Containerfile pour construire l'image Docker et un script de build/push. L'architecture générale est saine. Cependant, quelques points de robustesse sont à améliorer : version de Rust non stable, image de base Debian en version testing, portabilité des signaux (Linux only), import inutile, et précision du script de push. Pour une première release, ces ajustements garantiront une meilleure maintenabilité et reproductibilité. --- ### Cost: $0.00098065
@@ -0,0 +1,12 @@
FROM rust:1.96 as builder
Collaborator

L'image Rust 1.96 n'est pas une version stable connue. Privilégiez une version précise et stable (ex: rust:1.85.0) pour garantir la reproductibilité des builds. Si vous utilisez une nightly, indiquez-le clairement avec une date ou un digest.

L'image Rust `1.96` n'est pas une version stable connue. Privilégiez une version précise et stable (ex: `rust:1.85.0`) pour garantir la reproductibilité des builds. Si vous utilisez une nightly, indiquez-le clairement avec une date ou un digest.
@@ -0,0 +5,4 @@
RUN cargo build --release
FROM debian:trixie-slim
Collaborator

Debian trixie est actuellement une version Testing, pas encore stable. Utilisez une version stable comme debian:bookworm-slim (Debian 12) ou debian:bullseye-slim pour éviter des surprises lors de mises à jour non contrôlées.

Debian `trixie` est actuellement une version Testing, pas encore stable. Utilisez une version stable comme `debian:bookworm-slim` (Debian 12) ou `debian:bullseye-slim` pour éviter des surprises lors de mises à jour non contrôlées.
@@ -0,0 +17,4 @@
.
echo "Pushing ${IMAGE}:${TAG}..."
buildah push "${IMAGE}:${TAG}"
Collaborator

La commande push ne précise pas le registre complet. Comme l'image a été taguée avec docker.io/..., cela fonctionnera, mais il peut être plus explicite d'utiliser buildah push "docker.io/${IMAGE}:${TAG}" pour éviter toute ambiguïté. Ajoutez également un tag latest si cela est souhaité pour les releases.

La commande `push` ne précise pas le registre complet. Comme l'image a été taguée avec `docker.io/...`, cela fonctionnera, mais il peut être plus explicite d'utiliser `buildah push "docker.io/${IMAGE}:${TAG}"` pour éviter toute ambiguïté. Ajoutez également un tag `latest` si cela est souhaité pour les releases.
@@ -1,5 +1,4 @@
use anyhow::anyhow;
use axum::body::{Body, Bytes, to_bytes};
use axum::body::{Bytes, to_bytes};
Collaborator

L'import Bytes semble inutilisé dans ce fichier (le nom est importé mais jamais référencé). Supprimez-le pour éviter un avertissement du compilateur. Vérifiez la suite du fichier, mais si non utilisé, il est préférable de le retirer.

L'import `Bytes` semble inutilisé dans ce fichier (le nom est importé mais jamais référencé). Supprimez-le pour éviter un avertissement du compilateur. Vérifiez la suite du fichier, mais si non utilisé, il est préférable de le retirer.
src/main.rs Outdated
@@ -60,2 +65,3 @@
tokio::try_join!(bot.start(rx), api::start(app_state))?;
let signal = async {
let mut sigterm = signal(SignalKind::terminate())?;
Collaborator

Le code utilise tokio::signal::unix qui ne fonctionne que sous Linux/Unix. Assurez-vous que l'application ne cible que ces systèmes, ou ajoutez une gestion alternative pour Windows (ex: tokio::signal::ctrl_c). Pour une première release, cela peut être acceptable si le déploiement est Linux uniquement.

Le code utilise `tokio::signal::unix` qui ne fonctionne que sous Linux/Unix. Assurez-vous que l'application ne cible que ces systèmes, ou ajoutez une gestion alternative pour Windows (ex: `tokio::signal::ctrl_c`). Pour une première release, cela peut être acceptable si le déploiement est Linux uniquement.
Author
Owner

Graceful shutdown work !

podman container run -p 3001:3000 --env-file=.env docker.io/tintounn/herald:1.0
2026-06-10T19:31:42.703777Z INFO herald: Initialize sentry
2026-06-10T19:31:42.706445Z INFO herald: Starting Herald port=3000 model=deepseek/deepseek-v4-flash gitea_url=https://gitea.qpismont.fr bot_name=Herald
2026-06-10T19:31:42.706537Z INFO herald::bot: Bot started
2026-06-10T19:31:42.706615Z INFO herald::api: Listening API on port 3000
2026-06-10T19:32:29.141482Z INFO herald::bot: Webhook received queued=0 active=0
2026-06-10T19:32:29.141561Z INFO exec{webhook=Review(ReviewPayload { action: "created", pull_request: PullRequest { id: 4, diff_url: "#4.diff", number: 4, title: "prepare first release with graceful shutdown + containerfile + push to" }, repository: Repository { full_name: "qpismont/herald" }, comment: Comment { id: 99, body: "@Herald ", user: User { id: 1 } } })}:exec_review{model="deepseek/deepseek-v4-flash"}: herald::bot_actions::review: Starting review repo=qpismont/herald pr=4 action=created
^C2026-06-10T19:32:42.857612Z INFO herald: Received SIGINT
2026-06-10T19:32:42.857622Z INFO herald: Shutting down...
2026-06-10T19:32:42.857677Z INFO herald::api: API shutting down complete
2026-06-10T19:33:03.192260Z INFO exec{webhook=Review(ReviewPayload { action: "created", pull_request: PullRequest { id: 4, diff_url: "#4.diff", number: 4, title: "prepare first release with graceful shutdown + containerfile + push to" }, repository: Repository { full_name: "qpismont/herald" }, comment: Comment { id: 99, body: "@Herald ", user: User { id: 1 } } })}: herald::bot: Task completed
2026-06-10T19:33:03.192301Z INFO herald::bot: Bot shutting down complete
2026-06-10T19:33:03.192311Z INFO herald: Shutdown complete

Graceful shutdown work ! > podman container run -p 3001:3000 --env-file=.env docker.io/tintounn/herald:1.0 2026-06-10T19:31:42.703777Z INFO herald: Initialize sentry 2026-06-10T19:31:42.706445Z INFO herald: Starting Herald port=3000 model=deepseek/deepseek-v4-flash gitea_url=https://gitea.qpismont.fr bot_name=Herald 2026-06-10T19:31:42.706537Z INFO herald::bot: Bot started 2026-06-10T19:31:42.706615Z INFO herald::api: Listening API on port 3000 2026-06-10T19:32:29.141482Z INFO herald::bot: Webhook received queued=0 active=0 2026-06-10T19:32:29.141561Z INFO exec{webhook=Review(ReviewPayload { action: "created", pull_request: PullRequest { id: 4, diff_url: "https://gitea.qpismont.fr/qpismont/herald/pulls/4.diff", number: 4, title: "prepare first release with graceful shutdown + containerfile + push to" }, repository: Repository { full_name: "qpismont/herald" }, comment: Comment { id: 99, body: "@Herald ", user: User { id: 1 } } })}:exec_review{model="deepseek/deepseek-v4-flash"}: herald::bot_actions::review: Starting review repo=qpismont/herald pr=4 action=created ^C2026-06-10T19:32:42.857612Z INFO herald: Received SIGINT 2026-06-10T19:32:42.857622Z INFO herald: Shutting down... 2026-06-10T19:32:42.857677Z INFO herald::api: API shutting down complete 2026-06-10T19:33:03.192260Z INFO exec{webhook=Review(ReviewPayload { action: "created", pull_request: PullRequest { id: 4, diff_url: "https://gitea.qpismont.fr/qpismont/herald/pulls/4.diff", number: 4, title: "prepare first release with graceful shutdown + containerfile + push to" }, repository: Repository { full_name: "qpismont/herald" }, comment: Comment { id: 99, body: "@Herald ", user: User { id: 1 } } })}: herald::bot: Task completed 2026-06-10T19:33:03.192301Z INFO herald::bot: Bot shutting down complete 2026-06-10T19:33:03.192311Z INFO herald: Shutdown complete
qpismont added 1 commit 2026-06-10 22:01:44 +02:00
qpismont marked the pull request as work in progress 2026-06-10 22:11:18 +02:00
qpismont added 1 commit 2026-06-12 21:56:45 +02:00
Add webhook already handled check
ci/woodpecker/push/tests Pipeline failed
ci/woodpecker/pr/tests Pipeline failed
433021d607
Fix all tests
Add woodpecker ci (tests + release)
qpismont added 1 commit 2026-06-12 21:57:42 +02:00
Fix tests job
ci/woodpecker/push/tests Pipeline was successful
c7387a3b28
qpismont added 1 commit 2026-06-12 22:15:31 +02:00
Fix release job
ci/woodpecker/push/tests Pipeline was successful
cf59455d4a
qpismont marked the pull request as ready for review 2026-06-12 22:36:58 +02:00
qpismont merged commit d4666fb36e into main 2026-06-12 22:38:25 +02:00
qpismont deleted branch 1.0 2026-06-12 22:38:26 +02:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: qpismont/herald#4