Python CIワークフロー(pytest使用)
pytest、pipキャッシュ、flake8リンティングを使用したPythonプロジェクト用GitHub Actions CIワークフロー。仮想環境のセットアップとカバレッジレポートを含みます。
Basic CI
詳細な説明
GitHub ActionsでのPython CI
堅牢なPython CIワークフローは、リンティングでコード品質を検証し、すべてのpushでテストスイートを実行します。このワークフローはactions/setup-pythonを使用して特定のPythonバージョンをインストールし、pipキャッシュを活用して依存関係のインストールを高速化します。
ワークフローYAML
name: Python CI
on:
push:
branches:
- main
pull_request:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.12'
cache: 'pip'
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
- name: Lint with flake8
run: |
pip install flake8
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
- name: Test with pytest
run: |
pip install pytest pytest-cov
pytest --cov=src --cov-report=xml
- name: Upload coverage
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage.xml
動作の仕組み
- Pythonセットアップ:
actions/setup-python@v5は指定されたPythonバージョンをインストールしてPATHに追加します。cache: 'pip'オプションでpipダウンロードキャッシュを自動的にキャッシュします。 - 依存関係のインストール: まずpipをアップグレードし、
requirements.txtからインストールします。pyproject.tomlを使用するプロジェクトの場合はpip install -e ".[dev]"に置き換えます。 - リンティング: Flake8はまず構文エラーと未定義名(最も重要なチェック)を確認し、オプションで完全なスタイルチェックを実行します。
- テスト: カバレッジ付きPytestはターミナル出力とCI統合用のXMLレポートの両方を生成します。
Python CIのヒント
- 予期せぬ破損を避けるため、
3.xではなくPythonバージョンを固定します(例:3.12)。 - 再現可能なビルドには
pip install -r requirements.txtを、パッケージプロジェクトにはpip install -e ".[test]"を使用します。 - 型ヒントを使用するプロジェクトには型チェック用に
mypyの追加を検討してください。
ユースケース
Python Webアプリケーション(Django、Flask、FastAPI)、データサイエンスプロジェクト、またはPythonパッケージのCIパイプライン。リンティングとテストによりすべてのコミットでコード品質を保証します。