0
0

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

Posted at

はじめに

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

こちらの記事もおすすめ

事前準備

  • 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ブランチにプッシュするだけで、自動的にビルド・テスト・公開が行われます。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0