🎶
【GitHub Actions】Poetry プロジェクトから requirements.txt を生成して自動コミットする
背景
Heroku 公式の Python Buidpack は Poetry 対応していません(2021/10 現在)。
現状 Poetry プロジェクトを Heroku にデプロイする際は、以下 2 つの方法があると思います。
- 非公式の Poetry 対応の Buildpack を使用する
-
requirements.txt
を用意する
今回は後者を楽に行う方法を紹介します。
補足
Heroku 公式は Poetry 対応する流れで進んでいるため、そのうち対応されると思います。
やったこと
pyproject.toml
に変更を加えてコミットをした場合に、GitHub Actions を使用して自動で requirements.txt
を更新してコミットさせます。
requirements.txt
を生成する機能は Poetry が用意してくれているため、poetry
コマンドを実行する Action と GitHub に自動コミットする Action を組み合わせて workflow を作りました。
実行例はこちらのリポジトリで確認できます。
name: generate requirements.txt
on: push
jobs:
ci:
strategy:
fail-fast: false
matrix:
python-version: [3.9]
poetry-version: [1.0]
os: [ubuntu-18.04]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
- name: Run image
uses: abatilo/actions-poetry@v2.0.0
with:
poetry-version: ${{ matrix.poetry-version }}
- name: Export requirements.txt
run: poetry export -f requirements.txt --output requirements.txt
- name: Update requirements.txt
uses: stefanzweifel/git-auto-commit-action@v4.12.0
with:
commit_message: update requirements.txt
commit_user_name: GitHub Actions
commit_user_email: actions@github.com
actions-poetry では Python のバージョン指定であったり、git-auto-commit-action ではコミットするユーザーやコミットメッセージのカスタマイズなど、いろいろなオプションを設定できます。
詳細はそれぞれの Action のドキュメントを参照していただければと思います。
おわりに
なんとなくの感覚ですがまだまだ Poetry よりも requirements.txt
を使用している人の方が多いと思います。
Heroku ベースで話を進めましたが、自分の作った Poetry プロジェクトを他の方にも使ってもらうために、上記使用してrequirements.txt
を用意してあげるという使い方もあるのではないでしょうか。
Discussion