モチベーション
GraphQLサーバーのリポジトリからクライアントのリポジトリへのスキーマファイル同期をCircleCIで行っている。
CircleCIのワークフローの実行のタイミングはスキーマファイル(schema.graphqls
)に変更があった時だけで良いのでそのタイミングで実行できるようにしたい。
方針
CircleCIが提供しているpath-filtering orbを使う。
コード
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は各コミットに対してワークフローが走るようになっているので今回のように実行タイミングを絞ることは料金や負荷の観点で気にかけていきたい。