Skip to content
Merged
Show file tree
Hide file tree
Changes from 26 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
22269dd
Init
janfaracik Jan 13, 2025
2972f60
Update pom.xml
janfaracik Jan 13, 2025
70a2ec0
Push
janfaracik Jan 13, 2025
6aab691
Update GitHubDetailFactory.java
janfaracik Jan 13, 2025
1a83038
Simplify
janfaracik Jan 13, 2025
e00614a
Update GitHubBranchDetail.java
janfaracik Jan 13, 2025
d9e54f5
Update GitHubBranchDetail.java
janfaracik Jan 13, 2025
84f30a8
Semi working
janfaracik Jan 13, 2025
c5ea7ac
Update GitHubRepositoryDetail.java
janfaracik Jan 13, 2025
bdc8c7c
Update GitHubRepositoryDetail.java
janfaracik Jan 13, 2025
95a0202
Update GitHubPullRequestDetail.java
janfaracik Jan 13, 2025
63816db
Rough null checks...
janfaracik Jan 13, 2025
461177d
Spotless
janfaracik Jan 13, 2025
c87badb
Tidy up
janfaracik Jan 13, 2025
c755701
Update GitHubBranchDetail.java
janfaracik Jan 13, 2025
8e25978
Fix a few things
janfaracik Jan 14, 2025
e66c0e3
Drop isApplicable
janfaracik Jan 14, 2025
2a57ab6
Update GitHubDetailFactory.java
janfaracik Jan 14, 2025
dafc5c4
Update GitHubDetailFactory.java
janfaracik Jan 14, 2025
d90b1a9
Push
janfaracik Jan 15, 2025
857feaa
Update pom.xml
janfaracik Feb 18, 2025
b2212c7
Merge branch 'master' into detail-widget
janfaracik Feb 18, 2025
9f37620
Update GitHubRepositoryDetail.java
janfaracik Feb 18, 2025
7f0e5bf
Merge branch 'master' into detail-widget
janfaracik Sep 24, 2025
f3f8e59
Push
janfaracik Sep 26, 2025
d01e501
Remove comments
janfaracik Sep 26, 2025
2abc5b2
Update group
janfaracik Sep 26, 2025
ab18842
Merge branch 'master' into detail-widget
timja Sep 29, 2025
24e27b7
Update pom.xml
timja Sep 29, 2025
24ab3d1
Refine code, add tests
janfaracik Oct 6, 2025
d48c6a0
Spotless
janfaracik Oct 6, 2025
1e546fd
Update GitHubRepositoryDetail.java
janfaracik Oct 6, 2025
43592e6
Merge branch 'master' into detail-widget
janfaracik Oct 6, 2025
da8130c
Refine
janfaracik Oct 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
<hpi.compatibleSinceVersion>2.2.0</hpi.compatibleSinceVersion>
<!-- https://www.jenkins.io/doc/developer/plugin-development/choosing-jenkins-baseline/ -->
<jenkins.baseline>2.504</jenkins.baseline>
<jenkins.version>${jenkins.baseline}.1</jenkins.version>
<jenkins.version>${jenkins.baseline}.3</jenkins.version>
<spotless.check.skip>false</spotless.check.skip>
</properties>

Expand All @@ -44,7 +44,7 @@
<dependency>
<groupId>io.jenkins.tools.bom</groupId>
<artifactId>bom-${jenkins.baseline}.x</artifactId>
<version>4948.vcf1d17350668</version>
<version>5422.v0fce72a_b_b_8cf</version>
<type>pom</type>
<scope>import</scope>
</dependency>
Expand Down Expand Up @@ -84,6 +84,11 @@
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>github-api</artifactId>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>scm-api</artifactId>
<version>999999-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.jenkins-ci.plugins.workflow</groupId>
<artifactId>workflow-support</artifactId>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package org.jenkinsci.plugins.github_branch_source;

import edu.umd.cs.findbugs.annotations.Nullable;
import hudson.model.Actionable;
import hudson.model.Run;
import jenkins.model.details.Detail;
import jenkins.model.details.DetailGroup;
import jenkins.scm.api.SCMHead;
import jenkins.scm.api.SCMRevision;
import jenkins.scm.api.SCMRevisionAction;
import jenkins.scm.api.ScmDetailGroup;
import jenkins.scm.api.metadata.ObjectMetadataAction;

