GitHub Actionsでlinterとformatterが自動で実行されるようにするため、学習を兼ねて、GitHubリポジトリの環境を以下手順で改修していく。
1. パッケージ管理をPipenvからPoetryに切り替える
2. linterとformatterを導入する
3. GitHub Actionsでlinterとformatterを実行する(この記事)
前提:
- Mac OS 10.15
- Python 3.7
- 対象とするリポジトリは yrarchi / household_accounts
3. GitHub Actionsでlinterとformatterを走らせる
pushされたことをトリガーにして、BlackとFlake8によるチェックを自動で実行するワークフローを作成する。
① GitHub Actions の基本的な書き方を確認する
.github/workflows/以下にYAMLファイルを作成することで、ワークフローを作成することができる。GitHub Docs: GitHub Actions / Learn GitHub Actions / Understanding GitHub Actionsを参照すると、YAMLファイルの基本的な型は以下のようになる。
name: learn-github-actions # ワークフロー名
on: [push] # イベント: ワークフローを実行するトリガー
jobs:
check-bats-version: # ジョブ: 同じランナーで実行されるステップのセット
runs-on: ubuntu-latest # ランナー: ワークフローを実行するサーバ (Linux, Mac, Windows)
steps: # ステップ: 同じランナーで実行されるタスク
- uses: actions/checkout@v3 # uses: アクション(繰り返されるタスク)の実行
- uses: actions/setup-node@v3
with:
node-version: '14'
- run: npm install -g bats # run: コマンドの実行
② YAMLファイルの作成
① で確認した書き方に沿って、今回の目的に合わせて書き換えてみる。
name: CI
on:
push:
jobs:
lint_and_format:
runs-on: macos-10.15
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v3
with:
python-version: '3.7.8'
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python -
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install Dependencies
run: poetry install --no-interaction
- name: Lint with flake8
run: poetry run flake8 .
- name: Format with black
run: poetry run black --check .
以下、部分ごとに分割して設定内容を記載する。
・イベント: ワークフローを実行するトリガー
on:
push:
GitHub Docs: GitHub Actions / Using workflows / Events that trigger workflows の通りに設定した。
For example, you can run a workflow when the push event occurs. on: push
・ランナー: ワークフローを実行するサーバ
runs-on: macos-10.15
GitHub Docs: GitHub Actions / Using jobs / Choosing the runner for a job に使用可能なランナーの種類として、Windows / Ubuntu / MacOS が記載されている。今回GitHub Actionsを設定するリポジトリは、Mac環境上で動くデスクトップアプリのためMacを選択した。
・ステップ: 同じランナーで実行されるタスク
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v3
with:
python-version: '3.7.8'
↑ リポジトリをcheckoutし、Python環境を作成している。
・actions/checkout@v3
・actions/setup-python@v3
- name: Install Poetry
run: |
curl -sSL https://install.python-poetry.org | python -
echo "$HOME/.local/bin" >> $GITHUB_PATH
- name: Install Dependencies
run: poetry install --no-interaction
↑ Poetryをインストールした上で、必要なライブラリのインストールを行っている。
echo "$HOME/.local/bin" >> $GITHUB_PATH
は、Poetryのインストールされた /Users/runner/.local/bin
を$GITHUB_PATH
に設定している。poetry install を行うステップと分けるのは、GitHub Docs: GitHub Actions / Using workflows / Workflow commands に記載の以下の理由のため必要と理解した。
Prepends a directory to the system PATH variable and automatically makes it available to all subsequent actions in the current job; the currently running action cannot access the updated path variable.
- name: Lint with flake8
run: poetry run flake8 .
- name: Format with black
run: poetry run black --check .
↑ Flake8 と Black を実行している。
③ pushしてワークフローが実行されるか試してみる
git push するとワークフローが実行された。ActionsタブでGitHub Actions の実行結果を確認することができる。
各ステップの名称をクリックすると、その詳細を確認することができる。例えば Format with black をクリックすると、poetry run black –check . を実行した結果を確認できる。
Run poetry run black --check .
Skipping .ipynb files as Jupyter dependencies are not installed.
You can fix this by running ``pip install black[jupyter]``
All done! ✨ 🍰 ✨
13 files would be left unchanged.
以上で、当初の目的であったGitHub Actionsでlinterとformatterを実行する設定をすることができた。