Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: CI

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
test:
name: Tests (Python 3.11)
runs-on: ubuntu-latest
timeout-minutes: 10

steps:
- name: Check out repository
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
persist-credentials: false

- name: Set up Python
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
with:
python-version: "3.11"
cache: pip
cache-dependency-path: pyproject.toml

- name: Upgrade pip
run: python -m pip install --upgrade pip

- name: Install development dependencies
run: python -m pip install -e ".[dev]"

- name: Run tests
run: python -m pytest -q
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Statik kod analiz aracının ve bağımlılık tarayıcısının test edileceği

- [Proje Kapsamı](docs/scope.md)
- [Beş Haftalık Proje Planı](docs/project-plan.md)
- [GitHub Actions CI](docs/ci.md)

### Bileşen Dokümanları

Expand Down
1 change: 1 addition & 0 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Bu klasörde projenin genel dokümanları ve üç ana bileşene ait dokümanlar

- [Proje Kapsamı](scope.md)
- [Beş Haftalık Proje Planı](project-plan.md)
- [GitHub Actions CI](ci.md)

## Bileşen Dokümanları

Expand Down
143 changes: 143 additions & 0 deletions docs/ci.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
# GitHub Actions CI

Bu doküman Backlog 5.1 kapsamındaki temel test pipeline'ının gereksinimlerini,
güvenlik sınırlarını ve çalışma sırasını açıklar.

## Mevcut Durum

Temel GitHub Actions workflow'u tamamlanmıştır:

```text
.github/workflows/ci.yml
```

Workflow Pull Request değişikliklerinde ve `main` branch push olaylarında
Python 3.11 test paketini çalıştırır. Sıradaki aşama static analyzer,
dependency scanner ve report artifact adımlarının ayrı CI job'ları olarak
eklenmesidir.

## Trigger Sözleşmesi

Pipeline aşağıdaki olaylarda çalışır:

- Her `pull_request` olayı
- Yalnızca `main` branch'ine yapılan `push` olayları

`pull_request_target` kullanılmaz. Böylece fork kaynaklı güvenilmeyen kod daha
yüksek yetkili base repository bağlamında çalıştırılmaz.

## İzin ve Çalıştırma Sınırları

Workflow-level `GITHUB_TOKEN` izni yalnızca şöyledir:

```yaml
permissions:
contents: read
```

Checkout sonrasında credential persistence kapalıdır. Test job'u
`ubuntu-latest` runner üzerinde en fazla 10 dakika çalışır. Aynı workflow ve
Git ref için yeni bir run başladığında önceki run iptal edilir.

Bu foundation job secret, write permission, deployment environment veya
external service credential kullanmaz.

## Action Pinleri

Supply-chain değişkenliğini azaltmak için action major tag'leri yerine release
commit SHA değerleri kullanılır:

| Action | Release | Commit |
|---|---|---|
| `actions/checkout` | `v7.0.1` | `3d3c42e5aac5ba805825da76410c181273ba90b1` |
| `actions/setup-python` | `v7.0.0` | `5fda3b95a4ea91299a34e894583c3862153e4b97` |

Yorumdaki release etiketi bakım sırasında SHA provenance değerinin kolayca
kontrol edilmesini sağlar.

Resmî release kaynakları:

