.cloudeval/config.yaml when present, resolves linked templates, and refreshes diagrams and reports.
This is the public GitHub App flow for users and organizations. Do not paste app ids, private keys, webhook secrets, or internal callback URLs into repositories; CloudEval manages those server-side.
Want the data-flow and storage boundary before connecting a private repo? Read Data and model boundaries for the GitHub import path, source snapshot storage, AI context boundary, and planned Team/Enterprise controls.
Why it matters
Use this path when your source has multiple files, linked ARM templates, or a repository layout you want to keep in GitHub. Source files are read-only in CloudEval while the project is linked to GitHub.Quick start
1
Start a GitHub-backed IaC project
Open Projects, select New or Quick, choose Infrastructure as code, then choose GitHub repository as the source.Use this source type when GitHub should remain the source of truth. CloudEval imports the selected branch and keeps source files read-only in the CloudEval workspace.
2
Install or update the CloudEval GitHub App
Install the CloudEval GitHub App if prompted. Choose the GitHub account or organization, then grant access to the repository or repository set CloudEval should import.Organization installs may require a GitHub organization owner or app manager. If the app is already installed, update the installation so the target repository is included.
3
Choose repository settings
Pick the GitHub account or organization, repository, branch, and optional source root.Leave source root blank when
.cloudeval/config.yaml, azuredeploy.json, and related templates live at the repository root. Use a source root such as infra when the IaC workspace lives in a subdirectory.4
Create the project and wait for import
Create the project. CloudEval imports files, reads
.cloudeval/config.yaml when present, resolves linked templates, and starts diagram/report generation in the background.The first import should leave the project with repository provenance: repository name, branch, commit SHA, and source root when one was selected.5
Verify the sync contract
Edit source files in GitHub, then let the push webhook refresh the linked CloudEval project. Use Sync from GitHub for a manual refresh.If the source file cannot be edited inside CloudEval, that is expected for GitHub-linked projects. The repository remains the editable source of truth.
Public example repository
ganakailabs/cloudeval-azure-arm-review-example is the public reference repo for this flow. It demonstrates:- repository-root
.cloudeval/config.yaml - a parent
azuredeploy.jsonwith linked templates undernested/ - GitHub App import from a branch and source root
- the GitHub Action PR review workflow after a CloudEval project exists
- demo PRs for passing baseline gates, risky regression, cost regression, and security hardening
Recommended repository layout
entry file is the visualization source. Relative ARM templateLink files are resolved from the same workspace root.
User and project mapping
GitHub does not decide which CloudEval user owns a project. CloudEval maps the GitHub App installation to the signed-in CloudEval user who starts the install flow. If an organization admin installs the app, the project still belongs to the CloudEval user who completed the flow. For team use, share the CloudEval project with teammates after creation.What GitHub data CloudEval stores
CloudEval stores provenance on the project:Sync behavior
Public repositories can be imported through a GitHub URL for a one-time single-template flow. Use the GitHub App flow when you want ongoing sync, commit provenance, branch selection, and push webhooks.
Files CloudEval imports
CloudEval preserves repository-relative paths under the selected source root. For example,source_root: infra maps infra/azuredeploy.json to azuredeploy.json in the CloudEval workspace.
The GitHub App resolves the selected branch to a commit SHA, reads UTF-8 text files through a short-lived installation token, and imports a bounded snapshot for analysis. Current limits are 1 MB per file, 20 MB total content per sync, and 500 imported files.
CloudEval skips unsafe or noisy paths:
.git/**.github/**node_modules/**.terraform/***.tfstateand*.tfstate.*.envand.env.*- CloudEval-generated
.cloudeval/bundles/**,.cloudeval/connections/**,.cloudeval/template-cache/**, and.cloudeval/snapshots/**
GitHub App permissions
For V1 repository sync, the GitHub App needs only read-oriented repository access:
Pull request permissions are not required for V1 sync. They are only needed for later PR comments, checks, or GitHub Action workflows.
GitHub Actions and PR review
The CloudEval GitHub Action is optional. It is useful after a project exists when you want CI gates, report runs, or PR comments. It is not required for repository sync. Use the App and Action together like this:1
Create the CloudEval project through the GitHub App
Use the GitHub App to install repository access and create the CloudEval project.
2
Create a CI access key
Create a GitHub Actions CI access key scoped to that project. Include
github:comment if PR comments should come from the CloudEval GitHub App identity.3
Add the action workflow
Add the action workflow to the same repository and pass
project_id.4
Require the workflow job
Require that workflow job in branch protection if it should block merges.
mode: review when a pull request should sync the pushed commit to the linked CloudEval project and post a summary:
.cloudeval/config.yaml ci.gates. Missing gates warn rather than fail. See IaC project config for the commented config example, gate thresholds, PDF output settings, and PR comment wording.
To attach the generated PDF from each review run, keep upload_artifacts: true
and enable .cloudeval/config.yaml ci.review.outputs.pdf.enabled. The PR
comment keeps the CloudEval-hosted PDF badge, and the workflow artifact
contains review/review.pdf for that specific run.
When the project is linked through the CloudEval GitHub App and the CI access
key includes github:comment, PR review comments are posted by the CloudEval
GitHub App identity. If that app comment path is unavailable, the action falls
back to github-actions[bot].