{"record":{"id":"dbdeba788745d02c","repo":"hashicorp/packer","slug":"unsupported-format-s","errorCode":null,"errorMessage":"unsupported format: %s","messagePattern":"unsupported format: (.+?)","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/sbom/generator.go","lineNumber":63,"sourceCode":"\t\tcfg.Scope = ScopeSquashed\n\t}\n\n\treturn &Generator{config: cfg}\n}\n\n// ParseFormatFromArgs parses Syft-style format argument\n// This is a PACKAGE-LEVEL EXPORTED FUNCTION\nfunc ParseFormatFromArgs(formatArg string) (Format, error) {\n\tformatArg = strings.ToLower(formatArg)\n\n\tif strings.Contains(formatArg, \"cyclonedx\") {\n\t\treturn FormatCycloneDX, nil\n\t}\n\tif strings.Contains(formatArg, \"spdx\") {\n\t\treturn FormatSPDX, nil\n\t}\n\n\treturn \"\", fmt.Errorf(\"unsupported format: %s\", formatArg)\n}\n\nfunc ParseScopeFromArgs(scopeArg string) (string, error) {\n\tscopeArg = strings.ToLower(strings.TrimSpace(scopeArg))\n\n\tswitch scopeArg {\n\tcase ScopeSquashed:\n\t\treturn ScopeSquashed, nil\n\tcase ScopeAllLayers, \"all\", \"alllayers\":\n\t\treturn ScopeAllLayers, nil\n\tdefault:\n\t\treturn \"\", fmt.Errorf(\"unsupported scope: %s (supported: squashed, all-layers)\", scopeArg)\n\t}\n}\n","sourceCodeStart":45,"sourceCodeEnd":78,"githubUrl":"https://github.com/hashicorp/packer/blob/eb36e3c3e48a036f3e8cc94087636ee72e1303c9/internal/sbom/generator.go#L45-L78","documentation":"ParseFormatFromArgs accepts only Syft-style format arguments containing 'cyclonedx' or 'spdx' (case-insensitive substring match). Any other string returns `unsupported format: %s`. The SBOM generator supports exactly two output formats: CycloneDX JSON and SPDX JSON.","triggerScenarios":"Calling ParseFormatFromArgs(\"json\"), (\"\"), (\"syft-json\"), (\"text\"), or any format string not containing cyclonedx/spdx; typos like \"cyclone-dx\" actually work (contains cyclonedx? no — 'cyclone-dx' does not contain 'cyclonedx') so hyphenated spellings fail.","commonSituations":"Passing Syft CLI formats not enabled here (syft-json, template, cyclonedx-xml); typos or casing/hyphenation variants like \"CycloneDX-XML\"; users copying flags from syft CLI docs instead of this integration's supported list.","solutions":["Use a format string containing \"cyclonedx\" or \"spdx\", e.g. \"cyclonedx-json\" or \"spdx-json\"","Prefer the Format constants (FormatCycloneDX/FormatSPDX) instead of raw strings","Note XML variants are not supported — only the JSON encoders are wired in encodeToFormat","Normalize hyphenation: \"cyclonedx\" must appear without an internal hyphen"],"exampleFix":"// before\nformat, err := sbom.ParseFormatFromArgs(\"syft-json\")\n// after\nformat, err := sbom.ParseFormatFromArgs(\"cyclonedx-json\")","handlingStrategy":"validation","validationCode":"allowed := []string{\"cyclonedx\", \"spdx\"}\nnorm := strings.ToLower(formatArg)\nfor _, a := range allowed {\n    if strings.Contains(norm, a) { /* ok */ }\n}","typeGuard":"func isSupportedFormat(f string) bool {\n    n := strings.ToLower(f)\n    return strings.Contains(n, \"cyclonedx\") || strings.Contains(n, \"spdx\")\n}","tryCatchPattern":"format, err := sbom.ParseFormatFromArgs(arg)\nif err != nil {\n    return fmt.Errorf(\"format %q not supported; use cyclonedx-json or spdx-json: %w\", arg, err)\n}","preventionTips":["Use the exported Format constants instead of raw strings","Whitelist formats at the HCL/template config layer","Remember only JSON encoders (CycloneDX/SPDX) are wired in"],"tags":["go","validation","config","sbom"],"backgroundTag":"unsupported-format","analyzedSha":"eb36e3c3e48a036f3e8cc94087636ee72e1303c9","analyzedAt":"2026-09-05T13:20:43.127Z","contentChangedAt":"2026-09-05T13:20:43.127Z","schemaVersion":2},"datasetVersion":"2026-09-12T17:17:11.597Z"}