- [actions/checkout v7.0.1](https://github.com/actions/checkout/releases/tag/v7.0.1)
- [actions/setup-python v7.0.0](https://github.com/actions/setup-python/releases/tag/v7.0.0)

## Test Job Akışı

Job sırası:

1. Repository'yi immutable `actions/checkout` SHA değeriyle checkout et.
2. Python `3.11` ortamını immutable `actions/setup-python` SHA değeriyle kur.
3. `pyproject.toml` anahtarına göre pip download cache'ini geri yükle.
4. Pip'i güncelle.
5. Projeyi `.[dev]` extra bağımlılıklarıyla editable kur.
6. `python -m pytest -q` komutunu çalıştır.

Install veya test komutlarından herhangi biri non-zero exit code üretirse job
ve workflow başarısız olur.

## Yerel Eşdeğer

CI test adımını yerelde doğrulamak için:

```powershell
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"
python -m pytest -q
```

Workflow sözleşmesi de normal test paketi içindedir:

```powershell
python -m pytest tests/test_ci_workflow.py -q
```

Minimum Python syntax sözleşmesini doğrulamak için:

```powershell
python -m pytest tests/test_python_compatibility.py -q
```

## Sözleşme Testleri

`tests/test_ci_workflow.py` aşağıdaki değerleri korur:

- Pull Request ve `main` push trigger'ları
- `pull_request_target` yasağı
- Salt-okunur repository permission
- Checkout credential persistence yasağı
- Concurrency cancellation
- İki action için tam 40 karakterli SHA ve release etiketi
- Python 3.11 ve pip cache yapılandırması
- Pip upgrade, dev install ve pytest komut sırası
- Ubuntu runner ve 10 dakikalık timeout

`tests/test_python_compatibility.py`, `src`, `sample_app`, `tools` ve `tests`
altındaki bütün Python dosyalarını desteklenen en düşük sürüm olan Python
3.11 grameriyle ayrıştırır. Böylece daha yeni bir yorumlayıcıda yerel olarak
geçen Python 3.12+ söz dizimi değişiklikleri CI'a ulaşmadan tespit edilir.

Doğrulanan mevcut sonuç:

```text
CI workflow contract tests: 7 passed
Python 3.11 compatibility tests: 1 passed
Complete test suite: 985 passed
Workflow YAML parse check: passed
```

## Sonraki Güvenlik Job'ları

Bu foundation PR yalnızca Backlog 5.1'i tamamlar. Sonraki aşamalar:

1. `src` ve `tools` için sıfır-bulgu static self-analysis gate'i
2. `sample_app` için beklenen beş bulguyu drift testiyle doğrulama
3. Offline OSV fixture-backed dependency scan gate'i
4. Static ve dependency JSON raporlarını workflow artifact olarak yükleme

Bu ayrım temel test workflow'unun ilk gerçek GitHub run sonucunu bağımsız
olarak incelemeyi sağlar.

## Navigation

- [Proje dokümantasyonuna dön](README.md)
- [Tüm bileşenlere dön](components/README.md)
- [Projenin ana sayfasına dön](../README.md)
7 changes: 5 additions & 2 deletions docs/components/sample-web-app/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,9 @@ Mevcut özellikler:
* Ayrı ve runtime dışı vulnerable dependency fixture'ı
* Portable static-analysis ve dependency-scan JSON baseline'ları
* Offline report generator ve drift check
* Pull Request ve `main` push için temel pytest CI workflow'u

Sıradaki aşama GitHub Actions CI/CD entegrasyonudur.
Sıradaki aşama analyzer, dependency scanner ve report artifact CI job'larıdır.

## Kurulum

Expand Down Expand Up @@ -546,8 +547,10 @@ New update/delete test cases: 54 passed
New frontend test cases: 18 passed
New security demo test cases: 4 passed
New integration report test cases: 6 passed
New CI workflow test cases: 7 passed
New Python 3.11 compatibility test cases: 1 passed
Sample app targeted suite: 149 passed
Complete test suite: 977 passed
Complete test suite: 985 passed
Compile check: passed
Sample app analysis: 5 expected findings
Analyzer source self-analysis: no findings
Expand Down
3 changes: 2 additions & 1 deletion docs/components/sample-web-app/analysis.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,8 @@ Temel Flask uygulaması, Task modeli, in-memory store, JSON CRUD endpoint'leri,
minimal Jinja/CSS frontend, kontrollü güvenlik fixture'ları ve uçtan uca
entegrasyon raporları tamamlanmıştır.

Sıradaki geliştirme adımı analyzer araçlarının GitHub Actions pipeline'ına
Temel GitHub Actions pytest workflow'u da tamamlanmıştır. Sıradaki geliştirme
adımı analyzer, dependency scanner ve report artifact job'larının pipeline'a
eklenmesidir.

## Flask Uygulama İskeleti Gereksinimleri
Expand Down
4 changes: 2 additions & 2 deletions docs/components/sample-web-app/technical-design.md
Original file line number Diff line number Diff line change
Expand Up @@ -201,12 +201,12 @@ Tamamlanan foundation çalışmaları:
* Offline OSV dependency JSON baseline'ının eklenmesi
* Tek komutlu report generator ve drift check'in eklenmesi
* Uçtan uca demo sırasının belgelenmesi
* GitHub Actions pytest foundation workflow'unun eklenmesi

Sıradaki geliştirmeler:

* GitHub Actions workflow'unun eklenmesi
* CI Python ortamı ve test job'larının yapılandırılması
* Analyzer ve dependency scanner CI adımlarının eklenmesi
* JSON security report artifact upload adımının eklenmesi

## Flask Foundation Teknik Tasarımı

Expand Down
5 changes: 3 additions & 2 deletions src/static_analyzer/analysis_engine.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,15 @@
from __future__ import annotations

from collections.abc import Iterable
from typing import TypeAlias

from static_analyzer.models import Finding
from static_analyzer.rules.base import BaseRule
from static_analyzer.rules.base_text import BaseTextRule
from static_analyzer.source_reader import SourceFile


type AnalysisRule = BaseRule | BaseTextRule
AnalysisRule: TypeAlias = BaseRule | BaseTextRule


class AnalysisEngine:
Expand Down Expand Up @@ -47,4 +48,4 @@ def analyze(

findings.extend(rule_findings)

return findings
return findings
Loading