Commit Graph

13 Commits

Author SHA1 Message Date
James Wampler
37e00bf756 Use docker cp instead of a bind mount to get repo files into the playwright container
Some checks failed
CI / build-and-push (push) Successful in 42s
CI / deploy-qa (push) Successful in 13s
CI / smoke-qa (push) Failing after 27s
This script runs inside the runner's own job container and talks to the
host's docker daemon over a mounted socket (docker-outside-of-docker). A
bind mount path only exists inside this job container, not on the host the
daemon resolves it against, so docker run -v failed with ENOENT. docker cp
copies file contents instead, sidestepping the path mismatch.
2026-07-04 18:39:06 -07:00
James Wampler
cff98b5df4 Use npm run e2e instead of npx playwright in the smoke container
Some checks failed
CI / build-and-push (push) Successful in 39s
CI / deploy-qa (push) Successful in 11s
CI / smoke-qa (push) Failing after 13s
npx resolved the registry's generic "playwright" package instead of the
locally installed @playwright/test bin, triggering an unwanted fresh install
and "No tests found". npm run e2e uses the project's own node_modules/.bin
unambiguously.
2026-07-04 18:36:37 -07:00
James Wampler
aeb4f03627 Run Playwright e2e in the official playwright container on musl runners
Some checks failed
CI / build-and-push (push) Successful in 39s
CI / deploy-qa (push) Successful in 12s
CI / smoke-qa (push) Failing after 30s
Playwright's bundled Chromium is glibc-only and --with-deps assumes apt -
both fail on this musl/Alpine runner. Run the e2e leg in
mcr.microsoft.com/playwright (browsers preinstalled, pinned to the exact
resolved @playwright/test version) instead, reachable at the same bridge
gateway IP as the rest of the QA stack.
2026-07-04 18:33:43 -07:00
James Wampler
2d81b7655d Install Node via apk on musl runners instead of nodejs.org's glibc tarball
Some checks failed
CI / build-and-push (push) Successful in 42s
CI / deploy-qa (push) Successful in 13s
CI / smoke-qa (push) Failing after 17s
Same runner dotnet-install.sh detects as musl and picks linux-musl-x64 for -
the glibc node tarball can't even exec there ("env: can't execute 'node'").
2026-07-04 18:29:52 -07:00
James Wampler
c001cff9ba Reach QA's published ports from the smoke-qa job container via bridge gateway
Some checks failed
CI / build-and-push (push) Successful in 39s
CI / deploy-qa (push) Successful in 11s
CI / smoke-qa (push) Failing after 14s
The runner executes each job in its own container on docker's default bridge
network, so "localhost" never resolves to the docker host - smoke-qa's direct
Postgres connection and Playwright/API HTTP calls need the bridge gateway IP
instead. Bind the db port to that same gateway IP (not 0.0.0.0) so it stays
reachable only from sibling containers, not off-box.
2026-07-04 18:25:26 -07:00
James Wampler
ec6bb38902 Add apk fallback for native dotnet deps on musl/Alpine runners
Some checks failed
CI / build-and-push (push) Successful in 38s
CI / deploy-qa (push) Successful in 12s
CI / smoke-qa (push) Failing after 14s
dotnet-install.sh silently picks the linux-musl-x64 SDK on this runner,
which has no apt-get - only apk - so the previous apt-only fix still failed.
2026-07-04 18:16:39 -07:00
James Wampler
8427e4c8a1 Install native runtime deps for dotnet when missing on bare runners
Some checks failed
CI / build-and-push (push) Successful in 41s
CI / deploy-qa (push) Successful in 11s
CI / smoke-qa (push) Failing after 8s
The self-hosted qa runner's minimal image lacked libstdc++/libgcc, which
dotnet fails on with an obscure symbol-relocation error rather than a
clear "missing dependency" message.
2026-07-04 18:12:15 -07:00
James Wampler
2d6ee2197b Fall back to wget in ensure_node when curl is unavailable
Some checks failed
CI / build-and-push (push) Successful in 40s
CI / deploy-qa (push) Successful in 12s
CI / smoke-qa (push) Failing after 9s
The self-hosted qa runner has neither curl nor wget guaranteed; ensure_node
previously assumed curl, breaking smoke-qa on that host.
2026-07-04 18:08:00 -07:00
James Wampler
8fc0ebb724 Add integration + Playwright smoke suite for post-deploy QA validation
Existing coverage was one integration test and zero e2e tests. Adds the thin,
high-value integration/e2e layer unit tests can't reach (real Postgres wire
contract, real browser flows) and wires it as a post-deploy smoke gate.

- Seed a deterministic dev/QA admin user and fixed Development env key so
  HTTP-only tests can authenticate without per-run registration.
- Expand the API integration suite: disabled-flag, unauthorized access,
  environment-document bootstrap, identity-override precedence, and auth
  login scenarios, reusing the existing black-box HTTP+Npgsql harness.
- Add a Playwright suite for the admin SPA: login, nav, project/environment
  context selection, and feature create/toggle, against the real API.
- Bind QA Postgres to 127.0.0.1 for direct seeding, add smoke-qa.sh and an
  ensure_node() bootstrap (the qa runner has no Node today), and wire a new
  smoke-qa CI job after deploy-qa.
2026-07-04 17:57:50 -07:00
James Wampler
1b2ce263e5 Fix deploy-qa health check unreachable from runner's network namespace
All checks were successful
CI / build-and-push (push) Successful in 40s
CI / deploy-qa (push) Successful in 11s
The self-hosted runner runs in its own container on a separate bridge
network, so curling localhost:$QA_ADMIN_PORT hit the runner's own loopback
instead of the docker host's published port, never the QA stack.
Exec into the admin container and curl its own localhost instead.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-04 13:29:40 -07:00
James Wampler
b32f5d56db Fix health check path mismatch causing 404s
Some checks failed
CI / build-and-push (push) Successful in 45s
CI / deploy-qa (push) Failing after 1m8s
The app maps health checks at /health (ServiceDefaults), not /api/v1/health.
Compose healthcheck and deploy-qa.sh's wait-loop both hit the wrong path.
Also add an nginx location for /health since it lives outside the /api
prefix that the admin proxy otherwise forwards unchanged.
2026-07-04 13:15:09 -07:00
James Wampler
37ac4b47f2 Auto-install .NET SDK in CI scripts when runner lacks it
Some checks failed
CI / build-and-push (push) Failing after 12s
CI / deploy-qa (push) Has been skipped
Gitea runner build failed with "dotnet: command not found". Added
ensure_dotnet() to lib.sh, using the vendored dotnet-install.sh to
bootstrap the SDK into .dotnet/ when not already on PATH, called from
build.sh/test.sh/prepush.sh. Also trigger CI on build-runner-fix to
verify the fix.
2026-07-02 12:50:19 -07:00
James Wampler
e10cba77ed qa-environment-aspire (#2)
Some checks failed
CI / build-and-push (push) Failing after 18s
CI / deploy-qa (push) Has been skipped
Reviewed-on: #2
Co-authored-by: James Wampler <james@wamp.dev>
Co-committed-by: James Wampler <james@wamp.dev>
2026-07-02 12:42:46 -07:00