CodeQL workflow özelleştirme
CodeQL workflow customization
Bu derste neler öğreneceksin
- Tarama tetikleyicilerini ve zamanlamasını yapılandırmayı öğrenmek
- Çoklu dil matrisi kurulumunu kavramak
- Derleme gerektiren diller için autobuild ve manual build farkını anlamak
- Büyük repo'larda scan performansını iyileştirme yöntemlerini bilmek
Tarama tetikleyicileri
on:
push:
branches: [main, develop, 'release/**']
pull_request:
branches: [main]
paths-ignore:
- '**/*.md'
- 'docs/**'
schedule:
- cron: '0 2 * * 1' # Her pazartesi gece 02:00
| Tetikleyici | Ne zaman çalışır? | Önerilen kullanım |
|---|---|---|
push | Branch’e push | Ana branch’ler |
pull_request | PR açıldığında/güncellendiğinde | PR kapısı |
schedule | Cron ile | Haftalık tam tarama |
paths-ignore ile belge değişikliklerinde gereksiz tarama yapma.
Çoklu dil matrisi
strategy:
fail-fast: false
matrix:
language: [javascript, typescript, python, java]
steps:
- uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
fail-fast: false önemli: bir dilin analizi başarısız olursa diğerleri devam eder.
Autobuild vs manual build
Derleme gerektiren diller için iki seçenek:
Autobuild (otomatik):
- uses: github/codeql-action/autobuild@v3
GitHub build sistemini otomatik tespit eder. Basit projeler için yeterli.
Manual build (karmaşık projeler):
- name: Build
run: |
./configure
make -j$(nproc)
make install
Maven, Gradle, CMake gibi özel build adımları gerektiren projeler için.
Büyük repo performansı
Büyük kod tabanlarında tarama süresi uzayabilir:
# RAM artır (büyük projeler için)
- uses: github/codeql-action/init@v3
with:
languages: java
config: |
query-filters:
- exclude:
tags contain: experimental
# Self-hosted runner kullan (daha güçlü makine)
runs-on: self-hosted
Performans ipuçları:
- Gereksiz dosyaları hariç tut (
paths-ignore) securitysuite yerinesecurity-extendedyalnızca gerektiğinde kullan- Büyük Java/C++ projelerde self-hosted runner daha pratik
Tarama sonuçlarını görüntüleme
Repo → Security → Code scanning alerts
Filtreleme seçenekleri:
- Dil (JavaScript, Python vb.)
- Severity (critical, high, medium, low)
- Alert state (open, dismissed, fixed)
- Tool (CodeQL, third-party)
- Rule (specific CWE)
Sınavda workflow soruları
“Java projesinde CodeQL çalışıyor ama hiç alert üretmiyor. Neden?”
→ Build adımı başarısız veya autobuild Java için doğru çalışmıyor.
→ Çözüm: manual build adımları ekle.
“Haftalık taramada PR taramasından farklı sonuçlar çıkıyor.” → Normal: scheduled tarama tüm branch’leri kapsar, PR taraması yalnızca diff’i.
Sırada ne var?
Custom queries ve query suites — organizasyona özgü güvenlik kuralları yazmak.