{"record":{"id":"081d5eadbfda4c74","repo":"GoogleContainerTools/skaffold","slug":"writing-build-output-to-file-w","errorCode":null,"errorMessage":"writing build output to file: %w","messagePattern":"writing build output to file: %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/skaffold/app/cmd/build.go","lineNumber":89,"sourceCode":"\treturn withRunner(ctx, out, func(r runner.Runner, configs []util.VersionedConfig) error {\n\t\tbRes, err := r.Build(ctx, buildOut, targetArtifacts(opts, configs))\n\n\t\tif quietFlag || buildOutputFlag != \"\" {\n\t\t\tcmdOut := flags.BuildOutput{Builds: bRes}\n\t\t\tvar buildOutput bytes.Buffer\n\t\t\tif err := buildFormatFlag.Template().Execute(&buildOutput, cmdOut); err != nil {\n\t\t\t\treturn fmt.Errorf(\"executing template: %w\", err)\n\t\t\t}\n\n\t\t\tif quietFlag {\n\t\t\t\tif _, err := out.Write(buildOutput.Bytes()); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"writing build output: %w\", err)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif buildOutputFlag != \"\" {\n\t\t\t\tif err := os.WriteFile(buildOutputFlag, buildOutput.Bytes(), 0644); err != nil {\n\t\t\t\t\treturn fmt.Errorf(\"writing build output to file: %w\", err)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn err\n\t})\n}\n\nfunc targetArtifacts(opts config.SkaffoldOptions, configs []util.VersionedConfig) []*latest.Artifact {\n\tvar targetArtifacts []*latest.Artifact\n\tfor _, cfg := range configs {\n\t\tfor _, artifact := range cfg.(*latest.SkaffoldConfig).Build.Artifacts {\n\t\t\tif opts.IsTargetImage(artifact) {\n\t\t\t\ttargetArtifacts = append(targetArtifacts, artifact)\n\t\t\t}\n\t\t}\n\t}\n\treturn targetArtifacts","sourceCodeStart":71,"sourceCodeEnd":107,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/cmd/skaffold/app/cmd/build.go#L71-L107","documentation":"In `skaffold build` (cmd/skaffold/app/cmd/build.go:89), when --build-output is set, the rendered build results are written to the specified file via os.WriteFile with mode 0644. If writing the file fails, this error wraps the OS error.","triggerScenarios":"Running `skaffold build --build-output <path>` where the path is unwritable: parent directory does not exist, permission denied on the target or directory, target path is a directory, or disk is full.","commonSituations":"CI script pointing --build-output at a directory that was never created; read-only filesystem or volume in the CI container; file owned by another user; path is an existing directory rather than a file.","solutions":["Create the parent directory of the --build-output path before running (mkdir -p)","Fix permissions on the target file/directory so the running user can write (chmod/chown)","Point --build-output at a file path, not an existing directory","Check available disk space and that the filesystem is not mounted read-only"],"exampleFix":"// before\n// skaffold build --build-output out/build.json   # out/ does not exist\n// after\n// mkdir -p out && skaffold build --build-output out/build.json","handlingStrategy":"validation","validationCode":"// Pre-flight the --build-output target before running\noutPath := \"out/build.json\"\nif dir := filepath.Dir(outPath); dir != \".\" {\n    if err := os.MkdirAll(dir, 0o755); err != nil {\n        return err\n    }\n}\nif fi, err := os.Stat(outPath); err == nil && fi.IsDir() {\n    return fmt.Errorf(\"--build-output target is a directory: %s\", outPath)\n}","typeGuard":null,"tryCatchPattern":"if err := sh.Run(\"skaffold\", \"build\", \"--build-output\", outPath); err != nil {\n    if strings.Contains(err.Error(), \"writing build output to file\") {\n        log.Fatalf(\"cannot write %s: create parent dir and check permissions\", outPath)\n    }\n    return err\n}","preventionTips":["mkdir -p the output directory in the pipeline before building","Use writable workspace paths in CI containers (not read-only mounts)","Point --build-output at a file, never a directory","Check free disk space in build jobs"],"tags":["cli","build","file-write","filesystem"],"backgroundTag":"file-write-failed","analyzedSha":"a1189de023efc32d4b8e11f395acc678aa555011","analyzedAt":"2026-09-05T12:09:27.064Z","contentChangedAt":"2026-09-05T12:09:27.064Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}