public class GitHubBranchDetail extends Detail {
public GitHubBranchDetail(Actionable object) {
super(object);
}

@Nullable
@Override
public String getIconClassName() {
return "symbol-git-branch-outline plugin-ionicons-api";
}

@Nullable
@Override
public String getDisplayName() {
SCMRevisionAction scmRevisionAction = getObject().getAction(SCMRevisionAction.class);
SCMRevision revision = scmRevisionAction.getRevision();

if (revision instanceof PullRequestSCMRevision pullRequestSCMRevision) {
PullRequestSCMHead head = (PullRequestSCMHead) pullRequestSCMRevision.getHead();
return head.getSourceBranch();
}

SCMHead head = revision.getHead();
return head.getName();
}

@Override
public String getLink() {
var run = (Run<?, ?>) getObject();
ObjectMetadataAction action = run.getParent().getAction(ObjectMetadataAction.class);
return action.getObjectUrl();
}

@Override
public DetailGroup getGroup() {
return ScmDetailGroup.get();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package org.jenkinsci.plugins.github_branch_source;

import hudson.model.Actionable;
import hudson.model.Run;
import jenkins.model.details.Detail;
import jenkins.model.details.DetailGroup;
import jenkins.plugins.git.AbstractGitSCMSource;
import jenkins.scm.api.SCMRevision;
import jenkins.scm.api.SCMRevisionAction;
import jenkins.scm.api.SCMSource;
import jenkins.scm.api.ScmDetailGroup;

public class GitHubCommitDetail extends Detail {
public GitHubCommitDetail(Actionable object) {
super(object);
}

public String getIconClassName() {
return "symbol-git-commit-outline plugin-ionicons-api";
}

@Override
public String getDisplayName() {
SCMRevisionAction scmRevisionAction = getObject().getAction(SCMRevisionAction.class);
SCMRevision revision = scmRevisionAction.getRevision();

if (revision instanceof AbstractGitSCMSource.SCMRevisionImpl abstractRevision) {
return abstractRevision.getHash().substring(0, 7);
} else if (revision instanceof PullRequestSCMRevision pullRequestSCMRevision) {
return pullRequestSCMRevision.getPullHash().substring(0, 7);
}

return null;
}

@Override
public String getLink() {
SCMRevisionAction scmRevisionAction = getObject().getAction(SCMRevisionAction.class);
SCMRevision revision = scmRevisionAction.getRevision();

if (revision instanceof AbstractGitSCMSource.SCMRevisionImpl abstractRevision) {
GitHubSCMSource src = (GitHubSCMSource) SCMSource.SourceByItem.findSource(((Run) getObject()).getParent());

if (src == null) {
return null;
}

return src.getRepositoryUrl() + "/commit/" + abstractRevision.getHash();
} else if (revision instanceof PullRequestSCMRevision pullRequestSCMRevision) {
var run = (Run<?, ?>) getObject();
GitHubLink repoLink = run.getParent().getAction(GitHubLink.class);
return repoLink.getUrl() + "/commits/" + pullRequestSCMRevision.getPullHash();
}

return null;
}

@Override
public DetailGroup getGroup() {
return ScmDetailGroup.get();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.jenkinsci.plugins.github_branch_source;

import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.model.Run;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import jenkins.model.details.Detail;
import jenkins.model.details.DetailFactory;
import jenkins.scm.api.SCMRevision;
import jenkins.scm.api.SCMRevisionAction;

@Extension
public final class GitHubDetailFactory extends DetailFactory<Run> {

@Override
public Class<Run> type() {
return Run.class;
}

@NonNull
@Override
public List<? extends Detail> createFor(@NonNull Run target) {
SCMRevisionAction scmRevisionAction = target.getAction(SCMRevisionAction.class);
if (scmRevisionAction == null) {
return Collections.emptyList();
}

List<Detail> details = new ArrayList<>();

SCMRevision revision = scmRevisionAction.getRevision();

if (revision instanceof PullRequestSCMRevision) {
details.add(new GitHubPullRequestDetail(target));
} else {
details.add(new GitHubBranchDetail(target));
}

details.add(new GitHubCommitDetail(target));
details.add(new GitHubRepositoryDetail(target));

return details;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package org.jenkinsci.plugins.github_branch_source;

import edu.umd.cs.findbugs.annotations.Nullable;
import hudson.model.Actionable;
import hudson.model.Run;
import jenkins.model.details.Detail;
import jenkins.model.details.DetailGroup;
import jenkins.scm.api.ScmDetailGroup;
import jenkins.scm.api.metadata.ObjectMetadataAction;

public class GitHubPullRequestDetail extends Detail {
public GitHubPullRequestDetail(Actionable object) {
super(object);
}

@Nullable
@Override
public String getIconClassName() {
return "symbol-git-pull-request-outline plugin-ionicons-api";
}

@Nullable
@Override
public String getDisplayName() {
var run = (Run<?, ?>) getObject();
ObjectMetadataAction action = run.getParent().getAction(ObjectMetadataAction.class);
return action.getObjectDisplayName();
}

@Override
public String getLink() {
var run = (Run<?, ?>) getObject();
GitHubLink repoLink = run.getParent().getAction(GitHubLink.class);
return repoLink.getUrl();
}

@Override
public DetailGroup getGroup() {
return ScmDetailGroup.get();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package org.jenkinsci.plugins.github_branch_source;

import edu.umd.cs.findbugs.annotations.Nullable;
import hudson.model.Actionable;
import hudson.model.Run;
import jenkins.model.details.Detail;
import jenkins.model.details.DetailGroup;
import jenkins.scm.api.SCMSource;
import jenkins.scm.api.ScmDetailGroup;

public class GitHubRepositoryDetail extends Detail {
public GitHubRepositoryDetail(Actionable object) {
super(object);
}

@Nullable
@Override
public String getIconClassName() {
return "symbol-logo-github plugin-ionicons-api";
}

private GitHubSCMSource getSCMSource() {
var source = SCMSource.SourceByItem.findSource(((Run) getObject()).getParent());

if (!(source instanceof GitHubSCMSource)) {
return null;
}

return (GitHubSCMSource) source;
}

@Nullable
@Override
public String getDisplayName() {
GitHubSCMSource source = getSCMSource();

if (source == null) {
return null;
}

return source.getRepoOwner() + "/" + source.getRepository();
}

@Override
public String getLink() {
GitHubSCMSource source = getSCMSource();

if (source == null) {
return null;
}

return source.getRepositoryUrl();
}

@Override
public DetailGroup getGroup() {
return ScmDetailGroup.get();
}
}
Loading