flyway check
This commit is contained in:
@@ -43,10 +43,12 @@ flowchart LR
|
||||
dev[Dev laptop] -->|git push| gitea[Gitea main]
|
||||
gitea --> act[Gitea Actions]
|
||||
act --> runner[act_runner + Docker]
|
||||
runner --> job[Job container Alpine + sock + /opt mount]
|
||||
runner --> ci[migration-check validate]
|
||||
ci -->|needs ok| job[deploy job + /opt mount]
|
||||
job --> sh[deploy.sh]
|
||||
sh --> git[git fetch / reset main]
|
||||
sh --> sync[install compose.yml]
|
||||
sh --> fly[flyway validate then migrate]
|
||||
sh --> dc["docker compose build && up -d"]
|
||||
dc --> hostd[Host Docker Engine]
|
||||
hostd --> ems[EMS stack]
|
||||
@@ -55,7 +57,7 @@ flowchart LR
|
||||
1. Vývoj lokálně, merge do `main`, push na `git.vojacek.eu:2222`.
|
||||
2. Workflow `.gitea/workflows/deploy.yml` (label `self-hosted`) spustí job.
|
||||
3. Job kontejner má `docker.sock` a rw mount `/opt/ems-deploy`; nainstaluje `git`, `bash`, `docker-cli`, `docker-cli-compose` (Alpine).
|
||||
4. `/opt/ems-deploy/deploy.sh`: `flock`, `git` v `app/`, sync `docker-compose.yml`, `docker compose config`, `build`, `up -d`, `image prune -f`.
|
||||
4. `/opt/ems-deploy/deploy.sh`: `flock`, `git` v `app/`, sync `docker-compose.yml`, `docker compose config`, **`flyway validate`** (soubory vs `flyway_schema_history` na DB), **`flyway migrate`**, `build`, `up -d`, `image prune -f`.
|
||||
|
||||
Build probíhá na **hostovském** Dockeru (stejný daemon jako Gitea stack), bez DinD.
|
||||
|
||||
@@ -123,14 +125,26 @@ Produkční compose mapuje frontend na **`127.0.0.1:8080`**, backend na **`127.0
|
||||
|
||||
---
|
||||
|
||||
## 7. CI: test vs deploy
|
||||
## 7. CI a deploy (jeden workflow)
|
||||
|
||||
| Workflow | Účel | Poznámka |
|
||||
|----------|------|----------|
|
||||
| `.gitea/workflows/test.yml` | Smoke (soubory, layout) | `runs-on: self-hosted` + job `container: alpine/git` a checkout přes `git fetch` (ne `actions/checkout@v4` — ta potřebuje **Node** v job kontejneru, výchozí image act_runneru ho nemá → „Cannot find: node in PATH“). |
|
||||
| `.gitea/workflows/deploy.yml` | Deploy po pushi na `main` | Job kontejner + mounty + viz sekce 5. |
|
||||
| Soubor | Účel |
|
||||
|--------|------|
|
||||
| `.gitea/workflows/deploy.yml` | **`migration-check`** na `pull_request` a `push` (`main`, `feature/**`): checkout přes `git fetch` (bez Node), skript **neměnnosti** `scripts/ci_check_migration_immutability.sh` (proti `origin/main` nebo base SHA u PR), **`flyway validate`** proti DB z JDBC (viz secrets). **`deploy`** jen při `push` na `main`, **`needs: migration-check`** — pak `/opt/ems-deploy/deploy.sh`. |
|
||||
|
||||
`workflow_dispatch` na deploy umožňuje ruční opakování bez prázdného commitu.
|
||||
**Gitea secrets (repo):**
|
||||
|
||||
| Secret | Účel |
|
||||
|--------|------|
|
||||
| `EMS_CI_FLYWAY_URL` | JDBC na staging / sdílenou DB s aktuální `flyway_schema_history` (např. `jdbc:postgresql://host:5432/ems`). Pokud **není** nastaveno, krok remote validate se **přeskočí** (varování v logu); immutability check pořád běží. |
|
||||
| `EMS_CI_FLYWAY_USER` / `EMS_CI_FLYWAY_PASSWORD` | Volitelně, pokud nejsou v URL. |
|
||||
|
||||
Job **nemá** `container:` — potřebuje hostovský `docker` + `git` (stejně jako deploy). Runner: `valid_volumes` pro `/var/run/docker.sock` (sekce 5).
|
||||
|
||||
**Lokálně před commitem:** z kořene repa s rozjetým Postgres z `docker-compose.yml` a aspoň jednou proběhlým migrate spusť `./scripts/flyway_validate_local.sh` (`flyway validate` vůči lokální DB).
|
||||
|
||||
**Flyway `validate` vs `migrate`:** `validate` nekontroluje „dry-run“ celého SQL nové pending migrace; ověří hlavně shodu **již zapsaných** řádků ve `flyway_schema_history` se soubory v repu (checksumy atd.) — proto musí běžet proti **běžící** DB. `migrate` teprve aplikuje pending skripty.
|
||||
|
||||
`workflow_dispatch` na větvi `main` spustí `migration-check` a potom i **`deploy`** (stejná podmínka jako u push na `main`).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user