public ValidationResult isValid()

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);
        }
    }