CircleCIで対象ファイルに差分があった時のみワークフローを実行させる

モチベーション

GraphQLサーバーのリポジトリからクライアントのリポジトリへのスキーマファイル同期をCircleCIで行っている。
CircleCIのワークフローの実行のタイミングはスキーマファイル(schema.graphqls)に変更があった時だけで良いのでそのタイミングで実行できるようにしたい。

方針

CircleCIが提供しているpath-filtering orbを使う。

circleci.com

コード

config.yml

version: 2.1

setup: true

orbs: 
  path-filtering: circleci/path-filtering@0.1.3

workflows:
  generate-config:
   jobs:
    - path-filtering/filter:
        base-revision: develop
        mapping: |
          graph/schema.graphqls dispatch-schema-to-client true

continue_config.yml

version: 2.1

parameters:
  dispatch-schema-to-client:
    type: boolean
    default: false

jobs:
  dispatch-schema-to-client:
    ...

workflows:
  dispatch-schema-to-client:
    jobs:
      - dispatch-schema-to-client
    when: << pipeline.parameters.dispatch-schema-to-client >>

気にすること

  • Project Setting > Advanced > Enable dynamic config using setup workflows をオンにする
  • 後続のYAML(今回でいう continue_config.yml)のファイル名は path-filtering/filter job実行時にパラメータで変えられる

おわりに

上:差分あり、下:差分なし

サクッと出来て良かった。CircleCIは各コミットに対してワークフローが走るようになっているので今回のように実行タイミングを絞ることは料金や負荷の観点で気にかけていきたい。

参考