概要
GitHub Actionsでuvを使用する方法についてのメモです。uvコマンドをGitHub Actionsで実行するための基本的なyamlファイルを考察しました。
YAMLファイル
このYAMLファイルは、mainブランチにプルリクエストが出された際にpytestを実行するためのものです。
作成にあたっては、uvの公式ガイドを参考にしています。
name: PythonTest
on:
pull_request:
branches:
- main # ここでPRをトリガーするブランチを指定
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v3
with:
enable-cache: true
# - name: Set up Python
# uses: actions/setup-python@v5
# with:
# python-version-file: '.python-version' # 使用するPythonのバージョンを指定
# - name: Install dependencies
# run: uv sync --all-extras --dev
- name: Run tests
run: uv run task test
以下は、ステップの概要です。
- リポジトリのクローン
- uvのインストール
- Pythonのインストール(現在はコメントアウト)
- uv環境への依存関係のインストール(現在はコメントアウト)
- pytestの実行(uv run task testを使用してtaskipy経由で実行)
taskipyの設定は、pyproject.tomlに以下のように記述されています。
[tool.taskipy.tasks]
test = "pytest"
QA
Pythonのインストールとuv syncは必要?
現時点では不要のようです。コメントアウトしてもGitHub Actionsで問題なく実行できました。uvの公式ガイドにはPythonのインストールとuv syncが記載されていたため、最初は一応記述しましたが、ローカル環境ではuv runを実行するだけで、pyproject.tomlからPythonのバージョンや依存関係を自動的に読み取ってくれるので、いらないのではと思いました。試しにコメントアウトしたところ正常に動作しました。ただし、キャッシュの影響も考えられるため、もう少し様子を見たいです。
Taskipyのタスクも設定できますか?
可能なようです。Run testsステップでuv run task test
が正常に実行されています。もちろん、uv run pytest
のように直接コマンドを書いても問題ありません。テスト以外にもuvx ruff check .
なども実行可能です。uv publish
が実行できるかは試していませんが、試したいです。PyPIにこのコマンドで公開できると便利そうです。
taskipyを使用するかどうかについては、使用することでworkflowのYAMLファイルとpyproject.tomlでコマンドを二重管理せずに済むため、利点があると考えています。ただし、YAML内でコマンド情報が完結しないため、それを嫌うケースも考えられます。
結論
github actionsでのuv利用について、uvのインストールが完了すれば、ローカル環境と同じ感覚でuvコマンドを記述できるため、非常に快適そうでした。