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

動作の仕組み

  1. Pythonセットアップ: actions/setup-python@v5は指定されたPythonバージョンをインストールしてPATHに追加します。cache: 'pip'オプションでpipダウンロードキャッシュを自動的にキャッシュします。
  2. 依存関係のインストール: まずpipをアップグレードし、requirements.txtからインストールします。pyproject.tomlを使用するプロジェクトの場合はpip install -e ".[dev]"に置き換えます。
  3. リンティング: Flake8はまず構文エラーと未定義名(最も重要なチェック)を確認し、オプションで完全なスタイルチェックを実行します。
  4. テスト: カバレッジ付き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パイプライン。リンティングとテストによりすべてのコミットでコード品質を保証します。

試してみる — GitHub Actions Workflow Builder

フルツールを開く