Rafał Tyński a9815b54e0 fix(infra): fix Dockerfile restore and build script solution name
Copy the layered project files before restore so the Docker build resolves project references, and build the correct solution file (TarninaHub.slnx) in scripts/build.mjs.
2026-10-04 01:50:01 +02:00

TarninaHub

Wersja: 0.0.1

Platforma Małopolskiego Hubu Innowacji Społecznych (MVP hackathonu).

  • backend/ — aplikacja backendowa w C# (ASP.NET Core, TarninaHub).
  • client/ — aplikacja frontendowa Vue 3 + TypeScript (Vite).
  • scripts/ — skrypty budujące całość.
  • TarninaHub.slnx — solution .NET.
  • Dockerfile + docker-compose.yaml — uruchomienie kontenerowe.

Wymagania

  • .NET SDK 10+

  • Node.js 22+ (npm)

  • PowerShell Core 7+ (pwsh) — wymagany do uruchomienia scripts/*.ps1.

    Windows nie kojarzy domyślnie plików .ps1, dlatego skrypty uruchamiaj przez pwsh (np. pwsh ./scripts/docker-push.ps1), a nie przez dwuklik / samo ./scripts/docker-push.ps1. Instalacja: https://aka.ms/powershell

Praca lokalna

Backend (dev) nasłuchuje na https://localhost:7080.

# terminal 1 — backend
dotnet run --project backend

# terminal 2 — client (Vite, proxy /api -> http://localhost:5078)
npm --prefix client install
npm --prefix client run dev

Skrypty

npm --prefix client run dev      # uruchamia Vite (dev server)
npm --prefix client run build    # buduje aplikację Vite do client/dist
npm --prefix client run copy     # kopiuje client/dist -> backend/wwwroot
node scripts/build.mjs           # buduje całość (client + copy + backend)

Docker

Szablon pobiera gotowy obraz z rejestru Gitea (pełna ścieżka), bez lokalnego buildowania:

cp docker-compose.yaml.example docker-compose.yaml
docker compose pull
docker compose up -d
  • Aplikacja: http://localhost:8075
  • Dane: ./data (bind mount, trwałe — SurrealDB embedded RocksDB)
  • Obraz: git.rtynski.pl/rtynski/hy2026:latest

Port hosta można wskazać zmienną TARNINAHUB_PORT (domyślnie 8075), a wersję obrazu zmienną APP_VERSION (domyślnie latest). Plik docker-compose.yaml.example jest szablonem; docker-compose.yaml możesz dostosować lokalnie.

Publikacja obrazu do Gitea

Token dostępu utworzysz w Gitea:

Wymagany PowerShell Core 7+ (pwsh). Windows nie uruchamia domyślnie plików .ps1, więc skrypt wywołaj jawnie przez pwsh:

$env:GITEA_USER = "rtynski"; $env:GITEA_TOKEN = "<token>"
pwsh ./scripts/docker-push.ps1

Skrypt najpierw sprawdza połączenie z demonem Docker i rejestrem, czyta wersję z backend/TarninaHub.csproj. Jeśli dana wersja jest już wypchnięta do rejestru, kończy pracę z czerwonym komunikatem; w przeciwnym razie buduje frontend, kopiuje go do backend/wwwroot, buduje backend, buduje obraz Docker i wypycha go do git.rtynski.pl/rtynski/hy2026 jako <wersja> oraz latest. Nadpisanie sprawdzenia: -Force.

CI/CD

Pipeline działa w Gitea Actions (.gitea/workflows/):

Uwaga: workflow są zakomentowane w całości — do repozytorium nie jest podpięty runner Gitea. Odkomentuj po zarejestrowaniu runera (Settings → Actions → Runners).

  • ci.yml — na push/PR do main: build backendu (.NET 10), dotnet format --verify-no-changes oraz build klienta (Node 22, vue-tsc + bundle).
  • cd.yml — na main/tag v*: build obrazu i push do git.rtynski.pl/rtynski/hy2026 (<wersja> + latest); deploy demo opcjonalnie przez sekrety CI.

Sekrety CI: GITEA_TOKEN (write:package), opcjonalnie DEPLOY_HOST/DEPLOY_USER/DEPLOY_SSH_KEY. Klucz LLM__ApiKey przekazujemy wyłącznie na runtime — nigdy do repo ani warstw obrazu.

Środowiska i konfiguracja

  • dev — appsettings.Development.json, dane w backend/data.
  • demo — obraz z rejestru, docker-compose.yaml.example, port TARNINAHUB_PORT (8075), wersja APP_VERSION.
  • staging (opcjonalne) — kandydat wydania przed demo.

Konfiguracja przez zmienne środowiskowe (SurrealDb__*, LLM__ApiKey, OTEL_*); szablon: .env.example.

Observability

  • Healthcheck: GET /api/health (używany też przez Docker healthcheck).
  • Logi strukturalne (JSON) do stdout/stderr, z correlation ID.
  • Docelowo: /metrics (Prometheus) i OpenTelemetry (traces).

Struktura

TarninaHub/
├─ backend/                 # ASP.NET Core Web API + wwwroot (build z client)
├─ client/                  # Vue 3 + TS + Vite
├─ scripts/
│  ├─ build.mjs             # build całości
│  └─ copy-client.mjs       # client/dist -> backend/wwwroot
├─ Dockerfile               # multi-stage: client + backend
├─ docker-compose.yaml      # uruchomienie (bind ./data)
├─ docker-compose.yaml.example
├─ TarninaHub.slnx
└─ README.md
S
Description
No description provided
Readme
352 KiB
Languages
C# 71.2%
SurrealQL 11.1%
TypeScript 10.2%
Vue 3.3%
PowerShell 2.4%
Other 1.8%