Git ve CI¶
Amaç¶
Bu sayfa, Dictionary projesinin Git/CI hazırlığı sırasında (2026-08-30) kurulan
gerçek, çalışan CI pipeline'ını belgeler. Burada anlatılan HER adım
.github/workflows/ci.yml içinde gerçekten tanımlıdır — uydurulmuş
veya "planlanan" bir adım yoktur.
CI Platformu¶
Proje GitHub Actions kullanır (origin remote'u GitHub'dadır,
.github/workflows/ ve .github/dependabot.yml zaten mevcuttu).
Uygulama kodu (backend/dashboard/Docker/k6/scripts) ile dokümantasyon
(MkDocs) build'i iki ayrı workflow dosyasına bölünmüştür — Actions
ekranında iki bağımsız workflow olarak görünsünler ve birbirini
GEREKSİZ YERE tetiklemesinler diye:
| Workflow dosyası | Actions ekranındaki adı | Kapsam |
|---|---|---|
.github/workflows/ci.yml |
IQV Dictionary CI | backend, dashboard, Docker doğrulama, k6, script lint, Quality Pipeline |
.github/workflows/docs.yml |
IQV Dictionary Docs | mkdocs build --strict, ve main'de resmi GitHub Pages Actions modeliyle deploy |
MkDocs işlemleri ci.yml içine TAŞINMAZ — bu sayfanın geri kalanı
yalnızca ci.yml'i belgeler; docs.yml için bkz. aşağıdaki
"Docs Workflow" bölümü.
Branch Stratejisi¶
- Ana branch:
main(repoda tek branch,origin/main'i izliyor). - CI,
main'e açılanpull_request'lerde vemain'e doğrudanpush'larda tetiklenir. - Yük/stres (k6 load/stress) testleri her push'ta ÇALIŞMAZ — yalnızca
manuel
workflow_dispatchile (run_k6_load_test: truegirdisiyle) tetiklenir.
Local Pre-Commit Kontrolleri (önerilen)¶
Bir commit'ten önce, geliştiricinin kendi makinesinde manuel olarak çalıştırması önerilen komutlar (CI'nın aynısı, yerelde):
# dashboard/ (pnpm)
pnpm run typecheck && pnpm run lint && pnpm run prettier && pnpm test
# backend/ (npm)
npm run typecheck && npm run lint && npm run prettier && npm test
CI Pipeline Aşamaları (ci.yml içindeki gerçek, tanımlı job'lar)¶
| Job | Ne yapar | Ne zaman çalışır |
|---|---|---|
frontend |
dashboard/: pnpm install --frozen-lockfile → typecheck → lint → prettier → test → coverage → build (yalnızca dist/, dashboard-dist adıyla opsiyonel/non-blocking artifact olur -- coverage artifact edilmez, gerçek adım sonucu her zaman job'u belirler) |
her push/PR |
backend |
backend/: npm ci → typecheck → lint → prettier → test → coverage → build → /health duman testi |
her push/PR |
k6-smoke |
backend job'undan sonra, in-memory test sunucusuna karşı kısa k6 smoke script'leri |
her push/PR |
docker-build |
frontend+backend job'larından sonra: iki DEV Dockerfile (backend/Dockerfile, dashboard/Dockerfile) + iki PRODUCTION Dockerfile (backend/Dockerfile.prod, dashboard/Dockerfile.prod) için yerel docker build (registry'ye PUSH YOK) + docker-compose.yml VE docker-compose.prod.yml için docker compose config doğrulaması (CI-only, placeholder backend/.env ile — bkz. Sorun Giderme) |
her push/PR |
scripts-lint |
scripts/linux/*.sh için bash -n, scripts/windows/*.ps1/*.psm1 için gerçek PowerShell parser doğrulaması ([System.Management.Automation.Language.Parser]::ParseFile, pwsh GitHub-hosted runner'da hazır gelir) |
her push/PR |
k6-load-stress |
Uzun, yüksek VU'lu k6 yük/stres testleri | yalnızca manuel workflow_dispatch |
quality-pipeline |
Yukarıdaki job'ların GERÇEK sonuçlarını toplayıp 100 puanlık bir kalite raporu (REPORT.md/REPORT.json/QUALITY.svg) üretir ve strict gate'i uygular — bkz. aşağıdaki "Quality Pipeline" bölümü |
her push/PR, if: always() |
Sıralama, ucuz kontrollerin (install/typecheck/lint/test) önce, pahalı
olanların (build/Docker/k6) sonra çalışacağı şekilde kuruldu (fail-fast).
MkDocs build'i burada DEĞİL, ayrı docs.yml workflow'undadır (aşağıya
bakın).
Docs Workflow (docs.yml — "IQV Dictionary Docs")¶
.github/workflows/docs.yml, Actions ekranında ayrı, bağımsız bir
workflow olarak görünür (adı tam olarak IQV Dictionary Docs). İki
job'dan oluşur: build (Python kurulumu → pip install -r
requirements-docs.txt → mkdocs build --strict → pull_request
DIŞINDA actions/configure-pages + actions/upload-pages-artifact
ile site/'i Pages artifact'i olarak yükler -- bu ZORUNLU bir
artifact'tır, continue-on-error kullanılmaz) ve deploy (yalnızca
main'e gerçek bir push veya workflow_dispatch ile, VE build
job'u başarılı olmadan hiç çalışmaz — needs: build — pull_request
de ASLA çalışmaz). Resmi GitHub Pages Actions modeli kullanılır
(actions/deploy-pages@v4, diğer IQVizyon repository'leriyle AYNI
standart) -- mkdocs gh-deploy veya manuel gh-pages branch commit'i
kullanılmaz. İzinler: contents: read, pages: write,
id-token: write. deploy job'u environment: { name: github-pages,
url: ... } kullanır -- gerçek yayın URL'si job özetinde ve Settings →
Pages altında görünür. Repo ayarlarında Settings → Pages → Source:
"GitHub Actions" seçili olmalıdır.
Tetikleyiciler: push/pull_request (yalnızca docs/**,
mkdocs.yml, requirements-docs.txt değiştiğinde — backend/dashboard
kod değişikliklerinde gereksiz yere çalışmasın diye) VE
workflow_dispatch (elle, herhangi bir zamanda tetiklenebilir —
workflow'un Actions ekranında görünür/keşfedilebilir kalmasını da
sağlar, paths filtresine takılıp hiç çalışmadığı bir durum oluşmaz).
Quality Pipeline¶
quality-pipeline job'u, yukarıdaki tüm zorunlu job'ların
needs.*.result değerlerini toplar ve scripts/ci/generate-quality-report.mjs
ile 100 puanlık bir rapor üretir (Backend 30, Dashboard 30, Docker 15,
k6 Smoke 15, Scripts 10). Skor yalnızca raporlama içindir — gerçek
bir zorunlu aşama FAIL/iptal/beklenmedik-skip olduğunda sonuç HER ZAMAN
FAILEDdir (strict gate, skor ile yumuşatılamaz). Rapor if: always()
ile önceki aşamalardan biri FAIL olsa bile üretilir; çıktılar İKİ
yere gider: REPORT.md doğrudan çalışan run'ın GitHub Actions Job
Summary ($GITHUB_STEP_SUMMARY) bölümüne eklenir, VE üçü birden
(REPORT.md/REPORT.json/QUALITY.svg) iqv-dictionary-quality-report
adıyla opsiyonel bir artifact olarak da yüklenir (1 gün saklama,
continue-on-error: true). İkisi de yalnızca raporlama katmanıdır --
artifact upload'u başarısız olsa bile ne bu job'un ne de Strict
Gate'in sonucu etkilenir (Gate kararı yerel diskteki
GATE_RESULT.txt'ten gelir).
Node.js Sürümü¶
CI, Node 20.x kullanır (actions/setup-node@v4) — bu, her iki
Dockerfile'ın (FROM node:20-alpine) zaten kullandığı sürümle
BİREBİR aynıdır. Eski workflow dosyası 16.x kullanıyordu; bu, gerçek
Docker imajlarıyla tutarsızdı ve düzeltildi.
Paket Yöneticisi¶
İki alt proje, iki farklı paket yöneticisi kullanır — kasıtlı olarak farklıdırlar, karıştırılmamalıdır:
dashboard/→ pnpm. Kaynak-doğrusudashboard/pnpm-lock.yaml.dashboard/package.json'daki"packageManager": "pnpm@9.15.9"alanı bunu corepack'e bildirir. Hem kök hem dedashboard/altındakiREADME.mdzaten baştan beripnpm install/pnpm run devtalimatları veriyordu. CI'dapnpm/action-setup@v4+pnpm install --frozen-lockfilekullanılır. Straydashboard/yarn.lockdosyası (hiçbir yerde kullanılmıyordu) kaldırıldı.backend/→ npm. Kaynak-doğrusubackend/package-lock.json. Backend için ayrı birpnpm-lock.yaml/yarn.lockhiç var olmadı. CI'danpm cikullanılır.
Not: Eski CI workflow dosyası (ve eski dashboard/Dockerfile)
yanlışlıkla npm ci/package-lock.json kullanıyordu — bu, projenin
gerçek pnpm standardına aykırıydı ve bu CI hazırlık geçişinde
düzeltildi (hem workflow hem Dockerfile artık pnpm kullanıyor).
dashboard/pnpm-lock.yaml ayrıca package.json'la senkron DEĞİLDİ
(vitest/testing-library/jsdom bağımlılıkları lockfile'da eksikti) —
bu da düzeltildi, pnpm install --frozen-lockfile artık temiz
çalışıyor.
Test Veritabanı¶
CI, gerçek/üretim MongoDB'sine hiçbir zaman bağlanmaz. Backend'in
kendi test paketi zaten src/tests/support/* altında in-memory sahte
repository'ler kullanıyor (Mongo'nun birebir yerine geçen). CI bu mevcut
deseni AYNEN kullanır — yeni bir test-veritabanı altyapısı (ör. CI
servis konteyneri olarak MongoDB) EKLENMEDİ.
Docker¶
docker-build job'u dört gerçek docker build çalıştırır:
backend/Dockerfile + dashboard/Dockerfile (geliştirme — hot reload,
npm run dev/pnpm run dev) ve backend/Dockerfile.prod +
dashboard/Dockerfile.prod (production — derlenmiş dist, node
dist/server.js / nginx). Hem docker-compose.yml hem
docker-compose.prod.yml, docker compose config ile doğrulanır.
Hiçbir imaj hiçbir registry'ye push edilmez, hiçbir yere deploy edilmez
(bkz. Kurulum / Güncelleme / Kaldırma
— production kurulum bu Dockerfile.prod'ları scripts/windows/install.ps1
/ scripts/linux/install.sh üzerinden kullanır, CI'dan değil).
Ortam Değişkenleri¶
CI, testler için NODE_ENV=test ayarlar. Gerçek bir prod secret'ına
CI'da hiçbir zaman ihtiyaç duyulmaz (in-memory repository'ler .env
dosyası olmadan çalışır).