From b098214a9deb557a34dbd1cc8c78703afb145acf Mon Sep 17 00:00:00 2001 From: pavel Date: Sat, 7 Feb 2026 00:04:46 +0100 Subject: [PATCH] feat: Add CI/CD pipeline for release deployment and make server host/port configurable via environment variables. --- .forgejo/workflows/pipeline.yaml | 25 +++++++++++++++++++++++++ src/main.rs | 9 ++++++--- 2 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 .forgejo/workflows/pipeline.yaml diff --git a/.forgejo/workflows/pipeline.yaml b/.forgejo/workflows/pipeline.yaml new file mode 100644 index 0000000..eb9298a --- /dev/null +++ b/.forgejo/workflows/pipeline.yaml @@ -0,0 +1,25 @@ +on: + release: + types: [published] +jobs: + upload: + runs-on: host + permissions: + packages: write + steps: + - uses: actions/setup-node@v6 + with: + node-version: 24 + - uses: actions/checkout@v6 + - run: ~/.cargo/bin/cargo build -r + - run: | + curl -X POST \ + -H "Authorization: token ${{ github.token }}" \ + -F "attachment=@target/release/chat" \ + "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases/${{ github.event.release.id }}/assets" + - run: | + export XDG_RUNTIME_DIR=/run/user/$(id -u) + export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus + cp target/release/chat ~/chat/chat + chmod +x ~/chat/chat + systemctl --user restart chat \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 9c7f191..69fb1d7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -39,6 +39,8 @@ async fn main() { // OAuth configuration let client_id = dotenvy::var("CLIENT_ID").unwrap(); let client_secret = dotenvy::var("CLIENT_SECRET").unwrap(); + let port = dotenvy::var("PORT").unwrap_or_else(|_| "3001".to_string()); + let host = dotenvy::var("HOST").unwrap_or_else(|_| "http://localhost:".to_string() + &port); // NOTE: In production, do not hardcode localhost let auth_url = AuthUrl::new("https://idm.flegr.me/application/o/authorize/".to_string()) .expect("Invalid authorization endpoint URL"); @@ -52,7 +54,7 @@ async fn main() { Some(token_url), ) .set_redirect_uri( - RedirectUrl::new("http://localhost:3001/auth/callback".to_string()) + RedirectUrl::new(host + "/auth/callback") .expect("Invalid redirect URL"), ); @@ -79,8 +81,9 @@ async fn main() { .with_state(app_state); // Run the app - let listener = tokio::net::TcpListener::bind("0.0.0.0:3001").await.unwrap(); - println!("Chat server listening on http://0.0.0.0:3001"); + let port = dotenvy::var("PORT").unwrap_or_else(|_| "3001".to_string()); + let listener = tokio::net::TcpListener::bind("0.0.0.0:".to_string() + &port).await.unwrap(); + println!("Chat server listening on http://0.0.0.0:{}", port); axum::serve(listener, app).await.unwrap(); }