kubeguard is a Helm-aware Kubernetes PR risk analyzer. It renders your full chart at the PR's head SHA, validates it against live cluster and AWS context, scores the findings, and posts the result before you click merge.
A one-line change to a tag-*.yaml file is never really one line. It's a container image bump that depends on the base chart, three values files, cluster service accounts, AWS security groups, ALB certificates, and secrets. None of this appears in the diff.
tag-payments-api.yaml still depends on app.yaml, env-app.yaml, the base chart, and the full cluster state.Every rule produces a severity-weighted finding. Scores start at 100 and deductions lower them — 100 is a clean chart, 0 means everything is wrong. Rules are environment-aware: nonprod findings are automatically downgraded one level.
Context over syntax. A manifest can be perfectly valid YAML and still fail at runtime: wrong security group, missing secret, invalid certificate ARN. kubeguard asks not "is this correct?" but "is this safe for this environment?"
kubeguard runs as a long-lived GitHub App server. When a PR is opened, GitHub fires a webhook; kubeguard handles it entirely outside the PR's Actions pipeline. No runner minutes, no queue wait.
pull_request webhook to the kubeguard server, in parallel to any CI jobs, not inside them.head.sha. Diffs are ignored. Only the full state matters.app.yaml → env-app.yaml → tag-app.yaml. Split-repo charts are cloned separately via central_chart resolver.In nonprod, every finding is downgraded one level and the pass threshold is relaxed. The same misconfiguration that blocks a prod merge is a warning on staging, letting teams iterate quickly without becoming careless.
A score of 20 does not mean a deployment has a 20% chance of failing. It means the rendered result hit rules whose configured weights add up to 20.
Low-risk tag bumps and config patches on nonprod merge themselves within seconds of the PR opening. The infra team only gets pulled in when something actually needs review.
The workflow itself needs care. GitHub only triggers check_run workflows when the file exists on the default branch. The merge job should verify the repository, App identity, exact head SHA, base branch, and a single matching PR before it gets write permission. I would not auto-merge forked PRs through this path.
pull_request webhook to kubeguard, in parallel with CI.check_run event.Run kubeguard locally as a CLI for one-off analysis, or deploy it as a long-lived GitHub App server that handles PR webhooks automatically.
Point it at a chart directory and a values file. Good for spot-checks during development.
Deploy as a webhook receiver. Every PR against your deployment branches gets a Check Run automatically.
Drop a config file in the repo root to tell kubeguard where to find values files and which environment it maps to.
kubeguard needs read-only access to the AWS resources it validates against.