in tools/ci_config.py [0:0]
def update_config(dry_run: bool = False, root: str = ROOT_DIR) -> str:
"""Collect job and workflow configs per job and create new config."""
root_dir = Path(root)
ci_dir = root_dir / ".circleci"
template_loader = jinja2.FileSystemLoader(ci_dir)
template_env = jinja2.Environment(loader=template_loader)
config_template = template_env.get_template("config.template.yml")
connector_dir = root_dir / CONNECTORS_DIR
deploy_config = DeployConfig(root_dir / DEPLOY_CONFIG)
workflow_configs = sorted(
[
obj
for obj in connector_dir.glob(f"*/{CI_WORKFLOW_TEMPLATE_NAME}")
if obj.is_file()
]
)
connectors = [
os.path.basename(f.path) for f in os.scandir(connector_dir) if f.is_dir()
]
invalid_configs = [
str(conf.relative_to(root_dir))
for conf in workflow_configs
if not validate_yaml(conf)
]
if len(invalid_configs) > 0:
print("Error: Invalid CI configs", file=sys.stderr)
print("\n".join(invalid_configs), file=sys.stderr)
sys.exit(1)
config_text = config_template.render(
config_header=CI_CONFIG_HEADER,
workflows="\n".join(
[file_path.read_text() for file_path in workflow_configs]
),
connectors=connectors,
deployments=deploy_config.to_dict(),
)
if dry_run:
print(config_text)
else:
with open(root_dir / ".circleci" / "config.yml", "w") as f:
f.write(config_text)
return config_text