New CI pipeline — .gitea/workflows/ci.yml (runs on the dind runner):
Triggers: pull_request → master and push to master
Single job with a docker:dind service; steps: checkout → resolve dind endpoint (tcp://localhost:2375, fallback tcp://docker:2375) → setup-node 22 + bun 1.4.2 (pinned, matches Dockerfile) → bun install --frozen-lockfile → build (npm run build) → unit tests (npx vitest run) → e2e (Playwright with local chromium, PW_REMOTE_BROWSER=0)
E2E runs against an isolated stack inside dind via new docker-compose.ci.yml (no Traefik/dev_net; app on port 3000 of the dind container, fresh named volume per run). Deployed through the playwright webServer block with E2E_DEPLOY_CMD; readiness checked against E2E_BASE_URL.
CI never deploys to or modifies production (https://flight.dev.kkhost.pl).
Playwright config — optional env overrides, defaults preserve the existing local flow:
E2E_BASE_URL (app under test), E2E_DEPLOY_CMD (webServer deploy command), PW_REMOTE_BROWSER=0 (local browsers instead of the shared remote server at 192.168.1.4:3000), e2e/state.spec.ts reads E2E_COMPOSE_ARGS for its mid-run container restart
@playwright/test pinned to 1.63.0 in devDependencies (must match the shared remote browser server image tag)
AGENTS.md — switched to a pull-request workflow:
Every change = feature branch off master → commits with CHANGELOG entry + version bump → PR to master → CI green required → merge → tag on master → manual deploy (docker compose up -d --build on the host) updates production
No direct pushes to master; CI never deploys to production
Version
v0.13.0 (process/infra change — no app code changes)
Verification
Local: unit tests 234/234 passed, tsc --noEmit clean, npx playwright test --list parses the new config (30 tests) without triggering a deploy
CI: this PR's pipeline run is the live verification of build → unit → e2e on dind
After merge
Tag v0.13.0 on master, then manual deploy to production if desired (no app behavior changes in this release).
## What changes
**New CI pipeline — `.gitea/workflows/ci.yml`** (runs on the dind runner):
- Triggers: `pull_request` → master and `push` to master
- Single job with a `docker:dind` service; steps: checkout → resolve dind endpoint (`tcp://localhost:2375`, fallback `tcp://docker:2375`) → setup-node 22 + bun 1.4.2 (pinned, matches Dockerfile) → `bun install --frozen-lockfile` → **build** (`npm run build`) → **unit tests** (`npx vitest run`) → **e2e** (Playwright with local chromium, `PW_REMOTE_BROWSER=0`)
- E2E runs against an **isolated stack inside dind** via new `docker-compose.ci.yml` (no Traefik/dev_net; app on port 3000 of the dind container, fresh named volume per run). Deployed through the playwright webServer block with `E2E_DEPLOY_CMD`; readiness checked against `E2E_BASE_URL`.
- **CI never deploys to or modifies production** (`https://flight.dev.kkhost.pl`).
**Playwright config** — optional env overrides, defaults preserve the existing local flow:
- `E2E_BASE_URL` (app under test), `E2E_DEPLOY_CMD` (webServer deploy command), `PW_REMOTE_BROWSER=0` (local browsers instead of the shared remote server at 192.168.1.4:3000), `e2e/state.spec.ts` reads `E2E_COMPOSE_ARGS` for its mid-run container restart
- `@playwright/test` pinned to `1.63.0` in devDependencies (must match the shared remote browser server image tag)
**AGENTS.md** — switched to a pull-request workflow:
- Every change = feature branch off master → commits with CHANGELOG entry + version bump → PR to master → CI green required → merge → tag on master → **manual deploy** (`docker compose up -d --build` on the host) updates production
- No direct pushes to master; CI never deploys to production
## Version
v0.13.0 (process/infra change — no app code changes)
## Verification
- Local: unit tests 234/234 passed, `tsc --noEmit` clean, `npx playwright test --list` parses the new config (30 tests) without triggering a deploy
- CI: this PR's pipeline run is the live verification of build → unit → e2e on dind
## After merge
Tag `v0.13.0` on master, then manual deploy to production if desired (no app behavior changes in this release).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
What changes
New CI pipeline —
.gitea/workflows/ci.yml(runs on the dind runner):pull_request→ master andpushto masterdocker:dindservice; steps: checkout → resolve dind endpoint (tcp://localhost:2375, fallbacktcp://docker:2375) → setup-node 22 + bun 1.4.2 (pinned, matches Dockerfile) →bun install --frozen-lockfile→ build (npm run build) → unit tests (npx vitest run) → e2e (Playwright with local chromium,PW_REMOTE_BROWSER=0)docker-compose.ci.yml(no Traefik/dev_net; app on port 3000 of the dind container, fresh named volume per run). Deployed through the playwright webServer block withE2E_DEPLOY_CMD; readiness checked againstE2E_BASE_URL.https://flight.dev.kkhost.pl).Playwright config — optional env overrides, defaults preserve the existing local flow:
E2E_BASE_URL(app under test),E2E_DEPLOY_CMD(webServer deploy command),PW_REMOTE_BROWSER=0(local browsers instead of the shared remote server at 192.168.1.4:3000),e2e/state.spec.tsreadsE2E_COMPOSE_ARGSfor its mid-run container restart@playwright/testpinned to1.63.0in devDependencies (must match the shared remote browser server image tag)AGENTS.md — switched to a pull-request workflow:
docker compose up -d --buildon the host) updates productionVersion
v0.13.0 (process/infra change — no app code changes)
Verification
tsc --noEmitclean,npx playwright test --listparses the new config (30 tests) without triggering a deployAfter merge
Tag
v0.13.0on master, then manual deploy to production if desired (no app behavior changes in this release).8ca5412de3to97f82dd464