#!/usr/bin/env bash # Post-deploy validation for the QA environment: runs the API integration # suite (real HTTP + real Postgres, seeding/cleaning up its own data) and the # Playwright admin e2e suite against the just-deployed QA stack. Intended to # run immediately after deploy-qa.sh, on the same self-hosted qa runner. This # job runs in its own job container, a sibling of the QA stack's containers # on docker's default bridge network - not "localhost" from the host's point # of view - so it reaches published ports via the bridge gateway IP, same as # deploy-qa.sh binds the db port to. set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" && source ./lib.sh cd "$CI_ROOT" ensure_dotnet ensure_node QA_ADMIN_PORT="${QA_ADMIN_PORT:-3001}" CI_HOST="$(docker_bridge_gateway)" [[ -n "$CI_HOST" ]] || fail "could not determine docker bridge gateway IP to reach the QA stack" BASE_URL="http://${CI_HOST}:${QA_ADMIN_PORT}" log "Resolved docker host as $CI_HOST for reaching the QA stack's published ports" export MICCHECK_API_BASE_URL="$BASE_URL" export MICCHECK_DB_CONNECTION_STRING="${MICCHECK_DB_CONNECTION_STRING:-Host=$CI_HOST;Port=55432;Database=miccheck;Username=miccheck;Password=password}" log "Running API integration suite against $BASE_URL" dotnet test tests/api/MicCheck.Api.Tests.Integration/MicCheck.Api.Tests.Integration.csproj -c Release --logger trx log "Installing admin e2e dependencies" npm --prefix src/admin ci # Playwright's bundled Chromium is a glibc binary and `--with-deps` only knows # apt - neither works on this musl/Alpine runner. Run the e2e leg inside # Microsoft's official Playwright image instead (glibc, browsers preinstalled # at /ms-playwright), as a sibling container reachable at the same bridge # gateway IP used above. Pin the image tag to the exact resolved # @playwright/test version so the test runner and browser build match. PW_VERSION="$(node -p "require('./src/admin/node_modules/@playwright/test/package.json').version")" log "Running Playwright admin e2e suite against $BASE_URL (playwright:v$PW_VERSION-noble)" docker run --rm \ -e "E2E_BASE_URL=$BASE_URL" \ -v "$CI_ROOT:/work" -w /work/src/admin \ "mcr.microsoft.com/playwright:v${PW_VERSION}-noble" \ npx playwright test log "smoke-qa.sh complete - QA environment validated end to end"