From 435450a72157914e81f210d935374e9842758399 Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Mon, 18 Sep 2023 16:34:27 +1000 Subject: [PATCH 1/7] [JENKINS-72030] Add checkbox to enable/disable Avatar retrieval --- .../GitHubSCMNavigator.java | 28 ++++++++++++++++++- .../GitHubSCMNavigator/config.jelly | 3 ++ .../GitHubSCMNavigator/help-enableAvatar.html | 4 +++ 3 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/help-enableAvatar.html diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java index d2adf273b..e45405921 100644 --- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java +++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java @@ -128,6 +128,12 @@ public class GitHubSCMNavigator extends SCMNavigator { @CheckForNull private String credentialsId; /** The behavioural traits to apply. */ + + /** + * Whether to enable the retrieval of the Organization avatar. If false, then the default GitHub logo will be used. + */ + private boolean enableAvatar; + @NonNull private List>> traits; @@ -221,6 +227,7 @@ public class GitHubSCMNavigator extends SCMNavigator { public GitHubSCMNavigator(String repoOwner) { this.repoOwner = StringUtils.defaultString(repoOwner); this.traits = new ArrayList<>(); + this.enableAvatar = false; } /** @@ -302,6 +309,25 @@ public void setCredentialsId(@CheckForNull String credentialsId) { this.credentialsId = Util.fixEmpty(credentialsId); } + /** + * Return if the avatar retrieval is enabled. + * + * @return true is enabled, false otherwise + */ + public boolean isEnableAvatar() { + return enableAvatar; + } + + /** + * Enable retrieval of the organization avatar. + * + * @param enableAvatar true to enable, false to disable + */ + @DataBoundSetter + public void setEnableAvatar(boolean enableAvatar) { + this.enableAvatar = enableAvatar; + } + /** * Gets the name of the owner who's repositories will be navigated. * @@ -1531,7 +1557,7 @@ public List retrieveActions( Connector.lookupScanCredentials((Item) owner, getApiUri(), credentialsId, repoOwner); GitHub hub = Connector.connect(getApiUri(), credentials); Connector.configureLocalRateLimitChecker(listener, hub); - boolean privateMode = determinePrivateMode(apiUri); + boolean privateMode = !enableAvatar || determinePrivateMode(apiUri); try { GHUser u = hub.getUser(getRepoOwner()); String objectUrl = u.getHtmlUrl() == null ? null : u.getHtmlUrl().toExternalForm(); diff --git a/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly b/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly index 96550402f..0facd637f 100644 --- a/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly +++ b/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly @@ -19,6 +19,9 @@ + + + diff --git a/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/help-enableAvatar.html b/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/help-enableAvatar.html new file mode 100644 index 000000000..3bea92d90 --- /dev/null +++ b/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/help-enableAvatar.html @@ -0,0 +1,4 @@ +
+

Whether to use the GitHub Organization or GitHub User Account avatar as icon (only possible if private mode is disabled).

+

Note: this consumes an anonymous call to check if private mode is enabled. Although the result of this check is cached for some time (20 hours by default), this can block operations in some environments. See JENKINS-72030

+
From 7b720fb1e6d40220946a259de0f2808a9e2db946 Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Fri, 6 Oct 2023 17:46:19 +1000 Subject: [PATCH 2/7] [JENKINS-72030] Adapt and add test --- .../github_branch_source/GitHubSCMNavigatorTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java index 856d087b9..c8e35ad3b 100644 --- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java +++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java @@ -427,6 +427,18 @@ public void appliesFilters() throws Exception { @Test public void fetchActions() throws Exception { + assertThat( + navigator.fetchActions(Mockito.mock(SCMNavigatorOwner.class), null, null), + Matchers.containsInAnyOrder( + Matchers.is( + new ObjectMetadataAction("CloudBeers, Inc.", null, "https://github.com/cloudbeers")), + Matchers.is(new GitHubOrgMetadataAction((String) null)), + Matchers.is(new GitHubLink("icon-github-logo", "https://github.com/cloudbeers")))); + } + + @Test + public void fetchActionsWithAvatar() throws Exception { + navigator.setEnableAvatar(true); assertThat( navigator.fetchActions(Mockito.mock(SCMNavigatorOwner.class), null, null), Matchers.containsInAnyOrder( From 43d790561e2604739e1b39866b8b7eea6da78519 Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Mon, 9 Oct 2023 12:32:15 +1000 Subject: [PATCH 3/7] [JENKINS-72030] Enable for existing items. Default to disable for new items. --- .../github_branch_source/GitHubSCMNavigator.java | 13 ++++++++----- .../GitHubSCMNavigator/config.jelly | 2 +- .../GitHubSCMNavigatorTest.java | 4 ++-- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java index e45405921..4f70f44a9 100644 --- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java +++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java @@ -132,7 +132,7 @@ public class GitHubSCMNavigator extends SCMNavigator { /** * Whether to enable the retrieval of the Organization avatar. If false, then the default GitHub logo will be used. */ - private boolean enableAvatar; + private Boolean enableAvatar; @NonNull private List>> traits; @@ -227,7 +227,6 @@ public class GitHubSCMNavigator extends SCMNavigator { public GitHubSCMNavigator(String repoOwner) { this.repoOwner = StringUtils.defaultString(repoOwner); this.traits = new ArrayList<>(); - this.enableAvatar = false; } /** @@ -314,7 +313,8 @@ public void setCredentialsId(@CheckForNull String credentialsId) { * * @return true is enabled, false otherwise */ - public boolean isEnableAvatar() { + @CheckForNull + public Boolean getEnableAvatar() { return enableAvatar; } @@ -324,7 +324,7 @@ public boolean isEnableAvatar() { * @param enableAvatar true to enable, false to disable */ @DataBoundSetter - public void setEnableAvatar(boolean enableAvatar) { + public void setEnableAvatar(Boolean enableAvatar) { this.enableAvatar = enableAvatar; } @@ -391,6 +391,9 @@ private Object readResolve() { if (scanCredentialsId != null) { credentialsId = scanCredentialsId; } + if (enableAvatar == null) { + enableAvatar = Boolean.TRUE; + } if (traits == null) { boolean buildOriginBranch = this.buildOriginBranch == null || this.buildOriginBranch; boolean buildOriginBranchWithPR = this.buildOriginBranchWithPR == null || this.buildOriginBranchWithPR; @@ -1557,7 +1560,7 @@ public List retrieveActions( Connector.lookupScanCredentials((Item) owner, getApiUri(), credentialsId, repoOwner); GitHub hub = Connector.connect(getApiUri(), credentials); Connector.configureLocalRateLimitChecker(listener, hub); - boolean privateMode = !enableAvatar || determinePrivateMode(apiUri); + boolean privateMode = !Boolean.TRUE.equals(enableAvatar) || determinePrivateMode(apiUri); try { GHUser u = hub.getUser(getRepoOwner()); String objectUrl = u.getHtmlUrl() == null ? null : u.getHtmlUrl().toExternalForm(); diff --git a/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly b/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly index 0facd637f..35e97264d 100644 --- a/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly +++ b/src/main/resources/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator/config.jelly @@ -20,7 +20,7 @@ - + diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java index c8e35ad3b..c5aa822ba 100644 --- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java +++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java @@ -437,8 +437,8 @@ public void fetchActions() throws Exception { } @Test - public void fetchActionsWithAvatar() throws Exception { - navigator.setEnableAvatar(true); + public void fetchActionsWithoutAvatar() throws Exception { + navigator.setEnableAvatar(false); assertThat( navigator.fetchActions(Mockito.mock(SCMNavigatorOwner.class), null, null), Matchers.containsInAnyOrder( From 4a5f00e4468ff8ad6b02069850dafec939ea8f1c Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Tue, 10 Oct 2023 18:28:03 +1000 Subject: [PATCH 4/7] [JENKINS-72030] Use boolean --- .../plugins/github_branch_source/GitHubSCMNavigator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java index 4f70f44a9..2f6bc5ad3 100644 --- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java +++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java @@ -313,9 +313,10 @@ public void setCredentialsId(@CheckForNull String credentialsId) { * * @return true is enabled, false otherwise */ - @CheckForNull - public Boolean getEnableAvatar() { - return enableAvatar; + @NonNull + @SuppressWarnings("unused") // stapler + public boolean getEnableAvatar() { + return Boolean.TRUE.equals(enableAvatar); } /** @@ -324,7 +325,7 @@ public Boolean getEnableAvatar() { * @param enableAvatar true to enable, false to disable */ @DataBoundSetter - public void setEnableAvatar(Boolean enableAvatar) { + public void setEnableAvatar(boolean enableAvatar) { this.enableAvatar = enableAvatar; } From bfd5eabf58931f7ae2369f4a9d4859c093a5905e Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Wed, 11 Oct 2023 10:17:50 +1000 Subject: [PATCH 5/7] [JENKINS-72030] Use getEnableAvatar() Co-authored-by: Jesse Glick --- .../plugins/github_branch_source/GitHubSCMNavigator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java index 2f6bc5ad3..d2504df73 100644 --- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java +++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java @@ -1561,7 +1561,7 @@ public List retrieveActions( Connector.lookupScanCredentials((Item) owner, getApiUri(), credentialsId, repoOwner); GitHub hub = Connector.connect(getApiUri(), credentials); Connector.configureLocalRateLimitChecker(listener, hub); - boolean privateMode = !Boolean.TRUE.equals(enableAvatar) || determinePrivateMode(apiUri); + boolean privateMode = !getEnableAvatar() || determinePrivateMode(apiUri); try { GHUser u = hub.getUser(getRepoOwner()); String objectUrl = u.getHtmlUrl() == null ? null : u.getHtmlUrl().toExternalForm(); From 480b5d0364eb4e10d6fc72f5fef669f331a050f5 Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Fri, 13 Oct 2023 11:02:04 +1000 Subject: [PATCH 6/7] [JENKINS-72030] Fix test --- .../plugins/github_branch_source/GitHubSCMNavigatorTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java index c5aa822ba..c8e35ad3b 100644 --- a/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java +++ b/src/test/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigatorTest.java @@ -437,8 +437,8 @@ public void fetchActions() throws Exception { } @Test - public void fetchActionsWithoutAvatar() throws Exception { - navigator.setEnableAvatar(false); + public void fetchActionsWithAvatar() throws Exception { + navigator.setEnableAvatar(true); assertThat( navigator.fetchActions(Mockito.mock(SCMNavigatorOwner.class), null, null), Matchers.containsInAnyOrder( From 8cc08abafa899bb93c96ff70fba07e4943b7bfc8 Mon Sep 17 00:00:00 2001 From: Allan Burdajewicz Date: Tue, 7 Nov 2023 17:11:51 +1000 Subject: [PATCH 7/7] [JENKINS-72030] getEnableAvater -> isEnableAvatar --- .../plugins/github_branch_source/GitHubSCMNavigator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java index d2504df73..4cb595e13 100644 --- a/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java +++ b/src/main/java/org/jenkinsci/plugins/github_branch_source/GitHubSCMNavigator.java @@ -315,7 +315,7 @@ public void setCredentialsId(@CheckForNull String credentialsId) { */ @NonNull @SuppressWarnings("unused") // stapler - public boolean getEnableAvatar() { + public boolean isEnableAvatar() { return Boolean.TRUE.equals(enableAvatar); } @@ -1561,7 +1561,7 @@ public List retrieveActions( Connector.lookupScanCredentials((Item) owner, getApiUri(), credentialsId, repoOwner); GitHub hub = Connector.connect(getApiUri(), credentials); Connector.configureLocalRateLimitChecker(listener, hub); - boolean privateMode = !getEnableAvatar() || determinePrivateMode(apiUri); + boolean privateMode = !isEnableAvatar() || determinePrivateMode(apiUri); try { GHUser u = hub.getUser(getRepoOwner()); String objectUrl = u.getHtmlUrl() == null ? null : u.getHtmlUrl().toExternalForm();