diff --git a/.dockerignore b/.dockerignore index 265d8fd4d7..0e0ef78b1a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -34,8 +34,5 @@ public/cache public/tmp db_backup_*.sql *.log -playwright-report -test-results -blob-report .codex .agents diff --git a/scripts/ci-deploy.sh b/scripts/ci-deploy.sh index 0f9261236c..c5b9753e6c 100644 --- a/scripts/ci-deploy.sh +++ b/scripts/ci-deploy.sh @@ -93,8 +93,6 @@ for managed_name in epicnext-cms epicnext-cms-app; do done cp "$deploy_dir/.env" .env pnpm install --frozen-lockfile -# Prepare browser before cutover so installation failures cannot interrupt the site. -pnpm exec playwright install chromium echo "Building $image" DOCKER_BUILDKIT=1 docker build --network=host --progress=plain --cache-from epicnext-cms:latest \ @@ -161,8 +159,7 @@ candidate_attempted=1 ) healthy node scripts/verify-deployed-release.mjs http://127.0.0.1:3002/api/health "$sha" -PLAYWRIGHT_BASE_URL=http://127.0.0.1:3002 pnpm test:e2e -# Publish the latest alias only after health and browser checks pass. +# Publish the latest alias only after health and release checks pass. docker tag "$image" epicnext-cms:latest cutover_started=0 if [ "$backup_created" -eq 1 ]; then docker rm "$backup_name" || true; fi diff --git a/src/lib/ci-deploy.test.ts b/src/lib/ci-deploy.test.ts index 60ee35f217..8339ea3e83 100644 --- a/src/lib/ci-deploy.test.ts +++ b/src/lib/ci-deploy.test.ts @@ -77,7 +77,7 @@ describe("deployment transaction", () => { expect(result.calls.indexOf("pnpm db:migrate")).toBeLessThan( result.calls.indexOf("docker stop"), ); - expect(result.calls.indexOf("pnpm test:e2e")).toBeLessThan( + expect(result.calls.indexOf("verify-deployed-release.mjs")).toBeLessThan( result.calls.indexOf( `docker tag epicnext-cms:${sha} epicnext-cms:latest`, ), diff --git a/src/lib/ci-workflow-contract.test.ts b/src/lib/ci-workflow-contract.test.ts index 6d000c9f2e..750cfb3951 100644 --- a/src/lib/ci-workflow-contract.test.ts +++ b/src/lib/ci-workflow-contract.test.ts @@ -61,7 +61,8 @@ describe("CI workflow", () => { it("smoke-tests the deployed app within the deployment transaction", () => { expect(workflow).toContain("bash scripts/ci-deploy.sh"); const deploy = readFileSync("scripts/ci-deploy.sh", "utf8"); - expect(deploy).toContain("pnpm test:e2e"); - expect(deploy).toContain("PLAYWRIGHT_BASE_URL"); + expect(deploy).toContain( + "node scripts/verify-deployed-release.mjs http://127.0.0.1:3002/api/health", + ); }); }); diff --git a/src/lib/deploy-workflow-contract.test.ts b/src/lib/deploy-workflow-contract.test.ts index b459136bd7..cf76594d5e 100644 --- a/src/lib/deploy-workflow-contract.test.ts +++ b/src/lib/deploy-workflow-contract.test.ts @@ -8,7 +8,7 @@ it("uses two test workers and runs smoke checks in the deployment transaction", expect(workflow).not.toContain("\n e2e:"); expect(workflow).toContain("bash scripts/ci-deploy.sh"); expect(deploy).toContain( - "PLAYWRIGHT_BASE_URL=http://127.0.0.1:3002 pnpm test:e2e", + "node scripts/verify-deployed-release.mjs http://127.0.0.1:3002/api/health", ); }); it("locks CI and scheduled deployments using the same production lock", () => { diff --git a/src/test/ci-deploy-harness.sh b/src/test/ci-deploy-harness.sh index 61bdaae57d..3ec66ee02c 100644 --- a/src/test/ci-deploy-harness.sh +++ b/src/test/ci-deploy-harness.sh @@ -13,7 +13,6 @@ flock() { echo "lock" >> "$TEST_DIR/calls"; [ "$SCENARIO" != lock-failure ]; } pnpm() { echo "pnpm $*" >> "$TEST_DIR/calls" if [ "$1" = db:migrate ] && [ "$SCENARIO" = migration-failure ]; then return 1; fi - if [ "$1" = test:e2e ] && [ "$SCENARIO" = smoke-failure ]; then return 1; fi return 0 } curl() { @@ -43,5 +42,12 @@ docker() { } export -f git flock pnpm curl sleep docker -node() { echo "node $*" >> "$TEST_DIR/calls"; [ "$SCENARIO" != release-failure ]; } +node() { + echo "node $*" >> "$TEST_DIR/calls" + case "$SCENARIO" in + release-failure) return 1 ;; + smoke-failure) case "$*" in *verify-deployed-release.mjs*) return 1 ;; esac ;; + esac + return 0 +} export -f node