GoogleContainerTools/skaffold · warning
STATUSCHECK_USER_CANCELLED
STATUSCHECK_USER_CANCELLED
Error message
%d/%d deployment(s) status check cancelled
What it means
Skaffold's Kubernetes status check counts deployments whose status checks were cancelled (usually by user interruption via Ctrl-C or context cancellation). When every deployment being watched has been cancelled and at least one existed, getSkaffoldDeployStatus reports STATUSCHECK_USER_CANCELLED with this message. It signals that no deployment actually reached a final health verdict because the wait was aborted.
Source
Thrown at pkg/skaffold/kubernetes/status/status_check.go:446
// immediately rather than waiting for for statusCheckDeadlineSeconds
// TODO: https://github.com/GoogleContainerTools/skaffold/pull/4591
if r.HasEncounteredUnrecoverableError() {
if cfg.StatusCheckTolerateFailures() {
// increase poll duration to reduce issues seen with kubectl/cluster becoming unresponsive with frequent requests
// exponential backoff was considered but seemed to be less effective than one large increase in my testing.
ticker = time.NewTicker(pollDuration * 10)
continue
}
r.MarkComplete()
return
}
}
}
}
func getSkaffoldDeployStatus(ctx context.Context, c *counter, sc proto.StatusCode) (proto.StatusCode, error) {
if c.total == int(c.cancelled) && c.total > 0 {
err := fmt.Errorf("%d/%d deployment(s) status check cancelled", c.cancelled, c.total)
return proto.StatusCode_STATUSCHECK_USER_CANCELLED, err
}
// return success if no failures find.
if c.failed == 0 {
return proto.StatusCode_STATUSCHECK_SUCCESS, nil
}
// construct an error message and return appropriate error code
err := fmt.Errorf("%d/%d deployment(s) failed", c.failed, c.total)
if sc == proto.StatusCode_STATUSCHECK_SUCCESS || sc == 0 {
log.Entry(ctx).Debugf("found statuscode %s. setting skaffold deploy status to STATUSCHECK_INTERNAL_ERROR.", sc)
return proto.StatusCode_STATUSCHECK_INTERNAL_ERROR, err
}
log.Entry(ctx).Debugf("setting skaffold deploy status to %s.", sc)
return sc, err
}
func getDeadline(d int) time.Duration {
if d > 0 {View on GitHub (pinned to a1189de023)
Solutions
- Re-run the deploy and let the status check complete, or increase deploy.statusCheckDeadlineSeconds if the rollout legitimately needs more time
- If the interrupt was intentional, treat this as expected cancellation — check `kubectl rollout status` manually to confirm deployment health
- Verify the cluster is reachable and deployments are progressing (kubectl get deployments) so future checks finish before you cancel
Example fix
// before (skaffold.yaml) deploy: statusCheckDeadlineSeconds: 30 // after deploy: statusCheckDeadlineSeconds: 600
Defensive patterns
Strategy: validation
Validate before calling
// before waiting, ensure the deployment is progressing fast enough to finish inside the deadline
out, err := exec.Command("kubectl", "rollout", "status", "deployment/my-app", "--timeout=60s").CombinedOutput()
if err != nil {
log.Fatalf("deployment not healthy, status check would be cancelled/fail: %s", out)
} Prevention
- Set a realistic deploy.statusCheckDeadlineSeconds for slow rollouts
- Avoid interrupting deploys in CI; rely on the deadline instead of manual Ctrl-C
- Pre-check rollout health with kubectl rollout status before running skaffold
- Monitor signal handling expectations in scripts wrapping skaffold
When it happens
Trigger: Running `skaffold deploy`/`dev`/`run` with deploy.statusCheckDeadlineSeconds configured, then pressing Ctrl-C (SIGINT) or having the context cancelled while all deployment status checks are still pending, so c.cancelled == c.total > 0.
Common situations: User interrupts a slow rollout; CI job timeout kills skaffold; kubectl context is slow because the cluster's deployments take minutes to become available and the user gives up before any check resolves.
Related errors
- rs.ae.Message (actionable error message from status check)
- STATUSCHECK_POD_INITIALIZING
- waiting for init container %s to complete
- STATUSCHECK_UNKNOWN
- STATUSCHECK_KUBECTL_CLIENT_FETCH_ERR
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/ca85a5550e632621.
Report an issue: GitHub.