Modül 4 · Code Security (CodeQL) · ⏱ 12 dakika

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
TetikleyiciNe zaman çalışır?Önerilen kullanım
pushBranch’e pushAna branch’ler
pull_requestPR açıldığında/güncellendiğindePR kapısı
scheduleCron ileHaftalı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)
  • security suite yerine security-extended yalnı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.