Add e2e/ Playwright harness (via @levkin/playkit) smoke-testing the public DEV host:
Login page loads on the public hostname
Sign-out never redirects to a LAN host (Kolby #57 regression guard)
FastAPI /health returns { "status": "ok" }
Forgot-password email lands in Mailtrap with a public reset link (Kolby #56 regression guard)
Wire a new e2e job into .gitea/workflows/ci.yml: self-hosted runner, installs Chromium, runs npx playwright test, uploads the HTML report as an artifact on failure. Gated behind the existing skip-ci-check job like the other lanes.
Add root install:e2e / test:e2e npm scripts for local use.
Sign-out and forgot-password specs self-skip when E2E_ADMIN_* / MAILTRAP_* secrets aren't present; only the public login-page + API health specs are required to pass.
@levkin/playkit is a private git dependency — CI clones it over HTTPS using a GITEA_TOKEN secret if set (see "Allow private playkit clone" step). If that secret isn't configured for this repo yet, watch for an npm ci auth failure on the e2e job.
Secrets should come from Infisical LevkinOps synced to Gitea Actions — see ansible docs/hardening/SECRETS.md. I did not add/modify any secrets myself.
Test plan
git add/commit scoped to only the e2e harness + CI wiring (no build artifacts, no real .env, no hardcoded credentials — verified via grep)
Watch the e2e CI job on this PR; confirm npm ci can clone @levkin/playkit and the two credential-free specs (login page, API health) pass
## Summary
- Add `e2e/` Playwright harness (via `@levkin/playkit`) smoke-testing the public DEV host:
- Login page loads on the public hostname
- Sign-out never redirects to a LAN host (Kolby #57 regression guard)
- FastAPI `/health` returns `{ "status": "ok" }`
- Forgot-password email lands in Mailtrap with a public reset link (Kolby #56 regression guard)
- Wire a new `e2e` job into `.gitea/workflows/ci.yml`: self-hosted runner, installs Chromium, runs `npx playwright test`, uploads the HTML report as an artifact on failure. Gated behind the existing `skip-ci-check` job like the other lanes.
- Add root `install:e2e` / `test:e2e` npm scripts for local use.
- Gitignore e2e build artifacts (`node_modules`, `playwright-report`, `test-results`, `blob-report`, `.auth`, `.env`).
## Notes
- Sign-out and forgot-password specs self-skip when `E2E_ADMIN_*` / `MAILTRAP_*` secrets aren't present; only the public login-page + API health specs are required to pass.
- `@levkin/playkit` is a private git dependency — CI clones it over HTTPS using a `GITEA_TOKEN` secret if set (see "Allow private playkit clone" step). If that secret isn't configured for this repo yet, watch for an `npm ci` auth failure on the `e2e` job.
- Secrets should come from Infisical `LevkinOps` synced to Gitea Actions — see ansible `docs/hardening/SECRETS.md`. I did not add/modify any secrets myself.
## Test plan
- [x] `git add`/commit scoped to only the e2e harness + CI wiring (no build artifacts, no real `.env`, no hardcoded credentials — verified via grep)
- [ ] Watch the `e2e` CI job on this PR; confirm `npm ci` can clone `@levkin/playkit` and the two credential-free specs (login page, API health) pass
Add an e2e/ Playwright harness (via @levkin/playkit) that smoke-tests
the public DEV host: login page loads, sign-out never redirects to a
LAN host, FastAPI /health responds, and forgot-password mail lands in
Mailtrap with a public reset link (Kolby #56/#57 regressions).
Wire it into Gitea Actions as a new `e2e` job (self-hosted runner,
Chromium via Playwright), gated behind the existing skip-ci-check.
Add npm root scripts (install:e2e, test:e2e) and gitignore e2e build
artifacts (node_modules, reports, .env).
ilia
merged commit 0f24e7e6ba into dev2026-07-14 16:13:57 -05:00
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.
Summary
e2e/Playwright harness (via@levkin/playkit) smoke-testing the public DEV host:/healthreturns{ "status": "ok" }e2ejob into.gitea/workflows/ci.yml: self-hosted runner, installs Chromium, runsnpx playwright test, uploads the HTML report as an artifact on failure. Gated behind the existingskip-ci-checkjob like the other lanes.install:e2e/test:e2enpm scripts for local use.node_modules,playwright-report,test-results,blob-report,.auth,.env).Notes
E2E_ADMIN_*/MAILTRAP_*secrets aren't present; only the public login-page + API health specs are required to pass.@levkin/playkitis a private git dependency — CI clones it over HTTPS using aGITEA_TOKENsecret if set (see "Allow private playkit clone" step). If that secret isn't configured for this repo yet, watch for annpm ciauth failure on thee2ejob.LevkinOpssynced to Gitea Actions — see ansibledocs/hardening/SECRETS.md. I did not add/modify any secrets myself.Test plan
git add/commit scoped to only the e2e harness + CI wiring (no build artifacts, no real.env, no hardcoded credentials — verified via grep)e2eCI job on this PR; confirmnpm cican clone@levkin/playkitand the two credential-free specs (login page, API health) pass