Mypyの結果をGitHubでコメントしてくれるGitHub Action(s)を作ったので、その使用方法と、GitHub Actionを作る過程などのメモです。
https://github.com/marketplace/actions/mypy-action
※もともとflake8を同様の形式で実行するものがあったので、それを参考に作成しています。
https://github.com/marketplace/actions/flake8-action
使用方法
flake8と併用する場合、以下のようなymlを作成して適当な場所に配置します。
例えば.github/workflows/lint.yml
に配置します。
name: Lint
on:
push:
paths:
- '*.py'
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Setup Python
uses: actions/setup-python@v1
with:
python-version: 3.8
architecture: x64
- name: Checkout
uses: actions/checkout@v1
- name: Install flake8
run: pip install flake8
- name: Install mypy
run: pip install mypy
- name: Run flake8
uses: suo/flake8-github-action@releases/v1
with:
checkName: 'lint' # NOTE: this needs to be the same as the job name
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: ${{ always() }}
- name: Run mypy
uses: sasanquaneuf/mypy-github-action@releases/v1
with:
checkName: 'lint' # NOTE: this needs to be the same as the job name
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: ${{ always() }}
この設定の場合、*.pyに変更があった場合に限りflake8とmypyを実行し、エラーがあった場合にはコメントしてくれます。
併用した場合のコメントイメージは以下のようになります。
作成の過程
モチベーション
flake8/mypyを実行するGitHub Actionを探してみたところ、flake8ではコメントをつけてくれるそれっぽいものがあったので、mypyでも同じものを作ることにしました。
リポジトリの作成
参考にしたのは
https://github.com/suo/flake8-github-action#readme
ですが、GitHubの画面左上に「generated from actions/typescript-action」と書いてあったので、このテンプレートを元にリポジトリを作成しました。
dependabotのPRのマージ
テンプレートから作ったリポジトリですが、いきなりdependabotからPRが来ていたので、テストが壊れていなさそうなものについては試しにマージしてみます。(こんな軽い気持ちでマージしてよいのかという問題もあるのですが、今回はまだ誰も使い始めていないので、初回という事で試しにマージしてみました。)
※「Bump eslint-plugin-github from 4.1.1 to 4.3.0」のi18nのエラーについては、一旦ignoreする設定を組み込んだものの、マージを忘れていたので一旦そのままにしています。
実装
リポジトリをcloneするとmain.tsがあるので、flake8-github-actionの内容を参考にmain.tsの内容を書き換えます。
不要なコードの削除
サンプルの不要なwait.tsとそのテストを削除します。
README.mdとaction.ymlの書き換え
README.mdとaction.ymlの内容を適当な内容に書き換えます。
GitHubの画面からリリース(タグ)を作成
上記の内容を反映してGitHubにpushすると、GitHubのリポジトリの画面上にマーケットプレイスにリリースするかというリンクが表示されているので、そこからリリースを作成する画面に移動し、リリースを作成します。
他のリポジトリで参照して実行できることの確認
他のリポジトリで、flake8-github-actionと同様にmypy-github-actionを参照して動作することを確認します。
感想
GitHub Action(s)はだいぶ簡単に作れるんだなと思いました。
上記の手順についても、実際には「pushした後にリリースの画面でのメッセージによってaction.ymlの設定に気付く」というような事もあり、親切な画面になっているんだなと感じました。
個人的には、よく使っているCircle CIに対する不満は特にないのですが、GitHub上のコメントとしてflake8/mypyの結果を簡単に出せるのは、人によっては便利かなと思いました(flake8/mypyの結果はもともと行数とか出ているので、調べようと思えば簡単に調べられるものではありますが...)