ac8a9442e3
ci.yml — runs on GitHub's servers (free): - API: dotnet build + test with Postgres/Redis service containers - Dashboard + Finder: TypeScript typecheck (tsc --noEmit) deploy.yml — runs on YOUR Linux server (self-hosted runner): - Triggers on every push to main - docker compose build --parallel (BuildKit cache) - Rolling restart with --no-deps --remove-orphans - Health-check poll: waits up to 2min for API healthy - Auto-prunes old images after successful deploy Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
79 lines
2.7 KiB
YAML
79 lines
2.7 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
branches: [main]
|
|
|
|
jobs:
|
|
# ── API: build + test ──────────────────────────────────────────────────────
|
|
api:
|
|
name: API (dotnet build + test)
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
postgres:
|
|
image: postgres:16-alpine
|
|
env:
|
|
POSTGRES_DB: meezi_test
|
|
POSTGRES_USER: meezi
|
|
POSTGRES_PASSWORD: meezi_test_pass
|
|
ports: ["5432:5432"]
|
|
options: --health-cmd pg_isready --health-interval 5s --health-timeout 5s --health-retries 10
|
|
redis:
|
|
image: redis:7-alpine
|
|
ports: ["6379:6379"]
|
|
options: --health-cmd "redis-cli ping" --health-interval 5s --health-timeout 3s --health-retries 10
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-dotnet@v4
|
|
with:
|
|
dotnet-version: "10.0.x"
|
|
- name: Restore
|
|
run: dotnet restore
|
|
- name: Build
|
|
run: dotnet build --no-restore -c Release
|
|
- name: Test
|
|
run: dotnet test --no-build -c Release --logger "console;verbosity=minimal"
|
|
env:
|
|
ConnectionStrings__DefaultConnection: Host=localhost;Port=5432;Database=meezi_test;Username=meezi;Password=meezi_test_pass
|
|
ConnectionStrings__Redis: localhost:6379
|
|
|
|
# ── Dashboard: typecheck ───────────────────────────────────────────────────
|
|
dashboard:
|
|
name: Dashboard (Next.js typecheck)
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: web/dashboard
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "20"
|
|
cache: npm
|
|
cache-dependency-path: web/dashboard/package-lock.json
|
|
- run: npm install --legacy-peer-deps --ignore-scripts
|
|
- run: npx tsc --noEmit
|
|
env:
|
|
NEXT_PUBLIC_API_URL: http://localhost:5080
|
|
|
|
# ── Finder: typecheck ──────────────────────────────────────────────────────
|
|
finder:
|
|
name: Finder (Next.js typecheck)
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: web/finder
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: "20"
|
|
cache: npm
|
|
cache-dependency-path: web/finder/package-lock.json
|
|
- run: npm install --legacy-peer-deps --ignore-scripts
|
|
- run: npx tsc --noEmit
|
|
env:
|
|
NEXT_PUBLIC_API_URL: http://localhost:5080
|