調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

昔つくったpythonリポジトリにgithub actionを適用してみる。

やったこと


題名の通り。なんか楽しそうだからやってみた。

更新したrepositrory


https://github.com/yukiYamada/AutoCookieClicker
Autoクッキークリッカー君。そこそこ楽しめて作ってた記憶と、
確かテストあったよなーということでこの子に決めた。

とりあえず。


本当にテストがあるのか、動くのかわからんのでCloneしてきた。
f:id:couraeg:20191205230902p:plain
それっぽいのがある。 Test_Sample.py 動かしてみる。

f:id:couraeg:20191205230940p:plain
なんかわからんけど「OK」ってなったから動くんでしょう。やったぜ。

requirementsをつくる。


python触り始めて初期のころにつくったような。そんな感じのツールだから
requirementsも何もなくて、このままpipでいinstallしまくった者共が入ってなくて、別環境じゃ使い物にならない。
requirementsについてはここを見てほしい。
https://note.nkmk.me/python-pip-install-requirements/

ということで

pip freeze > requirements.txt

という魔法のコードをうつことで、現行の環境は書き出せる。
しかしこれ、余計なのも絶対はかれるよなぁ。気にしない。
f:id:couraeg:20191205231356p:plain
できた。pushして下準備おわり。

なぞAlert


さっそくgithubでActionつくるかーとおもって開いたら
f:id:couraeg:20191205231850p:plain
なんか警告出とる・・・解決しないと怖いなぁ。viewをぽちっとおしてみてみる。
f:id:couraeg:20191205231943p:plain
うーん。importしてるパッケージで2つほど脆弱な奴がいるらしい。さらに中身を見てみる。

typed-astの方は、やりようによっては関係ないメモリにアクセスできるてきな?
かなぁ。わからん。Webサービスでもないし無視でよさそう。

pillowの方は画像次第では異様にメモリ食う時があるよ。ということ。
まーこっちも。問題ないかな。無視。

ということで両警告は無視してすすむ。upgradeかけたら解決しそうだけど。 ※1

気を取り直してAction


f:id:couraeg:20191205231850p:plain
上の方のActionsボタンをクリックする。

f:id:couraeg:20191205232443p:plain
pythonだからこの3つの中のどれかなんだけど。
publishでもないし、なんだったらパッケージでもないので一番左を選ぶ
ただのウィザードだから、後で変更すればいいんだろうけど。とりあえず近い環境を選んだほうがいいだろう。

ポチっと押すと以下が自動で展開される。

name: Python application

on: [push]

jobs:
  build:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1
    - name: Set up Python 3.7
      uses: actions/setup-python@v1
      with:
        python-version: 3.7
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
    - name: Lint with flake8
      run: |
        pip install flake8
        # stop the build if there are Python syntax errors or undefined names
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Test with pytest
      run: |
        pip install pytest
        pytest

ひゅー全然わかんねー。 とりあえずこのまま適当にポチポチして実行してみる。
もう一回Actionsをおすと
f:id:couraeg:20191205232751p:plain
こんな感じになる。×がなんこもついているのはこの記事を書くのに試行錯誤した結果。
一番うえの黄色いやつが今回つくったworkflowに相当している。実行中だから黄色。終わるとマークが変わる。

クリックすると詳細が表示できる。
f:id:couraeg:20191205232946p:plain
requirements.txtがないってさ。あるんだけど。ディレクトリがわからない。場所が悪いのかな。
rootに移動して、Push。
f:id:couraeg:20191205233940p:plain
ステータスが増えとる!!!
yamlの先頭の方の「on: [push]」がトリガを示しているようで、
見たまんまpushがトリガになっているのね。すごい。

actionの調整


さっきでていたエラーのところは解消された。rootにおいとけばいいらしい。
が、別のところでまたエラーになっている。
f:id:couraeg:20191205234134p:plain

見る限りのここが問題のブロック。

    - name: Test with pytest
      run: |
        pip install pytest
        pytest

pytestって書いてるけど。そもそもpytestつかってないぞ。このリポジトリ
さっきのrequireでわかったけど、どうやらカレントはそのままgitのrootにいる模様。
こうしてやった。

    - name: Test with pytest
      run: |
        python src/Test_Sample.py

それ。pushだ!

無事成功


f:id:couraeg:20191205234750p:plain
お!来たんじゃないか?詳細を見てみよう。
f:id:couraeg:20191205234852p:plain
はーすーぱーグッド。画像じゃ見にくいかもしれないけど、
require適当に作りすぎて44secもかかっている。実際のテスト自体は2sなので、全然いいでっしょう。

ということで。


git hub action最高でござった。
push以外のトリガーもあるが、とりあえずコード書いたらpushしとけば勝手にテストして
レスポンス帰ってくるのが最高にクール。ぜひ職場に持ち込みたいガガガ。
そんなレベル。まともなCIツール初めて使ったけど、みんなこんないい感じのツールつかってたのか。いいなぁ。これ。
いいなぁ・・・職場に・・・いいなぁ・・・

※1 なんかgithubさんが勝手に自動でよきバージョンに書き換えるプルリクくれた。特に変なとこもなかったからそのまま採用。素晴らしい。