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, ve pythondilleri 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)

  1. Checkout repository

    - name: Checkout repository
      uses: actions/checkout@v2
    • Kodları runner’a indirir, böylece CodeQL taraması dosyaları görebilir.

  2. 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.

  3. 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?