This repository demonstrates an advanced use case of dynamic config feature on CircleCI. For instance, it implements both path filtering and config splitting.
.circleci/config.yml
implements both 1) the dynamic config, and 2) common resources (i.e., jobs and commands) for main workflows/jobs. These common resources are shared among every module.module-a/.circleci/config.yml
,module-b/.circleci/config.yml
, andmodule-c/.circleci/config.yml
implement independent modular configs for module A, B, and C, respectively.
- Upon the initial trigger, CircleCI triggers the setup job
setup-dynamic-config
defined in.circleci/config.yml
. - Given a list of directories, detect which subdirectories (in this case, modules modules) have changes. (cf.
list-changed-modules
) - Fetch
path-to-module/.circleci/config.yml
for each module to build, and merge all the fetchedconfig.yml
(along with the config defining common resources, i.e.,.circleci/config.yml
) usingyq
. (cf.merge-modular-configs
) - Trigger execution of the merged config.