{"record":{"id":"97d20684c24948b1","repo":"gohugoio/hugo","slug":"empty-deployment-target","errorCode":null,"errorMessage":"empty deployment target","messagePattern":"empty deployment target","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"deploy/deployconfig/deployConfig.go","lineNumber":154,"sourceCode":"\n// DecodeConfig creates a config from a given Hugo configuration.\nfunc DecodeConfig(cfg config.Provider) (DeployConfig, error) {\n\tdcfg := DefaultConfig\n\n\tif !cfg.IsSet(DeploymentConfigKey) {\n\t\treturn dcfg, nil\n\t}\n\tif err := mapstructure.WeakDecode(cfg.GetStringMap(DeploymentConfigKey), &dcfg); err != nil {\n\t\treturn dcfg, err\n\t}\n\n\tif dcfg.Workers <= 0 {\n\t\tdcfg.Workers = 10\n\t}\n\n\tfor _, tgt := range dcfg.Targets {\n\t\tif *tgt == (Target{}) {\n\t\t\treturn dcfg, errors.New(\"empty deployment target\")\n\t\t}\n\t\tif err := tgt.ParseIncludeExclude(); err != nil {\n\t\t\treturn dcfg, err\n\t\t}\n\t}\n\tvar err error\n\tfor _, m := range dcfg.Matchers {\n\t\tif *m == (Matcher{}) {\n\t\t\treturn dcfg, errors.New(\"empty deployment matcher\")\n\t\t}\n\t\tm.Re, err = regexp.Compile(m.Pattern)\n\t\tif err != nil {\n\t\t\treturn dcfg, fmt.Errorf(\"invalid deployment.matchers.pattern: %v\", err)\n\t\t}\n\t}\n\tfor _, o := range dcfg.Order {\n\t\tre, err := regexp.Compile(o)\n\t\tif err != nil {","sourceCodeStart":136,"sourceCodeEnd":172,"githubUrl":"https://github.com/gohugoio/hugo/blob/52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2/deploy/deployconfig/deployConfig.go#L136-L172","documentation":"During deploy config decoding, each entry in deployment.targets is compared to the zero-value Target{}. An entry that decoded to all-empty fields (no name, no url, etc.) is rejected as an empty target.","triggerScenarios":"A `[[deployment.targets]]` table with no keys, or a malformed/placeholder entry that fails to populate any field.","commonSituations":"Leftover placeholder target in config; a YAML/TOML indentation error that yields an empty map; copy-paste of a target stub without filling it in.","solutions":["Provide at least name and url for every [[deployment.targets]] entry.","Remove any empty/placeholder target entries from the config.","Validate config indentation so targets decode with their fields."],"exampleFix":"// before\n[[deployment.targets]]\n# (no fields)\n// after\n[[deployment.targets]]\nname = \"mybucket\"\nurl = \"s3://my-bucket?region=us-east-1\"","handlingStrategy":"validation","validationCode":"// Reject empty target entries before deploying\nfor _, t := range targets {\n    if t == (Target{}) {\n        return errors.New(\"empty deployment target found; populate name and url\")\n    }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Give every [[deployment.targets]] entry a name and url.","Remove placeholder target stubs.","Validate config with `hugo config` before deploying."],"tags":["hugo","deploy","config"],"backgroundTag":null,"analyzedSha":"52c9bd7908b4d02d4d0ff8f82a888834d6ee10d2","analyzedAt":"2026-08-09T21:49:36.660Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}