theonedev/onedev · error · ExplicitException
Unable to find requirements node
Error message
Unable to find requirements node
What it means
getGemRequirement(MappingNode) parses a YAML node tagged !ruby/object:Gem::Requirement expecting a 'requirements' key holding the version constraints list. When that key is absent it throws ExplicitException("Unable to find requirements node"). Raised during gem publish while parsing dependency entries in the gem's metadata.
Source
Thrown at server-plugin/server-plugin-pack-gem/src/main/java/io/onedev/server/plugin/pack/gem/GemPackHandler.java:538
}
throw new ExplicitException("Unable to find version node");
}
private UserMarshal getGemRequirement(MappingNode node) {
checkArgument(node.getTag().getValue().equals("!ruby/object:Gem::Requirement"));
for (var tuple: node.getValue()) {
if (((ScalarNode)tuple.getKeyNode()).getValue().equals("requirements")) {
var requiredVersions = new LinkedHashMap<String, UserMarshal>();
for (var requirementNode: ((SequenceNode)tuple.getValueNode()).getValue()) {
var operatorAndVersion = ((SequenceNode)requirementNode).getValue();
var operator = ((ScalarNode)operatorAndVersion.get(0)).getValue();
var gemVersion = getGemVersion((MappingNode) operatorAndVersion.get(1));
requiredVersions.put(operator, gemVersion);
}
return getGemRequirement(requiredVersions);
}
}
throw new ExplicitException("Unable to find requirements node");
}
private RubyObject getGemDependency(MappingNode node) {
checkArgument(node.getTag().getValue().equals("!ruby/object:Gem::Dependency"));
var members = new HashMap<String, Object>();
for (var tuple: node.getValue()) {
var keyValue = ((ScalarNode)tuple.getKeyNode()).getValue();
switch (keyValue) {
case "name":
case "type":
members.put("@" + keyValue, ((ScalarNode)tuple.getValueNode()).getValue());
break;
case "requirement":
case "version_requirements":
members.put("@" + keyValue, getGemRequirement((MappingNode) tuple.getValueNode()));
break;View on GitHub (pinned to d44925c47c)
Solutions
- Rebuild the gem with standard `gem build` and re-push.
- Inspect metadata (tar -xOf mygem-1.0.0.gem metadata.gz | gzip -d) to confirm each Gem::Requirement has a 'requirements' key.
- Update RubyGems before building if the producing toolchain is old.
- Simplify or regenerate the gemspec's add_dependency declarations so standard tooling serializes them.
Example fix
// before (malformed YAML)
--- !ruby/object:Gem::Requirement
constraints:
- [">=", !ruby/object:Gem::Version {version: 2.0.0}]
// after
--- !ruby/object:Gem::Requirement
requirements:
- - ">="
- !ruby/object:Gem::Version
version: 2.0.0 Defensive patterns
Strategy: validation
Validate before calling
# validate dependency metadata before pushing tar -xOf mygem-1.0.0.gem metadata.gz | gzip -d | grep -B2 -A6 'Gem::Requirement' # ensure every Gem::Requirement mapping contains a 'requirements' key
Try / catch
begin
gem_push('onedev-host', 'mygem-1.0.0.gem')
rescue => e
raise unless e.message.include?('Unable to find requirements node')
warn 'Malformed dependency metadata: rebuild with `gem build`'
end Prevention
- Declare dependencies only via add_dependency/add_runtime_dependency in the gemspec.
- Build with standard tooling; avoid third-party gem packers.
- Verify gem installability locally (gem install ./mygem-1.0.0.gem) before pushing.
When it happens
Trigger: Publishing a gem whose metadata Gem::Requirement mapping lacks 'requirements' — malformed dependency YAML, truncated metadata.gz, or gems generated by nonstandard packaging tools.
Common situations: Custom gem builders writing dependency data by hand; corrupted/partial uploads; very old or patched RubyGems producing a different serialization layout.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Unable to find version node
- Malformed build spec
- Circular dependencies (
- Error validating dependency job parameters (dependency job:
- Dependency job not found (
AI-assisted analysis of theonedev/onedev@d44925c47c (2026-09-06).
Data as JSON: /api/errors/83af109f52d0e7e7.
Report an issue: GitHub.