GoogleContainerTools/skaffold · error

found multiple status check timeouts in skaffold.yaml (not s

Error message

found multiple status check timeouts in skaffold.yaml (not supported in `skaffold apply`): %d, %d

What it means

getDefaultDeployer merges settings across multiple skaffold configs when assembling the default (apply-style) deployer. If two configs declare different `statusCheckDeadlineSeconds` values — and neither equals the default — merging is ambiguous, so this error is thrown since `skaffold apply` cannot reconcile conflicting timeouts.

Source

Thrown at pkg/skaffold/runner/deployer.go:258

	var statusCheck *bool
	for _, d := range deployCfgs {
		if d.KubeContext != "" {
			if kubeContext != "" && kubeContext != d.KubeContext {
				return nil, errors.New("cannot resolve active Kubernetes context - multiple contexts configured in skaffold.yaml")
			}
			kubeContext = d.KubeContext
		}
		if d.StatusCheck != nil {
			if statusCheck == nil {
				statusCheck = d.StatusCheck
			} else if statusCheck != d.StatusCheck {
				// if we get conflicting values for status check from different skaffold configs, we turn status check off
				statusCheck = util.Ptr(false)
			}
		}
		if d.StatusCheckDeadlineSeconds != 0 && d.StatusCheckDeadlineSeconds != int(status.DefaultStatusCheckDeadline.Seconds()) {
			if statusCheckTimeout != -1 && statusCheckTimeout != d.StatusCheckDeadlineSeconds {
				return nil, fmt.Errorf("found multiple status check timeouts in skaffold.yaml (not supported in `skaffold apply`): %d, %d", statusCheckTimeout, d.StatusCheckDeadlineSeconds)
			}
			statusCheckTimeout = d.StatusCheckDeadlineSeconds
		}
		if d.Logs.Prefix != "" {
			if logPrefix != "" && logPrefix != d.Logs.Prefix {
				return nil, fmt.Errorf("found multiple log prefixes in skaffold.yaml (not supported in `skaffold apply`): %s, %s", logPrefix, d.Logs.Prefix)
			}
			logPrefix = d.Logs.Prefix
		}
		var currentDefaultNamespace *string
		var currentKubectlFlags latest.KubectlFlags
		if d.KubectlDeploy != nil {
			currentDefaultNamespace = d.KubectlDeploy.DefaultNamespace
			currentKubectlFlags = d.KubectlDeploy.Flags
		}
		if kFlags == nil {
			kFlags = &currentKubectlFlags
		}

View on GitHub (pinned to a1189de023)

Solutions

  1. Set the same `statusCheckDeadlineSeconds` value in every composed skaffold config
  2. Remove the field from all but one config so the others fall back to the shared default
  3. Standardize the timeout in a shared base config that dependencies reference

Example fix

// config-a (before)
deploy:
  statusCheckDeadlineSeconds: 300
// config-b (before)
deploy:
  statusCheckDeadlineSeconds: 60
// after: use 300 in BOTH configs, or omit it in all but one
Defensive patterns

Strategy: validation

Validate before calling

const deadlines = configs.map(c => c.deploy?.statusCheckDeadlineSeconds).filter(v => v !== undefined)
if (new Set(deadlines).size > 1) {
  throw new Error('conflicting statusCheckDeadlineSeconds: ' + deadlines.join(', '))
}

Prevention

When it happens

Trigger: Running `skaffold apply` with multiple skaffold configs (via `--filename`, config dependencies, or profiles) where `statusCheckDeadlineSeconds` differs between configs and differs from the built-in default.

Common situations: Team members adding different status-check timeouts to per-service configs that later get composed; config dependencies inherited from other repos with their own deadline settings.

Understand the failure class

Related errors


AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05). Data as JSON: /api/errors/2533b0538641b027. Report an issue: GitHub.