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数も表示されているのですが、何らかの基準があっての順番だと思うので、おとなしく一番左上のものを選択。
ここにActionの細かい使い方等々が書いてあるので参考にしつつ、右上のUse latest version
を選択。
ダイアログが出てきて、コピーするスニペットが出てきます。
コレをコピーすればOK・・・かと思いきやそういうわけでもなかったので注意してください。コピーは自体は必要です。
次にActionを設定したいリポジトリのActions
タブを開きます。
Actionが設定されていない場合は下のような画面が出てくるので、リンクになっているset up a workflow yourselfをクリック。
workflowの内容はYAMLで設定します。CircleCIで言うところのconfig.yml
相当ですね。
ここで先程ダイアログで出てきたスニペットを貼り付ければOK、というわけではなく、実際にはflake8のインストールなど、他のコマンドも自分で書く必要がありました。
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のチェックの結果バツをつけたいので、わざと問題のあるコードをプッシュしてみます。
手元の適当なコードを貼り付けただけなので、ここではコードの中身は無視してください。 11行目の中ほど、タプルの要素の間に半角スペースを消してあります。薄く赤線も引いてありますね。
これをプッシュすると、先程追加したActionが走ってチェックしてくれます。
赤いバツがついているのがわかると思います。
コミットメッセージの部分をクリックすると詳細が表示されます。
今回はタプルの半角スペースが無いのと、あとは行が長すぎるというバツがついています。
プルリクエストの画面でも同様で、“All checks have failed"と表示されています。
Detailsのところをクリックすると、詳細が表示されます。
このコードを修正して、再度プッシュしてみましょう。
- タプル内の半角スペースを追加
- 長過ぎる行を適度に折り返し
してプッシュします。
今度は緑のチェックが付きました。
プルリクエストの画面でもチェックが通っており、グリーンの状態でマージすることが出来るようになりました。
雑感
CircleCI使ったことあったので、ymlの書き方が雰囲気でわかりました。始めてだとこの記法を掴むのに苦労しそうです。
今回はflake8によるチェックを追加しましたが、MarketplaceにはActionもたくさんあるので、開発を効率化するアイディアさえあれば色々とやれることがありそうです。