.cloudeval/config.yaml when a template-backed project has more than one file or when you want CloudEval to use a specific entry template.
Why it matters
CloudEval needs one explicit visualization source. In a repository with parameters, linked templates, modules, and generated outputs, the config file tells CloudEval which file starts the graph and report pipeline. The same config file is used for local uploads, CLI workspace uploads, and GitHub repository sync. For GitHub-linked projects, CloudEval reads source files from the selected repository branch/root and keeps them read-only in the app.Quick example
Create this file at the root of your IaC workspace:- CloudEval reads
azuredeploy.jsonas the visualization source. - Relative
templateLinkfiles are resolved whenresolve.linked_templatesistrue. - Generated bundles, connection mirrors, reports, and share assets are not treated as source files.
cloudeval review --output <dir>writesreview.pdfwhenci.review.outputs.pdf.enabledistrue.
Supported keys
If
ci.gates is not defined, review automation reports a warning and does not fail by default. Add the section only when the repository is ready for explicit CI enforcement. Use enforcement: comment_only first when you want PR comments and review artifacts without blocking merges.
Use ci.review.outputs.pdf when reviewers need a durable evidence packet from the exact CI run. The PR comment keeps the CloudEval-hosted PDF badge for the latest hosted download; the GitHub artifact captures the generated review/review.pdf next to review/review.md and review/review.json, including runs where the configured review gate fails.
Review comments distinguish the configured gate from observed posture:
Overall is the gate result from ci.gates. Score labels such as CRITICAL, POOR, FAIR, GOOD, and EXCELLENT describe posture. They block merges only when your thresholds require them to block.
The same config drives local cloudeval review and GitHub Action review comments. Review Markdown can include CloudEval report links, a resource-cost pie chart, a projected-versus-optimized cost chart, validation failure details, and architecture signals when those reports are available. When PDF output is enabled, the CLI also records data.outputs.pdf in review.json.
Folder behavior
CloudEval treats the project root like a repository root. It does not add or strip a syntheticrepo/ folder.
.cloudeval
config.yaml
azuredeploy.json
nested
network.json
README.md
repo, CloudEval treats it as a normal folder:
.cloudeval/**, but only
.cloudeval/config.yaml is source input. Generated bundles, connection mirrors,
snapshots, reports, and share assets are derived outputs.
.cloudeval
config.yaml
bundles
connections
reports
snapshots
template-cache
azuredeploy.json
nested
GitHub repository sync
When a project is created from a GitHub repository, CloudEval stores source provenance on the project:source_root: infra maps
infra/azuredeploy.json to azuredeploy.json.
CloudEval excludes noisy or unsafe repository paths during V1 sync:
.git/**.github/**node_modules/**.terraform/***.tfstateand*.tfstate.*.envand.env.*- CloudEval-generated
.cloudeval/bundles/**,.cloudeval/connections/**,.cloudeval/template-cache/**, and.cloudeval/snapshots/**
CLI and API contract
The public import contract is path based:.cloudeval/config.yamlis read from the workspace root.stacks[].entryis the visualization source, relative to that same root.- Linked templates and parameters are uploaded as individual files and keep their relative paths.
- CloudEval writes derived analysis artifacts under managed
.cloudeval/subfolders; those artifacts are not source inputs.
--workspace-dir:
--ignore-dirty only for deliberate local generated-file workflows. Normal PR checks should review a pushed commit.
If .cloudeval/config.yaml is missing, the CLI creates a minimal config using
the selected entry file and the detected parameters file, then sends that config
with the workspace upload. Passing --workspace-entry is recommended for
repositories with more than one deployable template.