Connect your Git org to Ctadel
Ctadel scans IaC, secrets, and dependencies on every push and pull request. The setup is a single click on GitHub, or a one-time OAuth authorization on GitLab. No tokens to copy-paste, no per-repo webhook configuration on GitHub.
GitHub — one-click install
- In Ctadel, open Settings → Integrations.
- Click Install Ctadel on GitHub. You land on GitHub's install page for the Ctadel App.
- Choose your organization.
- Choose the repository scope:
- All repositories (current + future) — recommended; new repos are scanned automatically.
- Only select repositories — pick the ones you want covered. You can change this later in GitHub Settings → Applications → Configure.
- Click Install. GitHub redirects you back to Ctadel.
That's it. From here:
- ✅ Webhooks are delivered automatically for every selected repo (push + PR).
- ✅ Ctadel posts three status checks (
ctadel/iac,ctadel/secrets,ctadel/sca) and three PR comments per PR. - ✅ No tokens, no per-repo webhook setup.
GitLab — OAuth + project webhooks
GitLab doesn't have a true equivalent of GitHub Apps, so the flow is two parts:
- OAuth to authorize Ctadel on your account.
- Per-project webhooks with the secret Ctadel generates for you.
Step 1, OAuth
- In Ctadel Settings → Integrations, click Connect Ctadel to GitLab.
- GitLab prompts you to authorize Ctadel. Approve.
- Back in Ctadel, a yellow banner shows a one-time webhook secret. Copy it — it isn't shown again.
Step 2, configure webhooks on each project
For every GitLab project you want scanned:
- Open the project Settings → Webhooks → Add new webhook.
- URL:
https://<your-ctadel-host>/webhook/git(Ctadel shows the exact URL in the install banner). - Secret token: paste the secret from Step 1.
- Triggers: ✅ Push events, ✅ Merge request events.
- Add webhook.
You can reuse the same secret across all projects of the same group — that's the point of having Ctadel generate it once.
What gets scanned
Every push and PR triggers three checks in parallel:
| Check | What it looks for |
|---|---|
ctadel/iac | Terraform, Kubernetes manifests, Dockerfiles. Misconfigurations against ~165 rules. |
ctadel/secrets | Hardcoded credentials in source files. 199 detection patterns. |
ctadel/sca | CVEs in lockfiles / dependency manifests. NVD-matched against the dependency tree. |
Each posts its own PR comment + commit status. Branch protection rules can require any subset of them.
Tuning per-family policy
In Settings → Integrations → ⚙ (per integration) you can tune:
- Enabled / disabled (per family).
- Block PR on failure (per family) — fails the commit status if findings exceed the threshold.
- Severity threshold:
CRITICAL,HIGH,MEDIUM,LOW, orANY(secrets only — block on first leak).
Defaults match industry practice:
- IaC: block on
HIGHand above. - Secrets: block on
ANY(one leak is one too many). - SCA: info-only by default (don't block on CVEs you can't fix immediately).
What gets posted on each PR
Open Settings → Integrations and click the ⚙ on your integration to see the active policies.
Then push a commit to a PR — within ~30 seconds you should see:
- 3 status checks on the commit (
ctadel/iac,ctadel/secrets,ctadel/sca). - 3 PR comments, one per family, each with a top-10 findings table and a link to the full Ctadel scan report.
Ignoring a finding
Two options:
- From Ctadel UI — open the finding's detail panel, click Ignore, give a reason. The finding stays in the DB but no longer fails the status check.
- From
.ctadel.yamlin the repo root — the scanner reads it on every scan and suppresses listed findings before they hit the DB.
See Suppress or ignore a finding for the full spec.
Common pitfalls
- GitHub install but no scans — check GitHub Settings → Applications → Configure → Recent deliveries. Failed deliveries (red) usually mean Ctadel's webhook secret doesn't match the App's. Contact your Ctadel admin.
- GitLab MR not scanned — verify the project webhook is enabled and Merge request events is checked. The webhook delivery log shows the response body on failure.
- "No matching installation" — you removed the App from your org. Re-install from Ctadel Settings.