in src/main/java/org/apache/sling/cli/impl/ci/CIStatusValidator.java [139:184]
public ValidationResult isValid(Path artifactFilePath) {
log.trace("isValid");
String ciEndpoint = getCIStatusEndpoint(artifactFilePath);
if (ciEndpoint == null) {
return new ValidationResult(false, "Cannot extract a CI endpoint from " + artifactFilePath.getFileName());
}
JsonObject status = null;
try {
status = fetchJson(ciEndpoint);
if ("pending".equals(status.get(PN_STATE).getAsString())
&& status.get("statuses").getAsJsonArray().size() == 0) {
log.debug("No build found for tag");
if (status.has("commit_url")) {
ciEndpoint = status.get("commit_url").getAsString();
log.debug("Getting parent from commit url: {}", ciEndpoint);
JsonObject commit = fetchJson(ciEndpoint);
if (commit.has(PN_PARENTS) && commit.get(PN_PARENTS).getAsJsonArray().size() > 0) {
log.debug("Loading commit status: {}", ciEndpoint);
ciEndpoint = commit.get(PN_PARENTS).getAsJsonArray().get(0).getAsJsonObject().get("url")
.getAsString() + "/status";
status = fetchJson(ciEndpoint);
}
}
}
List<String> messageEntries = new ArrayList<>();
status.get("statuses").getAsJsonArray().forEach(it -> {
JsonObject item = it.getAsJsonObject();
messageEntries.add("\t" + item.get("context").getAsString());
messageEntries.add("\t\tState: " + item.get(PN_STATE).getAsString());
messageEntries.add("\t\tDescription: " + item.get("description").getAsString());
messageEntries.add("\t\tSee: " + item.get("target_url").getAsString());
});
String message = String.join("\n", messageEntries);
if ("success".equals(status.get(PN_STATE).getAsString())) {
return new ValidationResult(true, message);
} else {
return new ValidationResult(false, message);
}
} catch (Exception e) {
return new ValidationResult(false,
"Failed to get CI Status: " + e.toString() + "\nCI Status Url: " + ciEndpoint + "\nCI Status Body: " + status);
}
}