デフォルトブランチから変更したファイルに対して Lint を実行
デフォルトブランチから変更したファイルに対して Lint を実行
やりたいこと
GitHub
でプルリクエストを作った際に、デフォルトブランチから変更した SQL
ファイルを取得して GitHub Actions
で Lint
を実行したい。
対象のファイル
origin/${TARGET_BRANCH}
から追加・変更したファイル- 拡張子を指定
- ディレクトリを指定・除外
どういったコマンドを実行するか
Lint を実行
sqlfluff lint
:Lint
を実行--disable-progress-bar
: プログレスバーを表示しない
$ sqlfluff lint --disable-progress-bar ${Lint を実行したいファイルを指定}
Lint を実行したいファイルの取得
origin/${TARGET_BRANCH}
から追加・変更した特定のディレクトリ配下のファイル名を取得。
git diff
: ファイルの変更を表示origin/${TARGET_BRANCH}
: 任意のブランチから追加・変更したファイルを取得--diff-filter=d
: 削除したファイルを除外--name-only
: ファイル名のみ取得-- ':(exclude,top)models/staging/hogehoge/*'
:models/staging/hogehoge/
配下のファイルを除外
grep -e '^models/.*\.sql' -e '^analyses/.*\.sql'
:models/
とanalyses/
のディレクトリのsql
ファイルに絞り込む
$ git diff origin/${TARGET_BRANCH} \
--diff-filter=d \
--name-only \
-- ':(exclude,top)models/staging/hogehoge/*' | \
grep -e '^models/.*\.sql' -e '^analyses/.*\.sql'
pathspec
で1つのディレクトリ配下のファイルに絞り込むことはできたが、2つのディレクトリ配下を OR
条件で絞り込むことはできなかった。
-- ':(top)models/*.sql'
:models/
配下のファイルに絞り込む
$ git diff origin/${TARGET_BRANCH} \
--diff-filter=d \
--name-only \
-- ':(exclude,top)models/staging/hogehoge/*' ':(top)models/**.sql'
最終的に実行するコマンド
特定のファイルに対してのみ、Lint
を実行。
origin/${TARGET_BRANCH}
から追加・変更したファイル- 拡張子を指定
- ディレクトリを指定・除外
$ sqlfluff lint \
--disable-progress-bar \
$(git diff origin/${TARGET_BRANCH} \
--diff-filter=d \
--name-only \
-- ':(exclude,top)models/staging/hogehoge/*' | \
grep -e '^models/.*\.sql' -e '^analyses/.*\.sql')
まとめ
上記コマンドを GitHub Actions
で実行することができた。
git
コマンドで特定のディレクトリを除外する方法を学べた。