probe production document browser capability
Quality gates / test-build (push) Canceled after 0s
Quality gates / container (push) Canceled after 0s

This commit is contained in:
2026-09-06 21:10:17 +03:00
parent 93240b1b20
commit fd5db7544e
2 changed files with 10 additions and 2 deletions
+4
View File
@@ -2386,3 +2386,7 @@ Doğrulama: yeni istemci testi dahil `npm test` 302/302 ve `npm run build` başa
### 2026-09-06 · Coolify sağlık kontrolünün etkinleştirilmesi
Coolify uygulamasındaki sağlık kontrolü `/api/ready` ve port 80 olarak etkinleştirildi. İlk kontrollü rollout, imajda `curl`/`wget` bulunmadığını ortaya çıkardığı için başarısız oldu; Dockerfile üretim imajına `curl` eklendi. Düzeltme sonrası `lwjqvurn3yluodawgg5kdip3` deployment'ı `finished` oldu, container healthcheck `healthy` ve uygulama durumu `running:healthy` olarak doğrulandı. Canlı `/api/ready` ve beşli ihale probe'u da başarılıdır.
### 2026-09-06 · Canlı probe doküman tarayıcısı doğrulaması
`qa:live` drift probe'una `/api/documents/config` kontrolü eklendi. Böylece üretimde EKAP dokümanları için gereken yerleşik Playwright/Chromium yeteneği `tarayiciVar:true` ile canlı ve salt okunur doğrulanıyor; kontrol başarısızsa servis sağlıklı görünse bile belge fallback'i kabul edilmiyor. 6 Eylül 2026 canlı çalıştırmasında home, health, readiness, güvenlik başlıkları ve doküman tarayıcısı kontrolleri geçti.
+6 -2
View File
@@ -42,13 +42,17 @@ checks.health = await probe('/api/health', 'ok');
// /api/health and /api/ready use the same { ok: true } probe contract. The
// readiness payload also includes a separate `ready` diagnostic field.
checks.ready = await probe('/api/ready', 'ok');
const missingHeaders = requiredHeaders.filter(name => [checks.home, checks.health, checks.ready].some(check => check?.headers?.[name] == null));
// The EKAP document fallback depends on the bundled browser being available;
// check its public capability endpoint without opening a document or mutating
// any account data.
checks.documents = await probe('/api/documents/config', 'tarayiciVar');
const missingHeaders = requiredHeaders.filter(name => [checks.home, checks.health, checks.ready, checks.documents].some(check => check?.headers?.[name] == null));
const report = {
base,
readOnly: true,
checkedAt: new Date().toISOString(),
checks,
pass: checks.home?.status === 200 && checks.health?.status === 200 && checks.health.apiSuccess === true && checks.ready?.status === 200 && checks.ready.apiSuccess === true && missingHeaders.length === 0,
pass: checks.home?.status === 200 && checks.health?.status === 200 && checks.health.apiSuccess === true && checks.ready?.status === 200 && checks.ready.apiSuccess === true && checks.documents?.status === 200 && checks.documents.apiSuccess === true && missingHeaders.length === 0,
missingHeaders,
};