From 8477b3c3b1efc03c5ed4fad43a538da9cbae6888 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Jun 2022 08:05:38 -0700 Subject: [PATCH 01/26] Bump junit from 1.63 to 1119.va_a_5e9068da_d7 (#6617) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pom.xml b/test/pom.xml index 883edac759f0..13a768775bf2 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -151,7 +151,7 @@ THE SOFTWARE. org.jenkins-ci.plugins junit - 1.63 + 1119.va_a_5e9068da_d7 test From a6d86b9bb52a9c17ce8fec4f674df2024fe222c5 Mon Sep 17 00:00:00 2001 From: frankie139506 <97017043+frankie139506@users.noreply.github.com> Date: Fri, 3 Jun 2022 00:25:52 +0800 Subject: [PATCH 02/26] [JENKINS-67846] Icon alignment of build status is wrong (#6595) --- core/src/main/resources/lib/hudson/buildLink.jelly | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/lib/hudson/buildLink.jelly b/core/src/main/resources/lib/hudson/buildLink.jelly index 61bcf8ff481b..18ccfc1ec675 100644 --- a/core/src/main/resources/lib/hudson/buildLink.jelly +++ b/core/src/main/resources/lib/hudson/buildLink.jelly @@ -52,7 +52,7 @@ THE SOFTWARE. - ${jobName_}#${number} + ${jobName_}#${number} From ce5a3f81d1f1895893cc234e39438f3495b2433d Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Thu, 2 Jun 2022 23:47:51 +0200 Subject: [PATCH 03/26] Optional property can now have an inline help (#6615) --- core/src/main/resources/lib/form/optionalProperty.jelly | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/resources/lib/form/optionalProperty.jelly b/core/src/main/resources/lib/form/optionalProperty.jelly index 1afe8e5f538b..5d646235fdef 100644 --- a/core/src/main/resources/lib/form/optionalProperty.jelly +++ b/core/src/main/resources/lib/form/optionalProperty.jelly @@ -33,12 +33,13 @@ THE SOFTWARE. and the presence of the value. + - + From a4f9f5b64b441172f6a1d871a7c615c03ac26235 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jun 2022 10:59:56 -0700 Subject: [PATCH 04/26] Bump mockito-inline from 4.6.0 to 4.6.1 (#6619) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3d0aac43f8ba..a975a7e75c7c 100644 --- a/pom.xml +++ b/pom.xml @@ -101,7 +101,7 @@ THE SOFTWARE. 1.27 1.23 5.8.2 - 4.6.0 + 4.6.1 2.22.5 From c63a8cee6757136433c3d1320a05c8721c11bc6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jun 2022 08:31:32 -0700 Subject: [PATCH 05/26] Bump `cloudbees-folder` from 6.722.v8165b_a_cf25e9 to 6.729.v2b_9d1a_74d673 (#6622) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pom.xml b/test/pom.xml index 13a768775bf2..8c2ab093c5fe 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -145,7 +145,7 @@ THE SOFTWARE. org.jenkins-ci.plugins cloudbees-folder - 6.722.v8165b_a_cf25e9 + 6.729.v2b_9d1a_74d673 test From 5b4434c16f85b95e4d83caf7250b58a98d3e6913 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jun 2022 08:31:51 -0700 Subject: [PATCH 06/26] Bump Spotless from 2.22.5 to 2.22.6 (#6623) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a975a7e75c7c..3e278982eea6 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ THE SOFTWARE. 1.23 5.8.2 4.6.1 - 2.22.5 + 2.22.6 2.22.2 From b650de6960c8ba99780fc6f653dcf4b9f7a877a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jun 2022 08:32:12 -0700 Subject: [PATCH 07/26] Bump `jenkins-test-harness` from 1752.v86627a_c48d91 to 1753.v45c760e2400f (#6624) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pom.xml b/test/pom.xml index 8c2ab093c5fe..3bb7f0e85dca 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -85,7 +85,7 @@ THE SOFTWARE. ${project.groupId} jenkins-test-harness - 1752.v86627a_c48d91 + 1753.v45c760e2400f test From 295485eeaeec856f295c38d999c6fb3c656f234c Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 7 Jun 2022 19:15:18 +0000 Subject: [PATCH 08/26] [maven-release-plugin] prepare release jenkins-2.351 --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 4 ++-- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index a2929a173b77..749b3703c065 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 2bfaf2dd6a86..8d737930bfb6 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 cli diff --git a/core/pom.xml b/core/pom.xml index 27554bf94680..10abe04f57ae 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 9f27c8d11cf0..f2d3b1b9ad8e 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 jenkins-coverage diff --git a/pom.xml b/pom.xml index 3e278982eea6..b0233d780a53 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 pom Jenkins main module @@ -61,7 +61,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - ${scmTag} + jenkins-2.351 https://github.com/jenkinsci/jenkins diff --git a/test/pom.xml b/test/pom.xml index 3bb7f0e85dca..649e0fb8c85c 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index dfc597a0ae46..24201e2b8c9a 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.351 jenkins-war From ceddca397270e7600a8f38c15bff1116865111cb Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 7 Jun 2022 19:15:40 +0000 Subject: [PATCH 09/26] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 6 +++--- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 749b3703c065..a2929a173b77 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.351 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 8d737930bfb6..2bfaf2dd6a86 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.351 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 10abe04f57ae..27554bf94680 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.351 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index f2d3b1b9ad8e..9f27c8d11cf0 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.351 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index b0233d780a53..bce2ac2c0f0c 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.351 + ${revision}${changelist} pom Jenkins main module @@ -61,7 +61,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - jenkins-2.351 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -71,7 +71,7 @@ THE SOFTWARE. - 2.351 + 2.352 -SNAPSHOT clean install - -DskipTests -Danimal.sniffer.skip=false javadoc:javadoc deploy + -DskipTests -Danimal.sniffer.skip=false -Dspotbugs.skip -Dmaven.checkstyle.skip -Dspotless.check.skip generate-resources javadoc:javadoc deploy false true jenkins-@{project.version} From adb1028f7c63d295e83620a54344f9495b0053e4 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Wed, 8 Jun 2022 17:35:50 +0000 Subject: [PATCH 15/26] [maven-release-plugin] prepare release jenkins-2.354 --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 4 ++-- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index a2929a173b77..90e52b379879 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 2bfaf2dd6a86..1e7bfdf8d9ad 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 cli diff --git a/core/pom.xml b/core/pom.xml index 27554bf94680..3a0c7d738135 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 9f27c8d11cf0..035abb0b0c87 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 jenkins-coverage diff --git a/pom.xml b/pom.xml index efd241cbbd6d..7d073653a025 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 pom Jenkins main module @@ -61,7 +61,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - ${scmTag} + jenkins-2.354 https://github.com/jenkinsci/jenkins diff --git a/test/pom.xml b/test/pom.xml index 3bb7f0e85dca..5b0bfe3ce618 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index dfc597a0ae46..e00db507ec6c 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.354 jenkins-war From 3d2692776360d36819fda9e8deb9723521698e76 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Wed, 8 Jun 2022 17:36:13 +0000 Subject: [PATCH 16/26] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 6 +++--- test/pom.xml | 2 +- war/pom.xml | 2 +- 7 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 90e52b379879..a2929a173b77 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.354 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 1e7bfdf8d9ad..2bfaf2dd6a86 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.354 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 3a0c7d738135..27554bf94680 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.354 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 035abb0b0c87..9f27c8d11cf0 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.354 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index 7d073653a025..d0efa5fad27d 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.354 + ${revision}${changelist} pom Jenkins main module @@ -61,7 +61,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - jenkins-2.354 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -71,7 +71,7 @@ THE SOFTWARE. - 2.354 + 2.355 -SNAPSHOT
- -
+
+ +
@@ -109,8 +108,9 @@ THE SOFTWARE. - -
+
+ +
diff --git a/core/src/main/resources/lib/form/select/select.js b/core/src/main/resources/lib/form/select/select.js index 09a4bc385ac7..5e6eeb123f15 100644 --- a/core/src/main/resources/lib/form/select/select.js +++ b/core/src/main/resources/lib/form/select/select.js @@ -11,12 +11,12 @@ function updateListBox(listBox,url,config) { // form entry using tables-to-divs markup. function getStatusElement() { function getStatusForTabularForms() { - return findFollowingTR(listBox, "validation-error-area").firstElementChild.nextSibling; + return listBox.parentNode.querySelector(".validation-error-area"); } function getStatusForDivBasedForms() { var settingMain = listBox.closest('.setting-main') if (!settingMain) { - console.warn("Couldn't find the expected parent element (.setting-main) for element", listBox) + console.warn("Couldn't find the expected validation element (.validation-error-area) for element", listBox.parentNode) return; } diff --git a/core/src/main/resources/lib/form/validateButton.jelly b/core/src/main/resources/lib/form/validateButton.jelly index ba8f19252703..ff98731b5d48 100644 --- a/core/src/main/resources/lib/form/validateButton.jelly +++ b/core/src/main/resources/lib/form/validateButton.jelly @@ -51,16 +51,18 @@ THE SOFTWARE.
-
+
+
+ +
+
+ +
-
- -
-
diff --git a/test/src/test/java/hudson/model/AbstractProjectTest.java b/test/src/test/java/hudson/model/AbstractProjectTest.java index 2280aba81d19..e3d0f3e23df2 100644 --- a/test/src/test/java/hudson/model/AbstractProjectTest.java +++ b/test/src/test/java/hudson/model/AbstractProjectTest.java @@ -613,17 +613,16 @@ public void dangerousLabelsAreEscaped() throws Exception { *
*/ DomNodeList domNodes = htmlPage.getDocumentElement().querySelectorAll("*"); - assertThat(domNodes, hasSize(5)); + assertThat(domNodes, hasSize(4)); assertEquals("head", domNodes.get(0).getNodeName()); assertEquals("body", domNodes.get(1).getNodeName()); assertEquals("div", domNodes.get(2).getNodeName()); - assertEquals("img", domNodes.get(3).getNodeName()); - assertEquals("a", domNodes.get(4).getNodeName()); + assertEquals("a", domNodes.get(3).getNodeName()); // only: "> // the first double quote was escaped during creation (with the backslash) String unquotedLabel = Label.parseExpression(label).getName(); - HtmlAnchor anchor = (HtmlAnchor) domNodes.get(4); + HtmlAnchor anchor = (HtmlAnchor) domNodes.get(3); assertThat(anchor.getHrefAttribute(), containsString(Util.rawEncode(unquotedLabel))); assertThat(responseContent, containsString("ok")); diff --git a/test/src/test/java/lib/form/NumberTest.java b/test/src/test/java/lib/form/NumberTest.java index 0bef86dbc26f..d12840495522 100644 --- a/test/src/test/java/lib/form/NumberTest.java +++ b/test/src/test/java/lib/form/NumberTest.java @@ -177,7 +177,7 @@ private String typeValueAndGetErrorMessage(HtmlInput input, String value) throws input.reset(); // Remove the value that already in the input.type(value); // Type value to input.fireEvent(Event.TYPE_CHANGE); // The error message is triggered by change event - return input.getParentNode().getNextSibling().getChildNodes().get(1).getChildNodes().get(0).getTextContent(); + return input.getParentNode().getNextSibling().getTextContent(); } diff --git a/war/src/main/less/base/style.less b/war/src/main/less/base/style.less index d587a3ee448b..042597244d19 100644 --- a/war/src/main/less/base/style.less +++ b/war/src/main/less/base/style.less @@ -542,64 +542,6 @@ div.behavior-loading { padding: 0; } - -/* ======================== error/warning message (mainly in the form.) Use them on block elements ======================== */ -.error { - color: #c00; - font-weight: bold; - padding-left: 20px; - min-height: 16px; - line-height: 16px; - background-image: url("../../images/svgs/error.svg"); - background-position: left top; - background-repeat: no-repeat; - background-size: 16px 16px; -} - -.error-inline { - color: #c00; - font-weight: bold; -} - -.warning { - color: #c4a000; - font-weight: bold; - padding-left: 20px; - min-height: 16px; - line-height: 16px; - background-image: url("../../images/svgs/warning.svg"); - background-position: left top; - background-repeat: no-repeat; - background-size: 16px 16px; -} - -.warning-inline { - color: #c4a000; - font-weight: bold; -} - -.info { - position: relative; - color: var(--text-color); - font-weight: bold; - min-height: 16px; - padding-left: 30px; - - &::before { - content: ""; - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 20px; - background: currentColor; - mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EArrow Forward%3C/title%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='32' d='M268 112l144 144-144 144M392 256H100'/%3E%3C/svg%3E"); - mask-position: center; - mask-size: contain; - mask-repeat: no-repeat; - } -} - .icon16x16 { width: 16px; height: 16px; diff --git a/war/src/main/less/form/validation.less b/war/src/main/less/form/validation.less new file mode 100644 index 000000000000..3d2a18c04d82 --- /dev/null +++ b/war/src/main/less/form/validation.less @@ -0,0 +1,84 @@ +.validation-error-area { + transition: var(--standard-transition); + opacity: 0; + height: 0; + overflow: hidden; +} + +.validation-error-area--visible { + margin-top: 0.75rem; + opacity: 1; + + & > * { + animation: animate-validation-error-area var(--standard-transition); + } +} + +@keyframes animate-validation-error-area { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +.error, +.warning, +.info { + position: relative; + padding-left: calc(22px + 0.4rem); + font-weight: 500; + + &::before { + content: ""; + position: absolute; + top: 0; + left: 0; + bottom: 0; + width: 22px; + height: 22px; + background-color: currentColor; + mask-position: top center; + mask-repeat: no-repeat; + mask-size: contain; + } +} + +.ok { + color: var(--text-color-secondary); +} + +.error { + color: var(--red); + + &::before { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3E%3Ctitle%3Eionicons-v5-a%3C/title%3E%3Cpath d='M256,48C141.31,48,48,141.31,48,256s93.31,208,208,208,208-93.31,208-208S370.69,48,256,48Zm0,319.91a20,20,0,1,1,20-20A20,20,0,0,1,256,367.91Zm21.72-201.15-5.74,122a16,16,0,0,1-32,0l-5.74-121.94v-.05a21.74,21.74,0,1,1,43.44,0Z'/%3E%3C/svg%3E"); + } +} + +.error-inline { + color: var(--red); + font-weight: 500; +} + +.warning { + color: var(--orange); + + &::before { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='512' height='512' viewBox='0 0 512 512'%3E%3Ctitle%3Eionicons-v5-r%3C/title%3E%3Cpath d='M449.07,399.08,278.64,82.58c-12.08-22.44-44.26-22.44-56.35,0L51.87,399.08A32,32,0,0,0,80,446.25H420.89A32,32,0,0,0,449.07,399.08Zm-198.6-1.83a20,20,0,1,1,20-20A20,20,0,0,1,250.47,397.25ZM272.19,196.1l-5.74,122a16,16,0,0,1-32,0l-5.74-121.95v0a21.73,21.73,0,0,1,21.5-22.69h.21a21.74,21.74,0,0,1,21.73,22.7Z'/%3E%3C/svg%3E"); + } +} + +.warning-inline { + color: var(--orange); + font-weight: 500; +} + +.info { + color: var(--text-color); + + &::before { + mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' class='ionicon' viewBox='0 0 512 512'%3E%3Ctitle%3EArrow Forward%3C/title%3E%3Cpath fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round' stroke-width='32' d='M268 112l144 144-144 144M392 256H100'/%3E%3C/svg%3E"); + } +} diff --git a/war/src/main/less/modules/buttons-temp.less b/war/src/main/less/modules/buttons-temp.less index dc032fd11ca3..610a30464b99 100644 --- a/war/src/main/less/modules/buttons-temp.less +++ b/war/src/main/less/modules/buttons-temp.less @@ -131,3 +131,19 @@ each(@variants, { } } }); + +.jenkins-validate-button__container { + &__status { + .validation-error-area { + min-height: 36px !important; + } + } + + .validation-error-area--visible { + margin-top: 0; + } + + & > span { + float: right; + } +} diff --git a/war/src/main/less/styles.less b/war/src/main/less/styles.less index 07e8270b7d49..016485215580 100644 --- a/war/src/main/less/styles.less +++ b/war/src/main/less/styles.less @@ -32,6 +32,7 @@ html { @import './form/search'; @import './form/select'; @import './form/toggle-switch'; +@import './form/validation'; @import './modules/app-bar'; @import './modules/badges'; diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js index 1e94eb6f928e..c3aebaaa8b2e 100644 --- a/war/src/main/webapp/scripts/hudson-behavior.js +++ b/war/src/main/webapp/scripts/hudson-behavior.js @@ -232,7 +232,7 @@ var FormChecker = { this.sendRequest(next.url, { method : next.method, onComplete : function(x) { - applyErrorMessage(next.target, x); + updateValidationArea(next.target, x.responseText); FormChecker.inProgress--; FormChecker.schedule(); layoutUpdateCallback.call(); @@ -500,16 +500,53 @@ var tooltip; // Behavior rules //======================================================== // using tag names in CSS selector makes the processing faster + + +/** + * Updates the validation area for a form element + * @param {HTMLElement} validationArea The validation area for a given form element + * @param {string} content The content to update the validation area with + */ +function updateValidationArea(validationArea, content) { + validationArea.classList.add("validation-error-area--visible"); + + if (content === "
") { + validationArea.classList.remove("validation-error-area--visible"); + validationArea.style.height = "0px"; + validationArea.innerHTML = content; + } else { + // Only change content if different, causes an unnecessary animation otherwise + if (validationArea.innerHTML !== content) { + validationArea.innerHTML = content; + validationArea.style.height = validationArea.children[0].offsetHeight + "px"; + + // Only include the notice in the validation-error-area, move all other elements out + if (validationArea.children.length > 1) { + Array.from(validationArea.children).slice(1).forEach((element) => { + validationArea.after(element); + }) + } + + Behaviour.applySubtree(validationArea); + // For errors with additional details, apply the subtree to the expandable details pane + if (validationArea.nextElementSibling) { + Behaviour.applySubtree(validationArea.nextElementSibling); + } + } + } +} + function registerValidator(e) { // Retrieve the validation error area - var tr = findFollowingTR(e, "validation-error-area"); + var tr = e.closest(".jenkins-form-item").querySelector(".validation-error-area"); if (!tr) { - console.warn("Couldn't find the expected parent element (.setting-main) for element", e) + console.warn("Couldn't find the expected validation element (.validation-error-area) for element", + e.closest(".jenkins-form-item")) return; } // find the validation-error-area - e.targetElement = tr.firstElementChild.nextSibling; + e.targetElement = tr; e.targetUrl = function() { var url = this.getAttribute("checkUrl"); @@ -545,19 +582,13 @@ function registerValidator(e) { } var checker = function() { - var target = this.targetElement; + const validationArea = this.targetElement; FormChecker.sendRequest(this.targetUrl(), { method : method, - onComplete : function(x) { - if (x.status == 200) { - // All FormValidation responses are 200 - target.innerHTML = x.responseText; - } else { - // Content is taken from FormValidation#_errorWithMarkup - // TODO Add i18n support - target.innerHTML = "
An internal error occurred during form field validation (HTTP " + x.status + "). Please reload the page and if the problem persists, ask the administrator for help.
"; - } - Behaviour.applySubtree(target); + onComplete: function({status, responseText}) { + // TODO Add i18n support + const errorMessage = `
An internal error occurred during form field validation (HTTP ${status}). Please reload the page and if the problem persists, ask the administrator for help.
`; + updateValidationArea(validationArea, status === 200 ? responseText : errorMessage); } }); } @@ -584,22 +615,25 @@ function registerValidator(e) { } function registerRegexpValidator(e,regexp,message) { - var tr = findFollowingTR(e, "validation-error-area"); + var tr = e.closest(".jenkins-form-item").querySelector( ".validation-error-area"); if (!tr) { - console.warn("Couldn't find the expected parent element (.setting-main) for element", e) + console.warn("Couldn't find the expected parent element (.setting-main) for element", + e.closest(".jenkins-form-item")) return; } // find the validation-error-area - e.targetElement = tr.firstElementChild.nextSibling; + e.targetElement = tr; var checkMessage = e.getAttribute('checkMessage'); if (checkMessage) message = checkMessage; var oldOnchange = e.onchange; e.onchange = function() { var set = oldOnchange != null ? oldOnchange.call(this) : false; if (this.value.match(regexp)) { - if (!set) this.targetElement.innerHTML = "
"; + if (!set) { + updateValidationArea(this.targetElement, `
`) + } } else { - this.targetElement.innerHTML = "
" + message + "
"; + updateValidationArea(this.targetElement, `
${message}
`); set = true; } return set; @@ -613,13 +647,14 @@ function registerRegexpValidator(e,regexp,message) { * @param e Input element */ function registerMinMaxValidator(e) { - var tr = findFollowingTR(e, "validation-error-area"); + var tr = e.closest(".jenkins-form-item").querySelector( ".validation-error-area"); if (!tr) { - console.warn("Couldn't find the expected parent element (.setting-main) for element", e) + console.warn("Couldn't find the expected parent element (.setting-main) for element", + e.closest(".jenkins-form-item")) return; } // find the validation-error-area - e.targetElement = tr.firstElementChild.nextSibling; + e.targetElement = tr; var checkMessage = e.getAttribute('checkMessage'); if (checkMessage) message = checkMessage; var oldOnchange = e.onchange; @@ -638,29 +673,35 @@ function registerMinMaxValidator(e) { if (min <= max) { // Add the validator if min <= max if (parseInt(min) > parseInt(this.value) || parseInt(this.value) > parseInt(max)) { // The value is out of range - this.targetElement.innerHTML = "
This value should be between " + min + " and " + max + "
"; + updateValidationArea(this.targetElement, `
This value should be between ${min} and ${max}
`); set = true; } else { - if (!set) this.targetElement.innerHTML = "
"; // The value is valid + if (!set) { + updateValidationArea(this.targetElement, `
`) + } } } } else if ((min !== null && isInteger(min)) && (max === null || !isInteger(max))) { // There is only 'min' available if (parseInt(min) > parseInt(this.value)) { - this.targetElement.innerHTML = "
This value should be larger than " + min + "
"; + updateValidationArea(this.targetElement, `
This value should be larger than ${min}
`); set = true; } else { - if (!set) this.targetElement.innerHTML = "
"; + if (!set) { + updateValidationArea(this.targetElement, `
`) + } } } else if ((min === null || !isInteger(min)) && (max !== null && isInteger(max))) { // There is only 'max' available if (parseInt(max) < parseInt(this.value)) { - this.targetElement.innerHTML = "
This value should be less than " + max + "
"; + updateValidationArea(this.targetElement, `
This value should be less than ${max}
`); set = true; } else { - if (!set) this.targetElement.innerHTML = "
"; + if (!set) { + updateValidationArea(this.targetElement, `
`) + } } } } @@ -2324,15 +2365,16 @@ function validateButton(checkUrl,paramList,button) { } }); - var spinner = $(button).up("DIV").next(); - var target = spinner.next(); + var spinner = button.up("DIV").children[0]; + var target = spinner.next().next(); spinner.style.display="block"; new Ajax.Request(checkUrl, { parameters: parameters, onComplete: function(rsp) { spinner.style.display="none"; - applyErrorMessage(target, rsp); + target.innerHTML = `
`; + updateValidationArea(target.children[0], rsp.responseText); layoutUpdateCallback.call(); var s = rsp.getResponseHeader("script"); try { @@ -2344,26 +2386,6 @@ function validateButton(checkUrl,paramList,button) { }); } -function applyErrorMessage(elt, rsp) { - if (rsp.status == 200) { - elt.innerHTML = rsp.responseText; - } else { - var id = 'valerr' + (iota++); - elt.innerHTML = 'ERROR'; - var error = document.getElementById('error-description'); // cf. oops.jelly - if (error) { - var div = document.getElementById(id); - while (div.firstElementChild) { - div.removeChild(div.firstElementChild); - } - div.appendChild(error); - } - } - Behaviour.applySubtree(elt); -} - // create a combobox. // @param idOrField // ID of the element that becomes a combobox, or the field itself. From e036d3af2e21410a0996927601809a254d0505f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 10 Jun 2022 07:58:06 -0700 Subject: [PATCH 18/26] Bump parent POM from 1.74 to 1.76 (#6642) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- core/src/main/java/hudson/PluginManager.java | 1 + .../hudson/cli/declarative/CLIRegisterer.java | 7 + .../main/java/hudson/model/AbstractItem.java | 1 + core/src/main/java/hudson/model/Executor.java | 7 + .../java/hudson/model/ItemGroupMixIn.java | 2 + core/src/main/java/hudson/model/Queue.java | 1 + .../java/hudson/model/ResourceController.java | 6 + .../main/java/hudson/model/UpdateSite.java | 1 + .../java/hudson/triggers/SafeTimerTask.java | 2 + .../java/hudson/util/InterceptingProxy.java | 2 + .../util/RobustReflectionConverter.java | 2 + core/src/main/java/jenkins/model/Jenkins.java | 1 + core/src/main/java/jenkins/model/Nodes.java | 2 + .../jenkins/model/TransientActionFactory.java | 2 + .../ImpersonatingExecutorService.java | 2 + ...ImpersonatingScheduledExecutorService.java | 2 + .../SecurityContextExecutorService.java | 2 + .../jenkins/util/AtmostOneTaskExecutor.java | 1 + .../util/ContextResettingExecutorService.java | 2 + .../jenkins/util/ProgressiveRendering.java | 2 + ...ractUserDetailsAuthenticationProvider.java | 2 + pom.xml | 2 +- src/spotbugs/spotbugs-excludes.xml | 188 ++++++++++++++++++ 23 files changed, 239 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index c3cd3a750e6d..2fce8ae5a52a 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -187,6 +187,7 @@ * @author Kohsuke Kawaguchi */ @ExportedBean +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public abstract class PluginManager extends AbstractModelObject implements OnMaster, StaplerOverridable, StaplerProxy { /** Custom plugin manager system property or context param. */ public static final String CUSTOM_PLUGIN_MANAGER = PluginManager.class.getName() + ".className"; diff --git a/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java b/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java index 8b2f2348c577..5fdf42672fbf 100644 --- a/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java +++ b/core/src/main/java/hudson/cli/declarative/CLIRegisterer.java @@ -27,6 +27,7 @@ import static java.util.logging.Level.SEVERE; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.AbortException; import hudson.Extension; import hudson.ExtensionComponent; @@ -71,6 +72,12 @@ * @author Kohsuke Kawaguchi */ @Extension +@SuppressFBWarnings( + value = { + "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", + "THROWS_METHOD_THROWS_RUNTIMEEXCEPTION" + }, + justification = "TODO needs triage") public class CLIRegisterer extends ExtensionFinder { @Override public ExtensionComponentSet refresh() throws ExtensionRefreshException { diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index bc96c1b08dcf..2fbc1521de3f 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -110,6 +110,7 @@ // Item doesn't necessarily have to be Actionable, but // Java doesn't let multiple inheritance. @ExportedBean +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_THROWABLE", justification = "TODO needs triage") public abstract class AbstractItem extends Actionable implements Item, HttpDeletable, AccessControlled, DescriptorByNameOwner, StaplerProxy { private static final Logger LOGGER = Logger.getLogger(AbstractItem.class.getName()); diff --git a/core/src/main/java/hudson/model/Executor.java b/core/src/main/java/hudson/model/Executor.java index e7b14b72aebf..7ffc181dd791 100644 --- a/core/src/main/java/hudson/model/Executor.java +++ b/core/src/main/java/hudson/model/Executor.java @@ -32,6 +32,7 @@ import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.FilePath; import hudson.Functions; import hudson.Util; @@ -89,6 +90,12 @@ * @author Kohsuke Kawaguchi */ @ExportedBean +@SuppressFBWarnings( + value = { + "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", + "THROWS_METHOD_THROWS_CLAUSE_THROWABLE" + }, + justification = "TODO needs triage") public class Executor extends Thread implements ModelObject { protected final @NonNull Computer owner; private final Queue queue; diff --git a/core/src/main/java/hudson/model/ItemGroupMixIn.java b/core/src/main/java/hudson/model/ItemGroupMixIn.java index 748a13cc6ec4..e9a526ebbe6c 100644 --- a/core/src/main/java/hudson/model/ItemGroupMixIn.java +++ b/core/src/main/java/hudson/model/ItemGroupMixIn.java @@ -24,6 +24,7 @@ package hudson.model; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.Util; import hudson.XmlFile; import hudson.model.listeners.ItemListener; @@ -61,6 +62,7 @@ * @author Kohsuke Kawaguchi * @see ViewGroupMixIn */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_THROWABLE", justification = "TODO needs triage") public abstract class ItemGroupMixIn { /** * {@link ItemGroup} for which we are working. diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java index 50ad97232bd5..982c74c22380 100644 --- a/core/src/main/java/hudson/model/Queue.java +++ b/core/src/main/java/hudson/model/Queue.java @@ -171,6 +171,7 @@ * @see QueueTaskDispatcher */ @ExportedBean +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class Queue extends ResourceController implements Saveable { /** diff --git a/core/src/main/java/hudson/model/ResourceController.java b/core/src/main/java/hudson/model/ResourceController.java index a3702ab79e61..1516272f1dcc 100644 --- a/core/src/main/java/hudson/model/ResourceController.java +++ b/core/src/main/java/hudson/model/ResourceController.java @@ -39,6 +39,12 @@ * Controls mutual exclusion of {@link ResourceList}. * @author Kohsuke Kawaguchi */ +@SuppressFBWarnings( + value = { + "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", + "THROWS_METHOD_THROWS_CLAUSE_THROWABLE" + }, + justification = "TODO needs triage") public class ResourceController { /** * {@link ResourceList}s that are used by activities that are in progress. diff --git a/core/src/main/java/hudson/model/UpdateSite.java b/core/src/main/java/hudson/model/UpdateSite.java index 389e3cb3890f..76c14164981c 100644 --- a/core/src/main/java/hudson/model/UpdateSite.java +++ b/core/src/main/java/hudson/model/UpdateSite.java @@ -104,6 +104,7 @@ * @since 1.333 */ @ExportedBean +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class UpdateSite { /** * What's the time stamp of data file? diff --git a/core/src/main/java/hudson/triggers/SafeTimerTask.java b/core/src/main/java/hudson/triggers/SafeTimerTask.java index db07c96867df..5a261d0e9a2e 100644 --- a/core/src/main/java/hudson/triggers/SafeTimerTask.java +++ b/core/src/main/java/hudson/triggers/SafeTimerTask.java @@ -24,6 +24,7 @@ package hudson.triggers; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.model.AperiodicWork; import hudson.model.AsyncAperiodicWork; import hudson.model.AsyncPeriodicWork; @@ -47,6 +48,7 @@ * @author Kohsuke Kawaguchi * @since 1.124 */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public abstract class SafeTimerTask extends TimerTask { /** diff --git a/core/src/main/java/hudson/util/InterceptingProxy.java b/core/src/main/java/hudson/util/InterceptingProxy.java index 3ab7ebb0b318..af368ac5bf5e 100644 --- a/core/src/main/java/hudson/util/InterceptingProxy.java +++ b/core/src/main/java/hudson/util/InterceptingProxy.java @@ -1,5 +1,6 @@ package hudson.util; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.lang.reflect.InvocationHandler; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -10,6 +11,7 @@ * * @author Kohsuke Kawaguchi */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_THROWABLE", justification = "TODO needs triage") public abstract class InterceptingProxy { /** * Intercepts every method call. diff --git a/core/src/main/java/hudson/util/RobustReflectionConverter.java b/core/src/main/java/hudson/util/RobustReflectionConverter.java index d1bc500003e1..d7ce1ab5594f 100644 --- a/core/src/main/java/hudson/util/RobustReflectionConverter.java +++ b/core/src/main/java/hudson/util/RobustReflectionConverter.java @@ -44,6 +44,7 @@ import com.thoughtworks.xstream.mapper.Mapper; import com.thoughtworks.xstream.security.InputManipulationException; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.diagnosis.OldDataMonitor; import hudson.model.Saveable; import hudson.security.ACL; @@ -77,6 +78,7 @@ * * */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_RUNTIMEEXCEPTION", justification = "TODO needs triage") @SuppressWarnings({"rawtypes", "unchecked"}) public class RobustReflectionConverter implements Converter { diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 3aa50e0882a9..511ee7a610eb 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -337,6 +337,7 @@ * @author Kohsuke Kawaguchi */ @ExportedBean +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLevelItemGroup, StaplerProxy, StaplerFallback, ModifiableViewGroup, AccessControlled, DescriptorByNameOwner, ModelObjectWithContextMenu, ModelObjectWithChildren, OnMaster { diff --git a/core/src/main/java/jenkins/model/Nodes.java b/core/src/main/java/jenkins/model/Nodes.java index c8ff0e283e9a..f39377e1bcf0 100644 --- a/core/src/main/java/jenkins/model/Nodes.java +++ b/core/src/main/java/jenkins/model/Nodes.java @@ -26,6 +26,7 @@ import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.BulkChange; import hudson.Util; import hudson.XmlFile; @@ -61,6 +62,7 @@ * @since 1.607 */ @Restricted(NoExternalUse.class) // for now, we may make it public later +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class Nodes implements Saveable { /** diff --git a/core/src/main/java/jenkins/model/TransientActionFactory.java b/core/src/main/java/jenkins/model/TransientActionFactory.java index abcd32d71693..21ecc499b9c4 100644 --- a/core/src/main/java/jenkins/model/TransientActionFactory.java +++ b/core/src/main/java/jenkins/model/TransientActionFactory.java @@ -28,6 +28,7 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.ExtensionList; import hudson.ExtensionListListener; import hudson.ExtensionPoint; @@ -48,6 +49,7 @@ * @see Actionable#getAllActions * @since 1.548 */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public abstract class TransientActionFactory implements ExtensionPoint { /** diff --git a/core/src/main/java/jenkins/security/ImpersonatingExecutorService.java b/core/src/main/java/jenkins/security/ImpersonatingExecutorService.java index daf2cc6b0f43..d535f05f756d 100644 --- a/core/src/main/java/jenkins/security/ImpersonatingExecutorService.java +++ b/core/src/main/java/jenkins/security/ImpersonatingExecutorService.java @@ -24,6 +24,7 @@ package jenkins.security; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.security.ACL; import hudson.security.ACLContext; import java.util.concurrent.Callable; @@ -36,6 +37,7 @@ * @see SecurityContextExecutorService * @since 2.51 */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public final class ImpersonatingExecutorService extends InterceptingExecutorService { private final Authentication authentication; diff --git a/core/src/main/java/jenkins/security/ImpersonatingScheduledExecutorService.java b/core/src/main/java/jenkins/security/ImpersonatingScheduledExecutorService.java index 788806869520..adf482d1cff5 100644 --- a/core/src/main/java/jenkins/security/ImpersonatingScheduledExecutorService.java +++ b/core/src/main/java/jenkins/security/ImpersonatingScheduledExecutorService.java @@ -24,6 +24,7 @@ package jenkins.security; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.security.ACL; import hudson.security.ACLContext; import java.util.concurrent.Callable; @@ -35,6 +36,7 @@ * Variant of {@link ImpersonatingExecutorService} for scheduled services. * @since 2.51 */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public final class ImpersonatingScheduledExecutorService extends InterceptingScheduledExecutorService { private final Authentication authentication; diff --git a/core/src/main/java/jenkins/security/SecurityContextExecutorService.java b/core/src/main/java/jenkins/security/SecurityContextExecutorService.java index e2dfe2b9452e..f464ef8e6863 100644 --- a/core/src/main/java/jenkins/security/SecurityContextExecutorService.java +++ b/core/src/main/java/jenkins/security/SecurityContextExecutorService.java @@ -27,6 +27,7 @@ import static org.springframework.security.core.context.SecurityContextHolder.getContext; import static org.springframework.security.core.context.SecurityContextHolder.setContext; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import jenkins.util.InterceptingExecutorService; @@ -43,6 +44,7 @@ * @author Kohsuke Kawaguchi * @since 1.561 */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class SecurityContextExecutorService extends InterceptingExecutorService { public SecurityContextExecutorService(ExecutorService service) { diff --git a/core/src/main/java/jenkins/util/AtmostOneTaskExecutor.java b/core/src/main/java/jenkins/util/AtmostOneTaskExecutor.java index 6347842856f1..3e7dd9f0f3ef 100644 --- a/core/src/main/java/jenkins/util/AtmostOneTaskExecutor.java +++ b/core/src/main/java/jenkins/util/AtmostOneTaskExecutor.java @@ -44,6 +44,7 @@ * @author Kohsuke Kawaguchi * @see AtmostOneThreadExecutor */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class AtmostOneTaskExecutor { private static final Logger LOGGER = Logger.getLogger(AtmostOneTaskExecutor.class.getName()); diff --git a/core/src/main/java/jenkins/util/ContextResettingExecutorService.java b/core/src/main/java/jenkins/util/ContextResettingExecutorService.java index 8492719491ea..bbfa5e772da9 100644 --- a/core/src/main/java/jenkins/util/ContextResettingExecutorService.java +++ b/core/src/main/java/jenkins/util/ContextResettingExecutorService.java @@ -1,5 +1,6 @@ package jenkins.util; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; @@ -11,6 +12,7 @@ * * @author Kohsuke Kawaguchi */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_BASIC_EXCEPTION", justification = "TODO needs triage") public class ContextResettingExecutorService extends InterceptingExecutorService { public ContextResettingExecutorService(ExecutorService base) { super(base); diff --git a/core/src/main/java/jenkins/util/ProgressiveRendering.java b/core/src/main/java/jenkins/util/ProgressiveRendering.java index 42ef0b76861a..b71482da2d24 100644 --- a/core/src/main/java/jenkins/util/ProgressiveRendering.java +++ b/core/src/main/java/jenkins/util/ProgressiveRendering.java @@ -25,6 +25,7 @@ package jenkins.util; import edu.umd.cs.findbugs.annotations.NonNull; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import hudson.model.AbstractItem; import java.lang.reflect.Field; import java.lang.reflect.InvocationHandler; @@ -73,6 +74,7 @@ * {@code ui-samples-plugin} demonstrates all this. * @since 1.484 */ +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_CLAUSE_THROWABLE", justification = "TODO needs triage") public abstract class ProgressiveRendering { private static final Logger LOG = Logger.getLogger(ProgressiveRendering.class.getName()); diff --git a/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java b/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java index 1eaf27beac4d..7b8d5f5afb2f 100644 --- a/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java +++ b/core/src/main/java/org/acegisecurity/providers/dao/AbstractUserDetailsAuthenticationProvider.java @@ -24,6 +24,7 @@ package org.acegisecurity.providers.dao; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import org.acegisecurity.AcegiSecurityException; import org.acegisecurity.Authentication; import org.acegisecurity.AuthenticationException; @@ -35,6 +36,7 @@ * @deprecated use {@link org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider} */ @Deprecated +@SuppressFBWarnings(value = "THROWS_METHOD_THROWS_RUNTIMEEXCEPTION", justification = "TODO needs triage") public abstract class AbstractUserDetailsAuthenticationProvider implements AuthenticationProvider { private final org.springframework.security.authentication.dao.AbstractUserDetailsAuthenticationProvider delegate = diff --git a/pom.xml b/pom.xml index d0efa5fad27d..90f7f0cbfd18 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci jenkins - 1.74 + 1.76 diff --git a/src/spotbugs/spotbugs-excludes.xml b/src/spotbugs/spotbugs-excludes.xml index d848c9bc6a45..1e6be9807dbd 100644 --- a/src/spotbugs/spotbugs-excludes.xml +++ b/src/spotbugs/spotbugs-excludes.xml @@ -573,6 +573,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 112bb349f7dbb0dcb5dec41fcf578c15195e5b08 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Fri, 10 Jun 2022 10:30:20 -0700 Subject: [PATCH 19/26] Preserve dumpstream on Maven failure (#6641) --- Jenkinsfile | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 8016e9d91363..05f5fbf2398c 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -61,9 +61,13 @@ for (i = 0; i < buildTypes.size(); i++) { 'clean', 'install', ] - infra.runMaven(mavenOptions, jdk) - if (isUnix()) { - sh 'git add . && git diff --exit-code HEAD' + try { + infra.runMaven(mavenOptions, jdk) + if (isUnix()) { + sh 'git add . && git diff --exit-code HEAD' + } + } finally { + archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/surefire-reports/*.dumpstream' } } } @@ -71,7 +75,6 @@ for (i = 0; i < buildTypes.size(); i++) { // Once we've built, archive the artifacts and the test results. stage("${buildType} Publishing") { - archiveArtifacts allowEmptyArchive: true, artifacts: '**/target/surefire-reports/*.dumpstream' if (!fileExists('core/target/surefire-reports/TEST-jenkins.Junit4TestsRanTest.xml')) { error 'JUnit 4 tests are no longer being run for the core package' } From bea72075778d5315efa08308cea8dae5e47d81c5 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 10 Jun 2022 17:10:50 -0400 Subject: [PATCH 20/26] Simplify contributing instructions to recommend `-Pquick-build` --- CONTRIBUTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8eb9822ccd8e..ef8cf80541d1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -31,7 +31,7 @@ You can read a description of the [building and debugging process here]. If you want simply to build the `jenkins.war` file as fast as possible without tests, run: ```sh -mvn -am -pl war,bom -DskipTests -Dspotbugs.skip -Dspotless.check.skip clean install +mvn -am -pl war,bom -Pquick-build clean install ``` The WAR file will be created in `war/target/jenkins.war`. @@ -220,4 +220,4 @@ just submit a pull request. [Jenkins Pipeline]: https://www.jenkins.io/doc/book/pipeline/ [Jenkinsfile]: ./Jenkinsfile [download Maven here]: https://maven.apache.org/download.cgi -[GitHub pull request]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests \ No newline at end of file +[GitHub pull request]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/about-pull-requests From ae16c3074953ebffe814e55128987e2c4d372857 Mon Sep 17 00:00:00 2001 From: Tim Jacomb <21194782+timja@users.noreply.github.com> Date: Sat, 11 Jun 2022 08:42:02 -0500 Subject: [PATCH 21/26] Add gitpod integration (#6590) Co-authored-by: Victor Nogueira Co-authored-by: Alexander Brandes Co-authored-by: Jesse Glick --- .gitpod.yml | 27 +++++++++++++++++++++++++++ .gitpod/Dockerfile | 4 ++++ CONTRIBUTING.md | 10 ++++++++++ 3 files changed, 41 insertions(+) create mode 100644 .gitpod.yml create mode 100644 .gitpod/Dockerfile diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000000..d3bedadf1f9b --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,27 @@ +tasks: + - init: | + mvn -am -pl war,bom -P quick-build clean install + command: | + mvn -pl war jetty:run -Dhost=0.0.0.0 + name: Run + - command: gp await-port 8080 && gp url 8080 && gp preview $(gp url 8080)/jenkins/ + name: Preview + +github: + prebuilds: + pullRequestsFromForks: true + addBadge: true + +jetbrains: + intellij: + plugins: + - Stapler plugin for IntelliJ IDEA + prebuilds: + version: stable + +vscode: + extensions: + - vscjava.vscode-java-pack + +image: + file: .gitpod/Dockerfile diff --git a/.gitpod/Dockerfile b/.gitpod/Dockerfile new file mode 100644 index 000000000000..e3c88317008f --- /dev/null +++ b/.gitpod/Dockerfile @@ -0,0 +1,4 @@ +FROM gitpod/workspace-full + +RUN brew install gh && \ + bash -c ". /home/gitpod/.sdkman/bin/sdkman-init.sh && sdk install maven 3.8.4 && sdk default maven 3.8.4" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ef8cf80541d1..fb32776fb370 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -62,6 +62,16 @@ On another terminal, move to the war folder and start a [webpack](https://webpac cd war; yarn start ``` +### Gitpod + +You can open this project as a [Gitpod workspace](https://www.gitpod.io/) which comes pre-configured with all the tools you will need. +You can use IntelliJ IDEA (preferred) or VS Code (alternate) in the browser. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/jenkinsci/jenkins) + +If you prefer using IntelliJ IDEA, you can setup Gitpod integration with JetBrains Gateway using the instructions on [gitpod.io](https://www.gitpod.io/docs/ides-and-editors/intellij), +which will open the workspace in IntelliJ IDEA using JetBrains Gateway. + ## Testing changes Jenkins core includes unit and functional tests as a part of the repository. From d86beed83b120c403ae2e501536f9d4ac2858f74 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Jun 2022 11:48:48 -0700 Subject: [PATCH 22/26] Bump Spotless Maven Plugin from 2.22.6 to 2.22.7 (#6647) Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 90f7f0cbfd18..776a1dda77c8 100644 --- a/pom.xml +++ b/pom.xml @@ -102,7 +102,7 @@ THE SOFTWARE. 1.23 5.8.2 4.6.1 - 2.22.6 + 2.22.7 2.22.2 From c3193d91deb1a89f6f6bfe0b968a3b55fb28f713 Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Sun, 12 Jun 2022 17:20:53 +0200 Subject: [PATCH 23/26] chore: Compress and adjust IDEA svg (#6653) --- .idea/icon.svg | 82 +------------------------------------------------- 1 file changed, 1 insertion(+), 81 deletions(-) diff --git a/.idea/icon.svg b/.idea/icon.svg index 8dd8fec29266..44161638ba48 100644 --- a/.idea/icon.svg +++ b/.idea/icon.svg @@ -1,81 +1 @@ - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + From 393ec80794450b46d80106a7d934cf3e1b98c635 Mon Sep 17 00:00:00 2001 From: Langer0416 <71805759+Langer0416@users.noreply.github.com> Date: Sun, 12 Jun 2022 13:46:53 -0700 Subject: [PATCH 24/26] [JENKINS-68735] Missing sidepanel for user configuration if password is empty (#6650) --- .../hudson/model/AbstractModelObject/error.jelly | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly b/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly index d5522dca3251..40e3eb4a03c1 100644 --- a/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly +++ b/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly @@ -24,11 +24,15 @@ THE SOFTWARE. - + - + + + + +

${%Error}

@@ -39,7 +43,7 @@ THE SOFTWARE.

${message}

- +
From 56a03a5b1382a268cd8ca1229a2394791f50b82f Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Sun, 12 Jun 2022 16:55:47 -0700 Subject: [PATCH 25/26] Upgrade Surefire from 2.22.2 to 3.0.0-M7 (#6652) --- .mvn/jvm.config | 2 +- pom.xml | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.mvn/jvm.config b/.mvn/jvm.config index e93a5b43ee1c..f0106d148540 100644 --- a/.mvn/jvm.config +++ b/.mvn/jvm.config @@ -1 +1 @@ --Xmx800m +-Xmx1100m diff --git a/pom.xml b/pom.xml index 776a1dda77c8..04a02264892e 100644 --- a/pom.xml +++ b/pom.xml @@ -103,10 +103,6 @@ THE SOFTWARE. 5.8.2 4.6.1 2.22.7 - - - 2.22.2 - 2.22.2 From 65fcda13509d0185cfab1016efd83c5fe8e91cb7 Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Mon, 13 Jun 2022 21:30:10 +0200 Subject: [PATCH 26/26] Revert "[JENKINS-68735] Missing sidepanel for user configuration if password is empty (#6650)" (#6654) This reverts commit 393ec80794450b46d80106a7d934cf3e1b98c635. --- .../hudson/model/AbstractModelObject/error.jelly | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly b/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly index 40e3eb4a03c1..d5522dca3251 100644 --- a/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly +++ b/core/src/main/resources/hudson/model/AbstractModelObject/error.jelly @@ -24,15 +24,11 @@ THE SOFTWARE. - + - - - - - +

${%Error}

@@ -43,7 +39,7 @@ THE SOFTWARE.

${message}

- +