GoogleContainerTools/skaffold · error

can't upgrade to %s, build.acr is not supported anymore, ple

Error message

can't upgrade to %s, build.acr is not supported anymore, please remove it manually

What it means

The v1alpha5→next Upgrade() refuses to run when the top-level build section uses the removed AzureContainerBuild (build.acr) builder, since there is no automatic migration target for it in the next version. Rather than silently dropping the builder, the upgrade aborts and tells the user to remove the field manually.

Source

Thrown at pkg/skaffold/schema/v1alpha5/upgrade.go:38

	"fmt"

	"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/schema/util"
	next "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/schema/v1beta1"
	pkgutil "github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/util"
)

// Upgrade upgrades a configuration to the next version.
// Config changes from v1alpha5 to v1beta1:
// 1. Additions:
//   - KanikoCache struct, KanikoBuild.Cache
//   - BazelArtifact.BuildArgs
// 2. Removals:
//   - AzureContainerBuilder
// 3. No updates

func (c *SkaffoldConfig) Upgrade() (util.VersionedConfig, error) {
	if c.Build.AzureContainerBuild != nil {
		return nil, fmt.Errorf("can't upgrade to %s, build.acr is not supported anymore, please remove it manually", next.Version)
	}

	for _, profile := range c.Profiles {
		if profile.Build.AzureContainerBuild != nil {
			return nil, fmt.Errorf("can't upgrade to %s, profiles.build.acr is not supported anymore, please remove it from the %s profile manually", next.Version, profile.Name)
		}
	}

	var newConfig next.SkaffoldConfig

	pkgutil.CloneThroughJSON(c, &newConfig)
	newConfig.APIVersion = next.Version

	return &newConfig, nil
}

View on GitHub (pinned to a1189de023)

Solutions

  1. Delete the build.acr block from skaffold.yaml and move ACR builds into build.artifacts entries with an explicit docker/jib builder, then re-run the upgrade
  2. Use `skaffold fix` after manually removing the field
  3. Check each profile too — profile-level build.acr triggers the sibling error

Example fix

# before
build:
  acr: {}
# after
build:
  artifacts:
    - image: myimg
      docker: {}
Defensive patterns

Strategy: validation

Validate before calling

if cfg.Build.AzureContainerBuild != nil {
	return errors.New("remove build.acr before upgrading")
}

Type guard

func hasAzureBuild(b BuildConfig) bool { return b.AzureContainerBuild != nil }

Try / catch

if _, err := cfg.Upgrade(); err != nil {
	if strings.Contains(err.Error(), "build.acr is not supported anymore") {
		// prompt user to remove the field
	}
}

Prevention

When it happens

Trigger: Calling SkaffoldConfig.Upgrade() (or skaffold fix / upgrade path) on a config where c.Build.AzureContainerBuild != nil.

Common situations: skaffold.yaml files written when Azure Container builder (acr) was supported, being upgraded to a version where build.acr was deleted from the schema.

Related errors


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