{"record":{"id":"aac4d6c5cf010875","repo":"slimtoolkit/slim","slug":"bad-architecture-value","errorCode":null,"errorMessage":"bad architecture value","messagePattern":"bad architecture value","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/imagebuilder/internalbuilder/engine.go","lineNumber":70,"sourceCode":"\tif len(options.ImageConfig.Config.Entrypoint) == 0 &&\n\t\tlen(options.ImageConfig.Config.Cmd) == 0 {\n\t\treturn nil, fmt.Errorf(\"missing startup info\")\n\t}\n\n\tif len(options.Layers) == 0 {\n\t\treturn nil, fmt.Errorf(\"no layers\")\n\t}\n\n\tif len(options.Layers) > 255 {\n\t\treturn nil, fmt.Errorf(\"too many layers\")\n\t}\n\n\tswitch options.ImageConfig.Architecture {\n\tcase \"\":\n\t\toptions.ImageConfig.Architecture = \"amd64\"\n\tcase \"arm64\", \"amd64\":\n\tdefault:\n\t\treturn nil, fmt.Errorf(\"bad architecture value\")\n\t}\n\n\tvar img v1.Image\n\tif options.From == \"\" {\n\t\t//same as FROM scratch\n\t\timg = empty.Image\n\t} else {\n\t\treturn nil, fmt.Errorf(\"custom base images are not supported yet\")\n\t}\n\n\timgRunConfig := v1.Config{\n\t\tUser:            options.ImageConfig.Config.User,\n\t\tExposedPorts:    options.ImageConfig.Config.ExposedPorts,\n\t\tEnv:             options.ImageConfig.Config.Env,\n\t\tEntrypoint:      options.ImageConfig.Config.Entrypoint,\n\t\tCmd:             options.ImageConfig.Config.Cmd,\n\t\tVolumes:         options.ImageConfig.Config.Volumes,\n\t\tWorkingDir:      options.ImageConfig.Config.WorkingDir,","sourceCodeStart":52,"sourceCodeEnd":88,"githubUrl":"https://github.com/slimtoolkit/slim/blob/81940d17fa112cc678e32209214bcb2355cb3004/pkg/imagebuilder/internalbuilder/engine.go#L52-L88","documentation":"The builder validates options.ImageConfig.Architecture against a strict allow-list: empty (defaults to amd64), amd64, or arm64. Any other value returns this error before image creation. The internal engine only supports building for these two architectures.","triggerScenarios":"Setting SimpleBuildOptions.ImageConfig.Architecture to values like \"386\", \"arm\", \"arm/v7\", \"s390x\", or a typo such as \"AMD64\"/\"x86_64\" and calling Build.","commonSituations":"Porting a Dockerfile with FROM --platform=linux/386; copying architecture strings from `uname -m` output (x86_64, aarch64) instead of the Go architecture naming; multi-arch build scripts passing unsupported platforms.","solutions":["Set ImageConfig.Architecture to \"amd64\" or \"arm64\" (or leave it empty to default to amd64)","Normalize inputs: map x86_64->amd64 and aarch64->arm64 before calling Build","Use lowercase values; \"AMD64\" is rejected","If another architecture is required, extend the switch in pkg/imagebuilder/internalbuilder/engine.go:65 and use a builder that supports the target (e.g. buildx)"],"exampleFix":"// before\nopts.ImageConfig.Architecture = \"x86_64\"\n// after\narch := \"x86_64\"\nif arch == \"x86_64\" { arch = \"amd64\" }\nif arch == \"aarch64\" { arch = \"arm64\" }\nopts.ImageConfig.Architecture = arch // amd64|arm64|\"\" only","handlingStrategy":"validation","validationCode":"switch opts.ImageConfig.Architecture {\ncase \"\", \"amd64\", \"arm64\":\ndefault:\n    return fmt.Errorf(\"unsupported arch %q; use amd64 or arm64\", opts.ImageConfig.Architecture)\n}","typeGuard":null,"tryCatchPattern":"if _, err := engine.Build(opts); err != nil {\n    if strings.Contains(err.Error(), \"bad architecture value\") {\n        opts.ImageConfig.Architecture = \"amd64\" // or map from runtime.GOARCH\n    }\n    return err\n}","preventionTips":["Normalize uname output (x86_64->amd64, aarch64->arm64) before setting Architecture","Always lowercase the architecture value","Leave Architecture empty to accept the amd64 default"],"tags":["imagebuild","architecture","validation","platform"],"backgroundTag":"unsupported-architecture","analyzedSha":"81940d17fa112cc678e32209214bcb2355cb3004","analyzedAt":"2026-08-31T23:06:12.682Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-08T05:18:18.240Z"}