👺
GitHubActionsでプルリクエスト時にSQLのリントチェックを実行するCIを実現する(SQLFluffを利用)
はじめに
SQLFluffを利用し、プルリクエスト作成時にGitHubActionsを利用することでSQLのリントチェック自動でできるような仕組みを作ることが出来ます。
GitHubActionsの設定をする
以下のアクション用の定義を該当のレポジトリに設定を行う。
.github/workflows/lint_models.yml
name: Lint Models
on: [pull_request]
env:
TARGET_BRANCH: ${{ github.base_ref }}
jobs:
lint-models:
runs-on: ubuntu-latest
steps:
- uses: "actions/checkout@v2"
- uses: "actions/setup-python@v2"
with:
python-version: "3.8"
- name: Install SQLFluff
run: "pip install sqlfluff==0.5.3"
- name: 'Fetch'
run: git fetch --depth 1 origin ${TARGET_BRANCH}
- name: 'Lint models'
run: |
for file in $(git diff origin/${TARGET_BRANCH} HEAD --diff-filter=AM --name-only -- "*.sql") ; do
sqlfluff lint ${file} --rules L001,L002,L004,L006,L010,L019 --dialect bigquery
done
dialectオプションでどのDBを想定したSyntaxにするのか設定するので注意
% sqlfluff dialects
==== sqlfluff - dialects ====
ansi: ansi dialect [inherits from 'nothing']
bigquery: bigquery dialect [inherits from 'ansi']
exasol: exasol dialect [inherits from 'ansi']
exasol_fs: exasol_fs dialect [inherits from 'exasol']
mysql: mysql dialect [inherits from 'ansi']
postgres: postgres dialect [inherits from 'ansi']
snowflake: snowflake dialect [inherits from 'postgres']
teradata: teradata dialect [inherits from 'ansi']
ルールのカスタマイズ
実行しているリントチェックのルール等のカスタマイズは以下の記事を参考にしてみてください。
SQLFluffを使ってSQLをリント(Lint)する
Discussion