GoogleContainerTools/skaffold · error

writing config to file: %w

Error message

writing config to file: %w

What it means

After writing generated manifests, WriteData writes the generated skaffold.yaml pipeline to c.Opts.ConfigurationFile via os.WriteFile. Failure is wrapped as 'writing config to file'. This is the last persistence step of `skaffold init`.

Source

Thrown at pkg/skaffold/initializer/init.go:142

	if !c.Force && !c.Opts.AutoInit {
		if done, err := prompt.WriteSkaffoldConfig(out, pipeline, newManifests, c.Opts.ConfigurationFile); done {
			return err
		}
	}

	for path, manifest := range newManifests {
		if err = os.WriteFile(path, manifest, 0644); err != nil {
			return fmt.Errorf("writing k8s manifest to file: %w", err)
		}
		fmt.Fprintf(out, "Generated manifest %s was written\n", path)
	}

	if c.Opts.AutoInit {
		return nil
	}

	if err = os.WriteFile(c.Opts.ConfigurationFile, pipeline, 0644); err != nil {
		return fmt.Errorf("writing config to file: %w", err)
	}

	fmt.Fprintf(out, "Configuration %s was written\n", c.Opts.ConfigurationFile)
	tips.PrintForInit(out, c.Opts)

	return nil
}

View on GitHub (pinned to a1189de023)

Solutions

  1. Create the parent directory of --configuration-file first (mkdir -p)
  2. Check the wrapped OS error; fix permissions or ownership on the existing skaffold.yaml
  3. Pass a writable --configuration-file path, or run in a writable workspace

Example fix

// before
skaffold init --configuration-file configs/skaffold.yaml  # configs/ missing
// after
mkdir -p configs && skaffold init --configuration-file configs/skaffold.yaml
Defensive patterns

Strategy: validation

Validate before calling

cfgPath := c.Opts.ConfigurationFile
if dir := filepath.Dir(cfgPath); dir != "." {
    if err := os.MkdirAll(dir, 0o755); err != nil {
        return fmt.Errorf("cannot create config dir %s: %w", dir, err)
    }
}
if fi, err := os.Stat(cfgPath); err == nil && fi.IsDir() {
    return fmt.Errorf("%s is a directory", cfgPath)
}

Try / catch

if err := initData.WriteData(out); err != nil {
    if strings.Contains(err.Error(), "writing config to file") {
        return fmt.Errorf("check --configuration-file path, permissions, and that the repo is writable: %w", err)
    }
    return err
}

Prevention

When it happens

Trigger: os.WriteFile(c.Opts.ConfigurationFile, pipeline, 0644) fails — default skaffold.yaml path unwritable, file exists with wrong permissions, path is a directory, parent dir missing (when --configuration-file specifies a nested path), or read-only filesystem.

Common situations: --configuration-file given as some/config.yaml where some/ doesn't exist; existing skaffold.yaml owned by root; running in a container with read-only source mount.

Understand the failure class

Background: "Permission denied" / "Failed to write" file errors: why a library can't write its files to disk (EACCES, EPERM, ENOSPC) and how to fix them — this error's family across 43 libraries.

Related errors


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