fix: complete Playwright removal in CI deploy workflow
CI / check (push) Successful in 1m13s
CI / deploy (push) Successful in 2m9s

Drop the leftover Playwright browser install and e2e smoke test from the deployment script, and update the deployment contract tests to cover the verify-deployed-release smoke check instead.
This commit is contained in:
openhands committed 2026-09-08 16:47:39 +02:00
1 parent bbb7d66067
commit 2a1aef1c1b
6 files changed
+14 -13

No files matched your search

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