いろいろ備忘録日記

主に .NET とか Java とか Python絡みのメモを公開しています。最近Go言語勉強中。

GitHub Super Linter 触ってみた

概要

先日、Github が Super Linter という機能についてブログ記事をアップしました。

github.blog

Github側で、各言語とかのLinterを用意してくれるので、それをGithub Actionsで簡単に設定できてコードベースにlintできちゃうよって感じです。

確かに便利そうなので、ちょっと触ってみました。

テスト用のリポジトリ作る

試す用のリポジトリを用意。

github.com

出来たてホヤホヤで、まだ何もなしです。

f:id:gsf_zero1:20200622022552p:plain

試すだけなので、全部ブラウザでやります。

とりあえずコードを初期アップ

lint してもらうコードが必要なので、以下を用意します。

  • go.mod
  • hello.go

コードは hello world 出力しているだけです。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello go")
}

ブラウザで Create New File のところ押して、ポチポチつくって以下な感じになりました。

f:id:gsf_zero1:20200622023223p:plain

これで下準備は完了です。

Super Linter 用の GitHub Action を追加

Super Linter は、Github Action で動くので、追加します。

Actions タブをクリックすると、まだ一つもGitHub Actions を登録していないので

f:id:gsf_zero1:20200622024136p:plain

という感じで表示されますが、 set up a workflow yourself ってリンクを押して次に進みます。

すると、main.yml という形でアクションを作るエディタが表示されますので、私の場合は以下のように調整しました。

こんな感じになりました。

f:id:gsf_zero1:20200622024650p:plain

んで、linter.yml をコミット。

これで、GitHub Super Linter が master 以外のブランチでPUSHされたら、動作してくれるはず。

試してみる

てことで、最初に作った hello world な コード を以下のように lint で引っかかるようにわざと調整します。

package main

import (
    "fmt"
)

func main() {
    fmt.Println("hello go")

    i := 10
    fmt.Printf("i = %s\n", i)
}

変数 i の型は int なのに、fmt.Printf で %s を指定しています。

このようなコードは、例えば go vet とかで以下のように出力されます。

Printf format %s has arg i of wrong type int

これが引っかかることを期待して、ブラウザ上からブランチ作ってプルリク出します。

プルリクを作ると、ちゃんとさっき設定して GitHub Action が動き出して

f:id:gsf_zero1:20200622025528p:plain

少しすると、無事 lint に引っかかりました。

f:id:gsf_zero1:20200622025638p:plain

Details というリンクをクリックして、詳細を見てみましょう。

f:id:gsf_zero1:20200622030011p:plain

f:id:gsf_zero1:20200622030026p:plain

ちゃんと出てますね。てことで直しましょう。

修正して再度 lint してもらう

%s%d に変更して、コミット。

そうすると、さっきのプルリクに対してまた lint が走ります。

f:id:gsf_zero1:20200622030352p:plain

f:id:gsf_zero1:20200622031007p:plain

今度はOKになりました。てことで、このプルリクをマージして完了という感じですね。


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com