From 69e0484f8d96e51d4cba8fef2093023534655f63 Mon Sep 17 00:00:00 2001 From: pavel Date: Fri, 13 Feb 2026 18:06:48 +0100 Subject: [PATCH] init --- .env.example | 1 + .forgejo/workflows/pipeline.yaml | 43 ++++++++++++++++++++++++++++++++ README.md | 6 +++-- src/config.rs | 5 ++++ src/main.rs | 3 ++- 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 .forgejo/workflows/pipeline.yaml diff --git a/.env.example b/.env.example index ccc88d2..04a1dd8 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,5 @@ DATABASE_URL=postgres://postgres:postgres@localhost:5432/chattz +PORT=3000 # Authentik OIDC app values OIDC_CLIENT_ID=replace-me diff --git a/.forgejo/workflows/pipeline.yaml b/.forgejo/workflows/pipeline.yaml new file mode 100644 index 0000000..4c2c575 --- /dev/null +++ b/.forgejo/workflows/pipeline.yaml @@ -0,0 +1,43 @@ +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 + - name: Cache Cargo registry + uses: actions/cache@v4 + with: + path: | + ~/.cargo/bin/ + ~/.cargo/registry/index/ + ~/.cargo/registry/cache/ + ~/.cargo/git/db/ + key: ${{ runner.os }}-cargo-${{ hashFiles('Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo- + - name: Cache Cargo target + uses: actions/cache@v4 + with: + path: target/ + key: ${{ runner.os }}-cargo-target-${{ hashFiles('Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-target- + - run: | + cd frontend + npm install + npm run build + - run: ~/.cargo/bin/cargo build -r + - run: | + export XDG_RUNTIME_DIR=/run/user/$(id -u) + export DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/$(id -u)/bus + systemctl --user stop discord + cp target/release/discord ~/discord/discord + chmod +x ~/discord/discord + systemctl --user start discord \ No newline at end of file diff --git a/README.md b/README.md index 836399f..af5e8f0 100644 --- a/README.md +++ b/README.md @@ -49,8 +49,8 @@ cargo run Migrations are applied automatically during startup. -Server starts on `http://localhost:3000`. -Web UI is available at `http://localhost:3000/`. +Server binds to `0.0.0.0:${PORT}` (defaults to `3000`). +Web UI is available at `http://localhost:${PORT}/`. ## Authentik setup notes @@ -58,6 +58,8 @@ Create an Authentik OAuth2/OIDC provider + application and set: - Redirect URI: `http://localhost:3000/auth/callback` - Scopes including at least: `openid profile email` +If you change `PORT`, update `OIDC_REDIRECT_URL` and this redirect URI to match. + Then copy provider endpoints into env: - `OIDC_AUTHORIZE_URL` - `OIDC_TOKEN_URL` diff --git a/src/config.rs b/src/config.rs index 4887314..0696d55 100644 --- a/src/config.rs +++ b/src/config.rs @@ -2,6 +2,7 @@ use anyhow::{Context, Result}; #[derive(Clone, Debug)] pub struct Settings { + pub port: u16, pub database_url: String, pub oidc_client_id: String, pub oidc_client_secret: String, @@ -21,6 +22,10 @@ pub struct Settings { impl Settings { pub fn from_env() -> Result { Ok(Self { + port: std::env::var("PORT") + .unwrap_or_else(|_| "3000".into()) + .parse() + .context("PORT must be a valid u16")?, database_url: required("DATABASE_URL")?, oidc_client_id: required("OIDC_CLIENT_ID")?, oidc_client_secret: required("OIDC_CLIENT_SECRET")?, diff --git a/src/main.rs b/src/main.rs index a90eb39..fdeaeb9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -47,6 +47,7 @@ async fn main() -> anyhow::Result<()> { http: reqwest::Client::new(), voice: Arc::new(VoiceHub::default()), }; + let port = state.settings.port; let app = Router::new() .route("/health", get(handlers::health)) @@ -55,7 +56,7 @@ async fn main() -> anyhow::Result<()> { .with_state(state) .layer(TraceLayer::new_for_http()); - let addr: SocketAddr = "0.0.0.0:3000".parse()?; + let addr = SocketAddr::from(([0, 0, 0, 0], port)); info!(%addr, "server started"); let listener = tokio::net::TcpListener::bind(addr).await?;