1
0

More than 1 year has passed since last update.

Mypyの結果をGitHubでコメントしてくれるActionを作った

Posted at

Mypyの結果をGitHubでコメントしてくれるGitHub Action(s)を作ったので、その使用方法と、GitHub Actionを作る過程などのメモです。
https://github.com/marketplace/actions/mypy-action

※もともとflake8を同様の形式で実行するものがあったので、それを参考に作成しています。
https://github.com/marketplace/actions/flake8-action

実行結果イメージ:
スクリーンショット 2021-09-19 21.13.45.png

使用方法

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を実行し、エラーがあった場合にはコメントしてくれます。
併用した場合のコメントイメージは以下のようになります。
スクリーンショット 2021-09-19 21.08.12.png

作成の過程

モチベーション

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の結果はもともと行数とか出ているので、調べようと思えば簡単に調べられるものではありますが...)

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0