protected String getApiRoute() { return "/repos/"+owner.getRepository().getFullName()+"/pulls/comments/"+id; }
protected String getApiRoute() { return "/repos/"+owner.getRepository().getFullName()+"/pulls/comments/"+id; }
protected String getApiRoute() { return "/repos/"+owner.getRepository().getFullName()+"/pulls/comments/"+id; }
private void deleteBranch(Run<?, ?> build, Launcher launcher, final TaskListener listener) { if (!getDeleteOnMerge()) { return; } String branchName = pr.getHead().getRef(); try { GHRepository repo = pr.getRepository(); GHRef ref = repo.getRef("heads/" + branchName); ref.delete(); listener.getLogger().println("Deleted branch " + branchName); } catch (IOException e) { listener.getLogger().println("Unable to delete branch " + branchName); e.printStackTrace(listener.getLogger()); } }
public void mergePr(GHPullRequest pullRequest, String message) throws IOException { //match merge method to enum, case insensitive GHPullRequest.MergeMethod gitMergeMethod = Arrays.stream(GHPullRequest.MergeMethod.values()) .filter(e -> e.name().equalsIgnoreCase(mergeMethod)).findAny().orElse(GHPullRequest.MergeMethod.MERGE); pullRequest.merge(message,null,gitMergeMethod); if(deleteMergedBranches){ GitHubHelpers.deleteUpdateBotBranch(pullRequest.getRepository(),pullRequest.getHead().getRef()); } }
public static Boolean waitForPullRequestToHaveMergable(GHPullRequest pullRequest, long sleepMS, long maximumTimeMS) throws IOException { long end = System.currentTimeMillis() + maximumTimeMS; while (true) { Boolean mergeable = pullRequest.getMergeable(); if (mergeable == null) { GHRepository repository = pullRequest.getRepository(); int number = pullRequest.getNumber(); pullRequest = repository.getPullRequest(number); mergeable = pullRequest.getMergeable(); } if (mergeable != null) { return mergeable; } if (System.currentTimeMillis() > end) { return null; } try { Thread.sleep(sleepMS); } catch (InterruptedException e) { // ignore } } } }
public static Boolean waitForPullRequestToHaveMergable(GHPullRequest pullRequest, long sleepMS, long maximumTimeMS) throws IOException { long end = System.currentTimeMillis() + maximumTimeMS; while (true) { Boolean mergeable = pullRequest.getMergeable(); if (mergeable == null) { GHRepository repository = pullRequest.getRepository(); int number = pullRequest.getNumber(); pullRequest = repository.getPullRequest(number); mergeable = pullRequest.getMergeable(); } if (mergeable != null) { return mergeable; } if (System.currentTimeMillis() > end) { return null; } try { Thread.sleep(sleepMS); } catch (InterruptedException e) { // ignore } } } }
@CheckForNull GHCommitStatus getCommitStatusForContext(GHPullRequest pr, String context) { List<GHCommitStatus> statuses; try { statuses = pr.getRepository().listCommitStatuses(pr.getHead().getSha()).asList(); } catch (IOException e) { throw new IllegalStateException("Unable to retrieve commit statuses.", e); } for (GHCommitStatus status : statuses) { if (context.equals(status.getContext())) { return status; } } return null; } }
@Override public GitHubPRCause check(@Nonnull GitHubPRDecisionContext prDecisionContext) throws IOException { TaskListener listener = prDecisionContext.getListener(); GHPullRequest remotePR = prDecisionContext.getRemotePR(); final PrintStream logger = listener.getLogger(); for (GHLabel ghLabel : remotePR.getRepository().getIssue(remotePR.getNumber()).getLabels()) { for (String labelPatternStr : label.getLabelsSet()) { Pattern labelPattern = Pattern.compile(labelPatternStr); if (labelPattern.matcher(ghLabel.getName()).matches()) { logger.println(DISPLAY_NAME + ": Pull request has label: " + labelPatternStr); LOGGER.info("Pull request has '{}' label.", labelPatternStr); return prDecisionContext.newCause("PR has label: " + labelPatternStr, isSkip()); } } } return null; }
public static boolean isMergeable(GHPullRequest pullRequest) throws IOException { boolean canMerge = false; Boolean mergeable = pullRequest.getMergeable(); GHPullRequest single = null; if (mergeable == null) { single = pullRequest.getRepository().getPullRequest(pullRequest.getNumber()); mergeable = single.getMergeable(); } if (mergeable == null) { LOG.warn("Mergeable flag is still null on pull request " + pullRequest.getHtmlUrl() + " assuming its still mergable. Probably a caching issue and this flag may appear again later"); return true; } if (mergeable != null && mergeable.booleanValue()) { canMerge = true; } return canMerge; }
public static boolean isMergeable(GHPullRequest pullRequest) throws IOException { boolean canMerge = false; Boolean mergeable = pullRequest.getMergeable(); GHPullRequest single = null; if (mergeable == null) { single = pullRequest.getRepository().getPullRequest(pullRequest.getNumber()); mergeable = single.getMergeable(); } if (mergeable == null) { LOG.warn("Mergeable flag is still null on pull request " + pullRequest.getHtmlUrl() + " assuming its still mergable. Probably a caching issue and this flag may appear again later"); return true; } if (mergeable != null && mergeable.booleanValue()) { canMerge = true; } return canMerge; }
@Override public GitHubPRCause check(@Nonnull GitHubPRDecisionContext prDecisionContext) throws IOException { TaskListener listener = prDecisionContext.getListener(); GHPullRequest remotePR = prDecisionContext.getRemotePR(); if (remotePR.getState().equals(GHIssueState.CLOSED)) { return null; // already closed, skip check? } GitHubPRCause cause = null; Collection<GHLabel> remoteLabels = remotePR.getRepository().getIssue(remotePR.getNumber()).getLabels(); Set<String> existingLabels = new HashSet<>(); for (GHLabel ghLabel : remoteLabels) { existingLabels.add(ghLabel.getName()); } existingLabels.retainAll(label.getLabelsSet()); if (existingLabels.isEmpty()) { final PrintStream logger = listener.getLogger(); LOG.debug("{}:{} not found", DISPLAY_NAME, label.getLabelsSet()); logger.println(DISPLAY_NAME + ": " + label.getLabelsSet() + " not found"); cause = prDecisionContext.newCause(label.getLabelsSet() + " labels not exist", isSkip()); } return cause; }
@Override public GitHubPRCause check(@Nonnull GitHubPRDecisionContext prDecisionContext) throws IOException { TaskListener listener = prDecisionContext.getListener(); GHPullRequest remotePR = prDecisionContext.getRemotePR(); if (remotePR.getState().equals(GHIssueState.CLOSED)) { return null; // already closed, skip check? } GitHubPRCause cause = null; Collection<GHLabel> remoteLabels = remotePR.getRepository().getIssue(remotePR.getNumber()).getLabels(); Set<String> existingLabels = new HashSet<>(); for (GHLabel ghLabel : remoteLabels) { existingLabels.add(ghLabel.getName()); } if (existingLabels.containsAll(label.getLabelsSet())) { final PrintStream logger = listener.getLogger(); logger.println(DISPLAY_NAME + ": " + label.getLabelsSet() + " found"); cause = prDecisionContext.newCause(label.getLabelsSet() + " labels exist", isSkip()); } return cause; }
@Override public GitHubPRCause check(@Nonnull GitHubPRDecisionContext prDecisionContext) throws IOException { TaskListener listener = prDecisionContext.getListener(); GitHubPRPullRequest localPR = prDecisionContext.getLocalPR(); GHPullRequest remotePR = prDecisionContext.getRemotePR(); if (remotePR.getState().equals(GHIssueState.CLOSED)) { return null; // already closed, skip check? } if (isNull(label)) { LOG.error("Label is null. Bad configured event: {}", getDescriptor().getDisplayName()); throw new IllegalStateException("Label is null. Bad configured event: " + getDescriptor().getDisplayName()); } //localPR exists before, checking for changes if (localPR != null && localPR.getLabels().containsAll(label.getLabelsSet())) { return null; // label existed before exiting } GitHubPRCause cause = null; Collection<GHLabel> labels = remotePR.getRepository().getIssue(remotePR.getNumber()).getLabels(); Set<String> existingLabels = new HashSet<String>(); for (GHLabel curLabel : labels) { existingLabels.add(curLabel.getName()); } if (existingLabels.containsAll(label.getLabelsSet())) { final PrintStream logger = listener.getLogger(); logger.println(DISPLAY_NAME + ": state has changed (" + label.getLabelsSet() + " labels were added"); cause = prDecisionContext.newCause(label.getLabelsSet() + " labels were added", false); } return cause; }
protected PullRequestInfo extractPullRequestInfo(GHEvent event, String payload, GitHub gh) throws IOException { switch (event) { case ISSUE_COMMENT: { GHEventPayload.IssueComment commentPayload = gh.parseEventPayload(new StringReader(payload), GHEventPayload.IssueComment.class); int issueNumber = commentPayload.getIssue().getNumber(); return new PullRequestInfo(commentPayload.getRepository().getFullName(), issueNumber); } case PULL_REQUEST: { GHEventPayload.PullRequest pr = gh.parseEventPayload(new StringReader(payload), GHEventPayload.PullRequest.class); return new PullRequestInfo(pr.getPullRequest().getRepository().getFullName(), pr.getNumber(), pr.getPullRequest().getBase().getRef()); } default: throw new IllegalStateException(format("Did you add event %s in events() method?", event)); } } }
Collection<GHLabel> labels = remotePR.getRepository().getIssue(remotePR.getNumber()).getLabels(); for (GHLabel remoteLabel : labels) { for (String checkedLabel : label.getLabelsSet()) {
PullRequestSCMHead(GHPullRequest pr, String name, boolean merge) { super(name); // the merge flag is encoded into the name, so safe to store here this.merge = merge; this.number = pr.getNumber(); this.target = new BranchSCMHead(pr.getBase().getRef()); // the source stuff is immutable for a pull request on github, so safe to store here GHRepository repository = pr.getHead().getRepository(); // may be null for deleted forks JENKINS-41246 this.sourceOwner = repository == null ? null : repository.getOwnerName(); this.sourceRepo = repository == null ? null : repository.getName(); this.sourceBranch = pr.getHead().getRef(); this.origin = pr.getRepository().getOwnerName().equalsIgnoreCase(sourceOwner) ? SCMHeadOrigin.DEFAULT : new SCMHeadOrigin.Fork(this.sourceOwner); }
GHRepository remoteRepo = pr.getRepository();
private static StatusInfo createStatus(Configuration configuration, StatusInfo oldStatus) { GHRepository repository = null; GHIssue issue = oldStatus.getIssue(); if (issue != null) { repository = issue.getRepository(); try { issue = repository.getIssue(issue.getNumber()); } catch (IOException e) { configuration.warn(LOG, "Failed to lookup issue " + oldStatus.getIssueUrl() + ". " + e, e); } } GHPullRequest pullRequest = oldStatus.getPullRequest(); if (pullRequest != null) { if (repository == null) { repository = pullRequest.getRepository(); } try { pullRequest = repository.getPullRequest(pullRequest.getNumber()); } catch (IOException e) { configuration.warn(LOG, "Failed to lookup pull request " + oldStatus.getPullRequestUrl() + ". " + e, e); } } return new StatusInfo(oldStatus.getRepository(), oldStatus.getStatus(), issue, pullRequest); }
private static StatusInfo createStatus(Configuration configuration, StatusInfo oldStatus) { GHRepository repository = null; GHIssue issue = oldStatus.getIssue(); if (issue != null) { repository = issue.getRepository(); try { issue = repository.getIssue(issue.getNumber()); } catch (IOException e) { configuration.warn(LOG, "Failed to lookup issue " + oldStatus.getIssueUrl() + ". " + e, e); } } GHPullRequest pullRequest = oldStatus.getPullRequest(); if (pullRequest != null) { if (repository == null) { repository = pullRequest.getRepository(); } try { pullRequest = repository.getPullRequest(pullRequest.getNumber()); } catch (IOException e) { configuration.warn(LOG, "Failed to lookup pull request " + oldStatus.getPullRequestUrl() + ". " + e, e); } } return new StatusInfo(oldStatus.getRepository(), oldStatus.getStatus(), issue, pullRequest); }