v0.1.0 — continuous Kubernetes upgrade readiness
upgradescope v0.1.0 — first release
Continuous Kubernetes upgrade-readiness scanning, self-hosted and Apache-2.0.
Highlights
upgradescope scan— point-in-time readiness scan of a live cluster or rendered manifests (--files). Table, JSON, and SARIF output; exit-code gate for CI (--fail-on). ~0.25s against a small cluster.- Continuous mode — read-only in-cluster agent maintains a
ClusterReadinessCRD (kubectl get ucr) and pushes deduped snapshots to a self-hosted server (SQLite or Postgres): history, what-if (?target=), Slack/webhook alerts fired only on new blockers. - Fleet — cluster × target score matrix, per-team scores with server-side team mapping, per-cluster ingest tokens, auditor CSV/HTML exports.
- CI gate —
POST /api/v1/gateevaluates manifests inside a known cluster's context; composite GitHub Action included (action/). - Embedded web dashboard — fleet matrix, cluster drill-down, registry browser; single binary via
go:embed. - Knowledge base — 160 API-lifecycle entries generated from upstream
k8s.io/apisource (covers removals beyond the human-written migration guide), 18-add-on EOL registry with required upstream citations, synced against endoflife.date weekly via CI.
Detection coverage
deprecated/removed API objects (probed at the deprecated endpoints), clients still calling deprecated APIs (apiserver_requested_deprecated_apis metric), add-on EOL (e.g. ingress-nginx, EOL since 2026-03-24), Helm chart ↔ K8s compatibility, kubelet/control-plane/kube-proxy version skew.
Score
score = max(0, 100 − min(75, 25×blockers) − min(20, 5×warnings)); ready = no blockers. Deterministic and documented.
Install
go install github.com/abd-ulbasit/upgradescope/cmd/upgradescope@v0.1.0
# or grab a binary below; Helm chart in deploy/chartKnown limitations
- kubectl client skew is not detectable without apiserver audit logs (by design; documented).
- Managed control planes (EKS/GKE/AKS) may block
/metrics— the deprecated-callers signal degrades gracefully and is reported as "not assessed"; everything else works unchanged. kind: Listitems are not expanded in--filesmode.