Skip to content

Instantly share code, notes, and snippets.

@utamori
Last active July 12, 2022 00:46
Show Gist options
  • Save utamori/3355d3a2286ebb795ae09cb406db718b to your computer and use it in GitHub Desktop.
Save utamori/3355d3a2286ebb795ae09cb406db718b to your computer and use it in GitHub Desktop.

Super-Linter

Super-Linter(bashで書かれた様々なリンターを、シンプルに組み合わせたもの)を実行するGitHubアクションで、ソースコードの検証に役立ちます。

このツールの目的は

  • 壊れたコードがマスターブランチにアップロードされるのを防ぐ
  • 複数の言語にまたがるコーディングのベストプラクティスの確立を支援
  • コードのレイアウトとフォーマットのガイドラインを構築する
  • プロセスを自動化してコードレビューを合理化する

どのように機能するか

Super-Linterは問題を発見し、コンソール出力に報告します。
修正はコンソール出力で提案されますが、自動的に修正されるわけではなく、プルリクエストではステータスチェックが失敗したと表示されます。

サポートされているリンタ

GitHub上の開発者はGitHubアクションを呼び出すことで、以下のようなリンターでコードベースをリントできます。

言語 リンター
Ansible ansible-lint
CoffeeScript coffeelint
Dockerfile dockerfilelint
Golang golangci-lint
JavaScript eslint standard js
JSON jsonlint
Markdown markdownlint
Perl perl
Python3 pylint
Ruby Rubocop
Shell Shellcheck
Terraform tflint
TypeScript eslint standard js
XML LibXML
YAML YamlLint

使い方

このGitHubアクションを使用するには、以下の作業を行う必要があります。

  • GitHubアクション:Super-Linterを現在のGitHubアクションのワークフローに追加してください。
  • より安定した、よりクリーンなコードベースをお楽しみください。
  • カスタマイズオプションについてはWikiをチェックしてください。

GitHub アクションワークフローの接続例

リポジトリ内に .github/workflows フォルダを作成し、以下のような GitHub アクションを作成してください。

  • .github/workflows/linter.yml
---
###########################
###########################
## Linter GitHub Actions ##
###########################
###########################
name: Lint Code Base

#
# Documentation:
# https://help.github.com/en/articles/workflow-syntax-for-github-actions
#

#############################
# すべてのpushでジョブを開始#
#############################
on:
  push:
    branches-ignore:
      - 'master'

################
# ジョブの設定 #
################
jobs:
  build:
    # ジョブの名前
    name: Lint Code Base
    # 実行するOS
    runs-on: ubuntu-latest

    ###############################
    # すべてのステップを読み込む  #
    ###############################
    steps:
      ###################################
      # コードベースをチェックアウトする#
      ###################################
      - name: Checkout Code
        uses: actions/checkout@v2

      ###########################################
      # リンターをコードベースに対して実行する  #
      ###########################################
      - name: Lint Code Base
        uses: github/super-linter@v2.0.0
        env:
          VALIDATE_ALL_CODEBASE: false
          VALIDATE_ANSIBLE: false
...

環境変数

Super-Linterでは、以下の ENV 変数を渡すことで、さまざまな機能をトリガーできます。

注意: すべての VALIDATE_[LANGUAGE] 変数は特定の方法で動作します。 いずれも渡されなかった場合、すべての変数はデフォルトでtrueになります。 しかし、いずれかの変数が設定されている場合、設定されていない変数はすべてfalseのままになります。 これは、Super-Linterを「なにも設定せずに」実行した場合、すべての言語がチェックされることを意味します。 しかし、特定のリンタを選択したい場合は、どのリンタを実行するかを完全に制御できます。予想外のことを実行しません。

