GitHub Actionsが登場してしばらく経つもののまだ使ったことがなかったのと、あとは仕事でPython素人の人に教える機会がちょこちょこあって、コードのチェックも機械的にやりたかったので、ググりつつやってみました。

結果、多少落とし穴もあったのでメモ。

今回やること

PythonのコードをGitHubのリポジトリにPushした際に、Flake8を使ってコードをレビューし、グリーンやレッドで表示させる。

なお、実際やった結果は以下リポジトリに置いてあります。(READMEも作ってないですが)

YoshikiIto/python-github-action

手順

1.リポジトリにActionを追加

まずはリポジトリにActionを追加します。

GitHub Marketplace · Actions to improve your workflowにアクセスすると、Actionの検索ができます。ここで今回はflake8と検索します。

いくつかActionが表示されます。

小さくstar数も表示されているのですが、何らかの基準があっての順番だと思うので、おとなしく一番左上のものを選択。

github acitons

ここにActionの細かい使い方等々が書いてあるので参考にしつつ、右上のUse latest versionを選択。

github acitons

ダイアログが出てきて、コピーするスニペットが出てきます。

コレをコピーすればOK・・・かと思いきやそういうわけでもなかったので注意してください。コピーは自体は必要です。

github acitons

次にActionを設定したいリポジトリのActionsタブを開きます。

Actionが設定されていない場合は下のような画面が出てくるので、リンクになっているset up a workflow yourselfをクリック。

github acitons

workflowの内容はYAMLで設定します。CircleCIで言うところのconfig.yml相当ですね。

ここで先程ダイアログで出てきたスニペットを貼り付ければOK、というわけではなく、実際にはflake8のインストールなど、他のコマンドも自分で書く必要がありました。

github acitons

ymlの内容は以下です。Actionによって内容が異なるので、参考までに。

# This is a basic workflow to help you get started with Actions

name: Lint

on:
  push:
    paths:
      - '*.py'

jobs:
  flake8_py3:
    runs-on: ubuntu-latest
    steps:
      - name: Setup Python
        uses: actions/setup-python@v1
        with:
          python-version: 3.8.3
          architecture: x64
      - name: Checkout PyTorch
        uses: actions/checkout@master
      - name: Install flake8
        run: pip install flake8
      - name: Run flake8
        uses: suo/flake8-github-action@releases/v1
        with:
          checkName: 'flake8_py3'   # NOTE: this needs to be the same as the job name
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

ここまでできたら、あとは右上の Start commitを選択してコミットします。

yml自体は[リポジトリ名]/.github/workflows/hoge.ymlのようばパスで保存されます。

2.コードをコミットする

今回はまず、flake8のチェックの結果バツをつけたいので、わざと問題のあるコードをプッシュしてみます。

github acitons

手元の適当なコードを貼り付けただけなので、ここではコードの中身は無視してください。 11行目の中ほど、タプルの要素の間に半角スペースを消してあります。薄く赤線も引いてありますね。

これをプッシュすると、先程追加したActionが走ってチェックしてくれます。

赤いバツがついているのがわかると思います。

github acitons

コミットメッセージの部分をクリックすると詳細が表示されます。

今回はタプルの半角スペースが無いのと、あとは行が長すぎるというバツがついています。

github acitons

プルリクエストの画面でも同様で、“All checks have failed"と表示されています。

github acitons

Detailsのところをクリックすると、詳細が表示されます。

github acitons

このコードを修正して、再度プッシュしてみましょう。

  • タプル内の半角スペースを追加
  • 長過ぎる行を適度に折り返し

してプッシュします。

github acitons

今度は緑のチェックが付きました。

github acitons

プルリクエストの画面でもチェックが通っており、グリーンの状態でマージすることが出来るようになりました。

github acitons

雑感

CircleCI使ったことあったので、ymlの書き方が雰囲気でわかりました。始めてだとこの記法を掴むのに苦労しそうです。

今回はflake8によるチェックを追加しましたが、MarketplaceにはActionもたくさんあるので、開発を効率化するアイディアさえあれば色々とやれることがありそうです。