GitHub Actions CI/CDを使ってPyPIに自動アップロード

DevOps

はじめに

GitHub Actions CI/CDを利用すると、GitHubでのイベント発生をトリガーに、一連のコマンドを自動実行できます。これを活用して、Pythonパッケージをビルドし、PyPIに自動公開するワークフローを構築できます。


こちらの記事もおすすめ

Hugging Face CI/CDにおけるエラー解消: Git LFS設定と画像ファイルの履歴削除
はじめにこの記事では、Hugging Faceとの連携におけるCI/CDプロセス中に生じる可能性のあるエラーを解消する方法を解説します。具体的には、Gitリポジトリで大きな画像ファイル(PNG、GIF、JPG)を扱う際に発生する問題を解決す...
CodeLumia: GitHubリポジトリの解読ドキュメンテーションを自動生成
はじめにCodeLumiaは、GitHubリポジトリのソースコードを分析し、包括的なマークダウン形式のドキュメントを自動生成するPythonツールです。このツールを使用することで、以下のようなメリットがあります。プロジェクトの構造、依存関係...

事前準備

  • PyPIのアカウントを作成しておく
  • プロジェクトのGitHubリポジトリを用意する

PyPIへの信頼できる公開の設定

PyPIへの信頼できる公開(Trusted Publishing)を設定するには:

  1. PyPIのアカウント設定ページで、新しいプロジェクトを登録
  2. 信頼できる公開者(トラステッドパブリッシャー)を設定
    • GitHubリポジトリのオーナー名、リポジトリ名、ワークフロー名を指定
    • GitHub環境名(例: pypi)を指定

ワークフロー定義ファイルの作成

GitHub Actionsのワークフローは、リポジトリの .github/workflows ディレクトリ内のYAMLファイルで定義します。

  1. リポジトリのルートディレクトリに.github/workflowsディレクトリを作成します。

  2. .github/workflowsディレクトリ内にpublish-to-pypi.ymlファイルを作成し、以下の内容を記述:

name: Publish Python Package

on:
  push:
    branches:
      - main
    tags:
      - '*'

jobs:
  publish:
    runs-on: ubuntu-latest
    environment: 
      name: pypi
      url: https://pypi.org/p/sourcesage
    permissions:
      id-token: write
    steps:
      - uses: actions/checkout@v3
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.x'
      - name: Install dependencies
        run: |
          python -m pip install --upgrade pip
          pip install build
      - name: Build package
        run: python -m build
      - name: Publish package
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          skip-existing: true

この設定では、以下の条件が満たされたときにワークフローが起動します:

  • プッシュイベントがmainブランチで発生する
  • プッシュされたコミットにタグが付けられている

ワークフローの説明

  1. on: ワークフローのトリガーを定義します。
    • pushイベントをトリガーとし、mainブランチとすべてのタグを対象とします。
  2. jobs: ワークフローのジョブを定義します。
    • publishジョブを定義し、Ubuntu環境で実行します。
    • environmentセクションで、使用するPyPI環境(pypi)とパッケージが公開されるPyPIプロジェクトのURLを指定します。
    • permissionsセクションで、信頼された公開(Trusted Publishing)に必要なid-tokenの書き込み権限を付与します。
    • stepsセクションで、以下のステップを定義します:
      1. リポジトリをチェックアウトします。
      2. Pythonの環境をセットアップします。
      3. 依存関係をインストールします。
      4. buildを使用してパッケージをビルドします。
      5. pypa/gh-action-pypi-publishアクションを使用してパッケージをPyPIに公開します。

自動化の実行

上記のワークフロー定義を含むコミットをプッシュし、mainブランチにタグを付与すると、GitHub Actions上でワークフローが実行されます。

ワークフローが正常に完了すると、PyPIにパッケージが公開されます。

まとめ

本記事では、GitHub Actions CI/CDを使ってPythonパッケージをPyPIに自動公開する方法を解説しました。

  • PyPIの信頼できる公開設定
  • ワークフロー定義ファイルの作成
    • 対象のブランチ・タグの指定方法
  • ジョブの定義とアクション活用

適切なワークフローを構築し、mainブランチでタグ付けされたコミットに対して自動的にパッケージの公開を行うことで、開発の効率化が図れます。

補足: パッケージのビルドとテスト

パッケージのビルドとテストは、以下のコマンドで行うことができます。

ビルド

python setup.py sdist bdist_wheel

テスト(TestPyPIへの公開)

twine upload --repository pypitest dist/*

本番(PyPIへの公開)

twine upload --repository pypi dist/*

ただし、本記事で解説したGitHub Actionsを用いた自動化により、これらの手動でのビルドや公開は不要になります。タグ付きのコミットをmainブランチにプッシュするだけで、自動的にビルド・テスト・公開が行われます。

コメント

タイトルとURLをコピーしました