GoogleContainerTools/skaffold · error
marshalling configuration: %w
Error message
marshalling configuration: %w
What it means
Wraps a yaml.MarshalWithSeparator failure in `skaffold diagnose` when serializing the parsed skaffold configs for the diagnostics output. Marshalling a parsed latest.SkaffoldConfig should virtually never fail; if it does, the config contains data that cannot round-trip through the YAML encoder (unsupported types introduced by a schema/plugin mismatch).
Source
Thrown at cmd/skaffold/app/cmd/diagnose.go:98
}
if !yamlOnly {
if err := printArtifactDiagnostics(ctx, out, configs); err != nil {
return err
}
}
// remove the dependency config references since they have already been imported and will be marshalled together.
for i := range configs {
configs[i].(*latest.SkaffoldConfig).Dependencies = nil
}
if enableTemplating {
if err := tags.ApplyTemplates(configs); err != nil {
return err
}
}
buf, err := yaml.MarshalWithSeparator(configs)
if err != nil {
return fmt.Errorf("marshalling configuration: %w", err)
}
out.Write(buf)
return nil
}
func printArtifactDiagnostics(ctx context.Context, out io.Writer, configs []schemaUtil.VersionedConfig) error {
runCtx, err := getRunContext(ctx, opts, configs)
if err != nil {
return fmt.Errorf("getting run context: %w", err)
}
tagger, err := tag.NewTaggerMux(runCtx)
if err != nil {
return fmt.Errorf("getting tagger: %w", err)
}
imageTags, err := deployutil.ImageTags(ctx, runCtx, tagger, out, runCtx.Artifacts())
if err != nil {View on GitHub (pinned to a1189de023)
Solutions
- Re-run with an official skaffold build matching your skaffold.yaml apiVersion
- Remove custom transforms/plugins temporarily and re-run diagnose to isolate the cause
- Simplify the skaffold.yaml (drop experimental fields) to find the non-marshalable section
- File a bug with the wrapped error if a plain config still fails
Example fix
// before: diagnose fails on exotic config // after: validate the config parses and round-trips skaffold diagnose --yaml-only # or skaffold config list # sanity check CLI works on same config
Defensive patterns
Strategy: try-catch
Try / catch
err := diagnose(); err != nil {
if strings.Contains(err.Error(), "marshalling configuration:") {
// config contains unmarshalable data — test with a minimal skaffold.yaml
}
} Prevention
- Keep skaffold binary and config apiVersion in sync
- Avoid experimental plugin fields in production configs
- Report persistent marshal failures with a minimal repro to skaffold
When it happens
Trigger: `skaffold diagnose` calls yaml.MarshalWithSeparator(configs) and the marshaller returns an error, typically because configs contain an unsupported value type after custom deserialization or a versioned-config conversion.
Common situations: Using skaffold with custom transform/extension plugins that inject non-marshalable values; version skew between skaffold binary and config schema producing unrepresentable fields.
Related errors
- marshaling new config: %w
- missing apiVersion
- validating upgraded config: %w
- invalid skaffold config: %w
- parsing skaffold config: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/38c42020683b5b42.
Report an issue: GitHub.