{"record":{"id":"e4a707d58f71bd7e","repo":"GoogleContainerTools/skaffold","slug":"parsing-image-name-w","errorCode":null,"errorMessage":"parsing image name: %w","messagePattern":"parsing image name: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/skaffold/tag/tag.go","lineNumber":49,"sourceCode":"type Tagger interface {\n\t// GenerateTag generates a tag for an artifact.\n\tGenerateTag(ctx context.Context, image latest.Artifact) (string, error)\n}\n\n// GenerateFullyQualifiedImageName resolves the fully qualified image name for an artifact.\n// The workingDir is the root directory of the artifact with respect to the Skaffold root,\n// and imageName is the base name of the image.\nfunc GenerateFullyQualifiedImageName(ctx context.Context, t Tagger, image latest.Artifact) (string, error) {\n\ttag, err := t.GenerateTag(ctx, image)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"generating tag: %w\", err)\n\t}\n\n\t// Tag is already set in imageName\n\tif tag == \"\" {\n\t\t_, err := docker.ParseReference(image.ImageName)\n\t\tif err != nil {\n\t\t\treturn \"\", fmt.Errorf(\"parsing image name: %w\", err)\n\t\t}\n\t\treturn image.ImageName, nil\n\t}\n\n\tfullImageName := fmt.Sprintf(\"%v:%v\", image.ImageName, tag)\n\t_, err = docker.ParseReference(fullImageName)\n\tif err != nil {\n\t\treturn \"\", fmt.Errorf(\"parsing image name: %w\", err)\n\t}\n\treturn fullImageName, nil\n}\n","sourceCodeStart":31,"sourceCodeEnd":61,"githubUrl":"https://github.com/GoogleContainerTools/skaffold/blob/a1189de023efc32d4b8e11f395acc678aa555011/pkg/skaffold/tag/tag.go#L31-L61","documentation":"When the Tagger returns an empty tag (meaning the image name already carries the tag), GenerateFullyQualifiedImageName validates image.ImageName alone with docker.ParseReference. If the bare image name is not a parseable Docker reference, it returns 'parsing image name:'.","triggerScenarios":"GenerateFullyQualifiedImageName called with a Tagger that yields an empty tag and an image.ImageName that docker reference parsing rejects — e.g. containing invalid characters, uppercase with a registry that fails validation, or an empty string.","commonSituations":"Image names built dynamically with spaces or illegal characters; empty imageName passed programmatically; typos in skaffold.yaml artifact image names like 'My App/service'.","solutions":["Fix image.ImageName to a valid Docker reference (lowercase, no spaces, valid registry/repo:tag form)","Ensure the tagger isn't returning an empty tag unintentionally if you expected a generated tag to be appended","Sanitize/normalize the image name before passing the artifact to the tagger","Validate with a quick parse: `docker tag <name> tmp` or a regex for valid repo names"],"exampleFix":"// before\nimage.ImageName = \"My App/service\"\n// after\nimage.ImageName = \"my-app/service\"","handlingStrategy":"validation","validationCode":"if image.ImageName == \"\" {\n    return errors.New(\"artifact image name must not be empty\")\n}\nif _, err := reference.ParseAnyReference(image.ImageName); err != nil {\n    return fmt.Errorf(\"invalid image name %q: %w\", image.ImageName, err)\n}","typeGuard":"func isValidImageName(name string) bool {\n    _, err := reference.ParseNormalizedNamed(name)\n    return err == nil\n}","tryCatchPattern":"tag, err := tag.GenerateFullyQualifiedImageName(ctx, tagger, image)\nif err != nil && strings.Contains(err.Error(), \"parsing image name\") {\n    return fmt.Errorf(\"fix imageName in skaffold.yaml (lowercase, no spaces): %w\", err)\n}","preventionTips":["Use lowercase repo names with no spaces or special chars","Validate artifact image names against the Docker reference grammar in CI","Never pass empty image names programmatically"],"tags":["go","skaffold","docker","image-name","validation"],"backgroundTag":"invalid-image-reference","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"}