はじめに
七尾百合子さん、お誕生日 181日目 おめでとうございます! nikkieです。
初見の GitHub Actions 2つを素振りします。
目次
- はじめに
- 目次
- Rust プログラムから作ったバイナリを PyPI で公開するには複数ジョブでのビルドが必要
- 結論:sdist と Ubuntu 向けバイナリをリリース するAction
- 「ワークフロー成果物を使ったデータの格納と共有」
- 終わりに
Rust プログラムから作ったバイナリを PyPI で公開するには複数ジョブでのビルドが必要
現在直面しています
突破口を知りたく、Rust を使った Python パッケージの GitHub Actions を覗きます
- fauxgen:https://github.com/hiro-o918/fauxgen/blob/v0.3.1/.github/workflows/release-main.yaml#L56-L160
- Ruff:https://github.com/astral-sh/ruff/blob/0.13.0/.github/workflows/release.yml
upload-artifact と download-artifact という2つの GitHub Actions を使っていました。
この2つの Action は初見なので、まずはこれらを使って sampleproject-rs のパッケージ公開 Action を書き直してみます。
※Ubuntu 以外のビルド環境のサポートは今回の記事では扱いません
結論:sdist と Ubuntu 向けバイナリをリリース するAction
3つのジョブからなります
build-sdist:maturin sdistでsdistをビルドし、成果物(tar.gz)をアップロードbuild-linux: Ubuntu 環境でバイナリをmaturin buildし、成果物(wheel)をアップロードpublish:2つのジョブの成果物をダウンロードし、PyPI にアップロード
「ワークフロー成果物を使ったデータの格納と共有」
Rust プログラムから作ったバイナリを Python パッケージにする場合、1つのジョブ(=ビルド環境)では不十分です。
ジョブそれぞれの成果物を、ワークフロー内のジョブ間で共有する必要があります。
それを upload-artifact と download-artifact で実現します。
ジョブの path にある成果物を name でアップロード。
pypi-fies-というプレフィックスを付けています。
今回は pattern に該当する成果物を path にダウンロード。
プレフィックスを活用します。
merge-multiple: true により、path のディレクトリに sdist も wheel も配置できています 。
If true, the downloaded artifacts will be in the same directory specified by path.
こうして PyPI にアップロードしたパッケージは、引き続き GitHub Codespaces (Ubuntu 環境)で実行できています
執筆していて download-artifact の v5 を試す余地に気づきました。
→バージョンを上げても動き続けました
終わりに
Rust プログラムから作ったバイナリを PyPI で公開するには、環境ごとのビルドが必要です。
それに使う GitHub Actions の upload-artifact と download-artifact について理解を深めました。
Python 製パッケージ開発では知ることのなかった Action でした。
次はいよいよ、環境ごとのビルドです