{"record":{"id":"12a7887ce1d01c3a","repo":"theonedev/onedev","slug":"invalid-build-id-number","errorCode":null,"errorMessage":"Invalid build id/number","messagePattern":"Invalid build id/number","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/io/onedev/server/buildspecmodel/inputspec/BuildChoiceInput.java","lineNumber":43,"sourceCode":"\t\tbuffer.append(\"    @BuildChoice(useNumber=true)\\n\");\n\t\tif (inputSpec.isAllowMultiple())\n\t\t\tinputSpec.appendMethods(buffer, index, \"List<Long>\", null, null);\n\t\telse \n\t\t\tinputSpec.appendMethods(buffer, index, \"Long\", null, null);\n\t\t\n\t\treturn buffer.toString();\n\t}\n\n\tpublic static Object convertToObject(InputSpec inputSpec, List<String> strings) {\n\t\ttry {\n\t\t\tif (inputSpec.isAllowMultiple()) \n\t\t\t\treturn strings.stream().map(it->Long.valueOf(it)).collect(Collectors.toList());\n\t\t\telse if (strings.size() == 0) \n\t\t\t\treturn null;\n\t\t\telse  \n\t\t\t\treturn Long.valueOf(strings.iterator().next());\n\t\t} catch (NumberFormatException e) {\n\t\t\tthrow new ValidationException(\"Invalid build id/number\");\n\t\t}\n\t}\n\n\tpublic static List<String> convertToStrings(InputSpec inputSpec, Object value) {\n\t\tif (value instanceof List)\n\t\t\treturn ((List<?>)value).stream().map(it->it.toString()).collect(Collectors.toList());\n\t\telse if (value instanceof Long)\n\t\t\treturn Lists.newArrayList(value.toString());\n\t\telse\n\t\t\treturn new ArrayList<>();\n\t}\n\n}\n","sourceCodeStart":25,"sourceCodeEnd":57,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/io/onedev/server/buildspecmodel/inputspec/BuildChoiceInput.java#L25-L57","documentation":"BuildChoiceInput converts user-supplied form strings into build ids (Long) for build-choice input parameters. Any string that is not a valid Long raises a NumberFormatException, which is rethrown as ValidationException('Invalid build id/number').","triggerScenarios":"convertToObject receives a non-numeric string where a build id/number is expected (e.g. user typed text into the choice field, or a parameter value referencing a build was hand-edited).","commonSituations":"Typing a build number with non-digit characters (#12, build-12); supplying a branch/commit string instead of a build number; default value in job spec referencing a build that no longer resolves to a number.","solutions":["Enter the numeric build id or number only (e.g. 42, not #42).","Use the build picker UI instead of free-typing the value.","Fix the parameter's default value in the build spec to a valid numeric build reference.","If referencing builds across projects, verify the referenced build exists and use ${} property substitution that resolves to a number."],"exampleFix":"// before (parameter value)\nvalue: \"#123\"\n// after\nvalue: \"123\"","handlingStrategy":"validation","validationCode":"// JS/Java check before submitting\nfunction isValidBuildRef(v) { return /^\\d+$/.test(String(v).trim()); }\nif (!isValidBuildRef(inputValue)) throw new Error(\"Build reference must be a numeric id/number\");","typeGuard":"boolean isNumericBuildRef(Object v) {\n  return v instanceof String && ((String) v).trim().matches(\"\\\\d+\");\n}","tryCatchPattern":"try {\n    Object build = input.convertToObject(strings);\n} catch (ValidationException e) {\n    // show \"enter numeric build id/number\" hint\n}","preventionTips":["Always use the build picker UI instead of free text.","Strip decoration like '#' from build numbers before submitting.","Validate default values in job specs resolve to numbers."],"tags":["validation","forms","input","ci"],"backgroundTag":"invalid-identifier-format","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}