fix: resolve remaining format and test failures

Co-authored-by: claw <stanislavkalishin+claw@gmail.com>
This commit is contained in:
2026-03-30 16:01:06 +02:00
parent ed2fbac284
commit 160d922b8b
4 changed files with 29 additions and 8 deletions

View File

@@ -5,6 +5,7 @@
Make the VPS deployment path first-class without removing the existing Cloud Run / AWS paths.
Primary target:
- bot API on Docker Compose
- mini app on Docker Compose
- reverse proxy with HTTPS on the VPS
@@ -12,18 +13,21 @@ Primary target:
- GitHub Actions CD that deploys to the VPS
Compatibility requirement:
- keep existing cloud deployment code and workflows available
- avoid deleting GCP/AWS-specific adapters unless they are clearly dead and isolated
## Deployment Shape
Recommended production services:
- `bot` - Bun runtime for Telegram webhook/API
- `miniapp` - static assets served behind reverse proxy
- `scheduler` - separate service that periodically triggers due scheduled dispatch processing
- `caddy` - TLS + reverse proxy for `bot.<domain>` and `app.<domain>`
Database:
- keep Supabase / managed Postgres external
- do not move Postgres onto the VPS in this phase
@@ -32,6 +36,7 @@ Database:
Current app logic already stores scheduled dispatches in Postgres and uses provider adapters for one-shot execution.
For VPS:
1. Add a self-hosted scheduled dispatch provider.
2. Keep dispatch records in the database as before.
3. Add a due-dispatch scan endpoint/handler in the bot runtime.
@@ -43,6 +48,7 @@ This keeps reminder behavior deterministic while removing dependency on cloud sc
## Image / Runtime Plan
### Bot image
- keep multi-stage build
- build runtime entrypoints for:
- bot server
@@ -51,14 +57,17 @@ This keeps reminder behavior deterministic while removing dependency on cloud sc
- keep runtime image lean
### Mini app image
- keep static build + nginx/alpine runtime
### Reverse proxy image
- use an off-the-shelf slim image (Caddy)
## CD Plan
Add a separate GitHub Actions workflow for VPS deploy:
1. run on successful `main` CI and manual dispatch
2. build/push bot and miniapp images to GHCR
3. SSH into VPS
@@ -73,35 +82,42 @@ Keep existing GCP and AWS workflows untouched.
## Secrets / Env Plan
Phase 1:
- keep runtime env files on the VPS outside the repo
- Compose loads env files from a deploy directory
Optional later upgrade:
- add 1Password-backed rendering or injection without changing app runtime contracts
- keep the runtime contract env-file-based so 1Password remains an overlay, not a hard dependency
Compatibility rule:
- do not remove existing env vars for GCP/AWS paths
- only add new VPS/self-hosted vars where needed
## Expected Repo Changes
### App/runtime
- add self-hosted scheduler adapter
- add due-dispatch scan support
- add scheduler runner entrypoint
- extend config parsing with VPS/self-hosted provider
### Docker / deploy
- add production compose file
- add Caddy config
- add VPS deploy helper scripts
### CI/CD
- add VPS deploy workflow
- keep `cd.yml` and `cd-aws.yml`
### Docs
- add VPS deployment runbook
- document required env files and domains
@@ -110,6 +126,7 @@ Compatibility rule:
Base domain: `whekin.dev`
Suggested hostnames:
- `household-bot.whekin.dev` for bot API / webhook
- `household.whekin.dev` for mini app
@@ -128,16 +145,19 @@ These can be adjusted later without changing the deployment shape.
## Runtime Env Files on VPS
Expected files under `/opt/household-bot/env`:
- `bot.env`
- `miniapp.env`
- `caddy.env`
Templates live in `deploy/vps/*.env.example`.
- `miniapp.env` should set `VITE_BOT_API_URL` for the frontend build/runtime config.
## GitHub Actions Inputs / Secrets
Recommended repository variables:
- `VPS_HOST`
- `VPS_USER` (default `root`)
- `VPS_PORT` (default `22`)
@@ -146,10 +166,12 @@ Recommended repository variables:
- `VPS_MINIAPP_URL` (default `https://household.whekin.dev`)
Required repository secrets:
- `VPS_SSH_KEY`
- `VPS_KNOWN_HOSTS`
Optional for webhook sync and smoke verification:
- `TELEGRAM_BOT_TOKEN`
- `TELEGRAM_WEBHOOK_SECRET`