🎶

【GitHub Actions】Poetry プロジェクトから requirements.txt を生成して自動コミットする

2021/10/30に公開

背景

Heroku 公式の Python Buidpack は Poetry 対応していません(2021/10 現在)。

現状 Poetry プロジェクトを Heroku にデプロイする際は、以下 2 つの方法があると思います。

今回は後者を楽に行う方法を紹介します。

補足

Heroku 公式は Poetry 対応する流れで進んでいるため、そのうち対応されると思います。

参照:Support for Poetry #796

やったこと

pyproject.toml に変更を加えてコミットをした場合に、GitHub Actions を使用して自動で requirements.txt を更新してコミットさせます。

requirements.txt を生成する機能は Poetry が用意してくれているため、poetry コマンドを実行する ActionGitHub に自動コミットする 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