GoogleContainerTools/skaffold · error

config version %q is more recent than target version %q: upg

Error message

config version %q is more recent than target version %q: upgrade Skaffold

What it means

UpgradeTo in pkg/skaffold/schema/versions.go upgrades configs to a target version but refuses to downgrade: if a config's parsed apiVersion is GREATER than the target version, it errors and tells the user to upgrade Skaffold itself. This protects against data loss from migrating a newer schema back to an older one.

Source

Thrown at pkg/skaffold/schema/versions.go:406

// UpgradeTo upgrades the given configs to toVersion.
func UpgradeTo(configs []util.VersionedConfig, toVersion string) ([]util.VersionedConfig, error) {
	upgradeNeeded := false
	for _, cfg := range configs {
		// Check that the config's version is not newer than the target version
		currentVersion, err := apiversion.Parse(cfg.GetVersion())
		if err != nil {
			return nil, err
		}
		targetVersion, err := apiversion.Parse(toVersion)
		if err != nil {
			return nil, err
		}

		if currentVersion.NE(targetVersion) {
			upgradeNeeded = true
		}
		if currentVersion.GT(targetVersion) {
			return nil, fmt.Errorf("config version %q is more recent than target version %q: upgrade Skaffold", cfg.GetVersion(), toVersion)
		}
	}
	if !upgradeNeeded {
		return configs, nil
	}
	log.Entry(context.TODO()).Debugf("config version out of date: upgrading to latest %q", toVersion)
	var err error
	var upgraded []util.VersionedConfig
	for _, cfg := range configs {
		for cfg.GetVersion() != toVersion {
			cfg, err = cfg.Upgrade()
			if err != nil {
				return nil, fmt.Errorf("transforming skaffold config: %w", err)
			}
		}
		upgraded = append(upgraded, cfg)
	}
	return upgraded, nil

View on GitHub (pinned to a1189de023)

Solutions

  1. Upgrade the Skaffold binary to a version whose latest schema version is >= the apiVersion in skaffold.yaml.
  2. If the older binary is required, hand-edit skaffold.yaml back to an apiVersion the binary supports (or regenerate it from that version).
  3. Pin the CI image / devcontainer Skaffold version to match the schema version used by the team.
  4. Check `skaffold version` vs the apiVersion in skaffold.yaml before running fix/parse.

Example fix

# before: skaffold v1.39 binary with skaffold.yaml:
apiVersion: skaffold/v4beta3

# fix by upgrading skaffold, or edit yaml:
apiVersion: skaffold/v2beta29
Defensive patterns

Strategy: validation

Validate before calling

cur, err := apiversion.Parse(cfg.GetVersion())
tgt, err2 := apiversion.Parse(toVersion)
if err == nil && err2 == nil && cur.GT(tgt) {
	return fmt.Errorf("skaffold.yaml (%s) is newer than binary target (%s); upgrade the skaffold binary", cfg.GetVersion(), toVersion)
}

Type guard

func canUpgradeTo(cfgVersion, toVersion string) bool {
	cur, err1 := apiversion.Parse(cfgVersion)
	tgt, err2 := apiversion.Parse(toVersion)
	return err1 == nil && err2 == nil && !cur.GT(tgt)
}

Try / catch

upgraded, err := schema.UpgradeTo(configs, toVersion)
if err != nil && strings.Contains(err.Error(), "more recent than target") {
	return fmt.Errorf("%w — run `skaffold version` and upgrade your Skaffold install", err)
}

Prevention

When it happens

Trigger: Calling UpgradeTo(configs, toVersion) (directly, or via fix/ParseConfigAndUpgrade) when some cfg.GetVersion(), e.g. 'skaffold/v4beta7', parses to a version newer than toVersion, e.g. 'skaffold/v3alpha1'. Typically happens when the skaffold.yaml was written by a newer Skaffold release than the binary being run.

Common situations: Developer downgraded their Skaffold binary (e.g. 2.x -> 1.x) or switched to an older release/CI image, but the repo's skaffold.yaml still carries the newer apiVersion written by the previous binary.

Related errors


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