環境変数 デフォルト値 説明
VALIDATE_ALL_CODEBASE true リポジトリ全体を解析し、すべてのタイプの検証対象ファイルを見つけます。注:falseに設定すると、新規ファイルまたは編集ファイルのみが検証のために解析されます。
VALIDATE_YAML true 言語のリント処理を有効または無効にするフラグ
VALIDATE_JSON true 言語のリント処理を有効または無効にするフラグ
VALIDATE_XML true 言語のリント処理を有効または無効にするフラグ
VALIDATE_MD true 言語のリント処理を有効または無効にするフラグ
VALIDATE_BASH true 言語のリント処理を有効または無効にするフラグ
VALIDATE_PERL true 言語のリント処理を有効または無効にするフラグ
VALIDATE_PYTHON true 言語のリント処理を有効または無効にするフラグ
VALIDATE_RUBY true 言語のリント処理を有効または無効にするフラグ
VALIDATE_COFFEE true 言語のリント処理を有効または無効にするフラグ
VALIDATE_ANSIBLE true 言語のリント処理を有効または無効にするフラグ
VALIDATE_JAVASCRIPT_ES true 言語のリント処理を有効または無効にするフラグ (Utilizing: eslint)
VALIDATE_JAVASCRIPT_STANDARD true 言語のリント処理を有効または無効にするフラグ (Utilizing: standard)
VALIDATE_TYPESCRIPT_ES true 言語のリント処理を有効または無効にするフラグ (Utilizing: eslint)
VALIDATE_TYPESCRIPT_STANDARD true 言語のリント処理を有効または無効にするフラグ (Utilizing: standard)
VALIDATE_DOCKER true 言語のリント処理を有効または無効にするフラグ
VALIDATE_GO true 言語のリント処理を有効または無効にするフラグ
VALIDATE_TERRAFORM true 言語のリント処理を有効または無効にするフラグ
ANSIBLE_DIRECTORY /ansible Ansibleファイルの場所のルートディレクトリを設定するフラグ
ACTIONS_RUNNER_DEBUG false リンター、バージョン、追加出力に関する追加情報を有効にするためのフラグ

テンプレートルールファイル

Super-Linterは、独自のルールセットの有無にかかわらず使用できます。これにより、個々のコードベースに対してより柔軟に対応できます。テンプレートのルールはすべて、基本的なレベルで有効にすべきだと考えている基準に従おうとしています。

  • 複数または全てのテンプレートルールファイルを TEMPLATES/ からリポジトリの .github/linters/ にコピーします
    • リポジトリにルールファイルがない場合は、このリポジトリのTEMPLATEフォルダのデフォルトにフォールバックします

ルールの無効化

特定のルール機能を無効にする必要がある場合は、ルールの無効化を見ることができます。

Docker Hub

このリポジトリからビルドした Docker コンテナは https://hub.docker.com/r/admiralawkbar/super-linter にあります。

ローカルでのSuper-Linterの実行(トラブルシューティング/デバッグ/機能強化 のために)

ローカルでsuper-linterを実行する必要がある場合は、Running super-linter locallyのドキュメントにしたがってください。

CI/CT/CD

Super-Linter自体は、GitHubのアクションを利用してCI/CT/CDを設定しています。

  • When a branch is created and code is pushed, a GitHub Action is triggered for building the new Docker container with the new codebase

  • The Docker container is then ran against the test cases to validate all code sanity

    • .automation/test contains all test cases for each language that should be validated
  • These GitHub Actions utilize the Checks API and Protected Branches to help follow the SDLC

  • When the Pull Request is merged to master, the Super-Linter Docker container is then updated and deployed with the new codebase

    • Note: The branches Docker container is also removed from DockerHub to cleanup after itself
  • ブランチが作成され、コードがプッシュされると、新しいコードベースで新しいDockerコンテナをビルドするGitHubアクションがトリガーされます。

  • 次に Docker コンテナを test cases に対して実行し、すべてのコードの正しさを検証します。

    • .automation/test には、検証すべき各言語のすべてのテストケースが含まれます。
  • これらの GitHubアクションは Checks API と Protected Branches を利用して、SDLC に従うことを支援します。

  • Pull Request が master にマージされると、Super-Linter Docker コンテナが更新され、新しいコードベースでデプロイされます。

    • 注:ブランチ Docker コンテナも DockerHub から削除して、自分自身の後始末をします。

制限

以下は GitHub Super-Linter の既知の制限事項のリストです。

  • 実行時に完全にパッケージ化されているため、依存関係を更新したり、同封されているリンタやバイナリのバージョンを変更したりすることができません。
  • package.json からの追加の詳細の読み込みは GitHub Super-Linter で読み込まれません。
  • プライベートリポジトリから依存関係として追加のコードベースをダウンロードすると、パーミッションが不足しているため失敗します。

How to contribute

If you would like to help contribute to this GitHub Action, please see CONTRIBUTING


License

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment