デフォルトブランチから変更したファイルに対して 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 コマンドで特定のディレクトリを除外する方法を学べた。
