github/super-linter を使い始めた

github.com/github/super-linter

2020-06-18にgithub tech blogで紹介されていた Introducing GitHub Super Linter: one linter to rule them all - The GitHub Blog を使い始めた。

super-linterはgithub actionを用いて使用することを主眼においたlintコマンドだ。 実体はbash scriptで、それぞれの言語コミュニティがサポートするlinterを実行してくれる(Goに対してgolangci-lintとか)

所見

これのいいところはlintツールを選定しなくてもいい点とdockerimageとして運用を想定されているからCIで使いやすい点、それにより余計な喧嘩をしなくて済む点だ。 開発言語自体のlintはみんな割と真面目に設定するのだけどそれ以外の些末なスクリプトに関しては用意しない。 super-linterはそんな些細な点を救ってくれる。

またk8sの流行によりyamlが登場する機会がさらに増えたと思うが、yamlのフォーマットは各々統一されていないため結構ストレスになる。 super-linterで雑に決め打ってしまえるのは結構利点だと思う。

とりあえず自分はGo言語で実装されたプロダクトデザインのマイクロサービスに対して使ってみた。 自分が管理しているマイクロサービスはCI用のshell scriptやdockerfile, yaml fileあたりが雑に書かれている。 このへんにshellcheck, dockerfilelint, yamllintが勝手にあたってくれるのが便利である。 わざわざそれら用のCIツールを用意するのは時間の無駄で結構メンテナンスがめんどくさい。 このへんのメンテナンスコストをdocker imageにすることで下げてくれる。 super-linterはdefaultですべてのlintツールの実行がonになっている。もし実行が遅くなったら不要なオプションを無効にするといい。

設定はREADMEのgithub actionの設定をそのままもってくればよいんだけど もしかしたらちょっと設定をいじる必要があるかもしれない。workaroundは書いておく 社内で半分放置されてるプロジェクトに適当に使って遊んで見るといい

workaround

--------------------------------------------
Gathering user validation information...
- Only validating [new], or [edited] files in code base...
Failed to switch to master branch to get files changed!
ERROR:[fatal: 'master' could be both a local file and a tracking branch.
Please use -- (and optionally --no-guess) to disambiguate]

僕が導入したときはgitのエラーがでた。これはdefault branchにしていているmasterがorigin/masterとlocalにあるmasterのどちらかはっきりしないと怒られているのでorigin/masterを明示しておけば良いと思う。 大したあれじゃないのでv2.2.1 or laterでより適切に直ると思う。

      - name: Lint Code Base
        uses: docker://github/super-linter:v2.2.0
        env:
          VALIDATE_ALL_CODEBASE: false
          VALIDATE_ANSIBLE: false
          DEFAULT_BRANCH: origin/master