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/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 コンテナは https://hub.docker.com/r/admiralawkbar/super-linter
にあります。
ローカルでsuper-linter
を実行する必要がある場合は、Running super-linter locallyのドキュメントにしたがってください。
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 で読み込まれません。- プライベートリポジトリから依存関係として追加のコードベースをダウンロードすると、パーミッションが不足しているため失敗します。
If you would like to help contribute to this GitHub Action, please see CONTRIBUTING