GoogleContainerTools/skaffold · info
configuration changed
Error message
configuration changed
What it means
ErrorConfigurationChanged is a sentinel error (errors.Is-comparable) returned by the dev loop when skaffold detects that skaffold.yaml changed on disk. It is not a failure: cmd/dev.go catches it with errors.Is and restarts the dev cycle with reloaded configuration instead of exiting.
Source
Thrown at pkg/skaffold/runner/runner.go:41
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/build"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/build/cache"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/deploy"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/deploy/label"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/filemon"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/graph"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/kubernetes/manifest"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/platform"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/render/renderer"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/runner/runcontext"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/schema/latest"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/schema/util"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/test"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/verify"
)
// ErrorConfigurationChanged is a special error that's returned when the skaffold configuration was changed.
var ErrorConfigurationChanged = errors.New("configuration changed")
// Runner is responsible for running the skaffold build, test and deploy config.
type Runner interface {
Apply(context.Context, io.Writer) error
ApplyDefaultRepo(tag string) (string, error)
Build(context.Context, io.Writer, []*latest.Artifact) ([]graph.Artifact, error)
Cleanup(context.Context, io.Writer, bool, manifest.ManifestListByConfig, string) error
Dev(context.Context, io.Writer, []*latest.Artifact) error
// Deploy and DeployAndLog: Do they need the `graph.Artifact` and could use render output.
Deploy(context.Context, io.Writer, []graph.Artifact, manifest.ManifestListByConfig) error
DeployAndLog(context.Context, io.Writer, []graph.Artifact, manifest.ManifestListByConfig) error
GeneratePipeline(context.Context, io.Writer, []util.VersionedConfig, []string, string) error
HasBuilt() bool
DeployManifests() manifest.ManifestListByConfig
Prune(context.Context, io.Writer) error
Render(ctx context.Context, out io.Writer, builds []graph.Artifact, offline bool) (manifest.ManifestListByConfig, error)
Test(context.Context, io.Writer, []graph.Artifact) errorView on GitHub (pinned to a1189de023)
Solutions
- No fix needed — save your skaffold.yaml changes and let skaffold restart the dev loop automatically.
- If it surfaces as a terminating error in your own code, compare with errors.Is(err, runner.ErrorConfigurationChanged) and handle it as a restart signal, not a failure.
Example fix
// before
if err != nil {
return err
}
// after
if err != nil {
if errors.Is(err, runner.ErrorConfigurationChanged) {
return nil // restart dev cycle with new config
}
return err
} Defensive patterns
Strategy: try-catch
Type guard
func isConfigChanged(err error) bool { return errors.Is(err, runner.ErrorConfigurationChanged) } Try / catch
if err := runner.Dev(ctx, out, []namespacedImage{}); err != nil {
if errors.Is(err, runner.ErrorConfigurationChanged) {
return nil // expected: restart dev loop with reloaded config
}
return err
} Prevention
- Treat this sentinel as control flow, never as a fatal error — always compare with errors.Is.
- Avoid wrapping the error with %v/%s (use %w) so errors.Is keeps working.
- In tests, return this sentinel deliberately to exercise the config-reload path.
When it happens
Trigger: Editing skaffold.yaml while `skaffold dev` is running; runDev/doDev returns this sentinel so the watcher loop can reload the schema and start a new cycle.
Common situations: Hot-reloading configuration during development: adding a profile, changing build args, or toggling port-forwards while a dev session is active. Also seen in tests simulating config reload cycles.
Related errors
- didn't sync any files
- exiting dev mode because first build failed: %w
- exiting dev mode because test failed after first build: %w
- exiting dev mode because first render failed: %w
- exiting dev mode because first deploy failed: %w
AI-assisted analysis of GoogleContainerTools/skaffold@a1189de023 (2026-09-05).
Data as JSON: /api/errors/82dfe0f3644dc6e3.
Report an issue: GitHub.