private static List<GitLabBranchBuild> findBuildsFromUpstreamCauses(List<Cause> causes) { for (Cause cause : causes) { if (cause instanceof UpstreamCause) { List<Cause> upCauses = ((UpstreamCause) cause).getUpstreamCauses(); // Non null, returns empty list when none are set for (Cause upCause : upCauses) { if (upCause instanceof GitLabWebHookCause) { GitLabWebHookCause gitlabCause = (GitLabWebHookCause) upCause; return Collections.singletonList( new GitLabBranchBuild(gitlabCause.getData().getSourceProjectId().toString(), gitlabCause.getData().getLastCommit())); } } List<GitLabBranchBuild> builds = findBuildsFromUpstreamCauses(upCauses); if (!builds.isEmpty()) { return builds; } } } return Collections.emptyList(); }
/** * Return the current build user Id. * * @param causes build causes. * @param envVars environment variables. * @return user name. */ public static String prepareBuildUserId(List<Cause> causes, EnvVars envVars) { String buildUserId = null; if (causes != null && causes.size() > 0) { if (causes.get(0) instanceof UserIdCause) { buildUserId = ((UserIdCause) causes.get(0)).getUserId(); } else if (causes.get(0) instanceof UpstreamCause) { List<Cause> upstreamCauses = ((UpstreamCause) causes.get(0)).getUpstreamCauses(); buildUserId = prepareBuildUserId(upstreamCauses, envVars); } } return buildUserId; }
/** * Retrun the build cause. * * @return build cause. */ public static String prepareBuildCause(List<Cause> causes) { String buildCause = null; if (causes != null && causes.size() > 0) { for (Cause cause : causes) { if (cause instanceof UserIdCause) { buildCause = ((UserIdCause) causes.get(0)).getUserName(); } else if (cause instanceof UpstreamCause) { List<Cause> upstreamCauses = ((UpstreamCause) cause).getUpstreamCauses(); buildCause = prepareBuildCause(upstreamCauses); } else { buildCause = cause.getClass().getSimpleName(); } } } return buildCause == null ? buildCause : buildCause.replace("Cause", ""); }
stack.push(uc.getUpstreamCauses());
/** * Return the current build user. * * @param causes build causes. * @param envVars environment variables. * @return user name. */ public static String prepareBuildUserName(List<Cause> causes, EnvVars envVars) { String buildUser = "anonymous"; // For multi branch jobs, while PR building. if (Util.fixEmpty(envVars.get("CHANGE_AUTHOR")) != null) { return envVars.get("CHANGE_AUTHOR"); } if (causes != null && causes.size() > 0) { if (causes.get(0) instanceof UserIdCause) { buildUser = ((UserIdCause) causes.get(0)).getUserName(); } else if (causes.get(0) instanceof UpstreamCause) { List<Cause> upstreamCauses = ((UpstreamCause) causes.get(0)).getUpstreamCauses(); buildUser = prepareBuildUserName(upstreamCauses, envVars); } } return buildUser; }
/** * Inserts root cause names to the specified target container. * @param causeNamesTarget Target set. May receive null items * @param cause Cause to be added. For {@code Cause.UstreamCause} there will be in-depth search * @param depth Current search depth. {@link #MAX_UPSTREAM_DEPTH} is a limit */ private static void insertRootCauseNames(@Nonnull Set<String> causeNamesTarget, @CheckForNull Cause cause, int depth) { if (cause instanceof Cause.UpstreamCause) { if (depth == MAX_UPSTREAM_DEPTH) { causeNamesTarget.add("DEEPLYNESTEDCAUSES"); } else { Cause.UpstreamCause c = (Cause.UpstreamCause) cause; List<Cause> upstreamCauses = c.getUpstreamCauses(); for (Cause upstreamCause : upstreamCauses) insertRootCauseNames(causeNamesTarget, upstreamCause, depth + 1); } } else { //TODO: Accordig to the current design this list may receive null for unknown trigger. Bug? // Should actually return UNKNOWN causeNamesTarget.add(getTriggerName(cause)); } }
/** * Return the current build user. * * @param causes build causes. * @return user name. */ protected static String prepareBuildUserId(List<Cause> causes) { String buildUser = "anonymous"; if (causes != null && causes.size() > 0) { if (causes.get(0) instanceof UserIdCause) { buildUser = ((UserIdCause) causes.get(0)).getUserId(); } else if (causes.get(0) instanceof UpstreamCause) { List<Cause> upstreamCauses = ((UpstreamCause) causes.get(0)).getUpstreamCauses(); buildUser = prepareBuildUserId(upstreamCauses); } } return Util.fixEmpty(buildUser) == null ? "anonymous" : buildUser; }