{"record":{"id":"b302473078a384d5","repo":"GoogleContainerTools/skaffold","slug":"creating-tester-w","errorCode":null,"errorMessage":"creating tester: %w","messagePattern":"creating tester: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/runner/new.go","lineNumber":72,"sourceCode":"\tif err != nil {\n\t\tendTrace(instrumentation.TraceEndError(err))\n\t\treturn nil, fmt.Errorf(\"creating tagger: %w\", err)\n\t}\n\n\tstore := build.NewArtifactStore()\n\tg := graph.ToArtifactGraph(runCtx.Artifacts())\n\tsourceDependencies := graph.NewSourceDependenciesCache(runCtx, store, g)\n\n\tisLocalImage := func(imageName string) (bool, error) {\n\t\treturn isImageLocal(runCtx, imageName)\n\t}\n\n\t// Always add skaffold-specific labels, except during `skaffold render`\n\tlabeller := label.NewLabeller(runCtx.AddSkaffoldLabels(), runCtx.CustomLabels(), runCtx.GetRunID())\n\ttester, err := getTester(ctx, runCtx, isLocalImage)\n\tif err != nil {\n\t\tendTrace(instrumentation.TraceEndError(err))\n\t\treturn nil, fmt.Errorf(\"creating tester: %w\", err)\n\t}\n\n\tvar deployer deploy.Deployer\n\n\thydrationDir, err := util.GetHydrationDir(runCtx.Opts, runCtx.WorkingDir, true, isKptRendererOrDeployerUsed(runCtx.Pipelines))\n\tif err != nil {\n\t\treturn nil, fmt.Errorf(\"getting render output path: %w\", err)\n\t}\n\n\trenderer, err := GetRenderer(ctx, runCtx, hydrationDir, labeller.Labels(), runCtx.UsingLegacyHelmDeploy())\n\tif err != nil {\n\t\tendTrace(instrumentation.TraceEndError(err))\n\t\treturn nil, fmt.Errorf(\"creating renderer: %w\", err)\n\t}\n\n\tdeployer, err = GetDeployer(ctx, runCtx, labeller, hydrationDir, runCtx.UsingLegacyHelmDeploy())\n\tif err != nil {\n\t\tendTrace(instrumentation.TraceEndError(err))","sourceCodeStart":54,"sourceCodeEnd":90,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/runner/new.go#L54-L90","documentation":"During runner construction, `getTester` assembles the test steps (custom, structure, container tests) from each pipeline. This error wraps any failure creating that tester component, aborting `NewForConfig` before any build/test runs.","triggerScenarios":"A skaffold.yaml `test` stanza references a configuration that fails validation when the tester is constructed: e.g. an invalid test image reference, unsupported test type, or malformed v2 test config (`structureTests` pointing at unreadable config files).","commonSituations":"Structure test config files listed in skaffold.yaml that don't exist; deprecated/renamed test fields after upgrading skaffold; invalid YAML types in the test section.","solutions":["Check the inner error; fix the `test:` section of skaffold.yaml accordingly.","Verify every structure-test config file path exists and is readable.","Run `skaffold diagnose` to catch schema errors.","If upgrading skaffold, check release notes for changed/removed test config fields and update the schema version (`apiVersion:`) accordingly."],"exampleFix":"// skaffold.yaml before\ntest:\n  - image: app\n    structureTests:\n      - ./missing-config.yaml\n// after\ntest:\n  - image: app\n    structureTests:\n      - ./test/structure.yaml","handlingStrategy":"validation","validationCode":"for _, t := range cfg.Test {\n  for _, f := range t.StructureTests {\n    if _, err := os.Stat(f); err != nil {\n      return fmt.Errorf(\"structure test config %q: %w\", f, err)\n    }\n  }\n}","typeGuard":null,"tryCatchPattern":"runner, err := runner.NewForConfig(runCtx)\nif err != nil {\n  if strings.Contains(err.Error(), \"creating tester\") {\n    return fmt.Errorf(\"skaffold.yaml test config invalid: %w\", err)\n  }\n  return err\n}","preventionTips":["Keep structure-test config files in-repo and verify paths with `skaffold diagnose`.","Pin `apiVersion` in skaffold.yaml and update it deliberately on upgrades.","Lint skaffold.yaml in CI with the current schema."],"tags":["config","testing","skaffold-yaml"],"backgroundTag":"invalid-test-config","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"}