はじめに
ミリアニ一幕上映中! nikkieです。
オススメのGitHub Actionを共有です。
すごいんだよ、pypa/gh-action-pypi-publish!
このActionを知って以来、PyPIへのライブラリ公開の大変さが劇的に軽減されました(わっほーい!🙌)
目次
- はじめに
- 目次
- PyPIに自作ライブラリを公開するには
- pypa/gh-action-pypi-publish
- リリースを作るだけでPyPIに新バージョンを公開できるので捗ります!
- ちょっとしたお悩み:Actionのシークレットは2回設定しています
- 終わりに
PyPIに自作ライブラリを公開するには
現在は手順が非常に簡単になっています!
以下でも取り上げました
こちらをGitHub Actionsで実施するにはどうするか、この記事で扱っていきます。
pypa/gh-action-pypi-publish
上記の2つの手順のうち、2のtwineの部分を担当するGitHub Actionです。
こちらを使う(use)場合、私たちは独力で手順1(build)だけ実施すればいいわけです。
非常に便利なのですが、シークレットの設定のひと手間が必要です1。
知ったきっかけ
「Python のビルドとテスト」とドキュメントの「パッケージレジストリへの公開」で知りました。
上記の手順をGitHub Actionに落とし込んでいます。
python -m build
でパッケージをビルド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で認証するにはどうすればよいですか?
- これから初めてPyPIに公開する場合、PyPIにプロジェクトがないのでスコープをやむなく「アカウント全体(全プロジェクト)」にしています
- PyPIへの初回公開が成功した場合、スコープをプロジェクトに絞ったトークンを再度作り、シークレットの設定値を更新します
- アカウント全体スコープの先のトークンは権限が広すぎるので、初回アップロードのあとは毎回破棄しています
合計で2回設定するわけでそこがちょっとだけやりにくいのですが、逆に言えばここ以外はリリースを作るだけで自動でPyPIに新バージョンがリリースされるのでとてもよいです。
終わりに
pypa/gh-action-pypi-publish を利用するGitHub Actionで開発が捗るという共有でした。
パッケージをbuildした後にこのアクションを呼び出すと簡単にPyPIに公開できます!(※シークレットの設定は必要)
自作するGitHub Actionのトリガーをリリース作成時とすることで、開発者はリリースを作るだけであとは自動でPyPIが更新されます🙌