CodeQL Step
CodeQL, GitHub’ın sağladığı bir kod analizi ve güvenlik taraması aracıdır. Bu araç, depo içindeki potansiyel güvenlik açıklarını (SQL injection, XSS, vb.) kod düzeyinde tespit etmeye çalışır.
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 14 * * 1'
# Bu ayarlar, "main" branch'e push veya PR açıldığında
# ve her pazartesi 14:00'de (UTC) CodeQL analizini tetikler.
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: ['java', 'javascript', 'python']
# Bu üç dil için ayrı alt-job'lar oluşturulur
# ve paralel şekilde analiz yapılır.
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Kodları indirerek CodeQL'in erişmesine olanak sağlar.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# CodeQL'i başlatırken hangi dili analiz edeceğini belirtiyor
# (matrix'te tanımlanan "java", "javascript" veya "python").
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
# Asıl kod analizi burada yapılır ve sonuçlar GitHub Security sekmesinde görünür.
1) Workflow Tetikleyicileri
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
schedule:
- cron: '0 14 * * 1'
push:
main
branch’ine her push olduğunda CodeQL analizini çalıştırır.pull_request:
main
branch’ine PR açıldığında da çalıştırır.schedule (cron): Her pazartesi 14:00’de (
0 14 * * 1
) analiz çalışır. Bu şekilde düzenli taramalar yapılır.
2) Job Tanımı ve Strateji
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: ['java', 'javascript', 'python']
Job adı: “analyze”.
Runner: “ubuntu-latest” → GitHub’ın Ubuntu ortamı.
Matrix: CodeQL’in birden fazla dil için tarama yapacağı belirtiliyor. Yani job,
java
,javascript
, vepython
dilleri için paralelde (ya da ardışık) çalışacak.fail-fast: false: Bir dilde analiz hata verse bile diğer dillerin analizini kesme; tamamlamaya çalış.
3) Adımlar (Steps)
Checkout repository
- name: Checkout repository uses: actions/checkout@v2
Kodları runner’a indirir, böylece CodeQL taraması dosyaları görebilir.
Initialize CodeQL
- name: Initialize CodeQL uses: github/codeql-action/init@v1 with: languages: ${{ matrix.language }}
CodeQL analizini başlatmak için resmi GitHub Action (
github/codeql-action/init@v1
).languages: ${{ matrix.language }}
: Hangi dili (java, javascript, python) tarayacağını belirtiyor.
Perform CodeQL Analysis
yamlCopy- name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1
Asıl taramayı çalıştırır. Kodda potansiyel güvenlik veya kalite sorunlarını saptar.
Sonuçları GitHub Security tabında “Code scanning alerts” bölümünde görebilirsin.
4) Neden CodeQL?
Potansiyel açıkları push/PR aşamasında yakalayarak yaygın zafiyetleri önlemiş olursun.
Çoklu Dil Desteği: Java, JavaScript, Python, C/C++, Go, C# vb. popüler dilleri destekler.
Entegrasyon: GitHub Security sekmesinde “code scanning alerts” olarak rapor çıkarır, pull request’lerde uyarı gösterir, hatta “Security tab” üzerinden düzeltmeler önerilir.
5) Cron Taramaları vs. Pull Request Taramaları
pull_request
tetiklemesi: Daha kod PR aşamasındayken sorunları yakalamayı sağlar.push
tetiklemesi: Branch’e direkt push yapan geliştiriciler için de tarama çalışır.schedule (cron)
: Periyodik olarak (ör. haftada bir) tam kapsamlı tarama yapar. Böylece sürekli güncellenen kurallarla eski kodu yeniden tarayabilirsin.
Özet
Bu CodeQL workflow, depo içindeki belirli dillerdeki (Java, JS, Python) kodu düzenli tarar ve güvenlik açıklarını raporlar. “init” adımında analiz ayarları yapılır, “analyze” adımında tarama gerçekleşir. Tetikleyiciler (push, PR, cron) sayesinde hem sürekli entegrasyon sırasında, hem de düzenli aralıklarla güvenlik kontrolleri yapılır.
Last updated
Was this helpful?