/** * Sends notifications to Bitbucket on Checkout (for the "In Progress" Status). */ private static void sendNotifications(Run<?, ?> build, TaskListener listener) throws IOException, InterruptedException { final SCMSource s = SCMSource.SourceByItem.findSource(build.getParent()); if (!(s instanceof GiteaSCMSource)) { return; } GiteaSCMSource source = (GiteaSCMSource) s; if (new GiteaSCMSourceContext(null, SCMHeadObserver.none()) .withTraits(source.getTraits()) .notificationsDisabled()) { return; } String url; try { url = DisplayURLProvider.get().getRunURL(build); } catch (IllegalStateException e) { listener.getLogger().println( "Can not determine Jenkins root URL. Commit status notifications are disabled until a root URL is" + " configured in Jenkins global configuration."); return; } Result result = build.getResult(); GiteaCommitStatus status = new GiteaCommitStatus(); status.setTargetUrl(url); status.setContext(build.getParent().getFullName()); if (Result.SUCCESS.equals(result)) { status.setDescription("This commit looks good"); status.setState(GiteaCommitState.SUCCESS); } else if (Result.UNSTABLE.equals(result)) { status.setDescription("This commit has test failures"); status.setState(GiteaCommitState.FAILURE); } else if (Result.FAILURE.equals(result)) { status.setDescription("There was a failure building this commit"); status.setState(GiteaCommitState.FAILURE); } else if (result != null) { // ABORTED etc. status.setDescription("Something is wrong with the build of this commit"); status.setState(GiteaCommitState.ERROR); } else { status.setDescription("Build started..."); status.setState(GiteaCommitState.PENDING); } SCMRevision revision = SCMRevisionAction.getRevision(source, build); String hash; if (revision instanceof BranchSCMRevision) { listener.getLogger().format("[Gitea] Notifying branch build status: %s %s%n", status.getState().name(), status.getDescription()); hash = ((BranchSCMRevision) revision).getHash(); } else if (revision instanceof PullRequestSCMRevision) { listener.getLogger().format("[Gitea] Notifying pull request build status: %s %s%n", status.getState().name(), status.getDescription()); hash = ((PullRequestSCMRevision) revision).getOrigin().getHash(); } else { // TODO tags return; } JobScheduledListener jsl = ExtensionList.lookup(QueueListener.class).get(JobScheduledListener.class); if (jsl != null) { // we are setting the status, so don't let the queue listener background thread change it to pending synchronized (jsl.resolving) { jsl.resolving.remove(build.getParent()); } } try (GiteaConnection c = source.gitea().open()) { c.createCommitStatus(source.getRepoOwner(), source.getRepository(), hash, status); listener.getLogger().format("[Gitea] Notified%n"); } }
public static ScheduledRate instance() { Jenkins jenkins = Jenkins.getInstance(); return jenkins == null ? null : jenkins.getExtensionList(QueueListener.class).get(ScheduledRate.class); }