Commit Graph

34 Commits

Author SHA1 Message Date
James Wampler
cfb6c5bde3 Wait for the toggle PUT to land before reloading in the feature e2e test
Some checks failed
CI / build-and-push (push) Successful in 44s
CI / deploy-qa (push) Successful in 11s
CI / smoke-qa (push) Failing after 23s
The click fires an async toggle-state update; reloading immediately after
raced it and read back the pre-toggle value, flaking the persistence check.
2026-07-04 18:42:10 -07:00
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
25504a8a85 Claude.md tweaks
Some checks failed
CI / build-and-push (push) Successful in 54s
CI / deploy-qa (push) Successful in 11s
CI / smoke-qa (push) Failing after 20s
2026-07-04 17:57:50 -07:00
James Wampler
404b1e9904 Pin Aspire AppHost ports/credentials to match docker-compose defaults
Aspire assigned random ports and an auto-generated Postgres password on each
run, so the fixed targets baked into local.runsettings and docker-compose
(localhost:5000/5173/5432, miccheck/password) didn't work when developing via
Aspire instead of docker compose. Pins Postgres user/password/port and the
api/admin HTTP endpoints so either workflow hits the same local addresses.
2026-07-04 17:57:50 -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
8d0cef08b1 Fix api container healthcheck failing with no error logs
Some checks failed
CI / build-and-push (push) Successful in 45s
CI / deploy-qa (push) Failing after 1m7s
aspnet base image ships neither curl nor wget, so the compose
healthcheck's wget call failed silently at the exec level (visible only
in docker's health-check log, not app stdout). Install curl in the
Dockerfile.ci final stage and switch the healthcheck to use it.
2026-07-04 13:10:04 -07:00
James Wampler
80d450207c Replace actions/checkout with plain git in deploy-qa job
Some checks failed
CI / build-and-push (push) Successful in 40s
CI / deploy-qa (push) Failing after 1m9s
Self-hosted qa runner has no node in PATH, so the Node-based
actions/checkout@v4 action can't run there. Swap it for a bash git
fetch/checkout, matching the pipeline's no-marketplace-action convention.
2026-07-04 11:42:44 -07:00
James Wampler
2dc40f72ce Add .dockerignore to stop host obj/bin leaking into CI image builds
Some checks failed
CI / build-and-push (push) Successful in 1m3s
CI / deploy-qa (push) Failing after 6s
Dockerfile.ci COPYs full project directories after restoring inside
the container. Without a .dockerignore, the host's obj/bin (built
with a different local SDK than the container's) got copied over the
container's fresh restore output, corrupting project.assets.json and
crashing ResolvePackageAssets with a NullReferenceException on publish.
2026-07-02 20:48:15 -07:00
James Wampler
a81798cffe Pin MessagePack to patched 2.5.302 in AppHost
Some checks failed
CI / build-and-push (push) Failing after 45s
CI / deploy-qa (push) Has been skipped
Aspire.Hosting.PostgreSQL/JavaScript pull in MessagePack 2.5.192
transitively, which has multiple known vulnerabilities and fails the
build with TreatWarningsAsErrors. Pinned a direct reference to the
patched 2.5.302 (same major, no API break).
2026-07-02 13:01:37 -07:00
James Wampler
926af91389 Pin Microsoft.OpenApi to patched 2.9.0 to fix NU1903 build failure
Microsoft.AspNetCore.OpenApi 10.0.5 pulls in Microsoft.OpenApi 2.0.0
transitively, which has a known high-severity vulnerability
(GHSA-v5pm-xwqc-g5wc) and fails the build with TreatWarningsAsErrors.
Pinned a direct reference to the patched 2.9.0 (still 2.x, API-compatible).
2026-07-02 13:00:59 -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
James Wampler
6887d09f9c version-0.1 (#1)
Squash and merge of version-0.1

Co-authored-by: James Wampler <james@wamp.dev>
Co-committed-by: James Wampler <james@wamp.dev>
2026-07-01 13:30:07 -07:00
James Wampler
8ff071c69b UX tweaks, traits bug fix, adding member info 2026-04-16 11:50:11 -07:00
James Wampler
7b624b3238 Fixing segment create error, adding environment to feature dialog 2026-04-16 08:59:54 -07:00
James Wampler
b75f5f602e Adding Organiztion, environment and project. Segment fix, tag fix 2026-04-14 14:10:37 -07:00
James Wampler
4195d384d0 Adding Audit and Webhooks 2026-04-13 19:43:58 -07:00
James Wampler
fc62ea634a Adding Identities 2026-04-13 19:37:56 -07:00
James Wampler
3fff7e3158 Adding Segments 2026-04-13 19:32:20 -07:00
James Wampler
8dfcb107d0 Adding Feature flag management 2026-04-13 16:04:23 -07:00
James Wampler
f2816b6900 Building out navigation in the admin site 2026-04-13 15:27:09 -07:00
James Wampler
334b6cf3e1 Auth tweaks, Audit implementation, Webhooks 2026-04-13 14:17:45 -07:00
James Wampler
b9a04df861 Adding Admin API 2026-04-08 14:25:10 -07:00
James Wampler
0ba076b650 Adding Flags API 2026-04-07 15:30:40 -07:00
James Wampler
7b15086fe5 Initial commit, project structure and domain models 2026-04-07 09:14:06 -07:00