[κΈ°μ μ 리] π ν΅ν© CI Workflow νμΌ (lint_and_test.yml) - DDAL-KKAK-DOT/DDALKKAK GitHub Wiki
pylint
& pytest
)
π DDALKKAK νλ‘μ νΈ CI κ΅¬μΆ κ°μ΄λ (DDALKKAK νλ‘μ νΈλ μ½λ νμ§ μ μ§ λ° μ§μ κ°λ₯ν κ°λ° νκ²½μ μν΄ CI/CD νμ΄νλΌμΈμμ μ μ λΆμ(pylint
)κ³Ό ν
μ€νΈ μλν(pytest
) λ₯Ό μνν©λλ€.
β CI κ°μ
- PRμ΄
dev-be
λΈλμΉλ‘ μμ±λ λλ§λ€ μλ μ€ν - pylint μ μκ° 8μ μ΄μμ΄μ΄μΌ ν΅κ³Ό
- pytestλ₯Ό μ¬μ©ν μ½λ μμ μ± κ²μ¦
- μΈμ¦ ν€κ° νμν ν μ€νΈλ μλμΌλ‘ μ μΈ
π 1οΈβ£ pylint μ€μ (μ μ λΆμ)
pylint
λ μ½λ κ°λ
μ±κ³Ό νμ§μ λμ΄κΈ° μν ν΅μ¬ λκ΅¬λ‘ λ€μ κΈ°μ€μ μ¬μ©ν©λλ€.
π οΈ κΈ°μ€ μ€μ
-
μ΅μ μ μ: 8.0
-
μ μΈ νλͺ©:
- missing-module-docstring
- missing-function-docstring
- import-error
- broad-exception-caught
π YAML μ€μ μμ
- name: Run pylint
run: |
pylint backend \
--disable=missing-module-docstring,missing-function-docstring,import-error,broad-exception-caught \
--fail-under=8
π 2οΈβ£ pytest μ€μ (μλν ν μ€νΈ)
pytestλ μννΈμ¨μ΄μ κΈ°λ₯ κ²μ¦ λ° μ λ’°μ± ν₯μμ ν΅μ¬μ λλ€.
π οΈ μ£Όμ μ€μ
- ν
μ€νΈ μ½λ μμΉ:
backend/test
- μΈμ¦ ν€κ° νμν
test_api.py
λ°test_gemini.py
μ μΈ - 컀λ²λ¦¬μ§ κ²μ¬λ μ μΈ
π YAML μ€μ μμ
- name: Install dependencies
run: |
pip install -r requirements.txt
pip install pytest
- name: Run pytest (exclude API/Gemini tests)
env:
PYTHONPATH: ${{ github.workspace }}
run: |
pytest backend/test \
--ignore=backend/test/test_api.py \
--ignore=backend/test/test_gemini.py
π μ 체 CI μ€ν νλ¦
flowchart LR
PR["PR μμ± (dev-be λΈλμΉ)"] --> Lint[pylint κ²μ¬]
PR --> Test[pytest μ€ν]
Lint -->|μ μ 8 λ―Έλ§| FailLint[β μ€ν¨]
Lint -->|μ μ 8 μ΄μ| PassLint[β
ν΅κ³Ό]
Test -->|μ€ν¨ λ°μ| FailTest[β μ€ν¨]
Test -->|λͺ¨λ ν
μ€νΈ ν΅κ³Ό| PassTest[β
ν΅κ³Ό]
PassLint & PassTest --> Merge["π PR Merge κ°λ₯"]
FailLint & FailTest --> Reject["β οΈ PR μμ νμ"]
π‘οΈ κ²°λ‘ λ° μ₯μ
- μ½λ νμ§κ³Ό κ°λ μ± ν₯μ
- λΉ λ₯Έ λ²κ·Έ λ°κ²¬ λ° μλ°©
- μμ μ μ΄κ³ ν¨μ¨μ μΈ κ°λ° νκ²½ ꡬμΆ