nikkie-ftnextの日記

イベントレポートや読書メモを発信

pypa/gh-action-pypi-publish がとっても便利! リリースを作るだけでPyPIにライブラリを公開できます

はじめに

ミリアニ一幕上映中! nikkieです。

オススメのGitHub Actionを共有です。
すごいんだよ、pypa/gh-action-pypi-publish!
このActionを知って以来、PyPIへのライブラリ公開の大変さが劇的に軽減されました(わっほーい!🙌)

目次

PyPIに自作ライブラリを公開するには

現在は手順が非常に簡単になっています!

  1. buildでライブラリをビルド
  2. twineで1の成果物をPyPIにアップロード(=PyPIで公開)

以下でも取り上げました

こちらをGitHub Actionsで実施するにはどうするか、この記事で扱っていきます。

pypa/gh-action-pypi-publish

上記の2つの手順のうち、2のtwineの部分を担当するGitHub Actionです。
こちらを使う(use)場合、私たちは独力で手順1(build)だけ実施すればいいわけです。

非常に便利なのですが、シークレットの設定のひと手間が必要です1

知ったきっかけ

Python のビルドとテスト」とドキュメントの「パッケージレジストリへの公開」で知りました。

上記の手順をGitHub Actionに落とし込んでいます。

  1. python -m buildでパッケージをビルド
  2. pypa/gh-action-pypi-publish@release/v1(twineをラップ)を使ってPyPIにアップロード

私はこちらをそのまま採用しています。

(※Cookiecutterのテンプレートなのでrawブロックを使っているという点にご注意ください2

リリースを作るだけでPyPIに新バージョンを公開できるので捗ります!

「パッケージレジストリへの公開」のYAMLで、推しポイントがこちら

on:
  release:
    types: [published]

リリースを公開するのがこのActionのトリガーです

リリースの公開はこちら(「リリースの作成」)をどうぞ

  • リリースを作る前にローカルリポジトリでタグを打って、リモートリポジトリにもpushしています
  • そのタグを選んでリリースを作っていきます
    • リリースノートが自動生成できるので便利(使い倒していきたい!)
  • リリースの公開をクリックすると、上記のActionのトリガーを満たします!

設定する中では、うまくいかなかったらリリースを消して、再度作って繰り返し試行錯誤しました。

ちょっとしたお悩み:Actionのシークレットは2回設定しています

こちらの部分

      - name: Publish package
        uses: pypa/gh-action-pypi-publish@release/v1
        with:
          password: ${{ secrets.PYPI_API_TOKEN }}

PYPI_API_TOKENというシークレットの設定値を参照しています。
このトークンはPyPIで操作して入手できます。
APIトークンを使ってPyPIで認証するにはどうすればよいですか?

アカウント設定でAPIトークンの選択に進み「APIトークンの追加(Add API token)」を選択する

APIトークンを追加するときにちょっとやりにくさがあります

  • これから初めてPyPIに公開する場合、PyPIにプロジェクトがないのでスコープをやむなく「アカウント全体(全プロジェクト)」にしています
  • PyPIへの初回公開が成功した場合、スコープをプロジェクトに絞ったトークンを再度作り、シークレットの設定値を更新します
    • アカウント全体スコープの先のトークンは権限が広すぎるので、初回アップロードのあとは毎回破棄しています

合計で2回設定するわけでそこがちょっとだけやりにくいのですが、逆に言えばここ以外はリリースを作るだけで自動でPyPIに新バージョンがリリースされるのでとてもよいです。

終わりに

pypa/gh-action-pypi-publish を利用するGitHub Actionで開発が捗るという共有でした。
パッケージをbuildした後にこのアクションを呼び出すと簡単にPyPIに公開できます!(※シークレットの設定は必要)
自作するGitHub Actionのトリガーをリリース作成時とすることで、開発者はリリースを作るだけであとは自動でPyPIが更新されます🙌

これによりちょっとずつ作って3リリース(小さなリリース4)が非常にやりやすくなりました!!


  1. リポジトリに暗号化されたシークレットを作成する」
  2. 再利用・リリース等価の原則(参考)があるので、曳光弾の考え方(参考)で縦スライスでちょっとずつ作っています
  3. XPのプラクティスの1つです。こちらをどうぞ