{"record":{"id":"16d75145c8e4ad5f","repo":"GoogleContainerTools/skaffold","slug":"unable-to-evaluate-build-args-w","errorCode":null,"errorMessage":"unable to evaluate build args: %w","messagePattern":"unable to evaluate build args: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/docker/image.go","lineNumber":346,"sourceCode":"\t\treturn fmt.Errorf(\"docker build options, secrets and ssh, require BuildKit - set `useBuildkit: true` in your config, or run with `DOCKER_BUILDKIT=1`\")\n\t}\n\treturn nil\n}\n\n// Build performs a docker build and returns the imageID.\nfunc (l *localDaemon) Build(ctx context.Context, out io.Writer, workspace string, artifact string, a *latest.DockerArtifact, opts BuildOptions) (string, error) {\n\tlog.Entry(ctx).Debugf(\"Running docker build: context: %s, dockerfile: %s\", workspace, a.DockerfilePath)\n\n\tif err := l.CheckCompatible(a); err != nil {\n\t\treturn \"\", err\n\t}\n\timageInfoEnv, err := EnvTags(opts.Tag)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"couldn't parse image tag: %w\", err)\n\t}\n\tbuildArgs, err := EvalBuildArgsWithEnv(opts.Mode, workspace, a.DockerfilePath, a.BuildArgs, opts.ExtraBuildArgs, imageInfoEnv)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"unable to evaluate build args: %w\", err)\n\t}\n\n\t// Like `docker build`, we ignore the errors\n\t// See https://github.com/docker/cli/blob/75c1bb1f33d7cedbaf48404597d5bf9818199480/cli/command/image/build.go#L364\n\tauthConfigs, _ := DefaultAuthHelper.GetAllAuthConfigs(ctx)\n\n\tbuildCtx, buildCtxWriter := io.Pipe()\n\tgo func() {\n\t\terr := CreateDockerTarContext(ctx, buildCtxWriter,\n\t\t\tNewBuildConfig(workspace, artifact, a.DockerfilePath, buildArgs), l.cfg)\n\t\tif err != nil {\n\t\t\tbuildCtxWriter.CloseWithError(fmt.Errorf(\"creating docker context: %w\", err))\n\t\t\treturn\n\t\t}\n\t\tbuildCtxWriter.Close()\n\t}()\n\n\tprogressOutput := progress.NewProgressOutput(out)","sourceCodeStart":328,"sourceCodeEnd":364,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/docker/image.go#L328-L364","documentation":"After parsing the tag, Build evaluates the artifact's Docker build args (including env-var interpolation and extra build args) via EvalBuildArgsWithEnv. If any buildarg value cannot be evaluated — for example because it references an unset environment variable in requires-env mode or is malformed — the build fails before the context is created.","triggerScenarios":"Calling localDaemon.Build where a.DockerfilePath's artifact a.BuildArgs contain entries EvalBuildArgsWithEnv cannot resolve given opts.Mode, opts.ExtraBuildArgs, and imageInfoEnv — e.g. a build arg defined with an env value that is unset, or invalid buildarg syntax.","commonSituations":"skaffold.yaml declares `buildArgs: {FOO: \"{{.MY_VAR}}\"}` but MY_VAR is not exported; build args require env vars that exist locally but not in CI; mismatch between BuildMode and available values (e.g. requiring all args be provided via CLI).","solutions":["Ensure every environment variable referenced by build args is set in the build environment","Fix the buildArgs entries in skaffold.yaml for typos or invalid template syntax","Pass missing values via skaffold's --default-repo/--build-arg style flags or opts.ExtraBuildArgs","Read the wrapped inner error (%w) to identify exactly which build arg failed"],"exampleFix":"// before (skaffold.yaml)\nbuild:\n  artifacts:\n    - image: app\n      docker:\n        buildArgs:\n          VERSION: \"{{.APP_VERSION}}\"\n// after (export the var first, or hardcode)\nexport APP_VERSION=1.2.3\n# or\nbuildArgs:\n  VERSION: \"1.2.3\"","handlingStrategy":"validation","validationCode":"for k, v := range buildArgs {\n\tif strings.HasPrefix(v, \"{{\") {\n\t\t// ensure every referenced env var exists before building\n\t\tif err := verifyTemplateVars(v, os.Environ()); err != nil {\n\t\t\treturn fmt.Errorf(\"build arg %s: %w\", k, err)\n\t\t}\n\t}\n}","typeGuard":null,"tryCatchPattern":"imageID, err := daemon.Build(...)\nif err != nil && strings.Contains(err.Error(), \"unable to evaluate build args\") {\n\treturn fmt.Errorf(\"check buildArgs/env in config: %w\", err)\n}","preventionTips":["Export all env vars referenced by build args in the build environment and CI","Prefer explicit values over templated env lookups where possible","Keep buildArgs definitions minimal and linted in skaffold.yaml"],"tags":["docker","build-args","configuration"],"backgroundTag":"build-args-evaluation-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"}