Mimari
Bileşenler
.github/workflows/ci-quality.yml GitHub Actions girişi (ortam + artifact)
│
▼
ci/scripts/run-ci.mjs 16 fazı çalıştırır, çıktıyı ayrıştırır
│ ├─ ci/reports/raw/<faz>.log ham loglar
│ └─ ci/reports/results.json makine-okunabilir ham sonuç
▼
ci/scripts/ci-policy.mjs puanlama + PASS/FAIL kapıları + bulgular
▼
ci/scripts/generate-ci-report.mjs 4 rapor dosyası + $GITHUB_STEP_SUMMARY
Aynı zincir Docker içinde de çalışır:
ci/docker-compose.ci.yml
├─ mongo-ci (test MongoDB, tmpfs — kalıcı değil)
├─ minio-ci (test MinIO, tmpfs — kalıcı değil)
├─ minio-ci-init(test bucket: iqv-platform-ci)
├─ mailpit-ci (test SMTP — gerçek alıcıya mail gitmez)
└─ ci-runner (ci/Dockerfile, Node 22)
Neden bu ayrım?
- Workflow ince tutulur. Faz tanımları YAML'da değil,
run-ci.mjsiçindedir; böylece yerelde ve CI'da birebir aynı hat çalışır. - Politika tek kaynaktır. Puan ve PASS/FAIL kararı yalnızca
ci-policy.mjsiçindedir; rapor dosyaları o çıktının biçimlendirilmiş hâlidir. - Üretimden izolasyon. CI compose ayrı proje adı (
iqv-ci), ayrı servis adları ve ayrı veritabanı/bucket kullanır; kökdocker-compose.ymldeğiştirilmemiştir.
Çıktı sözleşmesi
results.json içindeki her faz kaydı:
| Alan | Anlam |
|---|---|
id, name, group |
faz kimliği |
command, cwd |
çalıştırılan komut |
exitCode, durationMs, timedOut |
çalışma sonucu |
counts |
{passed, failed, skipped, total} — çıktıdan ayrıştırılır |
evidence |
hata satırlarından son 40 kayıt |
rawLog |
raw/<id>.log yolu |