From 4f4a42fa1aa8c0ef7d194ce6edc2b0a0d4e46a6d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 07:35:50 -0700 Subject: [PATCH 01/83] Update dependency org.jenkins-ci:jenkins to v1.123 (#9774) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 56c71c9fee33c..21bf2f4f10e7f 100644 --- a/pom.xml +++ b/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci jenkins - 1.122 + 1.123 From 764637f932f7fa335c9e3b4902e359daf5b0ab99 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 09:12:06 -0700 Subject: [PATCH 02/83] Update dependency sass-loader to v16.0.2 (#9776) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2e182ee59b0df..4b302e4ba3eed 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "postcss-scss": "4.0.9", "prettier": "3.3.3", "sass": "1.79.2", - "sass-loader": "16.0.1", + "sass-loader": "16.0.2", "style-loader": "4.0.0", "stylelint": "16.9.0", "stylelint-checkstyle-reporter": "1.0.0", diff --git a/yarn.lock b/yarn.lock index 1b7cee1d2346a..5e20d1fca420d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4420,7 +4420,7 @@ __metadata: postcss-scss: "npm:4.0.9" prettier: "npm:3.3.3" sass: "npm:1.79.2" - sass-loader: "npm:16.0.1" + sass-loader: "npm:16.0.2" sortablejs: "npm:1.15.3" style-loader: "npm:4.0.0" stylelint: "npm:16.9.0" @@ -6356,9 +6356,9 @@ __metadata: languageName: node linkType: hard -"sass-loader@npm:16.0.1": - version: 16.0.1 - resolution: "sass-loader@npm:16.0.1" +"sass-loader@npm:16.0.2": + version: 16.0.2 + resolution: "sass-loader@npm:16.0.2" dependencies: neo-async: "npm:^2.6.2" peerDependencies: @@ -6378,7 +6378,7 @@ __metadata: optional: true webpack: optional: true - checksum: 10c0/ac841ea8881354e4bf286c2c5f331b60c2edf73c6e4abbc85b954024ec16dfda01accf59ea6fcb4b29ec7dd5a81a9950fc9138dcb262b9130865367201b7699a + checksum: 10c0/9c5165b44fc6229d8f36fb2af3ebb9d1e3a837bcc80040d3f3fc5793cd2998407e2ed55853c2b342cca2b5e17fa141160198ad034685a95b17126200c320ae11 languageName: node linkType: hard From d6b014fa532cc38bb01e14d46249b593043e6b38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 20:25:12 +0100 Subject: [PATCH 03/83] Update eslint monorepo to v9.11.0 (#9777) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- yarn.lock | 32 ++++++++++++++++---------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index 4b302e4ba3eed..7c24fa22ae54d 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,12 @@ "@babel/cli": "7.25.6", "@babel/core": "7.25.2", "@babel/preset-env": "7.25.4", - "@eslint/js": "9.10.0", + "@eslint/js": "9.11.0", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", "css-loader": "7.1.2", "css-minimizer-webpack-plugin": "7.0.0", - "eslint": "9.10.0", + "eslint": "9.11.0", "eslint-config-prettier": "9.1.0", "eslint-formatter-checkstyle": "8.40.0", "globals": "15.9.0", diff --git a/yarn.lock b/yarn.lock index 5e20d1fca420d..720cbe3061f0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1871,10 +1871,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.10.0": - version: 9.10.0 - resolution: "@eslint/js@npm:9.10.0" - checksum: 10c0/2ac45a002dc1ccf25be46ea61001ada8d77248d1313ab4e53f3735e5ae00738a757874e41f62ad6fbd49df7dffeece66e5f53ff0d7b78a99ce4c68e8fea66753 +"@eslint/js@npm:9.11.0": + version: 9.11.0 + resolution: "@eslint/js@npm:9.11.0" + checksum: 10c0/7403aeba28ba9cae3470d149b334a51375eb7fd850f167555c81cc72fe98e5cc5ac3059ccdbe68eb255a49d7498a7288d25429af0c7d20afeb4b3c0748349bb4 languageName: node linkType: hard @@ -1885,12 +1885,12 @@ __metadata: languageName: node linkType: hard -"@eslint/plugin-kit@npm:^0.1.0": - version: 0.1.0 - resolution: "@eslint/plugin-kit@npm:0.1.0" +"@eslint/plugin-kit@npm:^0.2.0": + version: 0.2.0 + resolution: "@eslint/plugin-kit@npm:0.2.0" dependencies: levn: "npm:^0.4.1" - checksum: 10c0/fae97cd4efc1c32501c286abba1b5409848ce8c989e1ca6a5bb057a304a2cd721e6e957f6bc35ce95cfd0871e822ed42df3c759fecdad72c30e70802e26f83c7 + checksum: 10c0/00b92bc52ad09b0e2bbbb30591c02a895f0bec3376759562590e8a57a13d096b22f8c8773b6bf791a7cf2ea614123b3d592fd006c51ac5fd0edbb90ea6d8760c languageName: node linkType: hard @@ -3527,16 +3527,16 @@ __metadata: languageName: node linkType: hard -"eslint@npm:9.10.0": - version: 9.10.0 - resolution: "eslint@npm:9.10.0" +"eslint@npm:9.11.0": + version: 9.11.0 + resolution: "eslint@npm:9.11.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.11.0" "@eslint/config-array": "npm:^0.18.0" "@eslint/eslintrc": "npm:^3.1.0" - "@eslint/js": "npm:9.10.0" - "@eslint/plugin-kit": "npm:^0.1.0" + "@eslint/js": "npm:9.11.0" + "@eslint/plugin-kit": "npm:^0.2.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.3.0" "@nodelib/fs.walk": "npm:^1.2.8" @@ -3572,7 +3572,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/7357f3995b15043eea83c8c0ab16c385ce3f28925c1b11cfcd6b2ede8faab3d91ede84a68173dd5f6e3e176e177984e6218de58b7b8388e53e2881f1ec07c836 + checksum: 10c0/3438a78172bc667dc87bc4ad864671bd93231c82c9d366899ea3a77fc3444c8cdd158e7fe3ca1cfe4cb566045b1b36c0ccae9fc20efeb4b187f1a534075a1177 languageName: node linkType: hard @@ -4399,12 +4399,12 @@ __metadata: "@babel/cli": "npm:7.25.6" "@babel/core": "npm:7.25.2" "@babel/preset-env": "npm:7.25.4" - "@eslint/js": "npm:9.10.0" + "@eslint/js": "npm:9.11.0" babel-loader: "npm:9.2.1" clean-webpack-plugin: "npm:4.0.0" css-loader: "npm:7.1.2" css-minimizer-webpack-plugin: "npm:7.0.0" - eslint: "npm:9.10.0" + eslint: "npm:9.11.0" eslint-config-prettier: "npm:9.1.0" eslint-formatter-checkstyle: "npm:8.40.0" globals: "npm:15.9.0" From ca6e1403311ecd9528faba61b30102b8e3619c45 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Sep 2024 07:12:59 +0100 Subject: [PATCH 04/83] Update dependency sass to v1.79.3 (#9780) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 7c24fa22ae54d..365fadb619ed9 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "postcss-preset-env": "10.0.3", "postcss-scss": "4.0.9", "prettier": "3.3.3", - "sass": "1.79.2", + "sass": "1.79.3", "sass-loader": "16.0.2", "style-loader": "4.0.0", "stylelint": "16.9.0", diff --git a/yarn.lock b/yarn.lock index 720cbe3061f0d..28ee807765bc6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4419,7 +4419,7 @@ __metadata: postcss-preset-env: "npm:10.0.3" postcss-scss: "npm:4.0.9" prettier: "npm:3.3.3" - sass: "npm:1.79.2" + sass: "npm:1.79.3" sass-loader: "npm:16.0.2" sortablejs: "npm:1.15.3" style-loader: "npm:4.0.0" @@ -6382,16 +6382,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.79.2": - version: 1.79.2 - resolution: "sass@npm:1.79.2" +"sass@npm:1.79.3": + version: 1.79.3 + resolution: "sass@npm:1.79.3" dependencies: chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/b637daf133da4fbafbb7e6ae07b01ff7c73e406f3134e66749bf6f712dcc0056c6971d8629d8cc2b186df5ffb2282baa8f1818f35e326b3558ab284e31fdd87d + checksum: 10c0/ad171bbbb2d7a789cc47803a59dcf2d0ac92ede34b538bb3fd683b6391a9ac3dc3eabaac264fc9582c770c4e435b85840e011785b7adfc0ac002b51ba91179c9 languageName: node linkType: hard From 7df633dcf9e8190906f4bf105397f521afc1eb0a Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:48:23 +0000 Subject: [PATCH 05/83] [maven-release-plugin] prepare release jenkins-2.478 --- 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 +- websocket/jetty12-ee9/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 47321614432c4..b566b2322f3d5 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 6309811a2e8bc..17a8b92394c39 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 cli diff --git a/core/pom.xml b/core/pom.xml index 9bff5e5ad0b2a..2816851b19f63 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index fe1e89a120dce..40e56b92706ca 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 jenkins-coverage diff --git a/pom.xml b/pom.xml index 21bf2f4f10e7f..aad9133f623fd 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 pom Jenkins main module @@ -63,7 +63,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - ${scmTag} + jenkins-2.478 https://github.com/jenkinsci/jenkins @@ -75,7 +75,7 @@ THE SOFTWARE. 2.478 -SNAPSHOT - 2024-09-17T13:51:35Z + 2024-09-24T10:34:05Z github diff --git a/test/pom.xml b/test/pom.xml index 0f3aa999e08e8..4ab8e6ab32632 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index f256a95017cae..db4801f1c3b39 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 jenkins-war diff --git a/websocket/jetty12-ee9/pom.xml b/websocket/jetty12-ee9/pom.xml index 2253163b3c4c9..4fe0271783207 100644 --- a/websocket/jetty12-ee9/pom.xml +++ b/websocket/jetty12-ee9/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 178413f92c8e5..9834b9c8d02ce 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.478 ../.. From 435bb7989126d6ef3e3d78ddc5597354b71bff74 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:48:54 +0000 Subject: [PATCH 06/83] [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 | 8 ++++---- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty12-ee9/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index b566b2322f3d5..47321614432c4 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 17a8b92394c39..6309811a2e8bc 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 2816851b19f63..9bff5e5ad0b2a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 40e56b92706ca..fe1e89a120dce 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index aad9133f623fd..61ca93c2edc67 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} pom Jenkins main module @@ -63,7 +63,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - jenkins-2.478 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -73,9 +73,9 @@ THE SOFTWARE. - 2.478 + 2.479 -SNAPSHOT - 2024-09-24T10:34:05Z + 2024-09-24T13:48:23Z github diff --git a/test/pom.xml b/test/pom.xml index 4ab8e6ab32632..0f3aa999e08e8 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} jenkins-test diff --git a/war/pom.xml b/war/pom.xml index db4801f1c3b39..f256a95017cae 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} jenkins-war diff --git a/websocket/jetty12-ee9/pom.xml b/websocket/jetty12-ee9/pom.xml index 4fe0271783207..2253163b3c4c9 100644 --- a/websocket/jetty12-ee9/pom.xml +++ b/websocket/jetty12-ee9/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 9834b9c8d02ce..178413f92c8e5 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.478 + ${revision}${changelist} ../.. From cd242d9ed4fdf8213fd10078fe515fabde25ea6a Mon Sep 17 00:00:00 2001 From: Kevin-CB Date: Wed, 25 Sep 2024 07:59:20 +0000 Subject: [PATCH 07/83] [SECURITY-3448] --- .../java/hudson/model/ItemGroupMixIn.java | 13 +- .../jenkins/security/Security3448Test.java | 171 ++++++++++++++++++ 2 files changed, 182 insertions(+), 2 deletions(-) create mode 100644 test/src/test/java/jenkins/security/Security3448Test.java diff --git a/core/src/main/java/hudson/model/ItemGroupMixIn.java b/core/src/main/java/hudson/model/ItemGroupMixIn.java index 404d213f73449..f0b48787e24b9 100644 --- a/core/src/main/java/hudson/model/ItemGroupMixIn.java +++ b/core/src/main/java/hudson/model/ItemGroupMixIn.java @@ -302,8 +302,17 @@ public synchronized TopLevelItem createProjectFromXML(String name, InputStream x } }); - success = acl.getACL().hasCreatePermission2(Jenkins.getAuthentication2(), parent, result.getDescriptor()) - && result.getDescriptor().isApplicableIn(parent); + boolean hasCreatePermission = acl.getACL().hasCreatePermission2(Jenkins.getAuthentication2(), parent, result.getDescriptor()); + boolean applicableIn = result.getDescriptor().isApplicableIn(parent); + + success = hasCreatePermission && applicableIn; + + if (!hasCreatePermission) { + throw new AccessDeniedException(Jenkins.getAuthentication2().getName() + " does not have required permissions to create " + result.getDescriptor().clazz.getName()); + } + if (!applicableIn) { + throw new AccessDeniedException(result.getDescriptor().clazz.getName() + " is not applicable in " + parent.getFullName()); + } add(result); diff --git a/test/src/test/java/jenkins/security/Security3448Test.java b/test/src/test/java/jenkins/security/Security3448Test.java new file mode 100644 index 0000000000000..d2a4695317cf4 --- /dev/null +++ b/test/src/test/java/jenkins/security/Security3448Test.java @@ -0,0 +1,171 @@ +package jenkins.security; + +import static hudson.cli.CLICommandInvoker.Matcher.failedWith; +import static hudson.cli.CLICommandInvoker.Matcher.succeededSilently; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertTrue; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.cli.CLICommand; +import hudson.cli.CLICommandInvoker; +import hudson.cli.CreateJobCommand; +import hudson.model.Build; +import hudson.model.Descriptor; +import hudson.model.FreeStyleProject; +import hudson.model.ItemGroup; +import hudson.model.Project; +import hudson.model.TopLevelItem; +import hudson.model.TopLevelItemDescriptor; +import hudson.security.ACL; +import hudson.security.AuthorizationStrategy; +import hudson.security.Permission; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.Collection; +import java.util.Collections; +import jenkins.model.Jenkins; +import org.hamcrest.Matchers; +import org.htmlunit.HttpMethod; +import org.htmlunit.WebRequest; +import org.htmlunit.WebResponse; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.TestExtension; +import org.kohsuke.stapler.DataBoundConstructor; +import org.springframework.security.core.Authentication; + +public class Security3448Test { + + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Issue("SECURITY-3448") + @Test + public void jobCreationFromCLI() { + CLICommand cmd = new CreateJobCommand(); + CLICommandInvoker invoker = new CLICommandInvoker(j, cmd); + + j.jenkins.setAuthorizationStrategy(AuthorizationStrategy.UNSECURED); + + assertThat(j.jenkins.getItems(), Matchers.hasSize(0)); + assertThat(invoker.withStdin(new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8))).invokeWithArgs("job1"), succeededSilently()); + assertThat(j.jenkins.getItems(), Matchers.hasSize(1)); + + assertThat(invoker.withStdin(new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8))).invokeWithArgs("job2"), failedWith(6)); + assertThat(j.jenkins.getItems(), Matchers.hasSize(1)); + + j.jenkins.setAuthorizationStrategy(new UnsecuredNoFreestyleAuthorizationStrategy()); + + assertThat(invoker.withStdin(new ByteArrayInputStream("".getBytes(StandardCharsets.UTF_8))).invokeWithArgs("job2"), failedWith(6)); + assertThat(j.jenkins.getItems(), Matchers.hasSize(1)); + } + + @Test + @Issue("SECURITY-3448") + public void jobCreationFromREST() throws Exception { + j.jenkins.setCrumbIssuer(null); + + try (JenkinsRule.WebClient wc = j.createWebClient().withThrowExceptionOnFailingStatusCode(false)) { + String doCreateItem = j.getURL().toString() + "createItem?name="; + URL job1 = new URL(doCreateItem + "job1"); + WebRequest req = new WebRequest(job1, HttpMethod.POST); + req.setAdditionalHeader("Content-Type", "application/xml"); + req.setRequestBody(""); + j.jenkins.setAuthorizationStrategy(AuthorizationStrategy.UNSECURED); + + assertThat(j.jenkins.getItems(), Matchers.hasSize(0)); + wc.getPage(req); + assertThat(j.jenkins.getItems(), Matchers.hasSize(1)); + + URL job2 = new URL(doCreateItem + "job2"); + req.setUrl(job2); + req.setRequestBody(""); + + WebResponse rspJob2 = wc.getPage(req).getWebResponse(); + assertTrue(rspJob2.getContentAsString().contains("Security3448Test$NotApplicableProject is not applicable in")); + assertThat(j.jenkins.getItems(), Matchers.hasSize(1)); + + URL job3 = new URL(doCreateItem + "job3"); + req.setUrl(job3); + req.setRequestBody(""); + j.jenkins.setAuthorizationStrategy(new UnsecuredNoFreestyleAuthorizationStrategy()); + + WebResponse rspJob3 = wc.getPage(req).getWebResponse(); + assertTrue(rspJob3.getContentAsString().contains("does not have required permissions to create hudson.model.FreeStyleProject")); + assertThat(j.jenkins.getItems(), Matchers.hasSize(1)); + } + } + + public static class UnsecuredNoFreestyleAuthorizationStrategy extends AuthorizationStrategy { + + @DataBoundConstructor + public UnsecuredNoFreestyleAuthorizationStrategy() {} + + @Override + public ACL getRootACL() { + return new ACL() { + + @Override + public boolean hasPermission2(Authentication a, Permission permission) { + return true; + } + + @Override + public boolean hasCreatePermission2( + @NonNull Authentication a, @NonNull ItemGroup c, @NonNull TopLevelItemDescriptor d) { + return d.clazz != FreeStyleProject.class; + } + }; + } + + @Override + public Collection getGroups() { + return Collections.emptyList(); + } + + @TestExtension + public static class DescriptorImpl extends Descriptor {} + } + + public static class NotApplicableProject extends Project implements TopLevelItem { + + NotApplicableProject(ItemGroup parent, String name) { + super(parent, name); + } + + @Override + protected Class getBuildClass() { + return NotApplicableBuild.class; + } + + @Override + public TopLevelItemDescriptor getDescriptor() { + return (NotApplicableProject.DescriptorImpl) Jenkins.get().getDescriptorOrDie(getClass()); + } + + @TestExtension + public static class DescriptorImpl extends AbstractProjectDescriptor { + + @Override + public boolean isApplicableIn(ItemGroup parent) { + return false; + } + + @Override + public TopLevelItem newInstance(ItemGroup parent, String name) { + return new NotApplicableProject(parent, name); + } + } + } + + public static class NotApplicableBuild extends Build { + + protected NotApplicableBuild(NotApplicableProject project) throws IOException { + super(project); + } + } +} From d0c0d07bc4644bc7045ac321472d0a9822dbb8b8 Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Wed, 25 Sep 2024 07:59:26 +0000 Subject: [PATCH 08/83] [SECURITY-3451] --- .../resources/lib/form/secretTextarea.jelly | 2 +- ...etJsonInErrorMessageSanitizerHtmlTest.java | 80 +++++++++++++++++++ .../TestSecretTextarea/index.jelly | 39 +++++++++ .../main/webapp/scripts/hudson-behavior.js | 3 + 4 files changed, 123 insertions(+), 1 deletion(-) create mode 100644 test/src/test/resources/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest/TestSecretTextarea/index.jelly diff --git a/core/src/main/resources/lib/form/secretTextarea.jelly b/core/src/main/resources/lib/form/secretTextarea.jelly index 323a8435d0f3d..379023919528f 100644 --- a/core/src/main/resources/lib/form/secretTextarea.jelly +++ b/core/src/main/resources/lib/form/secretTextarea.jelly @@ -101,7 +101,7 @@ Example usage:
diff --git a/test/src/test/java/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest.java b/test/src/test/java/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest.java index 0fe9b8865d167..b1435951f0e2d 100644 --- a/test/src/test/java/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest.java +++ b/test/src/test/java/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest.java @@ -31,19 +31,24 @@ import static org.hamcrest.Matchers.hasItem; import static org.hamcrest.Matchers.not; +import hudson.ExtensionList; import hudson.model.Describable; import hudson.model.Descriptor; import hudson.model.RootAction; import hudson.util.Secret; +import jakarta.servlet.ServletException; import java.io.PrintWriter; import java.io.StringWriter; import java.util.logging.Level; import jenkins.model.Jenkins; import net.sf.json.JSONObject; import org.htmlunit.Page; +import org.htmlunit.html.HtmlElement; +import org.htmlunit.html.HtmlElementUtil; import org.htmlunit.html.HtmlForm; import org.htmlunit.html.HtmlInput; import org.htmlunit.html.HtmlPage; +import org.htmlunit.html.HtmlTextArea; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.Issue; @@ -223,6 +228,81 @@ public void checkSanitizationIsApplied_inStapler() throws Exception { )); } + @Test + @Issue("SECURITY-3451") + public void secretTextAreaSubmissionRedaction() throws Exception { + final TestSecretTextarea action = ExtensionList.lookupSingleton(TestSecretTextarea.class); + + logging.record("", Level.WARNING).capture(100); + + final String secretValue = "s3cr3t"; + + try (JenkinsRule.WebClient wc = j.createWebClient().withThrowExceptionOnFailingStatusCode(false)) { + + HtmlPage page = wc.goTo("test"); + + final HtmlForm form = page.getFormByName("config"); + final HtmlElement button = form.getElementsByTagName("button").stream().filter(b -> HtmlElementUtil.hasClassName(b, "secret-update-btn")).findFirst().orElseThrow(); + HtmlElementUtil.click(button); + + ((HtmlTextArea) form.getElementsByTagName("textarea").stream().filter(field -> HtmlElementUtil.hasClassName(field, "secretTextarea-redact")).findFirst().orElseThrow()).setText(secretValue); + + Page formSubmitPage = j.submit(form); + assertThat(formSubmitPage.getWebResponse().getContentAsString(), allOf( + containsString(RedactSecretJsonInErrorMessageSanitizer.REDACT_VALUE), + not(containsString(secretValue)) + )); + } + + // check the system log also + Throwable thrown = logging.getRecords().stream().filter(r -> r.getMessage().contains("Error while serving")).findAny().get().getThrown(); + // the exception from RequestImpl + assertThat(thrown.getCause().getMessage(), allOf( + containsString(RedactSecretJsonInErrorMessageSanitizer.REDACT_VALUE), + not(containsString(secretValue)) + )); + + StringWriter buffer = new StringWriter(); + thrown.printStackTrace(new PrintWriter(buffer)); + String fullStack = buffer.getBuffer().toString(); + assertThat(fullStack, allOf( + containsString(RedactSecretJsonInErrorMessageSanitizer.REDACT_VALUE), + not(containsString(secretValue)) + )); + } + + public static class SecretTextareaDescribable { + @DataBoundConstructor + public SecretTextareaDescribable(Secret secret) { + throw new IllegalArgumentException("there is something wrong with the secret"); + } + } + + @TestExtension("secretTextAreaSubmissionRedaction") + public static class TestSecretTextarea implements RootAction { + + public JSONObject lastJsonReceived; + + public void doSubmitTest(StaplerRequest2 req) throws ServletException { + req.bindJSON(SecretTextareaDescribable.class, req.getSubmittedForm()); + } + + @Override + public String getIconFileName() { + return null; + } + + @Override + public String getDisplayName() { + return null; + } + + @Override + public String getUrlName() { + return "test"; + } + } + public static class TestDescribable implements Describable { @DataBoundConstructor diff --git a/test/src/test/resources/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest/TestSecretTextarea/index.jelly b/test/src/test/resources/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest/TestSecretTextarea/index.jelly new file mode 100644 index 0000000000000..05b146af865b9 --- /dev/null +++ b/test/src/test/resources/jenkins/security/RedactSecretJsonInErrorMessageSanitizerHtmlTest/TestSecretTextarea/index.jelly @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js index 6f877b5f8332f..da691e76c97fe 100644 --- a/war/src/main/webapp/scripts/hudson-behavior.js +++ b/war/src/main/webapp/scripts/hudson-behavior.js @@ -2531,6 +2531,9 @@ function buildFormTree(form) { if (e.classList.contains("complex-password-field")) { addProperty(p, "$redact", shortenName(e.name)); } + if (e.classList.contains("secretTextarea-redact")) { + addProperty(p, "$redact", shortenName(e.name)); + } break; } } From dfd7a9c48bea58213586a887e0ee8da82096497c Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Wed, 25 Sep 2024 07:59:32 +0000 Subject: [PATCH 09/83] [SECURITY-3373] --- .../main/java/hudson/model/AbstractItem.java | 21 +++++------ .../java/hudson/model/ItemGroupMixIn.java | 26 +++++++------- .../security/ExtendedReadRedaction.java | 36 +++++++++++++++++++ .../security/ExtendedReadSecretRedaction.java | 28 +++++++++++++++ test/src/test/java/lib/form/PasswordTest.java | 3 ++ 5 files changed, 88 insertions(+), 26 deletions(-) create mode 100644 core/src/main/java/jenkins/security/ExtendedReadRedaction.java create mode 100644 core/src/main/java/jenkins/security/ExtendedReadSecretRedaction.java diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index 8ba7aafe15cdc..e1a448d1f06e9 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -59,8 +59,6 @@ import java.util.ListIterator; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; import javax.xml.transform.Source; import javax.xml.transform.TransformerException; import javax.xml.transform.sax.SAXSource; @@ -70,6 +68,7 @@ import jenkins.model.Jenkins; import jenkins.model.Loadable; import jenkins.model.queue.ItemDeletion; +import jenkins.security.ExtendedReadRedaction; import jenkins.security.NotReallyRoleSensitiveCallable; import jenkins.security.stapler.StaplerNotDispatchable; import jenkins.util.SystemProperties; @@ -870,11 +869,11 @@ private void doConfigDotXmlImpl(StaplerRequest2 req, StaplerResponse2 rsp) rsp.sendError(SC_BAD_REQUEST); } - static final Pattern SECRET_PATTERN = Pattern.compile(">(" + Secret.ENCRYPTED_VALUE_PATTERN + ")<"); /** * Writes {@code config.xml} to the specified output stream. * The user must have at least {@link #EXTENDED_READ}. - * If he lacks {@link #CONFIGURE}, then any {@link Secret}s detected will be masked out. + * If he lacks {@link #CONFIGURE}, then any {@link Secret}s or other sensitive information detected will be masked out. + * @see jenkins.security.ExtendedReadRedaction */ @Restricted(NoExternalUse.class) @@ -886,15 +885,13 @@ public void writeConfigDotXml(OutputStream os) throws IOException { } else { String encoding = configFile.sniffEncoding(); String xml = Files.readString(Util.fileToPath(configFile.getFile()), Charset.forName(encoding)); - Matcher matcher = SECRET_PATTERN.matcher(xml); - StringBuilder cleanXml = new StringBuilder(); - while (matcher.find()) { - if (Secret.decrypt(matcher.group(1)) != null) { - matcher.appendReplacement(cleanXml, ">********<"); - } + + for (ExtendedReadRedaction redaction : ExtendedReadRedaction.all()) { + LOGGER.log(Level.FINE, () -> "Applying redaction " + redaction.getClass().getName()); + xml = redaction.apply(xml); } - matcher.appendTail(cleanXml); - org.apache.commons.io.IOUtils.write(cleanXml.toString(), os, encoding); + + org.apache.commons.io.IOUtils.write(xml, os, encoding); } } diff --git a/core/src/main/java/hudson/model/ItemGroupMixIn.java b/core/src/main/java/hudson/model/ItemGroupMixIn.java index f0b48787e24b9..89945267edc54 100644 --- a/core/src/main/java/hudson/model/ItemGroupMixIn.java +++ b/core/src/main/java/hudson/model/ItemGroupMixIn.java @@ -31,7 +31,6 @@ import hudson.security.AccessControlled; import hudson.util.CopyOnWriteMap; import hudson.util.Function1; -import hudson.util.Secret; import io.jenkins.servlet.ServletExceptionWrapper; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletResponse; @@ -44,11 +43,11 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.regex.Matcher; import javax.xml.transform.TransformerException; import javax.xml.transform.stream.StreamResult; import javax.xml.transform.stream.StreamSource; import jenkins.model.Jenkins; +import jenkins.security.ExtendedReadRedaction; import jenkins.security.NotReallyRoleSensitiveCallable; import jenkins.util.xml.XMLUtils; import org.kohsuke.stapler.StaplerRequest; @@ -239,18 +238,17 @@ public synchronized T copy(T src, String name) throws I src.checkPermission(Item.EXTENDED_READ); XmlFile srcConfigFile = Items.getConfigFile(src); if (!src.hasPermission(Item.CONFIGURE)) { - Matcher matcher = AbstractItem.SECRET_PATTERN.matcher(srcConfigFile.asString()); - while (matcher.find()) { - if (Secret.decrypt(matcher.group(1)) != null) { - // AccessDeniedException2 does not permit a custom message, and anyway redirecting the user to the login screen is obviously pointless. - throw new AccessDeniedException( - Messages.ItemGroupMixIn_may_not_copy_as_it_contains_secrets_and_( - src.getFullName(), - Jenkins.getAuthentication2().getName(), - Item.PERMISSIONS.title, - Item.EXTENDED_READ.name, - Item.CONFIGURE.name)); - } + final String originalConfigDotXml = srcConfigFile.asString(); + final String redactedConfigDotXml = ExtendedReadRedaction.applyAll(originalConfigDotXml); + if (!originalConfigDotXml.equals(redactedConfigDotXml)) { + // AccessDeniedException2 does not permit a custom message, and anyway redirecting the user to the login screen is obviously pointless. + throw new AccessDeniedException( + Messages.ItemGroupMixIn_may_not_copy_as_it_contains_secrets_and_( + src.getFullName(), + Jenkins.getAuthentication2().getName(), + Item.PERMISSIONS.title, + Item.EXTENDED_READ.name, + Item.CONFIGURE.name)); } } src.getDescriptor().checkApplicableIn(parent); diff --git a/core/src/main/java/jenkins/security/ExtendedReadRedaction.java b/core/src/main/java/jenkins/security/ExtendedReadRedaction.java new file mode 100644 index 0000000000000..31436c5622f2d --- /dev/null +++ b/core/src/main/java/jenkins/security/ExtendedReadRedaction.java @@ -0,0 +1,36 @@ +package jenkins.security; + +import hudson.ExtensionList; +import hudson.ExtensionPoint; + +/** + * Redact {@code config.xml} contents for users with ExtendedRead permission + * while lacking the required Configure permission to see the full unredacted + * configuration. + * + * @see SECURITY-266 + * @see Jenkins Security Advisory 2016-05-11 + * @since TODO + */ +public interface ExtendedReadRedaction extends ExtensionPoint { + /** + * Redacts sensitive information from the provided {@code config.xml} file content. + * Input may already have redactions applied; output may be passed through further redactions. + * These methods are expected to retain the basic structure of the XML document contained in input/output strings. + * + * @param configDotXml String representation of (potentially already redacted) config.xml file + * @return Redacted config.xml file content + */ + String apply(String configDotXml); + + static ExtensionList all() { + return ExtensionList.lookup(ExtendedReadRedaction.class); + } + + static String applyAll(String configDotXml) { + for (ExtendedReadRedaction redaction : all()) { + configDotXml = redaction.apply(configDotXml); + } + return configDotXml; + } +} diff --git a/core/src/main/java/jenkins/security/ExtendedReadSecretRedaction.java b/core/src/main/java/jenkins/security/ExtendedReadSecretRedaction.java new file mode 100644 index 0000000000000..91a79f354d716 --- /dev/null +++ b/core/src/main/java/jenkins/security/ExtendedReadSecretRedaction.java @@ -0,0 +1,28 @@ +package jenkins.security; + +import hudson.Extension; +import hudson.util.Secret; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +@Restricted(NoExternalUse.class) +@Extension +public class ExtendedReadSecretRedaction implements ExtendedReadRedaction { + + private static final Pattern SECRET_PATTERN = Pattern.compile(">(" + Secret.ENCRYPTED_VALUE_PATTERN + ")<"); + + @Override + public String apply(String configDotXml) { + Matcher matcher = SECRET_PATTERN.matcher(configDotXml); + StringBuilder cleanXml = new StringBuilder(); + while (matcher.find()) { + if (Secret.decrypt(matcher.group(1)) != null) { + matcher.appendReplacement(cleanXml, ">********<"); + } + } + matcher.appendTail(cleanXml); + return cleanXml.toString(); + } +} diff --git a/test/src/test/java/lib/form/PasswordTest.java b/test/src/test/java/lib/form/PasswordTest.java index facb1d7418df5..526ef1586ae9c 100644 --- a/test/src/test/java/lib/form/PasswordTest.java +++ b/test/src/test/java/lib/form/PasswordTest.java @@ -67,6 +67,7 @@ import jenkins.model.GlobalConfiguration; import jenkins.model.Jenkins; import jenkins.model.TransientActionFactory; +import jenkins.security.ExtendedReadSecretRedaction; import jenkins.tasks.SimpleBuildStep; import org.htmlunit.Page; import org.htmlunit.html.DomElement; @@ -76,6 +77,7 @@ import org.htmlunit.html.HtmlTextInput; import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.For; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; import org.jvnet.hudson.test.MockAuthorizationStrategy; @@ -124,6 +126,7 @@ public String getUrlName() { @Issue({"SECURITY-266", "SECURITY-304"}) @Test + @For(ExtendedReadSecretRedaction.class) public void testExposedCiphertext() throws Exception { boolean saveEnabled = Item.EXTENDED_READ.getEnabled(); Item.EXTENDED_READ.setEnabled(true); From 969d9feab9c11d5f88546c7233ce5296ecf4cc61 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:17:44 +0000 Subject: [PATCH 10/83] [maven-release-plugin] prepare release jenkins-2.479 --- 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 +- websocket/jetty12-ee9/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 47321614432c4..e96af7b2a734a 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 6309811a2e8bc..480f8fec0195f 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 cli diff --git a/core/pom.xml b/core/pom.xml index 9bff5e5ad0b2a..c9a663db60e90 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index fe1e89a120dce..18cf45c994fb8 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 jenkins-coverage diff --git a/pom.xml b/pom.xml index 61ca93c2edc67..aa50414d9d98b 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 pom Jenkins main module @@ -63,7 +63,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - ${scmTag} + jenkins-2.479 https://github.com/jenkinsci/jenkins @@ -75,7 +75,7 @@ THE SOFTWARE. 2.479 -SNAPSHOT - 2024-09-24T13:48:23Z + 2024-09-27T08:03:11Z github diff --git a/test/pom.xml b/test/pom.xml index 0f3aa999e08e8..6bf8c5567bc75 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index f256a95017cae..f4bae3397003e 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 jenkins-war diff --git a/websocket/jetty12-ee9/pom.xml b/websocket/jetty12-ee9/pom.xml index 2253163b3c4c9..f2379f4f1116d 100644 --- a/websocket/jetty12-ee9/pom.xml +++ b/websocket/jetty12-ee9/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 178413f92c8e5..0640a96de3a33 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.479 ../.. From 0db93161d61f31f3841e1b7e035c74f4255c41e7 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:18:06 +0000 Subject: [PATCH 11/83] [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 | 8 ++++---- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty12-ee9/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index e96af7b2a734a..47321614432c4 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 480f8fec0195f..6309811a2e8bc 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index c9a663db60e90..9bff5e5ad0b2a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 18cf45c994fb8..fe1e89a120dce 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index aa50414d9d98b..8dc88a8f32efe 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} pom Jenkins main module @@ -63,7 +63,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - jenkins-2.479 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -73,9 +73,9 @@ THE SOFTWARE. - 2.479 + 2.480 -SNAPSHOT - 2024-09-27T08:03:11Z + 2024-09-27T11:17:44Z github diff --git a/test/pom.xml b/test/pom.xml index 6bf8c5567bc75..0f3aa999e08e8 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} jenkins-test diff --git a/war/pom.xml b/war/pom.xml index f4bae3397003e..f256a95017cae 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} jenkins-war diff --git a/websocket/jetty12-ee9/pom.xml b/websocket/jetty12-ee9/pom.xml index f2379f4f1116d..2253163b3c4c9 100644 --- a/websocket/jetty12-ee9/pom.xml +++ b/websocket/jetty12-ee9/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 0640a96de3a33..178413f92c8e5 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.479 + ${revision}${changelist} ../.. From 7a1c2ce67adcc61e7a1c28e812ea14d454591874 Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:44:18 +0200 Subject: [PATCH 12/83] [JENKINS-60866][JENKINS-71515] Use `JSON#parse` to process `codemirror-config` argument (#6867) * [JENKINS-60866] Use JSON#parse to process codemirror-config argument * Add backward compatibility for most common setting * Integrate fixed antisamy-markup-formatter to pass test * Fix JS and revert unnecessary antisamy-markup-formatter update How do we have a billion different linters and not one did tell me I'm redefining a variable? * Remove comment --------- Co-authored-by: Daniel Beck Co-authored-by: Basil Crow --- .../java/hudson/markup/MarkupFormatter.java | 11 ++++++--- .../hudson/tasks/Shell/config.groovy | 2 +- .../resources/lib/form/textarea/textarea.js | 23 ++++++++++++++++++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/hudson/markup/MarkupFormatter.java b/core/src/main/java/hudson/markup/MarkupFormatter.java index a3bf53a739a19..95af637af9749 100644 --- a/core/src/main/java/hudson/markup/MarkupFormatter.java +++ b/core/src/main/java/hudson/markup/MarkupFormatter.java @@ -62,9 +62,14 @@ * This is an extension point in Hudson, allowing plugins to implement different markup formatters. * *

- * Implement the following methods to enable and control CodeMirror syntax highlighting - * public String getCodeMirrorMode() // return null to disable CodeMirror dynamically - * public String getCodeMirrorConfig() + * Implement the following methods to enable and control CodeMirror syntax highlighting: + *

    + *
  • public String getCodeMirrorMode() (return null to disable CodeMirror dynamically)
  • + *
  • + * public String getCodeMirrorConfig() (JSON snippet without surrounding curly braces, e.g., "mode": "text/css". + * Historically this allowed invalid JSON, but since TODO it needs to be properly quoted etc. + *
  • + *
* *

Views

*

diff --git a/core/src/main/resources/hudson/tasks/Shell/config.groovy b/core/src/main/resources/hudson/tasks/Shell/config.groovy index f895ffe88f3ef..bfd1631969177 100644 --- a/core/src/main/resources/hudson/tasks/Shell/config.groovy +++ b/core/src/main/resources/hudson/tasks/Shell/config.groovy @@ -25,7 +25,7 @@ package hudson.tasks.Shell f=namespace(lib.FormTagLib) f.entry(title:_("Command"),description:_("description",rootURL)) { - f.textarea(name: "command", value: instance?.command, class: "fixed-width", 'codemirror-mode': 'shell', 'codemirror-config': "mode: 'text/x-sh'") + f.textarea(name: "command", value: instance?.command, class: "fixed-width", 'codemirror-mode': 'shell', 'codemirror-config': '"mode": "text/x-sh"') } f.advanced() { diff --git a/core/src/main/resources/lib/form/textarea/textarea.js b/core/src/main/resources/lib/form/textarea/textarea.js index 1677e11fdd168..e1253cdfdab73 100644 --- a/core/src/main/resources/lib/form/textarea/textarea.js +++ b/core/src/main/resources/lib/form/textarea/textarea.js @@ -3,7 +3,28 @@ Behaviour.specify("TEXTAREA.codemirror", "textarea", 0, function (e) { if (!config) { config = ""; } - config = eval("({" + config + "})"); + try { + config = JSON.parse("{" + config + "}"); + } catch (ex) { + /* + * Attempt to parse fairly common legacy format whose exact content is: + * mode:'' + */ + let match = config.match("^mode: ?'([^']+)'$"); + if (match) { + console.log( + "Parsing simple legacy codemirror-config value using fallback: " + + config + ); + config = { mode: match[1] }; + } else { + console.log( + "Failed to parse codemirror-config '{" + config + "}' as JSON", + ex + ); + config = {}; + } + } if (!config.onBlur) { config.onBlur = function (editor) { editor.save(); From 9036086e29e276374e7bbe0612ad600106b67758 Mon Sep 17 00:00:00 2001 From: Yen Cheng Lin <92412722+ridemountainpig@users.noreply.github.com> Date: Wed, 2 Oct 2024 22:44:36 +0800 Subject: [PATCH 13/83] [JENKINS-73437] Fix build history no automatic line wrapping (#9693) * Fix build history no automatic line wrapping * Update _job.scss --- war/src/main/scss/pages/_job.scss | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/war/src/main/scss/pages/_job.scss b/war/src/main/scss/pages/_job.scss index 3b982fcffcf40..8692d19dc3f99 100644 --- a/war/src/main/scss/pages/_job.scss +++ b/war/src/main/scss/pages/_job.scss @@ -129,9 +129,12 @@ font-weight: 450; flex-grow: 1; padding: 0.45rem 0 0; + word-break: normal; + overflow-wrap: anywhere; .app-builds-container__item__time { color: var(--text-color-secondary); + white-space: nowrap; } } @@ -168,6 +171,8 @@ padding-left: 2.25rem; margin-top: -2px; grid-column: 1 / span 2; + word-break: normal; + overflow-wrap: anywhere; &::before { content: ""; From 68ea077ed1ac67ee5da2962e1c1b60331e45e762 Mon Sep 17 00:00:00 2001 From: Jan Faracik <43062514+janfaracik@users.noreply.github.com> Date: Wed, 2 Oct 2024 15:45:04 +0100 Subject: [PATCH 14/83] Refine 'Administrative monitors' interface (#9735) * Squashed commit of the following: * Rename section * Push * Update _plugin-manager.scss * Update _checkbox.scss * Reset files * Update _badges.scss * Update _badges.scss * Update _theme.scss * Remove label * Fix lint --------- Co-authored-by: Tim Jacomb --- .../config.groovy | 23 ++++---- .../config_it.properties | 2 - .../config_ru.properties | 2 - .../config_sv_SE.properties | 2 - .../config_tr.properties | 2 - war/src/main/scss/abstracts/_theme.scss | 6 --- war/src/main/scss/components/_badges.scss | 54 +++++-------------- war/src/main/scss/form/_checkbox.scss | 2 - 8 files changed, 25 insertions(+), 68 deletions(-) diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy index f470918608d3a..78b82d5a50212 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config.groovy @@ -29,22 +29,21 @@ import hudson.model.AdministrativeMonitor f = namespace(lib.FormTagLib) st = namespace("jelly:stapler") -f.section(title: _("Administrative monitors configuration")) { +f.section(title: _("Administrative monitors"), description: _("blurb")) { f.advanced(title: _("Administrative monitors")) { - f.entry(title: _("Enabled administrative monitors")) { - p(class: "jenkins-form-description", _("blurb")) + f.entry() { for (AdministrativeMonitor am : new ArrayList<>(AdministrativeMonitor.all()) .sort({ o1, o2 -> o1.getDisplayName() <=> o2.getDisplayName() })) { - div(class: "jenkins-checkbox-help-wrapper") { - f.checkbox(name: "administrativeMonitor", - title: am.displayName, - checked: am.enabled, - json: am.id) - if (am.isSecurity()) { - span(style: 'margin-left: 0.5rem', class: 'am-badge', _("Security")) + div(style: "margin-bottom: 0.625rem") { + div(class: "jenkins-checkbox-help-wrapper") { + f.checkbox(name: "administrativeMonitor", + title: am.displayName, + checked: am.enabled, + json: am.id) + if (am.isSecurity()) { + span(style: 'margin-left: 0.5rem', class: 'jenkins-badge', _("Security")) + } } - } - div(class: "tr") { div(class: "jenkins-checkbox__description") { st.include(it: am, page: "description", optional: true) } diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_it.properties b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_it.properties index 99774b93a33c7..e6a4cda88b8d8 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_it.properties +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_it.properties @@ -22,10 +22,8 @@ # THE SOFTWARE. Administrative\ monitors=Monitor amministrativi -Administrative\ monitors\ configuration=Configurazione monitor amministrativi blurb=I monitor amministrativi sono avvisi visualizzati agli amministratori \ di Jenkins riguardanti lo stato dell''istanza di Jenkins. In generale è \ caldamente consigliato mantenere tutti i monitor amministrativi abilitati, \ ma se non si è interessati a ricevere specifici avvisi, li si deselezioni \ qui per nasconderli permanentemente. -Enabled\ administrative\ monitors=Monitor amministrativi abilitati diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_ru.properties b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_ru.properties index fabeb6e453efa..fc794e82e30f5 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_ru.properties +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_ru.properties @@ -21,8 +21,6 @@ # THE SOFTWARE. Administrative\ monitors=Мониторы администрирования -Administrative\ monitors\ configuration=Настройка мониторов администрирования blurb=Мониторы администрирования - это предупреждения о состоянии экземпляра Jenkins, которые показываются \ администраторам Jenkins. Обычно настоятельно рекомендуется оставить все мониторы администрирования включёнными, но \ если некоторые предупреждения вас не интересуют, отключите их здесь, чтобы навсегда скрыть их. -Enabled\ administrative\ monitors=Включённые мониторы администрирования diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_sv_SE.properties b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_sv_SE.properties index 2d46f007949b2..4d20f2a9ff9bc 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_sv_SE.properties +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_sv_SE.properties @@ -4,5 +4,3 @@ blurb=Administrativa övervakningar är varningar som visas för Jenkins-adminis inte är intresserad av specifika varningar kan du avmarkera dem här för att \ dölja dem permanent. Administrative\ monitors=Administrativa övervakningar -Administrative\ monitors\ configuration=Konfiguration av administrativa övervakningar -Enabled\ administrative\ monitors=Aktiverade administrativa övervakningar \ No newline at end of file diff --git a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_tr.properties b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_tr.properties index 188640215ba65..63b7ff3612b01 100644 --- a/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_tr.properties +++ b/core/src/main/resources/jenkins/management/AdministrativeMonitorsConfiguration/config_tr.properties @@ -1,4 +1,2 @@ -Administrative\ monitors\ configuration=İdari monitör ayarları Administrative\ monitors=İdari monitörler -Enabled\ administrative\ monitors=Aktif idari monitörler blurb=İdari monitörler, Jenkins yöneticilerine Jenkins örneğinin durumu hakkında gösterilen uyarılardır. Genel olarak tüm yönetim monitörlerini etkin tutmanız şiddetle tavsiye edilir, ancak belirli uyarılarla ilgilenmiyorsanız, kalıcı olarak gizlemek için buradaki işaretlerini kaldırın. diff --git a/war/src/main/scss/abstracts/_theme.scss b/war/src/main/scss/abstracts/_theme.scss index c108634f7c851..0558369c9ac36 100644 --- a/war/src/main/scss/abstracts/_theme.scss +++ b/war/src/main/scss/abstracts/_theme.scss @@ -331,12 +331,6 @@ $semantics: ( // Plugin manager --plugin-manager-bg-color-already-upgraded: var(--light-grey); - --plugin-manager-category-link-bg-color: var(--very-light-grey); - --plugin-manager-category-link-bg-color--hover: #f2f2f2; - --plugin-manager-category-link-border-color: var(--medium-grey); - --plugin-manager-category-link-border-color--hover: var(--black); - --plugin-manager-category-text-color: var(--text-color); - --plugin-manager-category-link-color--hover: var(--text-color); // Auto complete --auto-complete-bg-color--prehighlight: #b3d4ff; diff --git a/war/src/main/scss/components/_badges.scss b/war/src/main/scss/components/_badges.scss index 7fc69376af34a..45fc8b9dc8039 100644 --- a/war/src/main/scss/components/_badges.scss +++ b/war/src/main/scss/components/_badges.scss @@ -1,39 +1,5 @@ -.am-badge, -.plugin-manager__category-label:link, -.plugin-manager__category-label:visited { - display: inline-block; - border: 1px solid var(--plugin-manager-category-link-border-color); - background-color: var(--plugin-manager-category-link-bg-color); - color: var(--plugin-manager-category-text-color); - border-radius: 4px; - font-size: 0.75rem; - font-weight: 500; - padding: 0 0.5rem; - margin: 0 0.25rem 0 0; - text-decoration: none; - text-align: center; - white-space: nowrap; - vertical-align: baseline; - transition: all 0.15s ease-in-out; -} - -.plugin-manager__category-label:link, -.plugin-manager__category-label:visited { - &:hover, - &:focus, - &:active { - background-color: var(--plugin-manager-category-link-bg-color--hover); - border-color: var(--plugin-manager-category-link-border-color--hover); - color: var(--plugin-manager-category-link-color--hover); - } -} - -.am-badge { - display: inline; -} - .jenkins-badge { - display: flex; + display: inline-flex; align-items: center; justify-content: center; border-radius: 100px; @@ -42,9 +8,17 @@ min-height: 20px; min-width: 20px; padding: 0 0.4rem; - background: color-mix(in sRGB, var(--color) 85%, transparent); - box-shadow: inset 0 -1px 2px var(--color); - color: var(--white) !important; - text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); - backdrop-filter: blur(2.5px); + background: color-mix( + in sRGB, + var(--text-color-secondary) 12.5%, + transparent + ); + + &[class*="color"] { + background: color-mix(in sRGB, var(--color) 85%, transparent); + color: var(--white) !important; + box-shadow: inset 0 -1px 2px var(--color, var(--text-color-secondary)); + text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1); + backdrop-filter: blur(2.5px); + } } diff --git a/war/src/main/scss/form/_checkbox.scss b/war/src/main/scss/form/_checkbox.scss index d9cd5f18c9518..6e5633dd991f4 100644 --- a/war/src/main/scss/form/_checkbox.scss +++ b/war/src/main/scss/form/_checkbox.scss @@ -187,9 +187,7 @@ } .jenkins-checkbox__description { - margin-top: 0.3rem; margin-left: 34px; - margin-bottom: 1rem; color: var(--text-color-secondary); line-height: 1.66; } From a6f723cef725ea66c992f286516e872857dc6d9d Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Wed, 2 Oct 2024 16:45:44 +0200 Subject: [PATCH 15/83] Introduce `SaveableListener#onDeleted` (#9743) * Introduce SaveableListener#onDeleted Usually `Saveable` objects are written, but it can happen on occasion that they get deleted, and it wasn't generating an event for every case. This provides a more fine-grained event that can be handled by implemented listeners. In my case, I have a use case in CloudBees CI where I need to clear a cache entry when a Saveable gets deleted from disk. * Spotless * Explicitly test that the user that has performed the change can be obtained from the Saveable listener. --- .../main/java/hudson/logging/LogRecorder.java | 2 +- .../main/java/hudson/model/AbstractItem.java | 1 + core/src/main/java/hudson/model/Run.java | 2 + .../model/listeners/SaveableListener.java | 30 +++++--- core/src/main/java/jenkins/model/Nodes.java | 1 + .../logging/LogRecorderManagerTest.java | 2 +- .../java/hudson/model/AbstractItemTest.java | 68 ++++++++++++++++--- test/src/test/java/hudson/model/RunTest.java | 14 ++++ .../test/java/jenkins/model/NodesTest.java | 17 +++++ 9 files changed, 115 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/hudson/logging/LogRecorder.java b/core/src/main/java/hudson/logging/LogRecorder.java index ad4c40028547b..c11c1bbfa57ef 100644 --- a/core/src/main/java/hudson/logging/LogRecorder.java +++ b/core/src/main/java/hudson/logging/LogRecorder.java @@ -556,7 +556,7 @@ public void delete() throws IOException { loggers.forEach(Target::disable); getParent().getRecorders().forEach(logRecorder -> logRecorder.getLoggers().forEach(Target::enable)); - SaveableListener.fireOnChange(this, getConfigFile()); + SaveableListener.fireOnDeleted(this, getConfigFile()); } /** diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index e1a448d1f06e9..f31316c316569 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -814,6 +814,7 @@ public void delete() throws IOException, InterruptedException { ItemDeletion.deregister(this); } } + SaveableListener.fireOnDeleted(this, getConfigFile()); getParent().onDeleted(AbstractItem.this); Jenkins.get().rebuildDependencyGraphAsync(); } diff --git a/core/src/main/java/hudson/model/Run.java b/core/src/main/java/hudson/model/Run.java index 37b09fd47d25f..450be07b7f1a3 100644 --- a/core/src/main/java/hudson/model/Run.java +++ b/core/src/main/java/hudson/model/Run.java @@ -1570,6 +1570,7 @@ public void delete() throws IOException { )); //Still firing the delete listeners; just no need to clean up rootDir RunListener.fireDeleted(this); + SaveableListener.fireOnDeleted(this, getDataFile()); synchronized (this) { // avoid holding a lock while calling plugin impls of onDeleted removeRunFromParent(); } @@ -1578,6 +1579,7 @@ public void delete() throws IOException { //The root dir exists and is a directory that needs to be purged RunListener.fireDeleted(this); + SaveableListener.fireOnDeleted(this, getDataFile()); if (artifactManager != null) { deleteArtifacts(); diff --git a/core/src/main/java/hudson/model/listeners/SaveableListener.java b/core/src/main/java/hudson/model/listeners/SaveableListener.java index 46bbc6ab60be5..02747877e76f8 100644 --- a/core/src/main/java/hudson/model/listeners/SaveableListener.java +++ b/core/src/main/java/hudson/model/listeners/SaveableListener.java @@ -30,8 +30,7 @@ import hudson.ExtensionPoint; import hudson.XmlFile; import hudson.model.Saveable; -import java.util.logging.Level; -import java.util.logging.Logger; +import jenkins.util.Listeners; /** * Receives notifications about save actions on {@link Saveable} objects in Hudson. @@ -54,6 +53,17 @@ public abstract class SaveableListener implements ExtensionPoint { */ public void onChange(Saveable o, XmlFile file) {} + /** + * Called when a {@link Saveable} object gets deleted. + * + * @param o + * The saveable object. + * @param file + * The {@link XmlFile} for this saveable object. + * @since TODO + */ + public void onDeleted(Saveable o, XmlFile file) {} + /** * Registers this object as an active listener so that it can start getting * callbacks invoked. @@ -77,13 +87,15 @@ public void unregister() { * Fires the {@link #onChange} event. */ public static void fireOnChange(Saveable o, XmlFile file) { - for (SaveableListener l : all()) { - try { - l.onChange(o, file); - } catch (Throwable t) { - Logger.getLogger(SaveableListener.class.getName()).log(Level.WARNING, null, t); - } - } + Listeners.notify(SaveableListener.class, false, l -> l.onChange(o, file)); + } + + /** + * Fires the {@link #onDeleted} event. + * @since TODO + */ + public static void fireOnDeleted(Saveable o, XmlFile file) { + Listeners.notify(SaveableListener.class, false, l -> l.onDeleted(o, file)); } /** diff --git a/core/src/main/java/jenkins/model/Nodes.java b/core/src/main/java/jenkins/model/Nodes.java index 8f4c0e5eafc62..e15d391c4975e 100644 --- a/core/src/main/java/jenkins/model/Nodes.java +++ b/core/src/main/java/jenkins/model/Nodes.java @@ -295,6 +295,7 @@ public void run() { jenkins.trimLabels(node); } NodeListener.fireOnDeleted(node); + SaveableListener.fireOnDeleted(node, getConfigFile(node)); } } diff --git a/test/src/test/java/hudson/logging/LogRecorderManagerTest.java b/test/src/test/java/hudson/logging/LogRecorderManagerTest.java index 608e7eb0b464f..101729038a332 100644 --- a/test/src/test/java/hudson/logging/LogRecorderManagerTest.java +++ b/test/src/test/java/hudson/logging/LogRecorderManagerTest.java @@ -229,7 +229,7 @@ public static class DeletingLogRecorderListener extends SaveableListener { private static boolean recordDeletion; @Override - public void onChange(Saveable o, XmlFile file) { + public void onDeleted(Saveable o, XmlFile file) { if (o instanceof LogRecorder && "dummy".equals(((LogRecorder) o).getName())) { if (!file.exists()) { recordDeletion = true; diff --git a/test/src/test/java/hudson/model/AbstractItemTest.java b/test/src/test/java/hudson/model/AbstractItemTest.java index 165c39a96e6e9..8e2a5036b14a2 100644 --- a/test/src/test/java/hudson/model/AbstractItemTest.java +++ b/test/src/test/java/hudson/model/AbstractItemTest.java @@ -6,6 +6,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; import hudson.ExtensionList; import hudson.XmlFile; @@ -33,6 +34,7 @@ import org.jvnet.hudson.test.MockAuthorizationStrategy; import org.jvnet.hudson.test.SleepBuilder; import org.jvnet.hudson.test.TestExtension; +import org.springframework.security.core.Authentication; public class AbstractItemTest { @@ -45,12 +47,21 @@ public class AbstractItemTest { @Test public void reload() throws Exception { Jenkins jenkins = j.jenkins; - FreeStyleProject p = jenkins.createProject(FreeStyleProject.class, "foo"); - p.setDescription("Hello World"); + jenkins.setSecurityRealm(j.createDummySecurityRealm()); + MockAuthorizationStrategy mas = new MockAuthorizationStrategy(); + mas.grant(Item.CONFIGURE).everywhere().to("alice", "bob"); + mas.grant(Item.READ).everywhere().to("alice"); - FreeStyleBuild b = j.buildAndAssertSuccess(p); - b.setDescription("This is my build"); + FreeStyleProject p; + FreeStyleBuild b; + var alice = User.getById("alice", true); + try (ACLContext ignored = ACL.as(alice)) { + p = jenkins.createProject(FreeStyleProject.class, "foo"); + p.setDescription("Hello World"); + b = j.buildAndAssertSuccess(p); + b.setDescription("This is my build"); + } // update on disk representation Path path = p.getConfigFile().getFile().toPath(); Files.writeString(path, Files.readString(path, StandardCharsets.UTF_8).replaceAll("Hello World", "Good Evening"), StandardCharsets.UTF_8); @@ -61,15 +72,25 @@ public void reload() throws Exception { // reload away p.doReload(); - assertFalse(SaveableListener.class.getSimpleName() + " should not have been called", testSaveableListener.wasCalled()); - - + assertFalse(SaveableListener.class.getSimpleName() + " should not have been called", testSaveableListener.isChangeCalled()); assertEquals("Good Evening", p.getDescription()); FreeStyleBuild b2 = p.getBuildByNumber(1); assertNotEquals(b, b2); // should be different object assertEquals(b.getDescription(), b2.getDescription()); // but should have the same properties + + try (var ignored = ACL.as(alice)) { + p.setDescription("This is Alice's project"); + } + assertTrue(SaveableListener.class.getSimpleName() + " should have been called", testSaveableListener.isChangeCalled()); + assertThat(testSaveableListener.getChangeUser(), equalTo(alice.impersonate2())); + + try (var ignored = ACL.as(alice)) { + p.delete(); + } + assertTrue(SaveableListener.class.getSimpleName() + " should have been called", testSaveableListener.isDeleteCalled()); + assertThat(testSaveableListener.getDeleteUser(), equalTo(alice.impersonate2())); } @Test @@ -158,20 +179,45 @@ private String getPath(URL u) { public static class TestSaveableListener extends SaveableListener { private Saveable saveable; - private boolean called; + private boolean changeCalled; + private Authentication changeUser; + + private boolean deleteCalled; + private Authentication deleteUser; private void setSaveable(Saveable saveable) { this.saveable = saveable; } - public boolean wasCalled() { - return called; + public boolean isChangeCalled() { + return changeCalled; + } + + public Authentication getChangeUser() { + return changeUser; + } + + public boolean isDeleteCalled() { + return deleteCalled; + } + + public Authentication getDeleteUser() { + return deleteUser; } @Override public void onChange(Saveable o, XmlFile file) { if (o == saveable) { - this.called = true; + changeCalled = true; + changeUser = Jenkins.getAuthentication2(); + } + } + + @Override + public void onDeleted(Saveable o, XmlFile file) { + if (o == saveable) { + deleteCalled = true; + deleteUser = Jenkins.getAuthentication2(); } } } diff --git a/test/src/test/java/hudson/model/RunTest.java b/test/src/test/java/hudson/model/RunTest.java index b6a145857020b..34be1f14c2ef5 100644 --- a/test/src/test/java/hudson/model/RunTest.java +++ b/test/src/test/java/hudson/model/RunTest.java @@ -32,8 +32,11 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import hudson.ExtensionList; import hudson.FilePath; import hudson.Launcher; +import hudson.XmlFile; +import hudson.model.listeners.SaveableListener; import hudson.tasks.ArtifactArchiver; import hudson.tasks.BuildTrigger; import hudson.tasks.Builder; @@ -112,6 +115,17 @@ public class RunTest { FreeStyleBuild b = j.buildAndAssertSuccess(p); b.delete(); assertTrue(Mgr.deleted.get()); + assertTrue(ExtensionList.lookupSingleton(SaveableListenerImpl.class).deleted); + } + + @TestExtension("deleteArtifactsCustom") + public static class SaveableListenerImpl extends SaveableListener { + boolean deleted; + + @Override + public void onDeleted(Saveable o, XmlFile file) { + deleted = true; + } } @Issue("SECURITY-1902") diff --git a/test/src/test/java/jenkins/model/NodesTest.java b/test/src/test/java/jenkins/model/NodesTest.java index 275dd9a3e5fbc..c7207b9977c56 100644 --- a/test/src/test/java/jenkins/model/NodesTest.java +++ b/test/src/test/java/jenkins/model/NodesTest.java @@ -37,10 +37,13 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.ExtensionList; +import hudson.XmlFile; import hudson.model.Descriptor; import hudson.model.Failure; import hudson.model.Node; +import hudson.model.Saveable; import hudson.model.Slave; +import hudson.model.listeners.SaveableListener; import hudson.slaves.ComputerLauncher; import hudson.slaves.DumbSlave; import java.io.IOException; @@ -99,6 +102,10 @@ public void addNodeShouldReplaceExistingNode() throws Exception { assertEquals(0, l.deleted); assertEquals(1, l.updated); assertEquals(1, l.created); + var saveableListener = ExtensionList.lookupSingleton(SaveableListenerImpl.class); + assertEquals(0, saveableListener.deleted); + r.jenkins.removeNode(newNode); + assertEquals(1, saveableListener.deleted); } @TestExtension("addNodeShouldReplaceExistingNode") @@ -122,6 +129,16 @@ protected void onCreated(Node node) { } } + @TestExtension("addNodeShouldReplaceExistingNode") + public static final class SaveableListenerImpl extends SaveableListener { + int deleted; + + @Override + public void onDeleted(Saveable o, XmlFile file) { + deleted++; + } + } + @Test @Issue("JENKINS-56403") public void replaceNodeShouldRemoveOldNode() throws Exception { From 39e6622524293ff496ecfccec858a94fd66380c1 Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Wed, 2 Oct 2024 16:46:21 +0200 Subject: [PATCH 16/83] Extract interfaces for objects to be used through the executors widget (#9749) * Extract interfaces for objects to be used through the executors widget This is required for CloudBees CI HA support: we provide alternate implementations of these interfaces to represent computers and related objects that exist in different physical replicas of the same logical instance. This allows to be build an aggregated view of computers and executors, some local, some remote. * Fix Deprecated annotation * Missing @Override annotations * Missing @since TODO * No longer true according to AbstractSubTask javadoc * Restore old signature for compatibility * Fix reviews * Javadoc * Typo * Fix inconsistency between hasOfflineCause and getOfflineCauseReason * Remove default implementation of ITask#getUrl * Provide default impl in SubTask for compatibility * Mark as CheckForNull * Spotbugs * ComputerSet#getComputers returns a collection that is sorted by name * Missing Override * Move permission declaration to the right place, closer to usage --- core/src/main/java/hudson/model/Computer.java | 174 ++++------------- .../main/java/hudson/model/ComputerSet.java | 52 ++++- core/src/main/java/hudson/model/Executor.java | 59 ++---- core/src/main/java/hudson/model/Queue.java | 19 +- .../main/java/hudson/model/queue/SubTask.java | 17 +- .../security/AuthorizationStrategy.java | 17 ++ .../java/jenkins/model/DisplayExecutor.java | 97 ++++++++++ .../main/java/jenkins/model/IComputer.java | 182 ++++++++++++++++++ .../java/jenkins/model/IDisplayExecutor.java | 55 ++++++ .../main/java/jenkins/model/IExecutor.java | 144 ++++++++++++++ core/src/main/java/jenkins/model/Jenkins.java | 18 +- .../model/ModelObjectWithContextMenu.java | 12 ++ .../main/java/jenkins/model/queue/ITask.java | 76 ++++++++ .../hudson/model/ComputerSet/index.jelly | 4 +- .../main/resources/lib/hudson/executors.jelly | 46 ++--- .../java/hudson/model/ComputerSetTest.java | 7 +- 16 files changed, 726 insertions(+), 253 deletions(-) create mode 100644 core/src/main/java/jenkins/model/DisplayExecutor.java create mode 100644 core/src/main/java/jenkins/model/IComputer.java create mode 100644 core/src/main/java/jenkins/model/IDisplayExecutor.java create mode 100644 core/src/main/java/jenkins/model/IExecutor.java create mode 100644 core/src/main/java/jenkins/model/queue/ITask.java diff --git a/core/src/main/java/hudson/model/Computer.java b/core/src/main/java/hudson/model/Computer.java index 081f73dd16256..1047fe97000c1 100644 --- a/core/src/main/java/hudson/model/Computer.java +++ b/core/src/main/java/hudson/model/Computer.java @@ -41,7 +41,6 @@ import hudson.console.AnnotatedLargeText; import hudson.init.Initializer; import hudson.model.Descriptor.FormException; -import hudson.model.Queue.FlyweightTask; import hudson.model.labels.LabelAtom; import hudson.model.queue.WorkUnit; import hudson.node_monitors.AbstractDiskSpaceMonitor; @@ -106,6 +105,9 @@ import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; +import jenkins.model.DisplayExecutor; +import jenkins.model.IComputer; +import jenkins.model.IDisplayExecutor; import jenkins.model.Jenkins; import jenkins.security.ImpersonatingExecutorService; import jenkins.security.MasterToSlaveCallable; @@ -116,8 +118,6 @@ import jenkins.util.SystemProperties; import jenkins.widgets.HasWidgets; import net.jcip.annotations.GuardedBy; -import org.jenkins.ui.icon.Icon; -import org.jenkins.ui.icon.IconSet; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.DoNotUse; import org.kohsuke.accmod.restrictions.NoExternalUse; @@ -150,7 +150,7 @@ * if a {@link Node} is configured (probably temporarily) with 0 executors, * you won't have a {@link Computer} object for it (except for the built-in node, * which always gets its {@link Computer} in case we have no static executors and - * we need to run a {@link FlyweightTask} - see JENKINS-7291 for more discussion.) + * we need to run a {@link Queue.FlyweightTask} - see JENKINS-7291 for more discussion.) * * Also, even if you remove a {@link Node}, it takes time for the corresponding * {@link Computer} to be removed, if some builds are already in progress on that @@ -164,7 +164,7 @@ * @author Kohsuke Kawaguchi */ @ExportedBean -public /*transient*/ abstract class Computer extends Actionable implements AccessControlled, ExecutorListener, DescriptorByNameOwner, StaplerProxy, HasWidgets { +public /*transient*/ abstract class Computer extends Actionable implements AccessControlled, IComputer, ExecutorListener, DescriptorByNameOwner, StaplerProxy, HasWidgets { private final CopyOnWriteArrayList executors = new CopyOnWriteArrayList<>(); // TODO: @@ -351,12 +351,6 @@ public AnnotatedLargeText getLogText() { return new AnnotatedLargeText<>(getLogFile(), Charset.defaultCharset(), false, this); } - @NonNull - @Override - public ACL getACL() { - return Jenkins.get().getAuthorizationStrategy().getACL(this); - } - /** * If the computer was offline (either temporarily or not), * this method will return the cause. @@ -369,14 +363,13 @@ public OfflineCause getOfflineCause() { return offlineCause; } - /** - * If the computer was offline (either temporarily or not), - * this method will return the cause as a string (without user info). - * - * @return - * empty string if the system was put offline without given a cause. - */ + @Override + public boolean hasOfflineCause() { + return offlineCause != null; + } + @Exported + @Override public String getOfflineCauseReason() { if (offlineCause == null) { return ""; @@ -581,9 +574,6 @@ public int getNumExecutors() { return numExecutors; } - /** - * Returns {@link Node#getNodeName() the name of the node}. - */ public @NonNull String getName() { return nodeName != null ? nodeName : ""; } @@ -628,6 +618,7 @@ public BuildTimelineWidget getTimeline() { } @Exported + @Override public boolean isOffline() { return temporarilyOffline || getChannel() == null; } @@ -645,12 +636,6 @@ public boolean isManualLaunchAllowed() { return getRetentionStrategy().isManualLaunchAllowed(this); } - - /** - * Is a {@link #connect(boolean)} operation in progress? - */ - public abstract boolean isConnecting(); - /** * Returns true if this computer is supposed to be launched via inbound protocol. * @deprecated since 2008-05-18. @@ -662,14 +647,8 @@ public boolean isJnlpAgent() { return false; } - /** - * Returns true if this computer can be launched by Hudson proactively and automatically. - * - *

- * For example, inbound agents return {@code false} from this, because the launch process - * needs to be initiated from the agent side. - */ @Exported + @Override public boolean isLaunchSupported() { return true; } @@ -727,14 +706,8 @@ public void setTemporarilyOffline(boolean temporarilyOffline, OfflineCause cause } } - /** - * Returns the icon for this computer. - * - * It is both the recommended and default implementation to serve different icons based on {@link #isOffline} - * - * @see #getIconClassName() - */ @Exported + @Override public String getIcon() { // The machine was taken offline by someone if (isTemporarilyOffline() && getOfflineCause() instanceof OfflineCause.UserCause) return "symbol-computer-disconnected"; @@ -748,19 +721,15 @@ public String getIcon() { } /** - * Returns the class name that will be used to lookup the icon. + * {@inheritDoc} * - * This class name will be added as a class tag to the html img tags where the icon should - * show up followed by a size specifier given by {@link Icon#toNormalizedIconSizeClass(String)} - * The conversion of class tag to src tag is registered through {@link IconSet#addIcon(Icon)} - * - * It is both the recommended and default implementation to serve different icons based on {@link #isOffline} - * - * @see #getIcon() + *

+ * It is both the recommended and default implementation to serve different icons based on {@link #isOffline}. */ @Exported + @Override public String getIconClassName() { - return getIcon(); + return IComputer.super.getIconClassName(); } public String getIconAltText() { @@ -780,6 +749,8 @@ public String getCaption() { return Messages.Computer_Caption(nodeName); } + @Override + @NonNull public String getUrl() { return "computer/" + Util.fullEncode(getName()) + "/"; } @@ -947,19 +918,18 @@ public int countIdle() { return n; } - /** - * Returns the number of {@link Executor}s that are doing some work right now. - */ + @Override public final int countBusy() { return countExecutors() - countIdle(); } /** - * Returns the current size of the executor pool for this computer. + * {@inheritDoc} * This number may temporarily differ from {@link #getNumExecutors()} if there * are busy tasks when the configured size is decreased. OneOffExecutors are * not included in this count. */ + @Override public final int countExecutors() { return executors.size(); } @@ -996,14 +966,14 @@ public List getAllExecutors() { } /** - * Used to render the list of executors. - * @return a snapshot of the executor display information + * {@inheritDoc} * @since 1.607 */ - @Restricted(NoExternalUse.class) - public List getDisplayExecutors() { + @Override + @NonNull + public List getDisplayExecutors() { // The size may change while we are populating, but let's start with a reasonable guess to minimize resizing - List result = new ArrayList<>(executors.size() + oneOffExecutors.size()); + List result = new ArrayList<>(executors.size() + oneOffExecutors.size()); int index = 0; for (Executor e : executors) { if (e.isDisplayCell()) { @@ -1659,15 +1629,8 @@ public Object getTarget() { return e != null ? e.getOwner() : null; } - /** - * Returns {@code true} if the computer is accepting tasks. Needed to allow agents programmatic suspension of task - * scheduling that does not overlap with being offline. - * - * @return {@code true} if the computer is accepting tasks - * @see hudson.slaves.RetentionStrategy#isAcceptingTasks(Computer) - * @see hudson.model.Node#isAcceptingTasks() - */ @OverrideMustInvoke + @Override public boolean isAcceptingTasks() { final Node node = getNode(); return getRetentionStrategy().isAcceptingTasks(this) && (node == null || node.isAcceptingTasks()); @@ -1727,79 +1690,12 @@ public static void relocateOldLogs() { } } - /** - * A value class to provide a consistent snapshot view of the state of an executor to avoid race conditions - * during rendering of the executors list. - * - * @since 1.607 - */ - @Restricted(NoExternalUse.class) - public static class DisplayExecutor implements ModelObject { - - @NonNull - private final String displayName; - @NonNull - private final String url; - @NonNull - private final Executor executor; - - public DisplayExecutor(@NonNull String displayName, @NonNull String url, @NonNull Executor executor) { - this.displayName = displayName; - this.url = url; - this.executor = executor; - } - - @Override - @NonNull - public String getDisplayName() { - return displayName; - } - - @NonNull - public String getUrl() { - return url; - } - - @NonNull - public Executor getExecutor() { - return executor; - } - - @Override - public String toString() { - String sb = "DisplayExecutor{" + "displayName='" + displayName + '\'' + - ", url='" + url + '\'' + - ", executor=" + executor + - '}'; - return sb; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - - DisplayExecutor that = (DisplayExecutor) o; - - return executor.equals(that.executor); - } - - @Extension(ordinal = Double.MAX_VALUE) - @Restricted(DoNotUse.class) - public static class InternalComputerListener extends ComputerListener { - @Override - public void onOnline(Computer c, TaskListener listener) throws IOException, InterruptedException { - c.cachedEnvironment = null; - } - } - + @Extension(ordinal = Double.MAX_VALUE) + @Restricted(DoNotUse.class) + public static class InternalComputerListener extends ComputerListener { @Override - public int hashCode() { - return executor.hashCode(); + public void onOnline(Computer c, TaskListener listener) throws IOException, InterruptedException { + c.cachedEnvironment = null; } } diff --git a/core/src/main/java/hudson/model/ComputerSet.java b/core/src/main/java/hudson/model/ComputerSet.java index f25d25a19a50c..f8e4905b09047 100644 --- a/core/src/main/java/hudson/model/ComputerSet.java +++ b/core/src/main/java/hudson/model/ComputerSet.java @@ -30,6 +30,8 @@ import hudson.BulkChange; import hudson.DescriptorExtensionList; import hudson.Extension; +import hudson.ExtensionList; +import hudson.ExtensionPoint; import hudson.Util; import hudson.XmlFile; import hudson.init.Initializer; @@ -47,18 +49,24 @@ import java.lang.reflect.InvocationTargetException; import java.util.AbstractList; import java.util.ArrayList; +import java.util.Collection; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; +import jenkins.model.IComputer; import jenkins.model.Jenkins; import jenkins.model.ModelObjectWithChildren; import jenkins.model.ModelObjectWithContextMenu.ContextMenu; import jenkins.util.Timer; import jenkins.widgets.HasWidgets; import net.sf.json.JSONObject; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.Beta; +import org.kohsuke.accmod.restrictions.DoNotUse; import org.kohsuke.stapler.HttpResponse; import org.kohsuke.stapler.QueryParameter; import org.kohsuke.stapler.StaplerRequest2; @@ -106,15 +114,36 @@ public static List get_monitors() { return monitors.toList(); } - @Exported(name = "computer", inline = true) + /** + * @deprecated Use {@link #getComputers()} instead. + * @return All {@link Computer} instances managed by this set. + */ + @Deprecated(since = "TODO") public Computer[] get_all() { - return Jenkins.get().getComputers(); + return getComputers().stream().filter(Computer.class::isInstance).toArray(Computer[]::new); + } + + /** + * @return All {@link IComputer} instances managed by this set, sorted by name. + */ + @Exported(name = "computer", inline = true) + public Collection getComputers() { + return ExtensionList.lookupFirst(ComputerSource.class).get().stream().sorted(Comparator.comparing(IComputer::getName)).toList(); + } + + /** + * Allows plugins to override the displayed list of computers. + * + */ + @Restricted(Beta.class) + public interface ComputerSource extends ExtensionPoint { + Collection get(); } @Override public ContextMenu doChildrenContextMenu(StaplerRequest2 request, StaplerResponse2 response) throws Exception { ContextMenu m = new ContextMenu(); - for (Computer c : get_all()) { + for (IComputer c : getComputers()) { m.add(c); } return m; @@ -170,7 +199,7 @@ public int size() { @Exported public int getTotalExecutors() { int r = 0; - for (Computer c : get_all()) { + for (IComputer c : getComputers()) { if (c.isOnline()) r += c.countExecutors(); } @@ -183,7 +212,7 @@ public int getTotalExecutors() { @Exported public int getBusyExecutors() { int r = 0; - for (Computer c : get_all()) { + for (IComputer c : getComputers()) { if (c.isOnline()) r += c.countBusy(); } @@ -195,7 +224,7 @@ public int getBusyExecutors() { */ public int getIdleExecutors() { int r = 0; - for (Computer c : get_all()) + for (IComputer c : getComputers()) if ((c.isOnline() || c.isConnecting()) && c.isAcceptingTasks()) r += c.countIdle(); return r; @@ -214,7 +243,7 @@ public Computer getDynamic(String token, StaplerRequest2 req, StaplerResponse2 r public void do_launchAll(StaplerRequest2 req, StaplerResponse2 rsp) throws IOException { Jenkins.get().checkPermission(Jenkins.ADMINISTER); - for (Computer c : get_all()) { + for (IComputer c : getComputers()) { if (c.isLaunchSupported()) c.connect(true); } @@ -502,4 +531,13 @@ private static NodeMonitor createDefaultInstance(Descriptor d, bool } return null; } + + @Extension(ordinal = -1) + @Restricted(DoNotUse.class) + public static class ComputerSourceImpl implements ComputerSource { + @Override + public Collection get() { + return Jenkins.get().getComputersCollection(); + } + } } diff --git a/core/src/main/java/hudson/model/Executor.java b/core/src/main/java/hudson/model/Executor.java index 94aa1c770d218..f86dbd7c6c0a0 100644 --- a/core/src/main/java/hudson/model/Executor.java +++ b/core/src/main/java/hudson/model/Executor.java @@ -61,6 +61,7 @@ import java.util.stream.Collectors; import jenkins.model.CauseOfInterruption; import jenkins.model.CauseOfInterruption.UserInterruption; +import jenkins.model.IExecutor; import jenkins.model.InterruptedBuildAction; import jenkins.model.Jenkins; import jenkins.model.queue.AsynchronousExecution; @@ -88,7 +89,7 @@ * @author Kohsuke Kawaguchi */ @ExportedBean -public class Executor extends Thread implements ModelObject { +public class Executor extends Thread implements ModelObject, IExecutor { protected final @NonNull Computer owner; private final Queue queue; private final ReadWriteLock lock = new ReentrantReadWriteLock(); @@ -526,6 +527,7 @@ public void completedAsynchronous(@CheckForNull Throwable error) { * @return * null if the executor is idle. */ + @Override public @CheckForNull Queue.Executable getCurrentExecutable() { lock.readLock().lock(); try { @@ -555,14 +557,8 @@ public Queue.Executable getCurrentExecutableForApi() { return Collections.unmodifiableCollection(causes); } - /** - * Returns the current {@link WorkUnit} (of {@link #getCurrentExecutable() the current executable}) - * that this executor is running. - * - * @return - * null if the executor is idle. - */ @CheckForNull + @Override public WorkUnit getCurrentWorkUnit() { lock.readLock().lock(); try { @@ -601,22 +597,14 @@ public String getDisplayName() { return "Executor #" + getNumber(); } - /** - * Gets the executor number that uniquely identifies it among - * other {@link Executor}s for the same computer. - * - * @return - * a sequential number starting from 0. - */ @Exported + @Override public int getNumber() { return number; } - /** - * Returns true if this {@link Executor} is ready for action. - */ @Exported + @Override public boolean isIdle() { lock.readLock().lock(); try { @@ -705,13 +693,8 @@ public boolean isParking() { return null; } - /** - * Returns the progress of the current build in the number between 0-100. - * - * @return -1 - * if it's impossible to estimate the progress. - */ @Exported + @Override public int getProgress() { long d = executableEstimatedDuration; if (d <= 0) { @@ -725,14 +708,8 @@ public int getProgress() { return num; } - /** - * Returns true if the current build is likely stuck. - * - *

- * This is a heuristics based approach, but if the build is suspiciously taking for a long time, - * this method returns true. - */ @Exported + @Override public boolean isLikelyStuck() { lock.readLock().lock(); try { @@ -754,6 +731,7 @@ public boolean isLikelyStuck() { } } + @Override public long getElapsedTime() { lock.readLock().lock(); try { @@ -777,20 +755,7 @@ public long getTimeSpentInQueue() { } } - /** - * Gets the string that says how long since this build has started. - * - * @return - * string like "3 minutes" "1 day" etc. - */ - public String getTimestampString() { - return Util.getTimeSpanString(getElapsedTime()); - } - - /** - * Computes a human-readable text that shows the expected remaining time - * until the build completes. - */ + @Override public String getEstimatedRemainingTime() { long d = executableEstimatedDuration; if (d < 0) { @@ -911,9 +876,7 @@ public HttpResponse doYank() { return HttpResponses.redirectViaContextPath("/"); } - /** - * Checks if the current user has a permission to stop this build. - */ + @Override public boolean hasStopPermission() { lock.readLock().lock(); try { diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java index 08eba90b906ca..797cba56f3942 100644 --- a/core/src/main/java/hudson/model/Queue.java +++ b/core/src/main/java/hudson/model/Queue.java @@ -1956,24 +1956,6 @@ default void checkAbortPermission() { } } - /** - * Works just like {@link #checkAbortPermission()} except it indicates the status by a return value, - * instead of exception. - * Also used by default for {@link hudson.model.Queue.Item#hasCancelPermission}. - *

- * NOTE: If you have implemented {@link AccessControlled} this returns by default - * {@code return hasPermission(hudson.model.Item.CANCEL);} - * - * @return false - * if the user doesn't have the permission. - */ - default boolean hasAbortPermission() { - if (this instanceof AccessControlled) { - return ((AccessControlled) this).hasPermission(CANCEL); - } - return true; - } - /** * Returns the URL of this task relative to the context root of the application. * @@ -1984,6 +1966,7 @@ default boolean hasAbortPermission() { * @return * URL that ends with '/'. */ + @Override String getUrl(); /** diff --git a/core/src/main/java/hudson/model/queue/SubTask.java b/core/src/main/java/hudson/model/queue/SubTask.java index 0690d074617c4..9a971d9ca40b7 100644 --- a/core/src/main/java/hudson/model/queue/SubTask.java +++ b/core/src/main/java/hudson/model/queue/SubTask.java @@ -33,20 +33,16 @@ import hudson.model.Queue; import hudson.model.ResourceActivity; import java.io.IOException; +import jenkins.model.queue.ITask; /** * A component of {@link Queue.Task} that represents a computation carried out by a single {@link Executor}. * * A {@link Queue.Task} consists of a number of {@link SubTask}. * - *

- * Plugins are encouraged to extend from {@link AbstractSubTask} - * instead of implementing this interface directly, to maintain - * compatibility with future changes to this interface. - * * @since 1.377 */ -public interface SubTask extends ResourceActivity { +public interface SubTask extends ResourceActivity, ITask { /** * If this task needs to be run on a node with a particular label, * return that {@link Label}. Otherwise null, indicating @@ -115,4 +111,13 @@ default long getEstimatedDuration() { default Object getSameNodeConstraint() { return null; } + + /** + * A subtask may not be reachable by its own URL. In that case, this method should return null. + * @return the URL where to reach specifically this subtask, relative to Jenkins URL. If non-null, must end with '/'. + */ + @Override + default String getUrl() { + return null; + } } diff --git a/core/src/main/java/hudson/security/AuthorizationStrategy.java b/core/src/main/java/hudson/security/AuthorizationStrategy.java index db3001fc40f2c..08fa10fe9897d 100644 --- a/core/src/main/java/hudson/security/AuthorizationStrategy.java +++ b/core/src/main/java/hudson/security/AuthorizationStrategy.java @@ -43,6 +43,7 @@ import java.io.Serializable; import java.util.Collection; import java.util.Collections; +import jenkins.model.IComputer; import jenkins.model.Jenkins; import jenkins.security.stapler.StaplerAccessibleType; import net.sf.json.JSONObject; @@ -154,6 +155,22 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl + * Default implementation delegates to {@link #getACL(Computer)} if the computer is an instance of {@link Computer}, + * otherwise it will fall back to {@link #getRootACL()}. + * + * @since TODO + **/ + public @NonNull ACL getACL(@NonNull IComputer computer) { + if (computer instanceof Computer c) { + return getACL(c); + } + return getRootACL(); + } + /** * Implementation can choose to provide different ACL for different {@link Cloud}s. * This can be used as a basis for more fine-grained access control. diff --git a/core/src/main/java/jenkins/model/DisplayExecutor.java b/core/src/main/java/jenkins/model/DisplayExecutor.java new file mode 100644 index 0000000000000..f7559ff85799c --- /dev/null +++ b/core/src/main/java/jenkins/model/DisplayExecutor.java @@ -0,0 +1,97 @@ +/* + * The MIT License + * + * Copyright 2024 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.model.Executor; +import hudson.model.ModelObject; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.NoExternalUse; + +/** + * A value class providing a consistent snapshot view of the state of an executor to avoid race conditions + * during rendering of the executors list. + */ +@Restricted(NoExternalUse.class) +public class DisplayExecutor implements ModelObject, IDisplayExecutor { + + @NonNull + private final String displayName; + @NonNull + private final String url; + @NonNull + private final Executor executor; + + public DisplayExecutor(@NonNull String displayName, @NonNull String url, @NonNull Executor executor) { + this.displayName = displayName; + this.url = url; + this.executor = executor; + } + + @Override + @NonNull + public String getDisplayName() { + return displayName; + } + + @Override + @NonNull + public String getUrl() { + return url; + } + + @Override + @NonNull + public Executor getExecutor() { + return executor; + } + + @Override + public String toString() { + return "DisplayExecutor{" + "displayName='" + displayName + '\'' + + ", url='" + url + '\'' + + ", executor=" + executor + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + DisplayExecutor that = (DisplayExecutor) o; + + return executor.equals(that.executor); + } + + @Override + public int hashCode() { + return executor.hashCode(); + } +} diff --git a/core/src/main/java/jenkins/model/IComputer.java b/core/src/main/java/jenkins/model/IComputer.java new file mode 100644 index 0000000000000..f975f200f669e --- /dev/null +++ b/core/src/main/java/jenkins/model/IComputer.java @@ -0,0 +1,182 @@ +/* + * The MIT License + * + * Copyright 2024 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.Util; +import hudson.model.Computer; +import hudson.model.Node; +import hudson.security.ACL; +import hudson.security.AccessControlled; +import java.util.List; +import java.util.concurrent.Future; +import org.jenkins.ui.icon.Icon; +import org.jenkins.ui.icon.IconSet; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.Beta; + +/** + * Interface for computer-like objects meant to be passed to {@code t:executors} tag. + * + * @since TODO + */ +@Restricted(Beta.class) +public interface IComputer extends AccessControlled { + /** + * Returns {@link Node#getNodeName() the name of the node}. + */ + @NonNull + String getName(); + + /** + * Used to render the list of executors. + * @return a snapshot of the executor display information + */ + @NonNull + List getDisplayExecutors(); + + /** + * @return {@code true} if the node is offline. {@code false} if it is online. + */ + boolean isOffline(); + + /** + * @return the node name for UI purposes. + */ + @NonNull + String getDisplayName(); + + /** + * Returns {@code true} if the computer is accepting tasks. Needed to allow agents programmatic suspension of task + * scheduling that does not overlap with being offline. + * + * @return {@code true} if the computer is accepting tasks + * @see hudson.slaves.RetentionStrategy#isAcceptingTasks(Computer) + * @see hudson.model.Node#isAcceptingTasks() + */ + boolean isAcceptingTasks(); + + /** + * @return the URL where to reach specifically this computer, relative to Jenkins URL. + */ + @NonNull + String getUrl(); + + /** + * @return {@code true} if this computer has a defined offline cause, @{code false} otherwise. + */ + default boolean hasOfflineCause() { + return Util.fixEmpty(getOfflineCauseReason()) != null; + } + + /** + * If the computer was offline (either temporarily or not), + * this method will return the cause as a string (without user info). + *

+ * {@code hasOfflineCause() == true} implies this must be nonempty. + * + * @return + * empty string if the system was put offline without given a cause. + */ + @NonNull + String getOfflineCauseReason(); + + /** + * @return true if the node is currently connecting to the Jenkins controller. + */ + boolean isConnecting(); + + /** + * Returns the icon for this computer. + *

+ * It is both the recommended and default implementation to serve different icons based on {@link #isOffline} + * + * @see #getIconClassName() + */ + String getIcon(); + + /** + * Returns the alternative text for the computer icon. + */ + String getIconAltText(); + + /** + * Returns the class name that will be used to look up the icon. + *

+ * This class name will be added as a class tag to the html img tags where the icon should + * show up followed by a size specifier given by {@link Icon#toNormalizedIconSizeClass(String)} + * The conversion of class tag to src tag is registered through {@link IconSet#addIcon(Icon)} + * + * @see #getIcon() + */ + default String getIconClassName() { + return getIcon(); + } + + /** + * Returns the number of {@link IExecutor}s that are doing some work right now. + */ + int countBusy(); + /** + * Returns the current size of the executor pool for this computer. + */ + int countExecutors(); + + /** + * @return true if the computer is online. + */ + boolean isOnline(); + /** + * @return the number of {@link IExecutor}s that are idle right now. + */ + int countIdle(); + + /** + * @return true if this computer can be launched by Jenkins proactively and automatically. + * + *

+ * For example, inbound agents return {@code false} from this, because the launch process + * needs to be initiated from the agent side. + */ + boolean isLaunchSupported(); + + /** + * Attempts to connect this computer. + * + * @param forceReconnect If true and a connect activity is already in progress, it will be cancelled and + * the new one will be started. If false, and a connect activity is already in progress, this method + * will do nothing and just return the pending connection operation. + * @return A {@link Future} representing pending completion of the task. The 'completion' includes + * both a successful completion and a non-successful completion (such distinction typically doesn't + * make much sense because as soon as {@link IComputer} is connected it can be disconnected by some other threads.) + */ + Future connect(boolean forceReconnect); + + @NonNull + @Override + default ACL getACL() { + return Jenkins.get().getAuthorizationStrategy().getACL(this); + } +} diff --git a/core/src/main/java/jenkins/model/IDisplayExecutor.java b/core/src/main/java/jenkins/model/IDisplayExecutor.java new file mode 100644 index 0000000000000..af10341349d46 --- /dev/null +++ b/core/src/main/java/jenkins/model/IDisplayExecutor.java @@ -0,0 +1,55 @@ +/* + * The MIT License + * + * Copyright 2024 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model; + +import edu.umd.cs.findbugs.annotations.NonNull; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.Beta; + +/** + * A snapshot of the executor information for display purpose. + * + * @since TODO + */ +@Restricted(Beta.class) +public interface IDisplayExecutor { + /** + * @return The UI label for this executor. + */ + @NonNull + String getDisplayName(); + + /** + * @return the URL where to reach specifically this executor, relative to Jenkins URL. + */ + @NonNull + String getUrl(); + + /** + * @return the executor this display information is for. + */ + @NonNull + IExecutor getExecutor(); +} diff --git a/core/src/main/java/jenkins/model/IExecutor.java b/core/src/main/java/jenkins/model/IExecutor.java new file mode 100644 index 0000000000000..35894f33e4abd --- /dev/null +++ b/core/src/main/java/jenkins/model/IExecutor.java @@ -0,0 +1,144 @@ +/* + * The MIT License + * + * Copyright 2024 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model; + +import edu.umd.cs.findbugs.annotations.CheckForNull; +import hudson.Util; +import hudson.model.Queue; +import hudson.model.queue.WorkUnit; +import jenkins.model.queue.ITask; +import org.kohsuke.accmod.Restricted; +import org.kohsuke.accmod.restrictions.Beta; + +/** + * Interface for an executor that can be displayed in the executors widget. + * + * @since TODO + */ +@Restricted(Beta.class) +public interface IExecutor { + /** + * Returns true if this {@link IExecutor} is ready for action. + */ + boolean isIdle(); + + /** + * @return the {@link IComputer} that this executor belongs to. + */ + IComputer getOwner(); + + /** + * @return the current executable, if any. + */ + @CheckForNull Queue.Executable getCurrentExecutable(); + + /** + * Returns the current {@link WorkUnit} (of {@link #getCurrentExecutable() the current executable}) + * that this executor is running. + * + * @return + * null if the executor is idle. + */ + @CheckForNull WorkUnit getCurrentWorkUnit(); + + /** + * @return the current display name of the executor. Usually the name of the executable. + */ + String getDisplayName(); + + /** + * @return a reference to the parent task of the current executable, if any. + */ + @CheckForNull + default ITask getParentTask() { + var currentExecutable = getCurrentExecutable(); + if (currentExecutable == null) { + var workUnit = getCurrentWorkUnit(); + if (workUnit != null) { + return workUnit.work; + } else { + // Idle + return null; + } + } else { + return currentExecutable.getParent(); + } + } + + /** + * Checks if the current user has a permission to stop this build. + */ + boolean hasStopPermission(); + + /** + * Gets the executor number that uniquely identifies it among + * other {@link IExecutor}s for the same computer. + * + * @return + * a sequential number starting from 0. + */ + int getNumber(); + + /** + * Gets the elapsed time since the build has started. + * + * @return + * the number of milliseconds since the build has started. + */ + long getElapsedTime(); + + /** + * Gets the string that says how long since this build has started. + * + * @return + * string like "3 minutes" "1 day" etc. + */ + default String getTimestampString() { + return Util.getTimeSpanString(getElapsedTime()); + } + + /** + * Computes a human-readable text that shows the expected remaining time + * until the build completes. + */ + String getEstimatedRemainingTime(); + + /** + * Returns true if the current build is likely stuck. + * + *

+ * This is a heuristics based approach, but if the build is suspiciously taking for a long time, + * this method returns true. + */ + boolean isLikelyStuck(); + + /** + * Returns the progress of the current build in the number between 0-100. + * + * @return -1 + * if it's impossible to estimate the progress. + */ + int getProgress(); +} diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 705044cd8fa00..6ea969668669c 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -2071,7 +2071,7 @@ public boolean isUpgradedFromBefore(VersionNumber v) { * Gets the read-only list of all {@link Computer}s. */ public Computer[] getComputers() { - return computers.values().stream().sorted(Comparator.comparing(Computer::getName)).toArray(Computer[]::new); + return getComputersCollection().stream().sorted(Comparator.comparing(Computer::getName)).toArray(Computer[]::new); } @CLIResolver @@ -2080,7 +2080,7 @@ public Computer[] getComputers() { || name.equals("(master)")) // backwards compatibility for URLs name = ""; - for (Computer c : computers.values()) { + for (Computer c : getComputersCollection()) { if (c.getName().equals(name)) return c; } @@ -2247,6 +2247,14 @@ protected ConcurrentMap getComputerMap() { return computers; } + /** + * @return the collection of all {@link Computer}s in this instance. + */ + @Restricted(NoExternalUse.class) + public Collection getComputersCollection() { + return computers.values(); + } + /** * Returns all {@link Node}s in the system, excluding {@link Jenkins} instance itself which * represents the built-in node (in other words, this only returns agents). @@ -2479,7 +2487,7 @@ protected Iterable allAsIterable() { protected Computer get(String key) { return getComputer(key); } @Override - protected Collection all() { return computers.values(); } + protected Collection all() { return getComputersCollection(); } }) .add(new CollectionSearchIndex() { // for users @Override @@ -3814,7 +3822,7 @@ private Set> _cleanUpDisconnectComputers(final List errors) final Set> pending = new HashSet<>(); // JENKINS-28840 we know we will be interrupting all the Computers so get the Queue lock once for all Queue.withLock(() -> { - for (Computer c : computers.values()) { + for (Computer c : getComputersCollection()) { try { c.interrupt(); killComputer(c); @@ -5476,6 +5484,7 @@ protected MasterComputer() { * Returns "" to match with {@link Jenkins#getNodeName()}. */ @Override + @NonNull public String getName() { return ""; } @@ -5497,6 +5506,7 @@ public String getCaption() { } @Override + @NonNull public String getUrl() { return "computer/(built-in)/"; } diff --git a/core/src/main/java/jenkins/model/ModelObjectWithContextMenu.java b/core/src/main/java/jenkins/model/ModelObjectWithContextMenu.java index f46280fef0c01..b76586be0158b 100644 --- a/core/src/main/java/jenkins/model/ModelObjectWithContextMenu.java +++ b/core/src/main/java/jenkins/model/ModelObjectWithContextMenu.java @@ -254,8 +254,20 @@ public ContextMenu add(Node n) { * Adds a computer * * @since 1.513 + * @deprecated use {@link #add(IComputer)} instead. */ + @Deprecated(since = "TODO") public ContextMenu add(Computer c) { + return add((IComputer) c); + } + + /** + * Adds a {@link IComputer} instance. + * @param c the computer to add to the menu + * @return this + * @since TODO + */ + public ContextMenu add(IComputer c) { return add(new MenuItem() .withDisplayName(c.getDisplayName()) .withIconClass(c.getIconClassName()) diff --git a/core/src/main/java/jenkins/model/queue/ITask.java b/core/src/main/java/jenkins/model/queue/ITask.java new file mode 100644 index 0000000000000..d381f24868ecd --- /dev/null +++ b/core/src/main/java/jenkins/model/queue/ITask.java @@ -0,0 +1,76 @@ +/* + * The MIT License + * + * Copyright 2024 CloudBees, Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +package jenkins.model.queue; + +import edu.umd.cs.findbugs.annotations.CheckForNull; +import hudson.model.Item; +import hudson.model.ModelObject; +import hudson.security.AccessControlled; + +/** + * A task that can be displayed in the executors widget. + * + * @since TODO + */ +public interface ITask extends ModelObject { + /** + * @return {@code true} if the current user can cancel the current task. + * + * NOTE: If you have implemented {@link AccessControlled} this returns by default + * {@code hasPermission(Item.CANCEL)} + */ + default boolean hasAbortPermission() { + if (this instanceof AccessControlled ac) { + return ac.hasPermission(Item.CANCEL); + } + return true; + } + + /** + * @return {@code true} if the current user has read access on the task. + */ + @SuppressWarnings("unused") // jelly + default boolean hasReadPermission() { + if (this instanceof AccessControlled ac) { + return ac.hasPermission(Item.READ); + } + return true; + } + + /** + * @return the full display name of the task. + *

+ * Defaults to the same as {@link #getDisplayName()}. + */ + default String getFullDisplayName() { + return getDisplayName(); + } + + /** + * @return the URL where to reach specifically this task, relative to Jenkins URL. If non-null, must end with '/'. + */ + @CheckForNull + String getUrl(); +} diff --git a/core/src/main/resources/hudson/model/ComputerSet/index.jelly b/core/src/main/resources/hudson/model/ComputerSet/index.jelly index f261e1f3f8cd2..1b3c9aa1ea02a 100644 --- a/core/src/main/resources/hudson/model/ComputerSet/index.jelly +++ b/core/src/main/resources/hudson/model/ComputerSet/index.jelly @@ -72,7 +72,7 @@ THE SOFTWARE. - + @@ -93,7 +93,7 @@ THE SOFTWARE. - +

- +
diff --git a/test/src/test/java/hudson/model/ComputerSetTest.java b/test/src/test/java/hudson/model/ComputerSetTest.java index f40cf3e00c96a..e137cbfec823e 100644 --- a/test/src/test/java/hudson/model/ComputerSetTest.java +++ b/test/src/test/java/hudson/model/ComputerSetTest.java @@ -26,7 +26,6 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; -import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.is; @@ -91,10 +90,10 @@ public void nodeOfflineCli() throws Exception { @Test public void getComputerNames() throws Exception { assertThat(ComputerSet.getComputerNames(), is(empty())); - j.createSlave("aNode", "", null); - assertThat(ComputerSet.getComputerNames(), contains("aNode")); j.createSlave("anAnotherNode", "", null); - assertThat(ComputerSet.getComputerNames(), containsInAnyOrder("aNode", "anAnotherNode")); + assertThat(ComputerSet.getComputerNames(), contains("anAnotherNode")); + j.createSlave("aNode", "", null); + assertThat(ComputerSet.getComputerNames(), contains("aNode", "anAnotherNode")); } @Test From 47a212aa79569f42a1950cb532c5a275b5c7e3c0 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 2 Oct 2024 07:46:51 -0700 Subject: [PATCH 17/83] [JENKINS-73760] Updates fail due to invalid JSON from HTTP Update Center (#9760) --- .../main/java/hudson/model/UpdateSite.java | 13 ++++--- .../model/UpdateCenterMigrationTest.java | 35 +++++++++++++++++++ .../java/hudson/model/UpdateSiteTest.java | 14 ++++++++ .../hudson.model.UpdateCenter.xml | 7 ++++ 4 files changed, 64 insertions(+), 5 deletions(-) create mode 100644 test/src/test/java/hudson/model/UpdateCenterMigrationTest.java create mode 100644 test/src/test/resources/hudson/model/UpdateCenterMigrationTest/updateCenterMigration/hudson.model.UpdateCenter.xml diff --git a/core/src/main/java/hudson/model/UpdateSite.java b/core/src/main/java/hudson/model/UpdateSite.java index 8a38ef2d470b7..0e3cc894148af 100644 --- a/core/src/main/java/hudson/model/UpdateSite.java +++ b/core/src/main/java/hudson/model/UpdateSite.java @@ -538,14 +538,17 @@ public String getDownloadUrl() { /** * Is this the legacy default update center site? - * @deprecated - * Will be removed, currently returns always false. - * @since 2.343 + * @since 1.357 */ - @Deprecated @Restricted(NoExternalUse.class) public boolean isLegacyDefault() { - return false; + return isJenkinsCI(); + } + + private boolean isJenkinsCI() { + return url != null + && UpdateCenter.PREDEFINED_UPDATE_SITE_ID.equals(id) + && url.startsWith("http://updates.jenkins-ci.org/"); } /** diff --git a/test/src/test/java/hudson/model/UpdateCenterMigrationTest.java b/test/src/test/java/hudson/model/UpdateCenterMigrationTest.java new file mode 100644 index 0000000000000..6d002dbcad911 --- /dev/null +++ b/test/src/test/java/hudson/model/UpdateCenterMigrationTest.java @@ -0,0 +1,35 @@ +package hudson.model; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.recipes.LocalData; + +public class UpdateCenterMigrationTest { + + @Rule + public JenkinsRule j = new JenkinsRule() { + @Override + protected void configureUpdateCenter() { + // Avoid reverse proxy + DownloadService.neverUpdate = true; + UpdateSite.neverUpdate = true; + } + }; + + @Issue("JENKINS-73760") + @LocalData + @Test + public void updateCenterMigration() { + UpdateSite site = j.jenkins.getUpdateCenter().getSites().stream() + .filter(s -> UpdateCenter.PREDEFINED_UPDATE_SITE_ID.equals(s.getId())) + .findFirst() + .orElseThrow(); + assertFalse(site.isLegacyDefault()); + assertEquals(j.jenkins.getUpdateCenter().getDefaultBaseUrl() + "update-center.json", site.getUrl()); + } +} diff --git a/test/src/test/java/hudson/model/UpdateSiteTest.java b/test/src/test/java/hudson/model/UpdateSiteTest.java index 629c7c7f46e8a..293cca2de7684 100644 --- a/test/src/test/java/hudson/model/UpdateSiteTest.java +++ b/test/src/test/java/hudson/model/UpdateSiteTest.java @@ -72,6 +72,7 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; public class UpdateSiteTest { @@ -205,6 +206,19 @@ public void shutdownWebserver() throws Exception { assertNotEquals("plugin data is present", Collections.emptyMap(), site.getData().plugins); } + @Issue("JENKINS-73760") + @Test + public void isLegacyDefault() { + assertFalse("isLegacyDefault should be false with null id", new UpdateSite(null, "url").isLegacyDefault()); + assertFalse( + "isLegacyDefault should be false when id is not default and url is http://updates.jenkins-ci.org/", + new UpdateSite("dummy", "http://updates.jenkins-ci.org/").isLegacyDefault()); + assertTrue( + "isLegacyDefault should be true when id is default and url is http://updates.jenkins-ci.org/", + new UpdateSite(UpdateCenter.PREDEFINED_UPDATE_SITE_ID, "http://updates.jenkins-ci.org/").isLegacyDefault()); + assertFalse("isLegacyDefault should be false with null url", new UpdateSite(null, null).isLegacyDefault()); + } + @Test public void getAvailables() throws Exception { UpdateSite site = getUpdateSite("/plugins/available-update-center.json"); List available = site.getAvailables(); diff --git a/test/src/test/resources/hudson/model/UpdateCenterMigrationTest/updateCenterMigration/hudson.model.UpdateCenter.xml b/test/src/test/resources/hudson/model/UpdateCenterMigrationTest/updateCenterMigration/hudson.model.UpdateCenter.xml new file mode 100644 index 0000000000000..4f317e7836476 --- /dev/null +++ b/test/src/test/resources/hudson/model/UpdateCenterMigrationTest/updateCenterMigration/hudson.model.UpdateCenter.xml @@ -0,0 +1,7 @@ + + + + default + http://updates.jenkins-ci.org/update-center.json + + \ No newline at end of file From 1c2b84cb76bc855b4862e1e45d7581b21c3ff340 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 2 Oct 2024 07:47:16 -0700 Subject: [PATCH 18/83] [JENKINS-73801] Nested Views plugin overrides `View#doConfigDotXml(StaplerRequest)` (#9764) --- core/src/main/java/hudson/model/View.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/core/src/main/java/hudson/model/View.java b/core/src/main/java/hudson/model/View.java index 5d53a49ef0b7d..b17077cde44d5 100644 --- a/core/src/main/java/hudson/model/View.java +++ b/core/src/main/java/hudson/model/View.java @@ -949,9 +949,28 @@ public void doRssLatest(StaplerRequest2 req, StaplerResponse2 rsp) throws IOExce /** * Accepts {@code config.xml} submission, as well as serve it. + * + * @since 2.475 */ @WebMethod(name = "config.xml") public HttpResponse doConfigDotXml(StaplerRequest2 req) throws IOException { + if (Util.isOverridden(View.class, getClass(), "doConfigDotXml", StaplerRequest.class)) { + return doConfigDotXml(StaplerRequest.fromStaplerRequest2(req)); + } else { + return doConfigDotXmlImpl(req); + } + } + + /** + * @deprecated use {@link #doConfigDotXml(StaplerRequest2)} + */ + @Deprecated + @StaplerNotDispatchable + public HttpResponse doConfigDotXml(StaplerRequest req) throws IOException { + return doConfigDotXmlImpl(StaplerRequest.toStaplerRequest2(req)); + } + + private HttpResponse doConfigDotXmlImpl(StaplerRequest2 req) throws IOException { if (req.getMethod().equals("GET")) { // read checkPermission(READ); From 4759f1a6f036eb7a792c48a08b337edc093cbb7f Mon Sep 17 00:00:00 2001 From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> Date: Wed, 2 Oct 2024 16:47:49 +0200 Subject: [PATCH 19/83] Be more explicit about not being logged in on 404 error page (#9766) Co-authored-by: Daniel Beck --- core/src/main/resources/jenkins/model/Jenkins/_404.jelly | 3 +++ core/src/main/resources/jenkins/model/Jenkins/_404.properties | 1 + 2 files changed, 4 insertions(+) diff --git a/core/src/main/resources/jenkins/model/Jenkins/_404.jelly b/core/src/main/resources/jenkins/model/Jenkins/_404.jelly index 7230e4f31acc5..2578c10b99bd0 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/_404.jelly +++ b/core/src/main/resources/jenkins/model/Jenkins/_404.jelly @@ -44,6 +44,9 @@ THE SOFTWARE. ${%noAccess} + + ${%tryLoggingIn} + ${%notFound} diff --git a/core/src/main/resources/jenkins/model/Jenkins/_404.properties b/core/src/main/resources/jenkins/model/Jenkins/_404.properties index c671d3ed833c0..42a8c07eb02ff 100644 --- a/core/src/main/resources/jenkins/model/Jenkins/_404.properties +++ b/core/src/main/resources/jenkins/model/Jenkins/_404.properties @@ -1,3 +1,4 @@ title = {0} noAccess = This page may not exist, or you may not have permission to see it. +tryLoggingIn = If you have an account, try logging in. notFound = This page does not exist. From ddad8afc302eefbdf5c371189b3a23d9ddf5fa4e Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 2 Oct 2024 07:49:10 -0700 Subject: [PATCH 20/83] Download Yarn Berry with Corepack rather than Yarn 1.x (#9772) * Use eirslett/frontend-maven-plugin#1157 * Test 1 * Test 2 * Test 3 * Testing is finished * https://github.com/jenkinsci/jenkins/pull/9772#discussion_r1771275590 * https://github.com/jenkinsci/jenkins/pull/9772#discussion_r1771977848 --- .gitignore | 7 +------ .prettierignore | 2 -- .yarnrc.yml | 2 ++ CONTRIBUTING.md | 4 ++-- package.json | 3 +++ pom.xml | 55 +++++++++++-------------------------------------- war/.gitignore | 20 ------------------ 7 files changed, 20 insertions(+), 73 deletions(-) create mode 100644 .yarnrc.yml delete mode 100644 war/.gitignore diff --git a/.gitignore b/.gitignore index f7314d0646ec5..41747ca0cd230 100644 --- a/.gitignore +++ b/.gitignore @@ -65,9 +65,7 @@ junit.xml # Yarn # https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored -.pnp.* .yarn/* -.yarnrc.yml !.yarn/patches !.yarn/plugins !.yarn/sdks @@ -78,7 +76,4 @@ node/ node_modules/ # Generated JavaScript Bundles -jsbundles - -# In case someone accidentally runs npm install instead of yarn install -package-lock.json +war/src/main/webapp/jsbundles/ diff --git a/.prettierignore b/.prettierignore index 042e5d268c0c7..66cf7311b1ca4 100644 --- a/.prettierignore +++ b/.prettierignore @@ -7,8 +7,6 @@ node/ .git -.yarnrc.yml - # libraries / external deps / generated files war/src/main/js/plugin-setup-wizard/bootstrap-detached.js war/src/main/webapp/scripts/yui diff --git a/.yarnrc.yml b/.yarnrc.yml new file mode 100644 index 0000000000000..5004f58b1bfdb --- /dev/null +++ b/.yarnrc.yml @@ -0,0 +1,2 @@ +enableGlobalCache: false +nodeLinker: node-modules diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1be9d4f3f9cfe..17d4b17733f90 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -53,12 +53,12 @@ MAVEN_OPTS='--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/ja ### Running the Yarn frontend build > [!TIP] -> If you already have Node.js installed, you do not need to change your path. Start using `yarn` by enabling [Corepack](https://yarnpkg.com/corepack) with `corepack enable`, if it isn't already; this will add the `yarn` binary to your PATH. +> If you already have Node.js installed, you do not need to change your path. Start using Yarn by enabling [Corepack](https://yarnpkg.com/corepack) with `corepack enable`, if it isn't already; this will add the `yarn` binary to your path. To run the Yarn frontend build, after [building the WAR file](#building-the-war-file), add the downloaded versions of Node and Yarn to your path: ```sh -export PATH=$PWD/node:$PWD/node/yarn/dist/bin:$PATH +export PATH=$PWD/node:$PWD/node/node_modules/corepack/shims:$PATH ``` Then you can run Yarn with e.g. diff --git a/package.json b/package.json index 365fadb619ed9..bd04a58d1b3e4 100644 --- a/package.json +++ b/package.json @@ -65,5 +65,8 @@ "defaults", "not IE 11" ], + "engines": { + "node": ">=20.0.0" + }, "packageManager": "yarn@4.5.0" } diff --git a/pom.xml b/pom.xml index 8dc88a8f32efe..2f7da141b1e3a 100644 --- a/pom.xml +++ b/pom.xml @@ -99,11 +99,6 @@ THE SOFTWARE. 8.1 20.17.0 - - 1.22.19 - - 4.5.0 - cc00dce5de4f68d11450519a0f69eadf2a1cbe5cc0d8e740bfac817a31d76874
yarn install - yarn + corepack initialize + + yarn install + yarn build - yarn + corepack generate-sources - build + yarn build @@ -517,11 +486,11 @@ THE SOFTWARE. yarn lint:ci - yarn + corepack test - lint:ci + yarn lint:ci ${yarn.lint.skip} @@ -550,11 +519,11 @@ THE SOFTWARE. yarn lint - yarn + corepack test - lint + yarn lint ${yarn.lint.skip} diff --git a/war/.gitignore b/war/.gitignore deleted file mode 100644 index 045972f591e6b..0000000000000 --- a/war/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -work -/rebel.xml -junit.xml - -# Yarn -# https://yarnpkg.com/getting-started/qa#which-files-should-be-gitignored -.pnp.* -.yarn/* -.yarnrc.yml -!.yarn/patches -!.yarn/plugins -!.yarn/sdks -!.yarn/versions - -# Node -node/ -node_modules/ - -# Generated JavaScript Bundles -jsbundles From 1f7ee886fe798718016ec33ae8a03b056bca6eda Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:49:32 -0600 Subject: [PATCH 21/83] Update dependency com.google.guava:guava to v33.3.1-jre (#9779) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index 47321614432c4..ab9197e749925 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -88,7 +88,7 @@ THE SOFTWARE. com.google.guava guava - 33.3.0-jre + 33.3.1-jre From caa24ac32cfc08232a0b63bbe0454ea063904f3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:49:46 -0600 Subject: [PATCH 22/83] Update dependency postcss-preset-env to v10.0.5 (#9783) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index bd04a58d1b3e4..c79393dde32ce 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.3", + "postcss-preset-env": "10.0.5", "postcss-scss": "4.0.9", "prettier": "3.3.3", "sass": "1.79.3", diff --git a/yarn.lock b/yarn.lock index 28ee807765bc6..acf31ba32a4d2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1571,9 +1571,9 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-light-dark-function@npm:^2.0.2": - version: 2.0.2 - resolution: "@csstools/postcss-light-dark-function@npm:2.0.2" +"@csstools/postcss-light-dark-function@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-light-dark-function@npm:2.0.4" dependencies: "@csstools/css-parser-algorithms": "npm:^3.0.1" "@csstools/css-tokenizer": "npm:^3.0.1" @@ -1581,7 +1581,7 @@ __metadata: "@csstools/utilities": "npm:^2.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/f8973c435868998e5d6af1fc0c35b27bbf65fa9d0c35f5055c689b8ee2807a16802044e296f7def39a7253ae544fb49559e8273ee22eb4e21845aa980a1bc82b + checksum: 10c0/0176422ad9747953964b1ceff002df1ecb1952ebc481db6192070d68777135b582ea6fd32ae819b9c64c96cb9170bd6907c647c85b48daa4984b7ed3d7f9bccb languageName: node linkType: hard @@ -4416,7 +4416,7 @@ __metadata: mini-css-extract-plugin: "npm:2.9.1" postcss: "npm:8.4.47" postcss-loader: "npm:8.1.1" - postcss-preset-env: "npm:10.0.3" + postcss-preset-env: "npm:10.0.5" postcss-scss: "npm:4.0.9" prettier: "npm:3.3.3" sass: "npm:1.79.3" @@ -5913,9 +5913,9 @@ __metadata: languageName: node linkType: hard -"postcss-preset-env@npm:10.0.3": - version: 10.0.3 - resolution: "postcss-preset-env@npm:10.0.3" +"postcss-preset-env@npm:10.0.5": + version: 10.0.5 + resolution: "postcss-preset-env@npm:10.0.5" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" "@csstools/postcss-color-function": "npm:^4.0.2" @@ -5929,7 +5929,7 @@ __metadata: "@csstools/postcss-ic-unit": "npm:^4.0.0" "@csstools/postcss-initial": "npm:^2.0.0" "@csstools/postcss-is-pseudo-class": "npm:^5.0.0" - "@csstools/postcss-light-dark-function": "npm:^2.0.2" + "@csstools/postcss-light-dark-function": "npm:^2.0.4" "@csstools/postcss-logical-float-and-clear": "npm:^3.0.0" "@csstools/postcss-logical-overflow": "npm:^2.0.0" "@csstools/postcss-logical-overscroll-behavior": "npm:^2.0.0" @@ -5980,7 +5980,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/da42caa2aab4d825fddfde00ebe2416d338c7b9a6f79a68840297888a8384f85991991c3fa10cf2d359fb230c885375f5cebd7bd63972725cd2a596d218f8b6a + checksum: 10c0/db5eb1175cb26bed3f1a4c47acc67935ffc784520321470520e59de366ac6f91be1e609fe36056af707ed20f7910721287cff0fae416c437dd3e944de13ffd05 languageName: node linkType: hard From 34d27f96c83b799a89881ead41417eee7c71c70a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:50:17 -0600 Subject: [PATCH 23/83] Update jenkins/ath Docker tag to v6016 (#9785) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ath.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ath.sh b/ath.sh index 1816e037466bf..12eca9c947fb8 100644 --- a/ath.sh +++ b/ath.sh @@ -6,7 +6,7 @@ set -o xtrace cd "$(dirname "$0")" # https://github.com/jenkinsci/acceptance-test-harness/releases -export ATH_VERSION=5997.v2a_1a_696620a_0 +export ATH_VERSION=6016.v3a_e3864eb_993 if [[ $# -eq 0 ]]; then export JDK=17 From 83d240b8df35632082244a5ac00fba400ec1e658 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:50:37 -0600 Subject: [PATCH 24/83] Update dependency org.jenkins-ci.plugins:cloudbees-folder to v6.955.v81e2a_35c08d3 (#9789) Co-authored-by: renovate[bot] <29139614+renovate[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 0f3aa999e08e8..2e6581173e002 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -218,7 +218,7 @@ THE SOFTWARE. org.jenkins-ci.plugins cloudbees-folder - 6.951.v5f91d88d76b_b_ + 6.955.v81e2a_35c08d3 test From fa7e78394ce152621a9e7f7395282b64392b5d7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:50:53 -0600 Subject: [PATCH 25/83] Update eslint monorepo to v9.11.1 (#9791) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 ++-- yarn.lock | 42 ++++++++++++++++++++++++++---------------- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/package.json b/package.json index c79393dde32ce..2f06bd8455891 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,12 @@ "@babel/cli": "7.25.6", "@babel/core": "7.25.2", "@babel/preset-env": "7.25.4", - "@eslint/js": "9.11.0", + "@eslint/js": "9.11.1", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", "css-loader": "7.1.2", "css-minimizer-webpack-plugin": "7.0.0", - "eslint": "9.11.0", + "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", "eslint-formatter-checkstyle": "8.40.0", "globals": "15.9.0", diff --git a/yarn.lock b/yarn.lock index acf31ba32a4d2..4081e8e599f63 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1854,6 +1854,13 @@ __metadata: languageName: node linkType: hard +"@eslint/core@npm:^0.6.0": + version: 0.6.0 + resolution: "@eslint/core@npm:0.6.0" + checksum: 10c0/fffdb3046ad6420f8cb9204b6466fdd8632a9baeebdaf2a97d458a4eac0e16653ba50d82d61835d7d771f6ced0ec942ec482b2fbccc300e45f2cbf784537f240 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^3.1.0": version: 3.1.0 resolution: "@eslint/eslintrc@npm:3.1.0" @@ -1871,10 +1878,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.11.0": - version: 9.11.0 - resolution: "@eslint/js@npm:9.11.0" - checksum: 10c0/7403aeba28ba9cae3470d149b334a51375eb7fd850f167555c81cc72fe98e5cc5ac3059ccdbe68eb255a49d7498a7288d25429af0c7d20afeb4b3c0748349bb4 +"@eslint/js@npm:9.11.1": + version: 9.11.1 + resolution: "@eslint/js@npm:9.11.1" + checksum: 10c0/22916ef7b09c6f60c62635d897c66e1e3e38d90b5a5cf5e62769033472ecbcfb6ec7c886090a4b32fe65d6ce371da54384e46c26a899e38184dfc152c6152f7b languageName: node linkType: hard @@ -2118,10 +2125,10 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:^1.0.5": - version: 1.0.5 - resolution: "@types/estree@npm:1.0.5" - checksum: 10c0/b3b0e334288ddb407c7b3357ca67dbee75ee22db242ca7c56fe27db4e1a31989cb8af48a84dd401deb787fe10cc6b2ab1ee82dc4783be87ededbe3d53c79c70d +"@types/estree@npm:^1.0.5, @types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a languageName: node linkType: hard @@ -2160,7 +2167,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 10c0/a996a745e6c5d60292f36731dd41341339d4eeed8180bb09226e5c8d23759067692b1d88e5d91d72ee83dfc00d3aca8e7bd43ea120516c17922cbcb7c3e252db @@ -3527,19 +3534,22 @@ __metadata: languageName: node linkType: hard -"eslint@npm:9.11.0": - version: 9.11.0 - resolution: "eslint@npm:9.11.0" +"eslint@npm:9.11.1": + version: 9.11.1 + resolution: "eslint@npm:9.11.1" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.11.0" "@eslint/config-array": "npm:^0.18.0" + "@eslint/core": "npm:^0.6.0" "@eslint/eslintrc": "npm:^3.1.0" - "@eslint/js": "npm:9.11.0" + "@eslint/js": "npm:9.11.1" "@eslint/plugin-kit": "npm:^0.2.0" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.3.0" "@nodelib/fs.walk": "npm:^1.2.8" + "@types/estree": "npm:^1.0.6" + "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" chalk: "npm:^4.0.0" cross-spawn: "npm:^7.0.2" @@ -3572,7 +3582,7 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/3438a78172bc667dc87bc4ad864671bd93231c82c9d366899ea3a77fc3444c8cdd158e7fe3ca1cfe4cb566045b1b36c0ccae9fc20efeb4b187f1a534075a1177 + checksum: 10c0/fc9afc31155fef8c27fc4fd00669aeafa4b89ce5abfbf6f60e05482c03d7ff1d5e7546e416aa47bf0f28c9a56597a94663fd0264c2c42a1890f53cac49189f24 languageName: node linkType: hard @@ -4399,12 +4409,12 @@ __metadata: "@babel/cli": "npm:7.25.6" "@babel/core": "npm:7.25.2" "@babel/preset-env": "npm:7.25.4" - "@eslint/js": "npm:9.11.0" + "@eslint/js": "npm:9.11.1" babel-loader: "npm:9.2.1" clean-webpack-plugin: "npm:4.0.0" css-loader: "npm:7.1.2" css-minimizer-webpack-plugin: "npm:7.0.0" - eslint: "npm:9.11.0" + eslint: "npm:9.11.1" eslint-config-prettier: "npm:9.1.0" eslint-formatter-checkstyle: "npm:8.40.0" globals: "npm:15.9.0" From a95d9160ca27ba36ea5e211e95b7b21b1ae8af6d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:51:12 -0600 Subject: [PATCH 26/83] Update dependency org.jenkins-ci.main:jenkins-test-harness to v2299 (#9792) Co-authored-by: renovate[bot] <29139614+renovate[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 2e6581173e002..b2ef9957de207 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -178,7 +178,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-harness - 2289.vfd344a_6d1660 + 2299.v7e8d22e797d3 test From 1e21f057e6a855303fbdbc241bee20b2e7f6c11d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:51:26 -0600 Subject: [PATCH 27/83] Update dependency webpack to v5.95.0 (#9793) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2f06bd8455891..2558edb46a60b 100644 --- a/package.json +++ b/package.json @@ -48,7 +48,7 @@ "stylelint": "16.9.0", "stylelint-checkstyle-reporter": "1.0.0", "stylelint-config-standard": "36.0.1", - "webpack": "5.94.0", + "webpack": "5.95.0", "webpack-cli": "5.1.4", "webpack-remove-empty-scripts": "1.0.4" }, diff --git a/yarn.lock b/yarn.lock index 4081e8e599f63..c512f16f8a3b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4437,7 +4437,7 @@ __metadata: stylelint-checkstyle-reporter: "npm:1.0.0" stylelint-config-standard: "npm:36.0.1" tippy.js: "npm:6.3.7" - webpack: "npm:5.94.0" + webpack: "npm:5.95.0" webpack-cli: "npm:5.1.4" webpack-remove-empty-scripts: "npm:1.0.4" window-handle: "npm:1.0.1" @@ -7097,9 +7097,9 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.94.0": - version: 5.94.0 - resolution: "webpack@npm:5.94.0" +"webpack@npm:5.95.0": + version: 5.95.0 + resolution: "webpack@npm:5.95.0" dependencies: "@types/estree": "npm:^1.0.5" "@webassemblyjs/ast": "npm:^1.12.1" @@ -7129,7 +7129,7 @@ __metadata: optional: true bin: webpack: bin/webpack.js - checksum: 10c0/b4d1b751f634079bd177a89eef84d80fa5bb8d6fc15d72ab40fc2b9ca5167a79b56585e1a849e9e27e259803ee5c4365cb719e54af70a43c06358ec268ff4ebf + checksum: 10c0/b9e6d0f8ebcbf0632494ac0b90fe4acb8f4a9b83f7ace4a67a15545a36fe58599c912ab58e625e1bf58ab3b0916c75fe99da6196d412ee0cab0b5065edd84238 languageName: node linkType: hard From 49aeec9278adf6c600c57260f84e2b450121c7c5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:51:45 -0600 Subject: [PATCH 28/83] Update dependency com.puppycrawl.tools:checkstyle to v10.18.2 (#9794) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2f7da141b1e3a..2e75f8ca83b10 100644 --- a/pom.xml +++ b/pom.xml @@ -281,7 +281,7 @@ THE SOFTWARE. com.puppycrawl.tools checkstyle - 10.18.1 + 10.18.2 From 1a2efeafabb8a1641c7d8430b6d88ec845a4947d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:52:03 -0600 Subject: [PATCH 29/83] Update dependency org.jenkins-ci.plugins:mailer to v488 (#9796) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index b2ef9957de207..790b1e0b09043 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -236,7 +236,7 @@ THE SOFTWARE. org.jenkins-ci.plugins mailer - 472.vf7c289a_4b_420 + 488.v0c9639c1a_eb_3 test diff --git a/war/pom.xml b/war/pom.xml index f256a95017cae..40a8e76224ed9 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -271,7 +271,7 @@ THE SOFTWARE. org.jenkins-ci.plugins mailer - 472.vf7c289a_4b_420 + 488.v0c9639c1a_eb_3 hpi From f63687153c8ca6ce60265bee76178970bdc24a91 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:52:51 -0600 Subject: [PATCH 30/83] Update dependency org.jenkins-ci.modules:instance-identity to v201 (#9807) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index 790b1e0b09043..a1bdc6c513a0c 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -206,7 +206,7 @@ THE SOFTWARE. org.jenkins-ci.modules instance-identity - 185.v303dc7c645f9 + 201.vd2a_b_5a_468a_a_6 test diff --git a/war/pom.xml b/war/pom.xml index 40a8e76224ed9..25b4fef13819f 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -480,7 +480,7 @@ THE SOFTWARE. org.jenkins-ci.modules instance-identity - 185.v303dc7c645f9 + 201.vd2a_b_5a_468a_a_6 hpi From 2d668926d8abc3b81a35d8f7cca1a42c953aae0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:53:06 -0600 Subject: [PATCH 31/83] Update dependency sass to v1.79.4 (#9808) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2558edb46a60b..bb13c73b821c6 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "postcss-preset-env": "10.0.5", "postcss-scss": "4.0.9", "prettier": "3.3.3", - "sass": "1.79.3", + "sass": "1.79.4", "sass-loader": "16.0.2", "style-loader": "4.0.0", "stylelint": "16.9.0", diff --git a/yarn.lock b/yarn.lock index c512f16f8a3b2..db76027934290 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4429,7 +4429,7 @@ __metadata: postcss-preset-env: "npm:10.0.5" postcss-scss: "npm:4.0.9" prettier: "npm:3.3.3" - sass: "npm:1.79.3" + sass: "npm:1.79.4" sass-loader: "npm:16.0.2" sortablejs: "npm:1.15.3" style-loader: "npm:4.0.0" @@ -6392,16 +6392,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.79.3": - version: 1.79.3 - resolution: "sass@npm:1.79.3" +"sass@npm:1.79.4": + version: 1.79.4 + resolution: "sass@npm:1.79.4" dependencies: chokidar: "npm:^4.0.0" immutable: "npm:^4.0.0" source-map-js: "npm:>=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 10c0/ad171bbbb2d7a789cc47803a59dcf2d0ac92ede34b538bb3fd683b6391a9ac3dc3eabaac264fc9582c770c4e435b85840e011785b7adfc0ac002b51ba91179c9 + checksum: 10c0/505ff0d9267d0fb990971e617acfeabf7c060c55d4cef68fe8a4bc693e7ea88ae7d7caeca3975e4b453459ba4a707b6e5b6979fc9395a7e08f0a43ca6aed06b8 languageName: node linkType: hard From 662f4cd2666775be7ead935fe29af473abc18b7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:53:29 -0600 Subject: [PATCH 32/83] Update dependency org.jenkins-ci.plugins:matrix-project to v838 (#9812) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index a1bdc6c513a0c..a5ebebfa95d50 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -248,7 +248,7 @@ THE SOFTWARE. org.jenkins-ci.plugins matrix-project - 832.va_66e270d2946 + 838.v4d7b_7b_f9b_d4b_ test diff --git a/war/pom.xml b/war/pom.xml index 25b4fef13819f..199730328a28f 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -292,7 +292,7 @@ THE SOFTWARE. org.jenkins-ci.plugins matrix-project - 832.va_66e270d2946 + 838.v4d7b_7b_f9b_d4b_ hpi From 719ac752de35001e84ce6ebd2e79319c753ddb54 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 07:56:41 -0700 Subject: [PATCH 33/83] Update dependency org.jenkins-ci.plugins:junit to v1302 (#9786) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index a5ebebfa95d50..f3b45cc9d52bd 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -230,7 +230,7 @@ THE SOFTWARE. org.jenkins-ci.plugins junit - 1300.v03d9d8a_cf1fb_ + 1302.va_b_878c32eb_b_5 test diff --git a/war/pom.xml b/war/pom.xml index 199730328a28f..4b1dfa5522134 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -306,7 +306,7 @@ THE SOFTWARE. org.jenkins-ci.plugins junit - 1300.v03d9d8a_cf1fb_ + 1302.va_b_878c32eb_b_5 hpi From 208238192f93e532284e4f8336e6a7849c50441b Mon Sep 17 00:00:00 2001 From: Mark Waite Date: Wed, 2 Oct 2024 09:02:59 -0600 Subject: [PATCH 34/83] Fix yarn lint error --- core/src/main/resources/lib/form/textarea/textarea.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/lib/form/textarea/textarea.js b/core/src/main/resources/lib/form/textarea/textarea.js index e1253cdfdab73..53ea6293dc62f 100644 --- a/core/src/main/resources/lib/form/textarea/textarea.js +++ b/core/src/main/resources/lib/form/textarea/textarea.js @@ -14,13 +14,13 @@ Behaviour.specify("TEXTAREA.codemirror", "textarea", 0, function (e) { if (match) { console.log( "Parsing simple legacy codemirror-config value using fallback: " + - config + config, ); config = { mode: match[1] }; } else { console.log( "Failed to parse codemirror-config '{" + config + "}' as JSON", - ex + ex, ); config = {}; } From 15bad89464c633f1a00441d9f3d9795776459f74 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:35:12 -0700 Subject: [PATCH 35/83] Update `access-modifier.version` to v1.34 (#9798) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2e75f8ca83b10..674cb378e1351 100644 --- a/pom.xml +++ b/pom.xml @@ -92,7 +92,7 @@ THE SOFTWARE. Max Medium - 1.33 + 1.34 4.13.2 1.29 false diff --git a/war/pom.xml b/war/pom.xml index 4b1dfa5522134..dac4efb304194 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -155,6 +155,7 @@ THE SOFTWARE. org.jenkins-ci.main:websocket-spi org.jvnet.hudson:commons-jelly-tags-define org.jvnet.winp:winp + org.kohsuke:access-modifier-annotation org.kohsuke.stapler:stapler org.kohsuke.stapler:stapler-groovy org.kohsuke.stapler:stapler-jelly From 2b033c622f287a291861265ba5de9868f67d9b40 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:40:00 -0700 Subject: [PATCH 36/83] Update `bridge-method-injector.version` to v1.30 (#9799) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 674cb378e1351..e2d956523e879 100644 --- a/pom.xml +++ b/pom.xml @@ -94,7 +94,7 @@ THE SOFTWARE. 1.34 4.13.2 - 1.29 + 1.30 false 8.1 diff --git a/war/pom.xml b/war/pom.xml index dac4efb304194..a46aeec2892fe 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -148,6 +148,7 @@ THE SOFTWARE. 11 + com.infradna.tool:bridge-method-annotation org.jenkins-ci:commons-jelly org.jenkins-ci.main:cli org.jenkins-ci.main:jenkins-core From bfbebaef51b6d76e2fe157afd0a22cb7abf05490 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:44:51 -0700 Subject: [PATCH 37/83] Update dependency io.jenkins.lib:support-log-formatter to v1.3 (#9800) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/pom.xml b/war/pom.xml index a46aeec2892fe..b085dc111c315 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -582,7 +582,7 @@ THE SOFTWARE. io.jenkins.lib support-log-formatter - 1.2 + 1.3 ${project.build.directory} From f58d005485eb3f5d58bf33f47a9af8c4a1626176 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:49:02 -0700 Subject: [PATCH 38/83] Update dependency `org.jenkins-ci:annotation-indexer` to v1.18 (#9801) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index ab9197e749925..e70e69ddce94e 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -250,7 +250,7 @@ THE SOFTWARE. org.jenkins-ci annotation-indexer - 1.17 + 1.18 org.jenkins-ci diff --git a/war/pom.xml b/war/pom.xml index b085dc111c315..96a817f28a151 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -149,6 +149,7 @@ THE SOFTWARE. 11 com.infradna.tool:bridge-method-annotation + org.jenkins-ci:annotation-indexer:jar org.jenkins-ci:commons-jelly org.jenkins-ci.main:cli org.jenkins-ci.main:jenkins-core From cfe170fc544893a90b1991f1cf303ce21ff63972 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:53:28 -0700 Subject: [PATCH 39/83] Update dependency org.jenkins-ci:crypto-util to v1.10 (#9802) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index e70e69ddce94e..5b1b09ea7cb3b 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -260,7 +260,7 @@ THE SOFTWARE. org.jenkins-ci crypto-util - 1.9 + 1.10 org.jenkins-ci diff --git a/war/pom.xml b/war/pom.xml index 96a817f28a151..634123a4935ad 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -151,6 +151,7 @@ THE SOFTWARE. com.infradna.tool:bridge-method-annotation org.jenkins-ci:annotation-indexer:jar org.jenkins-ci:commons-jelly + org.jenkins-ci:crypto-util org.jenkins-ci.main:cli org.jenkins-ci.main:jenkins-core org.jenkins-ci.main:websocket-jetty12-ee9 From b5e9dcde85651fc05686252b58d8152b0d3dfbe6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 11:57:54 -0700 Subject: [PATCH 40/83] Update dependency `org.jenkins-ci:memory-monitor` to v1.13 (#9803) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index 5b1b09ea7cb3b..578310f2b9b05 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -265,7 +265,7 @@ THE SOFTWARE. org.jenkins-ci memory-monitor - 1.12 + 1.13 org.jenkins-ci diff --git a/war/pom.xml b/war/pom.xml index 634123a4935ad..1b248c0192f4e 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -156,6 +156,7 @@ THE SOFTWARE. org.jenkins-ci.main:jenkins-core org.jenkins-ci.main:websocket-jetty12-ee9 org.jenkins-ci.main:websocket-spi + org.jenkins-ci:memory-monitor org.jvnet.hudson:commons-jelly-tags-define org.jvnet.winp:winp org.kohsuke:access-modifier-annotation From 42e7e82a3226878f5cc34d4d0614c362aaeedcac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:08:44 -0700 Subject: [PATCH 41/83] Update dependency `org.jenkins-ci:symbol-annotation` to v1.25 (#9804) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- war/pom.xml | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 578310f2b9b05..b5a3d28885551 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -270,7 +270,7 @@ THE SOFTWARE. org.jenkins-ci symbol-annotation - 1.24 + 1.25 org.jenkins-ci diff --git a/war/pom.xml b/war/pom.xml index 1b248c0192f4e..cfc66b2566a2c 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -149,7 +149,7 @@ THE SOFTWARE. 11 com.infradna.tool:bridge-method-annotation - org.jenkins-ci:annotation-indexer:jar + org.jenkins-ci:annotation-indexer org.jenkins-ci:commons-jelly org.jenkins-ci:crypto-util org.jenkins-ci.main:cli @@ -157,6 +157,7 @@ THE SOFTWARE. org.jenkins-ci.main:websocket-jetty12-ee9 org.jenkins-ci.main:websocket-spi org.jenkins-ci:memory-monitor + org.jenkins-ci:symbol-annotation org.jvnet.hudson:commons-jelly-tags-define org.jvnet.winp:winp org.kohsuke:access-modifier-annotation From c127593f06f675d769f7df802236098f42e6344a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:11:53 -0700 Subject: [PATCH 42/83] Update dependency org.jenkins-ci:task-reactor to v1.9 (#9805) * Update dependency org.jenkins-ci:task-reactor to v1.9 * Exclude bytecode check --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Basil Crow --- bom/pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index b5a3d28885551..06aae3857528f 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -275,7 +275,7 @@ THE SOFTWARE. org.jenkins-ci task-reactor - 1.8 + 1.9 org.jenkins-ci diff --git a/war/pom.xml b/war/pom.xml index cfc66b2566a2c..a758f0735ed88 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -158,6 +158,7 @@ THE SOFTWARE. org.jenkins-ci.main:websocket-spi org.jenkins-ci:memory-monitor org.jenkins-ci:symbol-annotation + org.jenkins-ci:task-reactor org.jvnet.hudson:commons-jelly-tags-define org.jvnet.winp:winp org.kohsuke:access-modifier-annotation From 937fe2a07d8942241a40f9011dbb8f33266834f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:17:21 -0700 Subject: [PATCH 43/83] Update dependency `org.jenkins-ci:version-number` to v1.12 (#9806) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- war/pom.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index 06aae3857528f..a8c184ead7ac9 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -280,7 +280,7 @@ THE SOFTWARE. org.jenkins-ci version-number - 1.11 + 1.12 org.jenkins-ci.main diff --git a/war/pom.xml b/war/pom.xml index a758f0735ed88..9b794a8263875 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -159,6 +159,7 @@ THE SOFTWARE. org.jenkins-ci:memory-monitor org.jenkins-ci:symbol-annotation org.jenkins-ci:task-reactor + org.jenkins-ci:version-number org.jvnet.hudson:commons-jelly-tags-define org.jvnet.winp:winp org.kohsuke:access-modifier-annotation From ba21dbe6059486bc5d89202a893ae3a85e18fd80 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:21:35 -0700 Subject: [PATCH 44/83] Update dependency org.jenkins-ci.plugins:credentials to v1381 (#9814) Co-authored-by: renovate[bot] <29139614+renovate[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 f3b45cc9d52bd..a4ea23c9f3f7b 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -224,7 +224,7 @@ THE SOFTWARE. org.jenkins-ci.plugins credentials - 1378.v81ef4269d764 + 1381.v2c3a_12074da_b_ test From ee00900d1f031cb4cde9d1661a5f20c7d9b611f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:24:33 -0700 Subject: [PATCH 45/83] Update dependency globals to v15.10.0 (#9816) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index bb13c73b821c6..2f03b76c48068 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "eslint": "9.11.1", "eslint-config-prettier": "9.1.0", "eslint-formatter-checkstyle": "8.40.0", - "globals": "15.9.0", + "globals": "15.10.0", "handlebars-loader": "1.7.3", "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", diff --git a/yarn.lock b/yarn.lock index db76027934290..88b93529c7c40 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3991,10 +3991,10 @@ __metadata: languageName: node linkType: hard -"globals@npm:15.9.0": - version: 15.9.0 - resolution: "globals@npm:15.9.0" - checksum: 10c0/de4b553e412e7e830998578d51b605c492256fb2a9273eaeec6ec9ee519f1c5aa50de57e3979911607fd7593a4066420e01d8c3d551e7a6a236e96c521aee36c +"globals@npm:15.10.0": + version: 15.10.0 + resolution: "globals@npm:15.10.0" + checksum: 10c0/fef8f320e88f01f1492fef1b04b056908e1f6726eeaffe3bca03247237300c2d86e71585ee641b62ba71460a6eaff0d6ca7fca284e61bd1b3f833c7ad68b160a languageName: node linkType: hard @@ -4417,7 +4417,7 @@ __metadata: eslint: "npm:9.11.1" eslint-config-prettier: "npm:9.1.0" eslint-formatter-checkstyle: "npm:8.40.0" - globals: "npm:15.9.0" + globals: "npm:15.10.0" handlebars: "npm:4.7.8" handlebars-loader: "npm:1.7.3" hotkeys-js: "npm:3.12.2" From 296f9a2419f39627b440c39b1a5a5331945ec175 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:27:25 -0700 Subject: [PATCH 46/83] Update babel monorepo to v7.25.7 (#9817) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 6 +- yarn.lock | 1225 +++++++++++++++++++++++++------------------------- 2 files changed, 611 insertions(+), 620 deletions(-) diff --git a/package.json b/package.json index 2f03b76c48068..bd27d5b79effd 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ "lint": "yarn lint:js && yarn lint:css" }, "devDependencies": { - "@babel/cli": "7.25.6", - "@babel/core": "7.25.2", - "@babel/preset-env": "7.25.4", + "@babel/cli": "7.25.7", + "@babel/core": "7.25.7", + "@babel/preset-env": "7.25.7", "@eslint/js": "9.11.1", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", diff --git a/yarn.lock b/yarn.lock index 88b93529c7c40..46e29f140aa73 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15,9 +15,9 @@ __metadata: languageName: node linkType: hard -"@babel/cli@npm:7.25.6": - version: 7.25.6 - resolution: "@babel/cli@npm:7.25.6" +"@babel/cli@npm:7.25.7": + version: 7.25.7 + resolution: "@babel/cli@npm:7.25.7" dependencies: "@jridgewell/trace-mapping": "npm:^0.3.25" "@nicolo-ribaudo/chokidar-2": "npm:2.1.8-no-fsevents.3" @@ -38,121 +38,121 @@ __metadata: bin: babel: ./bin/babel.js babel-external-helpers: ./bin/babel-external-helpers.js - checksum: 10c0/861d3c2ed6c47b25a322c2f6127f56783d8d333fc2d02d3815f86301fe1102eca5f61b8a5c8610a6a2872d1ccfce24fd6d4a91f4f73536e43b8e2f28f9dcf5ed + checksum: 10c0/bbbc53eef15844b0bfb737d7d134f979d42c51a269e2aee994b02eb9216a22e8dd3d790d5ae9f5b5c003e01eccfc164c14aaa1ad989695e0154f66a588f77d42 languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/code-frame@npm:7.24.7" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/code-frame@npm:7.25.7" dependencies: - "@babel/highlight": "npm:^7.24.7" + "@babel/highlight": "npm:^7.25.7" picocolors: "npm:^1.0.0" - checksum: 10c0/ab0af539473a9f5aeaac7047e377cb4f4edd255a81d84a76058595f8540784cc3fbe8acf73f1e073981104562490aabfb23008cd66dc677a456a4ed5390fdde6 + checksum: 10c0/14825c298bdec914caf3d24d1383b6d4cd6b030714686004992f4fc251831ecf432236652896f99d5d341f17170ae9a07b58d8d7b15aa0df8cfa1c5a7d5474bc languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.2, @babel/compat-data@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/compat-data@npm:7.25.4" - checksum: 10c0/50d79734d584a28c69d6f5b99adfaa064d0f41609a378aef04eb06accc5b44f8520e68549eba3a082478180957b7d5783f1bfb1672e4ae8574e797ce8bae79fa +"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/compat-data@npm:7.25.7" + checksum: 10c0/e5cc915abdd18d021236474a96606b2d4a915c4fb620c1ad776b8a08d91111e788cb3b7e9bad43593d4e0bfa4f06894357bcb0984102de1861b9e7322b6bc9f8 languageName: node linkType: hard -"@babel/core@npm:7.25.2": - version: 7.25.2 - resolution: "@babel/core@npm:7.25.2" +"@babel/core@npm:7.25.7": + version: 7.25.7 + resolution: "@babel/core@npm:7.25.7" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.0" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-module-transforms": "npm:^7.25.2" - "@babel/helpers": "npm:^7.25.0" - "@babel/parser": "npm:^7.25.0" - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.2" - "@babel/types": "npm:^7.25.2" + "@babel/code-frame": "npm:^7.25.7" + "@babel/generator": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helpers": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.7" + "@babel/template": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: 10c0/a425fa40e73cb72b6464063a57c478bc2de9dbcc19c280f1b55a3d88b35d572e87e8594e7d7b4880331addb6faef641bbeb701b91b41b8806cd4deae5d74f401 + checksum: 10c0/dad20af39624086afc3a0910bd97ae712c9ad0e9dda09fc5da93876e8ea1802b63ddd81c44f4aa8a9834db46de801eaab1ce9b81ab54b4fe907ae052c24de136 languageName: node linkType: hard -"@babel/generator@npm:^7.25.0, @babel/generator@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/generator@npm:7.25.6" +"@babel/generator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/generator@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.25.6" + "@babel/types": "npm:^7.25.7" "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" - jsesc: "npm:^2.5.1" - checksum: 10c0/f89282cce4ddc63654470b98086994d219407d025497f483eb03ba102086e11e2b685b27122f6ff2e1d93b5b5fa0c3a6b7e974fbf2e4a75b685041a746a4291e + jsesc: "npm:^3.0.2" + checksum: 10c0/c03a26c79864d60d04ce36b649c3fa0d6fd7b2bf6a22e22854a0457aa09206508392dd73ee40e7bc8d50b3602f9ff068afa47770cda091d332e7db1ca382ee96 languageName: node linkType: hard -"@babel/helper-annotate-as-pure@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-annotate-as-pure@npm:7.24.7" +"@babel/helper-annotate-as-pure@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-annotate-as-pure@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/4679f7df4dffd5b3e26083ae65228116c3da34c3fff2c11ae11b259a61baec440f51e30fd236f7a0435b9d471acd93d0bc5a95df8213cbf02b1e083503d81b9a + "@babel/types": "npm:^7.25.7" + checksum: 10c0/2f020b0fa9d336b5778485cc2de3141561ec436a7591b685457a5bcdae4ce41d9ddee68169c95504e0789e5a4327e73b8b7e72e5b60e82e96d730c4d19255248 languageName: node linkType: hard -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.24.7" +"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/0ed84abf848c79fb1cd4c1ddac12c771d32c1904d87fc3087f33cfdeb0c2e0db4e7892b74b407d9d8d0c000044f3645a7391a781f788da8410c290bb123a1f13 + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/e9dc5a7920a1d74150dec53ccd5e34f2b31ae307df7cdeec6289866f7bda97ecb1328b49a7710ecde5db5b6daad768c904a030f9a0fa3184963b0017622c42aa languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8, @babel/helper-compilation-targets@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-compilation-targets@npm:7.25.2" +"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-compilation-targets@npm:7.25.7" dependencies: - "@babel/compat-data": "npm:^7.25.2" - "@babel/helper-validator-option": "npm:^7.24.8" - browserslist: "npm:^4.23.1" + "@babel/compat-data": "npm:^7.25.7" + "@babel/helper-validator-option": "npm:^7.25.7" + browserslist: "npm:^4.24.0" lru-cache: "npm:^5.1.1" semver: "npm:^6.3.1" - checksum: 10c0/de10e986b5322c9f807350467dc845ec59df9e596a5926a3b5edbb4710d8e3b8009d4396690e70b88c3844fe8ec4042d61436dd4b92d1f5f75655cf43ab07e99 + checksum: 10c0/705be7e5274a3fdade68e3e2cf42e2b600316ab52794e13b91299a16f16c926f15886b6e9d6df20eb943ccc1cdba5a363d4766f8d01e47b8e6f4e01175f5e66c languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.24.7, @babel/helper-create-class-features-plugin@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/helper-create-class-features-plugin@npm:7.25.4" +"@babel/helper-create-class-features-plugin@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-create-class-features-plugin@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-member-expression-to-functions": "npm:^7.24.8" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.4" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-member-expression-to-functions": "npm:^7.25.7" + "@babel/helper-optimise-call-expression": "npm:^7.25.7" + "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/a765d9e0482e13cf96642fa8aa28e6f7d4d7d39f37840d6246e5e10a7c47f47c52d52522edd3073f229449d17ec0db6f9b7b5e398bff6bb0b4994d65957a164c + checksum: 10c0/405c3c1a137acda1206380a96993cf2cfd808b3bee1c11c4af47ee0f03a20858497aa53394d6adc5431793c543be5e02010620e871a5ab39d938ae90a54b50f2 languageName: node linkType: hard -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.24.7, @babel/helper-create-regexp-features-plugin@npm:^7.25.0, @babel/helper-create-regexp-features-plugin@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.2" +"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - regexpu-core: "npm:^5.3.1" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + regexpu-core: "npm:^6.1.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/85a7e3639c118856fb1113f54fb7e3bf7698171ddfd0cd6fccccd5426b3727bc1434fe7f69090441dcde327feef9de917e00d35e47ab820047057518dd675317 + checksum: 10c0/75919fd5a67cd7be8497b56f7b9ed6b4843cb401956ba8d403aa9ae5b005bc28e35c7f27e704d820edbd1154394ed7a7984d4719916795d89d716f6980fe8bd4 languageName: node linkType: hard @@ -171,223 +171,223 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-member-expression-to-functions@npm:7.24.8" +"@babel/helper-member-expression-to-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-member-expression-to-functions@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.8" - "@babel/types": "npm:^7.24.8" - checksum: 10c0/7e14a5acc91f6cd26305a4441b82eb6f616bd70b096a4d2099a968f16b26d50207eec0b9ebfc466fefd62bd91587ac3be878117cdfec819b7151911183cb0e5a + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/1e948162ab48d84593a7c6ec9570d14c906146f1697144fc369c59dbeb00e4a062da67dd06cb0d8f98a044cd8389002dcf2ab6f5613d99c35748307846ec63fc languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-module-imports@npm:7.24.7" +"@babel/helper-module-imports@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-module-imports@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/97c57db6c3eeaea31564286e328a9fb52b0313c5cfcc7eee4bc226aebcf0418ea5b6fe78673c0e4a774512ec6c86e309d0f326e99d2b37bfc16a25a032498af0 + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/0fd0c3673835e5bf75558e184bcadc47c1f6dd2fe2016d53ebe1e5a6ae931a44e093015c2f9a6651c1a89f25c76d9246710c2b0b460b95ee069c464f2837fa2c languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.25.0, @babel/helper-module-transforms@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/helper-module-transforms@npm:7.25.2" +"@babel/helper-module-transforms@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-module-transforms@npm:7.25.7" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-simple-access": "npm:^7.24.7" - "@babel/helper-validator-identifier": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.2" + "@babel/helper-module-imports": "npm:^7.25.7" + "@babel/helper-simple-access": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/adaa15970ace0aee5934b5a633789b5795b6229c6a9cf3e09a7e80aa33e478675eee807006a862aa9aa517935d81f88a6db8a9f5936e3a2a40ec75f8062bc329 + checksum: 10c0/f37fa7d1d4df21690535b278468cbd5faf0133a3080f282000cfa4f3ffc9462a1458f866b04b6a2f2d1eec4691236cba9a867da61270dab3ab19846e62f05090 languageName: node linkType: hard -"@babel/helper-optimise-call-expression@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-optimise-call-expression@npm:7.24.7" +"@babel/helper-optimise-call-expression@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-optimise-call-expression@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.24.7" - checksum: 10c0/ca6a9884705dea5c95a8b3ce132d1e3f2ae951ff74987d400d1d9c215dae9c0f9e29924d8f8e131e116533d182675bc261927be72f6a9a2968eaeeaa51eb1d0f + "@babel/types": "npm:^7.25.7" + checksum: 10c0/19b4cc7e77811b1fedca4928dbc14026afef913c2ba4142e5e110ebdcb5c3b2efc0f0fbee9f362c23a194674147b9d627adea71c289b9be08b9067bc0085308b languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.24.8 - resolution: "@babel/helper-plugin-utils@npm:7.24.8" - checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.25.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": + version: 7.25.7 + resolution: "@babel/helper-plugin-utils@npm:7.25.7" + checksum: 10c0/241f8cf3c5b7700e91cab7cfe5b432a3c710ae3cd5bb96dc554da536a6d25f5b9f000cc0c0917501ceb4f76ba92599ee3beb25e10adaf96be59f8df89a842faf languageName: node linkType: hard -"@babel/helper-remap-async-to-generator@npm:^7.24.7, @babel/helper-remap-async-to-generator@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-remap-async-to-generator@npm:7.25.0" +"@babel/helper-remap-async-to-generator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-remap-async-to-generator@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-wrap-function": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-wrap-function": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/0d17b5f7bb6a607edc9cc62fff8056dd9f341bf2f919884f97b99170d143022a5e7ae57922c4891e4fc360ad291e708d2f8cd8989f1d3cd7a17600159984f5a6 + checksum: 10c0/972d84876adce6ab61c87a2df47e1afc790b73cff0d1767d0a1c5d9f7aa5e91d8c581a272b66b2051a26cfbb167d8a780564705e488e3ce1f477f1c15059bc5f languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.24.7, @babel/helper-replace-supers@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-replace-supers@npm:7.25.0" +"@babel/helper-replace-supers@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-replace-supers@npm:7.25.7" dependencies: - "@babel/helper-member-expression-to-functions": "npm:^7.24.8" - "@babel/helper-optimise-call-expression": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-member-expression-to-functions": "npm:^7.25.7" + "@babel/helper-optimise-call-expression": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/b4b6650ab3d56c39a259367cd97f8df2f21c9cebb3716fea7bca40a150f8847bfb82f481e98927c7c6579b48a977b5a8f77318a1c6aeb497f41ecd6dbc3fdfef + checksum: 10c0/761d64ee74429f7326a6aa65e2cd5bfcb8de9e3bc3f1efb14b8f610d2410f003b0fca52778dc801d49ff8fbc90b057e8f51b27c62b0b05c95eaf23140ca1287b languageName: node linkType: hard -"@babel/helper-simple-access@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-simple-access@npm:7.24.7" +"@babel/helper-simple-access@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-simple-access@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/7230e419d59a85f93153415100a5faff23c133d7442c19e0cd070da1784d13cd29096ee6c5a5761065c44e8164f9f80e3a518c41a0256df39e38f7ad6744fed7 + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/eed1b499bfb4f613c18debd61517e3de77b6da2727ca025aa05ac81599e0269f1dddb5237db04e8bb598115d015874752e0a7f11ff38672d74a4976097417059 languageName: node linkType: hard -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.24.7" +"@babel/helper-skip-transparent-expression-wrappers@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.25.7" dependencies: - "@babel/traverse": "npm:^7.24.7" - "@babel/types": "npm:^7.24.7" - checksum: 10c0/e3a9b8ac9c262ac976a1bcb5fe59694db5e6f0b4f9e7bdba5c7693b8b5e28113c23bdaa60fe8d3ec32a337091b67720b2053bcb3d5655f5406536c3d0584242b + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/5804adb893849a9d8cfb548e3812566a81d95cb0c9a10d66b52912d13f488e577c33063bf19bc06ac70e6333162a7370d67ba1a1c3544d37fb50d5f4a00db4de languageName: node linkType: hard -"@babel/helper-string-parser@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-string-parser@npm:7.24.8" - checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08 +"@babel/helper-string-parser@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-string-parser@npm:7.25.7" + checksum: 10c0/73ef2ceb81f8294678a0afe8ab0103729c0370cac2e830e0d5128b03be5f6a2635838af31d391d763e3c5a4460ed96f42fd7c9b552130670d525be665913bc4c languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/helper-validator-identifier@npm:7.24.7" - checksum: 10c0/87ad608694c9477814093ed5b5c080c2e06d44cb1924ae8320474a74415241223cc2a725eea2640dd783ff1e3390e5f95eede978bc540e870053152e58f1d651 +"@babel/helper-validator-identifier@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-identifier@npm:7.25.7" + checksum: 10c0/07438e5bf01ab2882a15027fdf39ac3b0ba1b251774a5130917907014684e2f70fef8fd620137ca062c4c4eedc388508d2ea7a3a7d9936a32785f4fe116c68c0 languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/helper-validator-option@npm:7.24.8" - checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f +"@babel/helper-validator-option@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-validator-option@npm:7.25.7" + checksum: 10c0/12ed418c8e3ed9ed44c8c80d823f4e42d399b5eb2e423adccb975e31a31a008cd3b5d8eab688b31f740caff4a1bb28fe06ea2fa7d635aee34cc0ad6995d50f0a languageName: node linkType: hard -"@babel/helper-wrap-function@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/helper-wrap-function@npm:7.25.0" +"@babel/helper-wrap-function@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helper-wrap-function@npm:7.25.7" dependencies: - "@babel/template": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/d54601a98384c191cbc1ff07b03a19e288ef8d5c6bfafe270b2a303d96e7304eb296002921ed464cc1b105a547d1db146eb86b0be617924dee1ba1b379cdc216 + "@babel/template": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/b5d412f72697f4a4ce4cb9784fbaf82501c63cf95066c0eadd3179e3439cbbf0aa5fa4858d93590083671943cd357aeb87286958df34aa56fdf8a4c9dea39755 languageName: node linkType: hard -"@babel/helpers@npm:^7.25.0": - version: 7.25.6 - resolution: "@babel/helpers@npm:7.25.6" +"@babel/helpers@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/helpers@npm:7.25.7" dependencies: - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.6" - checksum: 10c0/448c1cdabccca42fd97a252f73f1e4bcd93776dbf24044f3b4f49b756bf2ece73ee6df05177473bb74ea7456dddd18d6f481e4d96d2cc7839d078900d48c696c + "@babel/template": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/3b3ae9e373bd785414195ef8f59976a69d5a6ebe0ef2165fdcc5165e5c3ee09e0fcee94bb457df2ddb8c0532e4146d0a9b7a96b3497399a4bff4ffe196b30228 languageName: node linkType: hard -"@babel/highlight@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/highlight@npm:7.24.7" +"@babel/highlight@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/highlight@npm:7.25.7" dependencies: - "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" picocolors: "npm:^1.0.0" - checksum: 10c0/674334c571d2bb9d1c89bdd87566383f59231e16bcdcf5bb7835babdf03c9ae585ca0887a7b25bdf78f303984af028df52831c7989fecebb5101cc132da9393a + checksum: 10c0/1f5894fdb0a0af6101fb2822369b2eeeae32cbeae2ef73ff73fc6a0a4a20471565cd9cfa589f54ed69df66adeca7c57266031ca9134b7bd244d023a488d419aa languageName: node linkType: hard -"@babel/parser@npm:^7.25.0, @babel/parser@npm:^7.25.6": - version: 7.25.6 - resolution: "@babel/parser@npm:7.25.6" +"@babel/parser@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/parser@npm:7.25.7" dependencies: - "@babel/types": "npm:^7.25.6" + "@babel/types": "npm:^7.25.7" bin: parser: ./bin/babel-parser.js - checksum: 10c0/f88a0e895dbb096fd37c4527ea97d12b5fc013720602580a941ac3a339698872f0c911e318c292b184c36b5fbe23b612f05aff9d24071bc847c7b1c21552c41d + checksum: 10c0/b771469bb6b636c18a8d642b9df3c73913c3860a979591e1a29a98659efd38b81d3e393047b5251fe382d4c82c681c12da9ce91c98d69316d2604d155a214bcf languageName: node linkType: hard -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.3": - version: 7.25.3 - resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.3" +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/traverse": "npm:^7.25.3" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/814b4d3f102e7556a5053d1acf57ef601cfcff39a2c81b8cdc6a5c842e3cb9838f5925d1466a5f1e6416e74c9c83586a3c07fbd7fb8610a396c2becdf9ae5790 + checksum: 10c0/c6ba97c39973897a2ab021c4a77221e1e93e853a5811d498db325da1bd692e41fa521db6d91bb709ccafd4e54ddd00869ffb35846923c3ccd49d46124b316904 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.0" +"@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-safari-class-field-initializer-scope@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/9645a1f47b3750acadb1353c02e71cc712d072aafe5ce115ed3a886bc14c5d9200cfb0b5b5e60e813baa549b800cf798f8714019fd246c699053cf68c428e426 + checksum: 10c0/ac284868bf410f952c6959b0d77708464127160416f003b05c8127d30e64792d671abc167ebf778b17707e32174223ea8d3ff487276991fa90297d92f0dac6e2 languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.0" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/ed1ce1c90cac46c01825339fd0f2a96fa071b016fb819d8dfaf8e96300eae30e74870cb47e4dc80d4ce2fb287869f102878b4f3b35bc927fec8b1d0d76bcf612 + checksum: 10c0/1bffc0a20c8c82b4c77515eb4c99b961b38184116f008bb42bed4e12d3379ba7b2bc6cf299bcea8118d645bb7a5e0caa83969842f16dd1fce49fb3a050e4ac65 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.24.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.13.0 - checksum: 10c0/aeb6e7aa363a47f815cf956ea1053c5dd8b786a17799f065c9688ba4b0051fe7565d258bbe9400bfcbfb3114cb9fda66983e10afe4d750bc70ff75403e15dd36 + checksum: 10c0/32223f012614a0b2657579317ded7d0d09af2aa316285715c5012f974d0f15c2ce2fe0d8e80fdd9bac6c10c21c93cc925a9dfd6c8e21ce7ba1a9fe06a58088b4 languageName: node linkType: hard -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.0" +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/45988025537a9d4a27b610fd696a18fd9ba9336621a69b4fb40560eeb10c79657f85c92a37f30c7c8fb29c22970eea0b373315795a891f1a05549a6cfe5a6bfe + checksum: 10c0/aa2ee7a5954d187de6cbcca0e0b64cfb79c4d224c332d1eb1e0e4afd92ef1a1f4bc4af24f66154097ccb348c08121a875456f47baed220b1b9e93584e6a19b65 languageName: node linkType: hard @@ -455,25 +455,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-import-assertions@npm:^7.24.7": - version: 7.25.6 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.6" +"@babel/plugin-syntax-import-assertions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/55afa63b1b1355bcc1d85a9ad9d2c78983e27beee38e232d5c1ab59eac39127ce3c3817d6686e3ab1d0aff5edd8e38a6852885c65d3e518accdd183a445ef411 + checksum: 10c0/0fee0d971f3c654749fdf92e09b6556bba26ab014c8e99b7252f6a7f1ca108f17edd7ceefb5401d7b7008e98ab1b6f8c3c6a5db72862e7c7b2fcd649d000d690 languageName: node linkType: hard -"@babel/plugin-syntax-import-attributes@npm:^7.24.7": - version: 7.25.6 - resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.6" +"@babel/plugin-syntax-import-attributes@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-syntax-import-attributes@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0e9359cf2d117476310961dfcfd7204ed692e933707da10d6194153d3996cd2ea5b7635fc90d720dce3612083af89966bb862561064a509c350320dc98644751 + checksum: 10c0/fe00cdb96fd289ab126830a98e1dcf5ab7b529a6ef1c01a72506b5e7b1197d6e46c3c4d029cd90d1d61eb9a15ef77c282d156d0c02c7e32f168bb09d84150db4 languageName: node linkType: hard @@ -599,616 +599,616 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.24.7" +"@babel/plugin-transform-arrow-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6ac05a54e5582f34ac6d5dc26499e227227ec1c7fa6fc8de1f3d40c275f140d3907f79bbbd49304da2d7008a5ecafb219d0b71d78ee3290ca22020d878041245 + checksum: 10c0/c8d75ead93f130bf113b6d29493aca695092661ef039336d2a227169c3b7895aa5e9bcc548c42a95a6eaaaf49e512317b00699940bd40ccefd77443e703d3935 languageName: node linkType: hard -"@babel/plugin-transform-async-generator-functions@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.4" +"@babel/plugin-transform-async-generator-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-async-generator-functions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-remap-async-to-generator": "npm:^7.25.0" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-remap-async-to-generator": "npm:^7.25.7" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" - "@babel/traverse": "npm:^7.25.4" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/efed6f6be90b25ad77c15a622a0dc0b22dbf5d45599c207ab8fbc4e959aef21f574fa467d9cf872e45de664a46c32334e78dee2332d82f5f27e26249a34a0920 + checksum: 10c0/dcdd17d8cafafe0eb2edd0a46a7abe86c72235c957c8eb1157ccadb2b199572d5d1aa36a2d3bce5cb99990f7d3c6290ecf09959c62f3081c4df9ff717a1c84a4 languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.24.7" +"@babel/plugin-transform-async-to-generator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.25.7" dependencies: - "@babel/helper-module-imports": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-remap-async-to-generator": "npm:^7.24.7" + "@babel/helper-module-imports": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-remap-async-to-generator": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/83c82e243898875af8457972a26ab29baf8a2078768ee9f35141eb3edff0f84b165582a2ff73e90a9e08f5922bf813dbf15a85c1213654385198f4591c0dc45d + checksum: 10c0/1dbefba9c1455f7a92b8c59a93c622091db945294c936fc2c09b1648308c5b4cb2ecaae92baae0d07a324ab890a8a2ee27ceb046bc120932845d27aede275821 languageName: node linkType: hard -"@babel/plugin-transform-block-scoped-functions@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.24.7" +"@babel/plugin-transform-block-scoped-functions@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/113e86de4612ae91773ff5cb6b980f01e1da7e26ae6f6012127415d7ae144e74987bc23feb97f63ba4bc699331490ddea36eac004d76a20d5369e4cc6a7f61cd + checksum: 10c0/b1e77492295d1b271ef850a81b0404cf3d0dd6a2bcbeab28a0fd99e61c6de4bda91dff583bb42138eec61bf71282bdd3b1bebcb53b7e373035e77fd6ba66caeb languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.25.0" +"@babel/plugin-transform-block-scoping@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-block-scoping@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/382931c75a5d0ea560387e76cb57b03461300527e4784efcb2fb62f36c1eb0ab331327b6034def256baa0cad9050925a61f9c0d56261b6afd6a29c3065fb0bd4 + checksum: 10c0/b2057e00535cd0e8bd5ee5d4640aa2e952564aeafb1bcf4e7b6de33442422877bb0ca8669ad0a48262ec077271978c61eae87b6b3bc8f472d830fa781d6f7e44 languageName: node linkType: hard -"@babel/plugin-transform-class-properties@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-class-properties@npm:7.25.4" +"@babel/plugin-transform-class-properties@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-class-properties@npm:7.25.7" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.4" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0b41bc8a5920d3d17c7c06220b601cf43e0a32ac34f05f05cd0cdf08915e4521b1b707cb1e60942b4fc68a5dfac09f0444a8720e0c72ce76fb039e8ec5263115 + checksum: 10c0/1f41e6934b20ad3e05df63959cff9bc600ff3119153b9acbbd44c1731e7df04866397e6e17799173f4c53cdee6115e155632859aee20bf47ec7dcef3f2168a47 languageName: node linkType: hard -"@babel/plugin-transform-class-static-block@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-class-static-block@npm:7.24.7" +"@babel/plugin-transform-class-static-block@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-class-static-block@npm:7.25.7" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.12.0 - checksum: 10c0/b0ade39a3d09dce886f79dbd5907c3d99b48167eddb6b9bbde24a0598129654d7017e611c20494cdbea48b07ac14397cd97ea34e3754bbb2abae4e698128eccb + checksum: 10c0/cbb4b46cbd8ad10106eb2bedb5a0665661a1d1d5b6f3ab565ff454b802dab4718e02b25670fe0d40835494aedb3dc26757c06cc4da6ff3e80291c5f882269bd3 languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-classes@npm:7.25.4" +"@babel/plugin-transform-classes@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-classes@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-replace-supers": "npm:^7.25.0" - "@babel/traverse": "npm:^7.25.4" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-replace-supers": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" globals: "npm:^11.1.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c68424d9dd64860825111aa4a4ed5caf29494b7a02ddb9c36351d768c41e8e05127d89274795cdfcade032d9d299e6c677418259df58c71e68f1741583dcf467 + checksum: 10c0/8121781e1d8acd80e6169019106f73a399475ad9c895c1988a344dfed5a6ddd340938ac55123dc1e423bb8f25f255f5d11031116ad756ba3c314595a97c973af languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.24.7" +"@babel/plugin-transform-computed-properties@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-computed-properties@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/template": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/template": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/25636dbc1f605c0b8bc60aa58628a916b689473d11551c9864a855142e36742fe62d4a70400ba3b74902338e77fb3d940376c0a0ba154b6b7ec5367175233b49 + checksum: 10c0/7ad0a1c126f50935a02e77d438ebc39078a9d644b3a60de60bec32c5d9f49e7f2b193fcecb8c61bb1bc3cdd4af1e93f72d022d448511fa76a171527c633cd1bf languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-destructuring@npm:7.24.8" +"@babel/plugin-transform-destructuring@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-destructuring@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/804968c1d5f5072c717505296c1e5d5ec33e90550423de66de82bbcb78157156e8470bbe77a04ab8c710a88a06360a30103cf223ac7eff4829adedd6150de5ce + checksum: 10c0/a563123b2fb267e03aa50104005f00b56226a685938906c42c1b251462e0cc9fc89e587d5656d3324159071eb8ebda8c68a6011f11d5a00fb1436cb5a5411b7b languageName: node linkType: hard -"@babel/plugin-transform-dotall-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.24.7" +"@babel/plugin-transform-dotall-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-dotall-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/793f14c9494972d294b7e7b97b747f47874b6d57d7804d3443c701becf5db192c9311be6a1835c07664486df1f5c60d33196c36fb7e11a53015e476b4c145b33 + checksum: 10c0/7f1db3ec20b7fae46db4a9c4c257d75418b0896b72c0a3de20b3044f952801480f0a2e75ebb0d64f13e8cd4db0e49aa42c5c0edff372b23c41679b1ea5dd3ed4 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.24.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/75ff7ec1117ac500e77bf20a144411d39c0fdd038f108eec061724123ce6d1bb8d5bd27968e466573ee70014f8be0043361cdb0ef388f8a182d1d97ad67e51b9 + checksum: 10c0/b4079981e2db19737a0f1a00254e7388e2d3c01ce36e9fd826e4d86d3c1755339495e29c71fd7c84a068201ec24687328d48f3bf53b32b6d6224f51d9a34da74 languageName: node linkType: hard -"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.0" +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-duplicate-named-capturing-groups-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.0" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/1c9b57ddd9b33696e88911d0e7975e1573ebc46219c4b30eb1dc746cbb71aedfac6f6dab7fdfdec54dd58f31468bf6ab56b157661ea4ffe58f906d71f89544c8 + checksum: 10c0/e4946090ff6d88d54b78265ee653079ec34c117ac046e22f66f7c4ac44249cdc2dfca385bc5bf4386db668b9948eeb12985589500188bc252e684c7714c31475 languageName: node linkType: hard -"@babel/plugin-transform-dynamic-import@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-dynamic-import@npm:7.24.7" +"@babel/plugin-transform-dynamic-import@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-dynamic-import@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/eeda48372efd0a5103cb22dadb13563c975bce18ae85daafbb47d57bb9665d187da9d4fe8d07ac0a6e1288afcfcb73e4e5618bf75ff63fddf9736bfbf225203b + checksum: 10c0/c733252ff20a32d9747dd081916270f5a073856597e849a5f458b12f4354499b18714f5e7049e341432851d9975077cb37effcd276c7f816faa6f5ff708dc5e1 languageName: node linkType: hard -"@babel/plugin-transform-exponentiation-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.24.7" +"@babel/plugin-transform-exponentiation-operator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.25.7" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ace3e11c94041b88848552ba8feb39ae4d6cad3696d439ff51445bd2882d8b8775d85a26c2c0edb9b5e38c9e6013cc11b0dea89ec8f93c7d9d7ee95e3645078c + checksum: 10c0/c8537b9f3cddc5a8d3710f6980196dc7a0f4389f8f82617312a5f7b8b15bcd8ddaeba783c687c3ac6031eb0a4ba0bc380a98da6bf7efe98e225602a98ad42a1e languageName: node linkType: hard -"@babel/plugin-transform-export-namespace-from@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-export-namespace-from@npm:7.24.7" +"@babel/plugin-transform-export-namespace-from@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-export-namespace-from@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4e144d7f1c57bc63b4899dbbbdfed0880f2daa75ea9c7251c7997f106e4b390dc362175ab7830f11358cb21f6b972ca10a43a2e56cd789065f7606b082674c0c + checksum: 10c0/ef61fc5d54c9c8b075cbd9db62beaf295e38e08a1edb1882995105d3e959763be1631f7d7f7cb7461b702ebd0b4a601f2eb2cd6521acaf061310a3a3305fa756 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-for-of@npm:7.24.7" +"@babel/plugin-transform-for-of@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-for-of@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/77629b1173e55d07416f05ba7353caa09d2c2149da2ca26721ab812209b63689d1be45116b68eadc011c49ced59daf5320835b15245eb7ae93ae0c5e8277cfc0 + checksum: 10c0/08a37a1742368a422d095c998ed76f60f6bf3f9cc060033be121d803fd2dddc08fe543e48ee49c022bdc9ed80893ca79d084958d83d30684178b088774754277 languageName: node linkType: hard -"@babel/plugin-transform-function-name@npm:^7.25.1": - version: 7.25.1 - resolution: "@babel/plugin-transform-function-name@npm:7.25.1" +"@babel/plugin-transform-function-name@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-function-name@npm:7.25.7" dependencies: - "@babel/helper-compilation-targets": "npm:^7.24.8" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/traverse": "npm:^7.25.1" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e74912174d5e33d1418b840443c2e226a7b76cc017c1ed20ee30a566e4f1794d4a123be03180da046241576e8b692731807ba1f52608922acf1cb2cb6957593f + checksum: 10c0/ca98e1116c0ada7211ed43e4b7f21ca15f95bbbdad70f2fbe1ec2d90a97daedf9f22fcb0a25c8b164a5e394f509f2e4d1f7609d26dc938a58d37c5ee9b80088a languageName: node linkType: hard -"@babel/plugin-transform-json-strings@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-json-strings@npm:7.24.7" +"@babel/plugin-transform-json-strings@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-json-strings@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/17c72cd5bf3e90e722aabd333559275f3309e3fa0b9cea8c2944ab83ae01502c71a2be05da5101edc02b3fc8df15a8dbb9b861cbfcc8a52bf5e797cf01d3a40a + checksum: 10c0/aa6e5f65c8a5f2459d7daa9b5b4ff97ff43bab21f4a8513ed84d35300b0323ec542dc101c5f11622e442dfc93b3a229c7f41ebc7645370dfec6d066bda800a0b languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.25.2": - version: 7.25.2 - resolution: "@babel/plugin-transform-literals@npm:7.25.2" +"@babel/plugin-transform-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/0796883217b0885d37e7f6d350773be349e469a812b6bf11ccf862a6edf65103d3e7c849529d65381b441685c12e756751d8c2489a0fd3f8139bb5ef93185f58 + checksum: 10c0/c2c2488102f33e566f45becdcb632e53bd052ecfb2879deb07a614b3e9437e3b624c3b16d080096d50b0b622edebd03e438acbf9260bcc41167897963f64560e languageName: node linkType: hard -"@babel/plugin-transform-logical-assignment-operators@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.24.7" +"@babel/plugin-transform-logical-assignment-operators@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-logical-assignment-operators@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/dbe882eb9053931f2ab332c50fc7c2a10ef507d6421bd9831adbb4cb7c9f8e1e5fbac4fbd2e007f6a1bf1df1843547559434012f118084dc0bf42cda3b106272 + checksum: 10c0/d610a8a2c1be83e03cce2256f29519e705dc68289c09d67f1f362d1fd80f4b36eaf2affc05710abb53a272895041e24d9e95ec73a516a23a67cb907023fbe37b languageName: node linkType: hard -"@babel/plugin-transform-member-expression-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.24.7" +"@babel/plugin-transform-member-expression-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-member-expression-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e789ae359bdf2d20e90bedef18dfdbd965c9ebae1cee398474a0c349590fda7c8b874e1a2ceee62e47e5e6ec1730e76b0f24e502164357571854271fc12cc684 + checksum: 10c0/d6936b98ae4d3daed850dc4e064042ea4375f815219ba9d8591373bf1fba4cfdb5be42623ae8882f2d666cc34af650a4855e2a5ad89e3c235d73a6f172f9969c languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.24.7" +"@babel/plugin-transform-modules-amd@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-amd@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/6df7de7fce34117ca4b2fa07949b12274c03668cbfe21481c4037b6300796d50ae40f4f170527b61b70a67f26db906747797e30dbd0d9809a441b6e220b5728f + checksum: 10c0/c0bc999206c3834c090e6559a6c8a55d7672d3573104e832223ebe7df99bd1b82fc850e15ba32f512c84b0db1cdb613b66fa60abe9abb9c7e8dcbff91649b356 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8" +"@babel/plugin-transform-modules-commonjs@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.8" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-simple-access": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-simple-access": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/f1cf552307ebfced20d3907c1dd8be941b277f0364aa655e2b5fee828c84c54065745183104dae86f1f93ea0406db970a463ef7ceaaed897623748e99640e5a7 + checksum: 10c0/2f1c945fc3c9b690b0ddcf2c80156b2e4fbf2cf15aac43ac8fe6e4b34125869528839a53d07c564e62e4aed394ebdc1d2c3b796b547374455522581c11b7599c languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.0" +"@babel/plugin-transform-modules-systemjs@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.25.0" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" - "@babel/traverse": "npm:^7.25.0" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" + "@babel/traverse": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/fca6198da71237e4bb1274b3b67a0c81d56013c9535361242b6bfa87d70a9597854aadb45d4d8203369be4a655e158be2a5d20af0040b1f8d1bfc47db3ad7b68 + checksum: 10c0/95eaea7082636710c61e49e58b3907e85ec79db4327411d3784f28592509fbe94a53cc3d20a36a1cf245efc6d3f0017eae15b45ffd645c1ab949bb4e1670e6bb languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.24.7" +"@babel/plugin-transform-modules-umd@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-modules-umd@npm:7.25.7" dependencies: - "@babel/helper-module-transforms": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-module-transforms": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7791d290121db210e4338b94b4a069a1a79e4c7a8d7638d8159a97b281851bbed3048dac87a4ae718ad963005e6c14a5d28e6db2eeb2b04e031cee92fb312f85 + checksum: 10c0/8849ab04eecdb73cd37e2d7289449fa5256331832b0304c220b2a6aaa12e2d2dd87684f2813412d1fc5bdb3d6b55cc08c6386d3273fe05a65177c09bee5b6769 languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.24.7" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/41a0b0f2d0886318237440aa3b489f6d0305361d8671121777d9ff89f9f6de9d0c02ce93625049061426c8994064ef64deae8b819d1b14c00374a6a2336fb5d9 + checksum: 10c0/eb55fec55dc930cd122911f3e4a421320fa8b1b4de85bfd7ef11b46c611ec69b0213c114a6e1c6bc224d6b954ff183a0caa7251267d5258ecc0f00d6d9ca1d52 languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-new-target@npm:7.24.7" +"@babel/plugin-transform-new-target@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-new-target@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2540808a35e1a978e537334c43dab439cf24c93e7beb213a2e71902f6710e60e0184316643790c0a6644e7a8021e52f7ab8165e6b3e2d6651be07bdf517b67df + checksum: 10c0/8e5dce6d027e0f3fd394578ea1af7f515de157793a15c23a5aad7034a6d8a4005ef280238e67a232bb4dd4fafd3a264fed462deb149128ddd9ce59ff6f575cff languageName: node linkType: hard -"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.7" +"@babel/plugin-transform-nullish-coalescing-operator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7243c8ff734ed5ef759dd8768773c4b443c12e792727e759a1aec2c7fa2bfdd24f1ecb42e292a7b3d8bd3d7f7b861cf256a8eb4ba144fc9cc463892c303083d9 + checksum: 10c0/b35a96a79ef4895b00e4f758d3185cb17e4fbfada311894ad5f0988a55fc2c21820dc789b26a3cb8fbd620434faa516e52acb6e2da105c2edbd29de8b6b0facf languageName: node linkType: hard -"@babel/plugin-transform-numeric-separator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-numeric-separator@npm:7.24.7" +"@babel/plugin-transform-numeric-separator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-numeric-separator@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-numeric-separator": "npm:^7.10.4" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/e18e09ca5a6342645d00ede477731aa6e8714ff357efc9d7cda5934f1703b3b6fb7d3298dce3ce3ba53e9ff1158eab8f1aadc68874cc21a6099d33a1ca457789 + checksum: 10c0/c028ae89e6b4e1d757f8f1ebcb3b420e6559bb35002728f6f5651d5f669fbf73764adf6e3597908fa12adf8dbae683e5f74b3a7f68e8774a9663c18c0f999539 languageName: node linkType: hard -"@babel/plugin-transform-object-rest-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-rest-spread@npm:7.24.7" +"@babel/plugin-transform-object-rest-spread@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-object-rest-spread@npm:7.25.7" dependencies: - "@babel/helper-compilation-targets": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-object-rest-spread": "npm:^7.8.3" - "@babel/plugin-transform-parameters": "npm:^7.24.7" + "@babel/plugin-transform-parameters": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/9ad64bc003f583030f9da50614b485852f8edac93f8faf5d1cd855201a4852f37c5255ae4daf70dd4375bdd4874e16e39b91f680d4668ec219ba05441ce286eb + checksum: 10c0/e8b978d9d1020452da0d5d92f80fe57e302761dac20137bb8bf863478a4779fcd63d314db89e796125d9d76da2a38f64f012d6e0c4913815951b3eb3fba2feb6 languageName: node linkType: hard -"@babel/plugin-transform-object-super@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-object-super@npm:7.24.7" +"@babel/plugin-transform-object-super@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-object-super@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-replace-supers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-replace-supers": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/770cebb4b4e1872c216b17069db9a13b87dfee747d359dc56d9fcdd66e7544f92dc6ab1861a4e7e0528196aaff2444e4f17dc84efd8eaf162d542b4ba0943869 + checksum: 10c0/7f2968d4da997101b63fd3b74445c9b16f56bd32cd8a0a16c368af9d3e983e7675c1b05d18601f32307cb06e7d884ee11d13ff18a1f6830c0db243a9a852afab languageName: node linkType: hard -"@babel/plugin-transform-optional-catch-binding@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.24.7" +"@babel/plugin-transform-optional-catch-binding@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-optional-catch-binding@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-optional-catch-binding": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/1e2f10a018f7d03b3bde6c0b70d063df8d5dd5209861d4467726cf834f5e3d354e2276079dc226aa8e6ece35f5c9b264d64b8229a8bb232829c01e561bcfb07a + checksum: 10c0/bb609e5103780be0825a255ffe1fefbb5335aead88a46eecc2257053279ea2c45ff66b0ef1fb54302c8c8c57146e88e52f3ecb62b4c6f619218d7b3843b352d9 languageName: node linkType: hard -"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8" +"@babel/plugin-transform-optional-chaining@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/4ffbe1aad7dec7c9aa2bf6ceb4b2f91f96815b2784f2879bde80e46934f59d64a12cb2c6262e40897c4754d77d2c35d8a5cfed63044fdebf94978b1ed3d14b17 + checksum: 10c0/887441ada6c2bc1b789984b7531d9bc585f335ece99642886d3d9fd8aee7e6b8d4f7ca61d76b5f23477f3aa607284d5056eadaa1eb17e7b39af6b0e834cbe878 languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-parameters@npm:7.24.7" +"@babel/plugin-transform-parameters@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-parameters@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/53bf190d6926771545d5184f1f5f3f5144d0f04f170799ad46a43f683a01fab8d5fe4d2196cf246774530990c31fe1f2b9f0def39f0a5ddbb2340b924f5edf01 + checksum: 10c0/b40ba70278842ce1e800d7ab400df730994941550da547ef453780023bd61a9b8acf4b9fb8419c1b5bcbe09819a1146ff59369db11db07eb71870bef86a12422 languageName: node linkType: hard -"@babel/plugin-transform-private-methods@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-private-methods@npm:7.25.4" +"@babel/plugin-transform-private-methods@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-private-methods@npm:7.25.7" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.25.4" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/7abdb427c3984a2c8a2e9d806297d8509b02f78a3501b7760e544be532446e9df328b876daa8fc38718f3dce7ccc45083016ee7aeaab169b81c142bc18700794 + checksum: 10c0/92e076f63f7c4696e1321dafdd56c4212eb41784cdadba0ebc39091f959a76d357c3df61a6c668be81d6b6ad8964ee458e85752ab0c6cfbbaf2066903edda732 languageName: node linkType: hard -"@babel/plugin-transform-private-property-in-object@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-private-property-in-object@npm:7.24.7" +"@babel/plugin-transform-private-property-in-object@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-private-property-in-object@npm:7.25.7" dependencies: - "@babel/helper-annotate-as-pure": "npm:^7.24.7" - "@babel/helper-create-class-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-annotate-as-pure": "npm:^7.25.7" + "@babel/helper-create-class-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/c6fa7defb90b1b0ed46f24ff94ff2e77f44c1f478d1090e81712f33cf992dda5ba347016f030082a2f770138bac6f4a9c2c1565e9f767a125901c77dd9c239ba + checksum: 10c0/5ad8832ba54e2079c1f558b8680e170265e3f376424e5fbb75b17b7f08696fb0af6c96d23d92f7df3dcc559f5971a02587281fcec38a853174aa95478565f5fc languageName: node linkType: hard -"@babel/plugin-transform-property-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-property-literals@npm:7.24.7" +"@babel/plugin-transform-property-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-property-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/52564b58f3d111dc02d241d5892a4b01512e98dfdf6ef11b0ed62f8b11b0acacccef0fc229b44114fe8d1a57a8b70780b11bdd18b807d3754a781a07d8f57433 + checksum: 10c0/6d5bccdc772207906666ad5201bd91e4e132e1d806dbcf4163a1d08e18c57cc3795578c4e10596514bcd6afaf9696f478ea4f0dea890176d93b9cb077b9e5c55 languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.24.7" +"@babel/plugin-transform-regenerator@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-regenerator@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" regenerator-transform: "npm:^0.15.2" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/d2dc2c788fdae9d97217e70d46ba8ca9db0035c398dc3e161552b0c437113719a75c04f201f9c91ddc8d28a1da60d0b0853f616dead98a396abb9c845c44892b + checksum: 10c0/7ee3a57c4050bc908ef7ac392d810826b294970a7182f4ec34a8ca93dbe36deb21bc862616d46a6f3d881d6b5749930e1679e875b638a00866d844a4250df212 languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.24.7" +"@babel/plugin-transform-reserved-words@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-reserved-words@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2229de2768615e7f5dc0bbc55bc121b5678fd6d2febd46c74a58e42bb894d74cd5955c805880f4e02d0e1cf94f6886270eda7fafc1be9305a1ec3b9fd1d063f5 + checksum: 10c0/920c98130daff6c1288fb13a9a2d2e45863bba93e619cb88d90e1f5b5cb358a3ee8880a425a3adb1b4bd5dbb6bd0500eea3370fc612633045eec851b08cc586c languageName: node linkType: hard -"@babel/plugin-transform-shorthand-properties@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.24.7" +"@babel/plugin-transform-shorthand-properties@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-shorthand-properties@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/41b155bdbb3be66618358488bf7731b3b2e8fff2de3dbfd541847720a9debfcec14db06a117abedd03c9cd786db20a79e2a86509a4f19513f6e1b610520905cf + checksum: 10c0/4250f89a0072f0f400be7a2e3515227b8e2518737899bd57d497e5173284a0e05d812e4a3c219ffcd484e9fa9a01c19fce5acd77bbb898f4d594512c56701eb4 languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-spread@npm:7.24.7" +"@babel/plugin-transform-spread@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-spread@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/facba1553035f76b0d2930d4ada89a8cd0f45b79579afd35baefbfaf12e3b86096995f4b0c402cf9ee23b3f2ea0a4460c3b1ec0c192d340962c948bb223d4e66 + checksum: 10c0/258bd1b52388cd7425d0ae25fa39538734f7540ea503a1d8a72211d33f6f214cb4e3b73d6cd03016cbcff5d41169f1e578b9ea331965ad224d223591983e90a7 languageName: node linkType: hard -"@babel/plugin-transform-sticky-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.24.7" +"@babel/plugin-transform-sticky-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-sticky-regex@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/5a74ed2ed0a3ab51c3d15fcaf09d9e2fe915823535c7a4d7b019813177d559b69677090e189ec3d5d08b619483eb5ad371fbcfbbff5ace2a76ba33ee566a1109 + checksum: 10c0/0e466cfc3ca1e0db4bb11eb630215b0e1f43066d7678325e5ddadcf5a118b2351a528f67205729c32ac5b78ab68ab7f40517dd33bcb1fb6b456509f5f54ce097 languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.24.7" +"@babel/plugin-transform-template-literals@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-template-literals@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/3630f966257bcace122f04d3157416a09d40768c44c3a800855da81146b009187daa21859d1c3b7d13f4e19e8888e60613964b175b2275d451200fb6d8d6cfe6 + checksum: 10c0/a3455303b6841cb536ac66d1a2d03c194b9f371519482d8d1e8edbd33bf5ca7cdd5db1586b2b0ea5f909ebf74a0eafacf0fb28d257e4905445282dcdccfa6139 languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.24.8": - version: 7.24.8 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8" +"@babel/plugin-transform-typeof-symbol@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/2f570a4fbbdc5fd85f48165a97452826560051e3b8efb48c3bb0a0a33ee8485633439e7b71bfe3ef705583a1df43f854f49125bd759abdedc195b2cf7e60012a + checksum: 10c0/ce1a0744a900b05de1372a70508c4148f17eb941c482da26eb369b9f0347570dce45470c8a86d907bc3a0443190344da1e18489ecfecb30388ab6178e8a9916b languageName: node linkType: hard -"@babel/plugin-transform-unicode-escapes@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.24.7" +"@babel/plugin-transform-unicode-escapes@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-escapes@npm:7.25.7" dependencies: - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/8b18e2e66af33471a6971289492beff5c240e56727331db1d34c4338a6a368a82a7ed6d57ec911001b6d65643aed76531e1e7cac93265fb3fb2717f54d845e69 + checksum: 10c0/8b1f71fda0a832c6e26ba4c00f99e9033e6f9b36ced542a512921f4ad861a70e2fec2bd54a91a5ca2efa46aaa8c8893e4c602635c4ef172bd3ed6eef3178c70b languageName: node linkType: hard -"@babel/plugin-transform-unicode-property-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-property-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-property-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/bc57656eb94584d1b74a385d378818ac2b3fca642e3f649fead8da5fb3f9de22f8461185936915dfb33d5a9104e62e7a47828331248b09d28bb2d59e9276de3e + checksum: 10c0/b4bfcf7529138d00671bf5cdfe606603d52cfe57ec1be837da57683f404fc0b0c171834a02515eb03379e5c806121866d097b90e31cb437d21d0ea59368ad82b languageName: node linkType: hard -"@babel/plugin-transform-unicode-regex@npm:^7.24.7": - version: 7.24.7 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.24.7" +"@babel/plugin-transform-unicode-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.24.7" - "@babel/helper-plugin-utils": "npm:^7.24.7" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/83f72a345b751566b601dc4d07e9f2c8f1bc0e0c6f7abb56ceb3095b3c9d304de73f85f2f477a09f8cc7edd5e65afd0ff9e376cdbcbea33bc0c28f3705b38fd9 + checksum: 10c0/73ae34c02ea8b7ac7e4efa690f8c226089c074e3fef658d2a630ad898a93550d84146ce05e073c271c8b2bbba61cbbfd5a2002a7ea940dcad3274e5b5dcb6bcf languageName: node linkType: hard -"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.4": - version: 7.25.4 - resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.4" +"@babel/plugin-transform-unicode-sets-regex@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/plugin-transform-unicode-sets-regex@npm:7.25.7" dependencies: - "@babel/helper-create-regexp-features-plugin": "npm:^7.25.2" - "@babel/helper-plugin-utils": "npm:^7.24.8" + "@babel/helper-create-regexp-features-plugin": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" peerDependencies: "@babel/core": ^7.0.0 - checksum: 10c0/f65749835a98d8d6242e961f9276bdcdb09020e791d151ccc145acaca9a66f025b2c7cb761104f139180d35eb066a429596ee6edece81f5fd9244e0edb97d7ec + checksum: 10c0/39e45ae3db7adfc3457b1d6ba5608ffbace957ad019785967e5357a6639f261765bda12363f655d39265f5a2834af26327037751420191d0b73152ccc7ce3c35 languageName: node linkType: hard -"@babel/preset-env@npm:7.25.4": - version: 7.25.4 - resolution: "@babel/preset-env@npm:7.25.4" +"@babel/preset-env@npm:7.25.7": + version: 7.25.7 + resolution: "@babel/preset-env@npm:7.25.7" dependencies: - "@babel/compat-data": "npm:^7.25.4" - "@babel/helper-compilation-targets": "npm:^7.25.2" - "@babel/helper-plugin-utils": "npm:^7.24.8" - "@babel/helper-validator-option": "npm:^7.24.8" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.3" - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.0" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.0" + "@babel/compat-data": "npm:^7.25.7" + "@babel/helper-compilation-targets": "npm:^7.25.7" + "@babel/helper-plugin-utils": "npm:^7.25.7" + "@babel/helper-validator-option": "npm:^7.25.7" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.25.7" + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "npm:^7.25.7" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.25.7" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.25.7" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "npm:^7.25.7" "@babel/plugin-proposal-private-property-in-object": "npm:7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators": "npm:^7.8.4" "@babel/plugin-syntax-class-properties": "npm:^7.12.13" "@babel/plugin-syntax-class-static-block": "npm:^7.14.5" "@babel/plugin-syntax-dynamic-import": "npm:^7.8.3" "@babel/plugin-syntax-export-namespace-from": "npm:^7.8.3" - "@babel/plugin-syntax-import-assertions": "npm:^7.24.7" - "@babel/plugin-syntax-import-attributes": "npm:^7.24.7" + "@babel/plugin-syntax-import-assertions": "npm:^7.25.7" + "@babel/plugin-syntax-import-attributes": "npm:^7.25.7" "@babel/plugin-syntax-import-meta": "npm:^7.10.4" "@babel/plugin-syntax-json-strings": "npm:^7.8.3" "@babel/plugin-syntax-logical-assignment-operators": "npm:^7.10.4" @@ -1220,64 +1220,64 @@ __metadata: "@babel/plugin-syntax-private-property-in-object": "npm:^7.14.5" "@babel/plugin-syntax-top-level-await": "npm:^7.14.5" "@babel/plugin-syntax-unicode-sets-regex": "npm:^7.18.6" - "@babel/plugin-transform-arrow-functions": "npm:^7.24.7" - "@babel/plugin-transform-async-generator-functions": "npm:^7.25.4" - "@babel/plugin-transform-async-to-generator": "npm:^7.24.7" - "@babel/plugin-transform-block-scoped-functions": "npm:^7.24.7" - "@babel/plugin-transform-block-scoping": "npm:^7.25.0" - "@babel/plugin-transform-class-properties": "npm:^7.25.4" - "@babel/plugin-transform-class-static-block": "npm:^7.24.7" - "@babel/plugin-transform-classes": "npm:^7.25.4" - "@babel/plugin-transform-computed-properties": "npm:^7.24.7" - "@babel/plugin-transform-destructuring": "npm:^7.24.8" - "@babel/plugin-transform-dotall-regex": "npm:^7.24.7" - "@babel/plugin-transform-duplicate-keys": "npm:^7.24.7" - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.0" - "@babel/plugin-transform-dynamic-import": "npm:^7.24.7" - "@babel/plugin-transform-exponentiation-operator": "npm:^7.24.7" - "@babel/plugin-transform-export-namespace-from": "npm:^7.24.7" - "@babel/plugin-transform-for-of": "npm:^7.24.7" - "@babel/plugin-transform-function-name": "npm:^7.25.1" - "@babel/plugin-transform-json-strings": "npm:^7.24.7" - "@babel/plugin-transform-literals": "npm:^7.25.2" - "@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7" - "@babel/plugin-transform-member-expression-literals": "npm:^7.24.7" - "@babel/plugin-transform-modules-amd": "npm:^7.24.7" - "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8" - "@babel/plugin-transform-modules-systemjs": "npm:^7.25.0" - "@babel/plugin-transform-modules-umd": "npm:^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7" - "@babel/plugin-transform-new-target": "npm:^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.24.7" - "@babel/plugin-transform-numeric-separator": "npm:^7.24.7" - "@babel/plugin-transform-object-rest-spread": "npm:^7.24.7" - "@babel/plugin-transform-object-super": "npm:^7.24.7" - "@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7" - "@babel/plugin-transform-optional-chaining": "npm:^7.24.8" - "@babel/plugin-transform-parameters": "npm:^7.24.7" - "@babel/plugin-transform-private-methods": "npm:^7.25.4" - "@babel/plugin-transform-private-property-in-object": "npm:^7.24.7" - "@babel/plugin-transform-property-literals": "npm:^7.24.7" - "@babel/plugin-transform-regenerator": "npm:^7.24.7" - "@babel/plugin-transform-reserved-words": "npm:^7.24.7" - "@babel/plugin-transform-shorthand-properties": "npm:^7.24.7" - "@babel/plugin-transform-spread": "npm:^7.24.7" - "@babel/plugin-transform-sticky-regex": "npm:^7.24.7" - "@babel/plugin-transform-template-literals": "npm:^7.24.7" - "@babel/plugin-transform-typeof-symbol": "npm:^7.24.8" - "@babel/plugin-transform-unicode-escapes": "npm:^7.24.7" - "@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-regex": "npm:^7.24.7" - "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.4" + "@babel/plugin-transform-arrow-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-generator-functions": "npm:^7.25.7" + "@babel/plugin-transform-async-to-generator": "npm:^7.25.7" + "@babel/plugin-transform-block-scoped-functions": "npm:^7.25.7" + "@babel/plugin-transform-block-scoping": "npm:^7.25.7" + "@babel/plugin-transform-class-properties": "npm:^7.25.7" + "@babel/plugin-transform-class-static-block": "npm:^7.25.7" + "@babel/plugin-transform-classes": "npm:^7.25.7" + "@babel/plugin-transform-computed-properties": "npm:^7.25.7" + "@babel/plugin-transform-destructuring": "npm:^7.25.7" + "@babel/plugin-transform-dotall-regex": "npm:^7.25.7" + "@babel/plugin-transform-duplicate-keys": "npm:^7.25.7" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "npm:^7.25.7" + "@babel/plugin-transform-dynamic-import": "npm:^7.25.7" + "@babel/plugin-transform-exponentiation-operator": "npm:^7.25.7" + "@babel/plugin-transform-export-namespace-from": "npm:^7.25.7" + "@babel/plugin-transform-for-of": "npm:^7.25.7" + "@babel/plugin-transform-function-name": "npm:^7.25.7" + "@babel/plugin-transform-json-strings": "npm:^7.25.7" + "@babel/plugin-transform-literals": "npm:^7.25.7" + "@babel/plugin-transform-logical-assignment-operators": "npm:^7.25.7" + "@babel/plugin-transform-member-expression-literals": "npm:^7.25.7" + "@babel/plugin-transform-modules-amd": "npm:^7.25.7" + "@babel/plugin-transform-modules-commonjs": "npm:^7.25.7" + "@babel/plugin-transform-modules-systemjs": "npm:^7.25.7" + "@babel/plugin-transform-modules-umd": "npm:^7.25.7" + "@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.25.7" + "@babel/plugin-transform-new-target": "npm:^7.25.7" + "@babel/plugin-transform-nullish-coalescing-operator": "npm:^7.25.7" + "@babel/plugin-transform-numeric-separator": "npm:^7.25.7" + "@babel/plugin-transform-object-rest-spread": "npm:^7.25.7" + "@babel/plugin-transform-object-super": "npm:^7.25.7" + "@babel/plugin-transform-optional-catch-binding": "npm:^7.25.7" + "@babel/plugin-transform-optional-chaining": "npm:^7.25.7" + "@babel/plugin-transform-parameters": "npm:^7.25.7" + "@babel/plugin-transform-private-methods": "npm:^7.25.7" + "@babel/plugin-transform-private-property-in-object": "npm:^7.25.7" + "@babel/plugin-transform-property-literals": "npm:^7.25.7" + "@babel/plugin-transform-regenerator": "npm:^7.25.7" + "@babel/plugin-transform-reserved-words": "npm:^7.25.7" + "@babel/plugin-transform-shorthand-properties": "npm:^7.25.7" + "@babel/plugin-transform-spread": "npm:^7.25.7" + "@babel/plugin-transform-sticky-regex": "npm:^7.25.7" + "@babel/plugin-transform-template-literals": "npm:^7.25.7" + "@babel/plugin-transform-typeof-symbol": "npm:^7.25.7" + "@babel/plugin-transform-unicode-escapes": "npm:^7.25.7" + "@babel/plugin-transform-unicode-property-regex": "npm:^7.25.7" + "@babel/plugin-transform-unicode-regex": "npm:^7.25.7" + "@babel/plugin-transform-unicode-sets-regex": "npm:^7.25.7" "@babel/preset-modules": "npm:0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2: "npm:^0.4.10" babel-plugin-polyfill-corejs3: "npm:^0.10.6" babel-plugin-polyfill-regenerator: "npm:^0.6.1" - core-js-compat: "npm:^3.37.1" + core-js-compat: "npm:^3.38.1" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 10c0/ed210a1974b5a1e7f80a933c87253907ec869457cea900bc97892642fa9a690c47627a9bac08a7c9495deb992a2b15f308ffca2741e1876ba47172c96fa27e14 + checksum: 10c0/bf704a06a69420250c1de2b126cd5c859a851002c2fb2cce0910cd85a8e6755b9b31577021e94feb7e1e53519923726349aaf07580923928791583db61438fb8 languageName: node linkType: hard @@ -1294,13 +1294,6 @@ __metadata: languageName: node linkType: hard -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 10c0/4f3ddd8c7c96d447e05c8304c1d5ba3a83fcabd8a716bc1091c2f31595cdd43a3a055fff7cb5d3042b8cb7d402d78820fcb4e05d896c605a7d8bcf30f2424c4a - languageName: node - linkType: hard - "@babel/runtime@npm:^7.8.4": version: 7.25.6 resolution: "@babel/runtime@npm:7.25.6" @@ -1310,40 +1303,40 @@ __metadata: languageName: node linkType: hard -"@babel/template@npm:^7.24.7, @babel/template@npm:^7.25.0": - version: 7.25.0 - resolution: "@babel/template@npm:7.25.0" +"@babel/template@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/template@npm:7.25.7" dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/parser": "npm:^7.25.0" - "@babel/types": "npm:^7.25.0" - checksum: 10c0/4e31afd873215744c016e02b04f43b9fa23205d6d0766fb2e93eb4091c60c1b88897936adb895fb04e3c23de98dfdcbe31bc98daaa1a4e0133f78bb948e1209b + "@babel/code-frame": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" + checksum: 10c0/8ae9e36e4330ee83d4832531d1d9bec7dc2ef6a2a8afa1ef1229506fd60667abcb17f306d1c3d7e582251270597022990c845d5d69e7add70a5aea66720decb9 languageName: node linkType: hard -"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8, @babel/traverse@npm:^7.25.0, @babel/traverse@npm:^7.25.1, @babel/traverse@npm:^7.25.2, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.4": - version: 7.25.6 - resolution: "@babel/traverse@npm:7.25.6" +"@babel/traverse@npm:^7.25.7": + version: 7.25.7 + resolution: "@babel/traverse@npm:7.25.7" dependencies: - "@babel/code-frame": "npm:^7.24.7" - "@babel/generator": "npm:^7.25.6" - "@babel/parser": "npm:^7.25.6" - "@babel/template": "npm:^7.25.0" - "@babel/types": "npm:^7.25.6" + "@babel/code-frame": "npm:^7.25.7" + "@babel/generator": "npm:^7.25.7" + "@babel/parser": "npm:^7.25.7" + "@babel/template": "npm:^7.25.7" + "@babel/types": "npm:^7.25.7" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 10c0/964304c6fa46bd705428ba380bf73177eeb481c3f26d82ea3d0661242b59e0dd4329d23886035e9ca9a4ceb565c03a76fd615109830687a27bcd350059d6377e + checksum: 10c0/75d73e52c507a7a7a4c7971d6bf4f8f26fdd094e0d3a0193d77edf6a5efa36fc3db91ec5cc48e8b94e6eb5d5ad21af0a1040e71309172851209415fd105efb1a languageName: node linkType: hard -"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.25.0, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.6, @babel/types@npm:^7.4.4": - version: 7.25.6 - resolution: "@babel/types@npm:7.25.6" +"@babel/types@npm:^7.25.7, @babel/types@npm:^7.4.4": + version: 7.25.7 + resolution: "@babel/types@npm:7.25.7" dependencies: - "@babel/helper-string-parser": "npm:^7.24.8" - "@babel/helper-validator-identifier": "npm:^7.24.7" + "@babel/helper-string-parser": "npm:^7.25.7" + "@babel/helper-validator-identifier": "npm:^7.25.7" to-fast-properties: "npm:^2.0.0" - checksum: 10c0/89d45fbee24e27a05dca2d08300a26b905bd384a480448823f6723c72d3a30327c517476389b7280ce8cb9a2c48ef8f47da7f9f6d326faf6f53fd6b68237bdc4 + checksum: 10c0/e03e1e2e08600fa1e8eb90632ac9c253dd748176c8d670d85f85b0dc83a0573b26ae748a1cbcb81f401903a3d95f43c3f4f8d516a5ed779929db27de56289633 languageName: node linkType: hard @@ -2754,17 +2747,17 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3": - version: 4.23.3 - resolution: "browserslist@npm:4.23.3" +"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.23.1, browserslist@npm:^4.23.3, browserslist@npm:^4.24.0": + version: 4.24.0 + resolution: "browserslist@npm:4.24.0" dependencies: - caniuse-lite: "npm:^1.0.30001646" - electron-to-chromium: "npm:^1.5.4" + caniuse-lite: "npm:^1.0.30001663" + electron-to-chromium: "npm:^1.5.28" node-releases: "npm:^2.0.18" update-browserslist-db: "npm:^1.1.0" bin: browserslist: cli.js - checksum: 10c0/3063bfdf812815346447f4796c8f04601bf5d62003374305fd323c2a463e42776475bcc5309264e39bcf9a8605851e53560695991a623be988138b3ff8c66642 + checksum: 10c0/95e76ad522753c4c470427f6e3c8a4bb5478ff448841e22b3d3e53f89ecaf17b6984666d6c7e715c370f1e7fa0cf684f42e34e554236a8b2fab38ea76b9e4c52 languageName: node linkType: hard @@ -2814,10 +2807,10 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001646": - version: 1.0.30001660 - resolution: "caniuse-lite@npm:1.0.30001660" - checksum: 10c0/d28900b56c597176d515c3175ca75c454f2d30cb2c09a44d7bdb009bb0c4d8a2557905adb77642889bbe9feb85fbfe9d974c8b8e53521fb4b50ee16ab246104e +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001646, caniuse-lite@npm:^1.0.30001663": + version: 1.0.30001666 + resolution: "caniuse-lite@npm:1.0.30001666" + checksum: 10c0/2d49e9be676233c24717f12aad3d01b3e5f902b457fe1deefaa8d82e64786788a8f79381ae437c61b50e15c9aea8aeb59871b1d54cb4c28b9190d53d292e2339 languageName: node linkType: hard @@ -3015,7 +3008,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.37.1, core-js-compat@npm:^3.38.0": +"core-js-compat@npm:^3.38.0, core-js-compat@npm:^3.38.1": version: 3.38.1 resolution: "core-js-compat@npm:3.38.1" dependencies: @@ -3368,10 +3361,10 @@ __metadata: languageName: node linkType: hard -"electron-to-chromium@npm:^1.5.4": - version: 1.5.19 - resolution: "electron-to-chromium@npm:1.5.19" - checksum: 10c0/73e25a928e041d707565fb08371b6ba5f3d7d99c78adddfd553660f28809ca22f1608ff295da3c764903a8eae890cbdd701b1b64b3e1eaeb298cb8aecbf21937 +"electron-to-chromium@npm:^1.5.28": + version: 1.5.31 + resolution: "electron-to-chromium@npm:1.5.31" + checksum: 10c0/e8aecd88c4c6d50a9d459b4b222865b855bab8f1b52e82913804e18b7884f2887bd76c61b3aa08c2ccbdcda098dd8486443f75bf770f0138f21dd9e63548fca7 languageName: node linkType: hard @@ -4406,9 +4399,9 @@ __metadata: version: 0.0.0-use.local resolution: "jenkins-ui@workspace:." dependencies: - "@babel/cli": "npm:7.25.6" - "@babel/core": "npm:7.25.2" - "@babel/preset-env": "npm:7.25.4" + "@babel/cli": "npm:7.25.7" + "@babel/core": "npm:7.25.7" + "@babel/preset-env": "npm:7.25.7" "@eslint/js": "npm:9.11.1" babel-loader: "npm:9.2.1" clean-webpack-plugin: "npm:4.0.0" @@ -4534,21 +4527,12 @@ __metadata: languageName: node linkType: hard -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" +"jsesc@npm:^3.0.2, jsesc@npm:~3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" bin: jsesc: bin/jsesc - checksum: 10c0/f93792440ae1d80f091b65f8ceddf8e55c4bb7f1a09dee5dcbdb0db5612c55c0f6045625aa6b7e8edb2e0a4feabd80ee48616dbe2d37055573a84db3d24f96d9 + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 languageName: node linkType: hard @@ -6205,12 +6189,12 @@ __metadata: languageName: node linkType: hard -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.1 - resolution: "regenerate-unicode-properties@npm:10.1.1" +"regenerate-unicode-properties@npm:^10.2.0": + version: 10.2.0 + resolution: "regenerate-unicode-properties@npm:10.2.0" dependencies: regenerate: "npm:^1.4.2" - checksum: 10c0/89adb5ee5ba081380c78f9057c02e156a8181969f6fcca72451efc45612e0c3df767b4333f8d8479c274d9c6fe52ec4854f0d8a22ef95dccbe87da8e5f2ac77d + checksum: 10c0/5510785eeaf56bbfdf4e663d6753f125c08d2a372d4107bc1b756b7bf142e2ed80c2733a8b54e68fb309ba37690e66a0362699b0e21d5c1f0255dea1b00e6460 languageName: node linkType: hard @@ -6237,28 +6221,35 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" +"regexpu-core@npm:^6.1.1": + version: 6.1.1 + resolution: "regexpu-core@npm:6.1.1" dependencies: - "@babel/regjsgen": "npm:^0.8.0" regenerate: "npm:^1.4.2" - regenerate-unicode-properties: "npm:^10.1.0" - regjsparser: "npm:^0.9.1" + regenerate-unicode-properties: "npm:^10.2.0" + regjsgen: "npm:^0.8.0" + regjsparser: "npm:^0.11.0" unicode-match-property-ecmascript: "npm:^2.0.0" unicode-match-property-value-ecmascript: "npm:^2.1.0" - checksum: 10c0/7945d5ab10c8bbed3ca383d4274687ea825aee4ab93a9c51c6e31e1365edd5ea807f6908f800ba017b66c462944ba68011164e7055207747ab651f8111ef3770 + checksum: 10c0/07d49697e20f9b65977535abba4858b7f5171c13f7c366be53ec1886d3d5f69f1b98cc6a6e63cf271adda077c3366a4c851c7473c28bbd69cf5a6b6b008efc3e + languageName: node + linkType: hard + +"regjsgen@npm:^0.8.0": + version: 0.8.0 + resolution: "regjsgen@npm:0.8.0" + checksum: 10c0/44f526c4fdbf0b29286101a282189e4dbb303f4013cf3fea058668d96d113b9180d3d03d1e13f6d4cbde38b7728bf951aecd9dc199938c080093a9a6f0d7a6bd languageName: node linkType: hard -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" +"regjsparser@npm:^0.11.0": + version: 0.11.0 + resolution: "regjsparser@npm:0.11.0" dependencies: - jsesc: "npm:~0.5.0" + jsesc: "npm:~3.0.2" bin: regjsparser: bin/parser - checksum: 10c0/fe44fcf19a99fe4f92809b0b6179530e5ef313ff7f87df143b08ce9a2eb3c4b6189b43735d645be6e8f4033bfb015ed1ca54f0583bc7561bed53fd379feb8225 + checksum: 10c0/155143a8f2c95e3170df4fff10ddf3f16a351b5d2b8cbb257e9f4a50abb9a980a28af0936b5bf850fee767537ffa8eb77c6b211fe8be19834dbe584dfd950c62 languageName: node linkType: hard From f850a9f19d861c6433a21012abacbc858e17395d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 08:46:52 -0700 Subject: [PATCH 47/83] Update mina-sshd-api.version to v2.14.0-131.v04e9b_6b_e0362 (#9818) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/pom.xml b/war/pom.xml index 9b794a8263875..801045f7a8f0c 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -46,7 +46,7 @@ THE SOFTWARE. localhost 8080 - 2.13.2-125.v200281b_61d59 + 2.14.0-131.v04e9b_6b_e0362 3107.v665000b_51092 From edd84f7ca7181c19a1da9841aa619e1e9b94ad2f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 09:10:53 -0700 Subject: [PATCH 48/83] Fill in since annotations (#9820) Co-authored-by: timja <21194782+timja@users.noreply.github.com> --- core/src/main/java/jenkins/security/ExtendedReadRedaction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/jenkins/security/ExtendedReadRedaction.java b/core/src/main/java/jenkins/security/ExtendedReadRedaction.java index 31436c5622f2d..7baec1962f484 100644 --- a/core/src/main/java/jenkins/security/ExtendedReadRedaction.java +++ b/core/src/main/java/jenkins/security/ExtendedReadRedaction.java @@ -10,7 +10,7 @@ * * @see SECURITY-266 * @see Jenkins Security Advisory 2016-05-11 - * @since TODO + * @since 2.479 */ public interface ExtendedReadRedaction extends ExtensionPoint { /** From 6895eb3993228dc0b309d08a6da63c05d58f48a8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 10:43:14 -0700 Subject: [PATCH 49/83] Update mina-sshd.version to v2.14.0 (#9819) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- cli/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cli/pom.xml b/cli/pom.xml index 6309811a2e8bc..2473629d23cc8 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -15,7 +15,7 @@ https://github.com/jenkinsci/jenkins - 2.13.2 + 2.14.0 From e87e6762a07d495e22b5efa7baa2e8d562b39a06 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Thu, 3 Oct 2024 10:59:47 -0700 Subject: [PATCH 50/83] `mvn clean` should clean frontend artifacts (#9815) --- pom.xml | 58 +++++++++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 33 deletions(-) diff --git a/pom.xml b/pom.xml index e2d956523e879..0dde62a0569dc 100644 --- a/pom.xml +++ b/pom.xml @@ -463,6 +463,31 @@ THE SOFTWARE. + + org.apache.maven.plugins + maven-clean-plugin + + + + + .yarn + false + + + node + false + + + node_modules + false + + + war/src/main/webapp/jsbundles + false + + + + @@ -532,38 +557,5 @@ THE SOFTWARE. - - - clean-node - - - cleanNode - - - package.json - - - - - - org.apache.maven.plugins - maven-clean-plugin - - - - - node - false - - - node_modules - false - - - - - - - From 64f005b03d1fe81c1f2bb27c7762336c4637ea32 Mon Sep 17 00:00:00 2001 From: Tyler Stachecki Date: Thu, 3 Oct 2024 14:51:37 -0400 Subject: [PATCH 51/83] Account for new Maven version requirement (#9822) Jenkins fails to build with Maven 3.8.1 - update the documentation to reflect that 3.9.6 is now required per a recent change in maven-hpi-plugin. --- CONTRIBUTING.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 17d4b17733f90..98650aa99de63 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -11,7 +11,7 @@ This page provides information about contributing code to the Jenkins core codeb 3. Install the necessary development tools. In order to develop Jenkins, you need the following: - Java Development Kit (JDK) 17 or 21. In the Jenkins project we usually use [Eclipse Temurin](https://adoptium.net/) or [OpenJDK](https://openjdk.java.net/), but you can use other JDKs as well. - - Apache Maven 3.8.1 or above. You can [download Maven here](https://maven.apache.org/download.cgi). + - Apache Maven 3.9.6 or above. You can [download Maven here](https://maven.apache.org/download.cgi). In the Jenkins project we usually use the most recent Maven release. - Any IDE which supports importing Maven projects. 4. Set up your development environment as described in [Preparing for Plugin Development](https://www.jenkins.io/doc/developer/tutorial/prepare/) From 52803b2753903a7b30e38023dbc262d9ef8406f8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:48:39 -0700 Subject: [PATCH 52/83] Update dependency org.jenkins-ci.main:jenkins-test-harness to v2307 (#9824) Co-authored-by: renovate[bot] <29139614+renovate[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 a4ea23c9f3f7b..0321e9611c5b8 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -178,7 +178,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-harness - 2299.v7e8d22e797d3 + 2307.v10e5d0701b_e5 test From f6de4582f86a746c143c1c1813e67964da34f9d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:48:50 -0700 Subject: [PATCH 53/83] Update dependency org.jenkins-ci.plugins:junit to v1303 (#9825) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index 0321e9611c5b8..128f42dd662bc 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -230,7 +230,7 @@ THE SOFTWARE. org.jenkins-ci.plugins junit - 1302.va_b_878c32eb_b_5 + 1303.v05e2505656b_7 test diff --git a/war/pom.xml b/war/pom.xml index 801045f7a8f0c..3c15546fc1687 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -314,7 +314,7 @@ THE SOFTWARE. org.jenkins-ci.plugins junit - 1302.va_b_878c32eb_b_5 + 1303.v05e2505656b_7 hpi From 77c3d7ac843d3d5756eca3139a65f450a38b7a48 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Fri, 4 Oct 2024 09:59:10 -0700 Subject: [PATCH 54/83] [JENKINS-73838] Compatibility for `Jenkins#doSafeRestart(StaplerRequest, String)` (#9797) --- .../java/jenkins/cli/SafeRestartCommand.java | 3 ++- core/src/main/java/jenkins/model/Jenkins.java | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/jenkins/cli/SafeRestartCommand.java b/core/src/main/java/jenkins/cli/SafeRestartCommand.java index 54c624bbba274..4c1a8009e44dc 100644 --- a/core/src/main/java/jenkins/cli/SafeRestartCommand.java +++ b/core/src/main/java/jenkins/cli/SafeRestartCommand.java @@ -32,6 +32,7 @@ import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; import org.kohsuke.args4j.Option; +import org.kohsuke.stapler.StaplerRequest2; /** * Safe Restart Jenkins - do not accept any new jobs and try to pause existing. @@ -53,7 +54,7 @@ public String getShortDescription() { @Override protected int run() throws Exception { - Jenkins.get().doSafeRestart(null, message); + Jenkins.get().doSafeRestart((StaplerRequest2) null, message); return 0; } } diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index 6ea969668669c..90ffceefb4564 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -4673,7 +4673,7 @@ public HttpResponse doSafeRestart(StaplerRequest req) throws IOException, Servle /** * Queues up a safe restart of Jenkins. Jobs have to finish or pause before it can proceed. No new jobs are accepted. * - * @since 2.414 + * @since 2.475 */ public HttpResponse doSafeRestart(StaplerRequest2 req, @QueryParameter("message") String message) throws IOException, ServletException, RestartNotSupportedException { checkPermission(MANAGE); @@ -4692,6 +4692,20 @@ public HttpResponse doSafeRestart(StaplerRequest2 req, @QueryParameter("message" return HttpResponses.redirectToDot(); } + /** + * @deprecated use {@link #doSafeRestart(StaplerRequest2, String)} + * @since 2.414 + */ + @Deprecated + @StaplerNotDispatchable + public HttpResponse doSafeRestart(StaplerRequest req, @QueryParameter("message") String message) throws IOException, javax.servlet.ServletException, RestartNotSupportedException { + try { + return doSafeRestart(StaplerRequest.toStaplerRequest2(req), message); + } catch (ServletException e) { + throw ServletExceptionWrapper.fromJakartaServletException(e); + } + } + private static Lifecycle restartableLifecycle() throws RestartNotSupportedException { if (Main.isUnitTest) { throw new RestartNotSupportedException("Restarting the controller JVM is not supported in JenkinsRule-based tests"); From 2627ab14c3f426a3f96d00f408ce000e884cdce9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 5 Oct 2024 11:29:19 +0100 Subject: [PATCH 55/83] Update mina-sshd-api.version to v2.14.0-133.vcc091215a_358 (#9828) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/pom.xml b/war/pom.xml index 3c15546fc1687..8dfca6d4ce298 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -46,7 +46,7 @@ THE SOFTWARE. localhost 8080 - 2.14.0-131.v04e9b_6b_e0362 + 2.14.0-133.vcc091215a_358 3107.v665000b_51092 From 0066184e68c8ccc7e887ca3d7d3095127b51ac1b Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Sat, 5 Oct 2024 03:34:09 -0700 Subject: [PATCH 56/83] Override the outdated managed dependency on `asm` in `guice-parent` (#9827) Override the outdated managed dependency on `asm` in `guice-parent` --- bom/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bom/pom.xml b/bom/pom.xml index a8c184ead7ac9..b20f390fe5685 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -352,6 +352,12 @@ THE SOFTWARE. stapler-groovy ${stapler.version} + + + org.ow2.asm + asm + 9.7 + org.samba.jcifs jcifs From 09fecfaff9ae42905d8bf801c2f67e60ec7cb0db Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 6 Oct 2024 15:21:12 +0100 Subject: [PATCH 57/83] Update dependency org.ow2.asm:asm to v9.7.1 (#9831) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bom/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bom/pom.xml b/bom/pom.xml index b20f390fe5685..0065b595ae9ac 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -356,7 +356,7 @@ THE SOFTWARE. org.ow2.asm asm - 9.7 + 9.7.1 org.samba.jcifs From a582fc10ac2f5499b39332af5536cb0368bda8e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 6 Oct 2024 14:40:36 -0600 Subject: [PATCH 58/83] Update dependency io.jenkins.plugins:asm-api to v9.7.1-95.v9f552033802a_ (#9834) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/pom.xml b/war/pom.xml index 8dfca6d4ce298..d13d14e462b02 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -502,7 +502,7 @@ THE SOFTWARE. io.jenkins.plugins asm-api - 9.7-33.v4d23ef79fcc8 + 9.7.1-95.v9f552033802a_ hpi From 4d7b993c5b6af6490af7e4ca55e6a4a57a5027a6 Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Sun, 6 Oct 2024 16:41:02 -0400 Subject: [PATCH 59/83] [JENKINS-73824] Wait for Pipeline builds to complete before allowing their jobs to be deleted (#9790) * Wait for Pipelines to complete before allowing their jobs to be deleted * Create mock Job/Run classes that use AsynchronousExecution to be able to add a regression test in core * [JENKINS-73824] Do not repeatedly interrupt executables in ItemDeletion.cancelBuildsInProgress * [JENKINS-73824] Delete ItemDeletionTest based on https://github.com/jenkinsci/jenkins/pull/9790#discussion_r1777727008 --- core/src/main/java/jenkins/model/queue/ItemDeletion.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/core/src/main/java/jenkins/model/queue/ItemDeletion.java b/core/src/main/java/jenkins/model/queue/ItemDeletion.java index a2d954fbc4593..b278f4d24c930 100644 --- a/core/src/main/java/jenkins/model/queue/ItemDeletion.java +++ b/core/src/main/java/jenkins/model/queue/ItemDeletion.java @@ -266,12 +266,10 @@ public static void cancelBuildsInProgress(@NonNull Item initiatingItem) throws F // comparison with executor.getCurrentExecutable() == executable currently should always be // true as we no longer recycle Executors, but safer to future-proof in case we ever // revisit recycling. - if (!entry.getKey().isAlive() + if (!entry.getKey().isActive() || entry.getValue() != entry.getKey().getCurrentExecutable()) { iterator.remove(); } - // I don't know why, but we have to keep interrupting - entry.getKey().interrupt(Result.ABORTED); } Thread.sleep(50L); } From 7dfdceb4738292599fc9667847fa1b0394569d9b Mon Sep 17 00:00:00 2001 From: Jan Faracik <43062514+janfaracik@users.noreply.github.com> Date: Mon, 7 Oct 2024 14:53:30 +0100 Subject: [PATCH 60/83] Fix dropdowns being added multiple times to the same element (#9835) --- war/src/main/js/components/dropdowns/utils.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/war/src/main/js/components/dropdowns/utils.js b/war/src/main/js/components/dropdowns/utils.js index a15c4d2c2ba5d..27931dc7de322 100644 --- a/war/src/main/js/components/dropdowns/utils.js +++ b/war/src/main/js/components/dropdowns/utils.js @@ -12,6 +12,10 @@ const SELECTED_ITEM_CLASS = "jenkins-dropdown__item--selected"; * @param callback - called to retrieve the list of dropdown items */ function generateDropdown(element, callback, immediate) { + if (element._tippy && element._tippy.props.theme === "dropdown") { + element._tippy.destroy(); + } + tippy( element, Object.assign({}, Templates.dropdown(), { From 0402c9fe7eabff0b85b3a5850e8572b66a59c555 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:48:11 -0700 Subject: [PATCH 61/83] Update jenkins/ath Docker tag to v6022 (#9839) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ath.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ath.sh b/ath.sh index 12eca9c947fb8..22af7a72dd195 100644 --- a/ath.sh +++ b/ath.sh @@ -6,7 +6,7 @@ set -o xtrace cd "$(dirname "$0")" # https://github.com/jenkinsci/acceptance-test-harness/releases -export ATH_VERSION=6016.v3a_e3864eb_993 +export ATH_VERSION=6022.vf596f9d22cd1 if [[ $# -eq 0 ]]; then export JDK=17 From c7eae25f11b464855b54f2120c01c5b1fbd17e79 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:48:47 -0700 Subject: [PATCH 62/83] Update dependency org.jenkins-ci.plugins:credentials to v1384 (#9838) Co-authored-by: renovate[bot] <29139614+renovate[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 128f42dd662bc..23dde51f5aa3b 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -224,7 +224,7 @@ THE SOFTWARE. org.jenkins-ci.plugins credentials - 1381.v2c3a_12074da_b_ + 1384.vf0a_2ed06f9c6 test From 7a40ff6770e4d9b3fb0cb6f027de6d2e067e6df5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 10:50:01 -0700 Subject: [PATCH 63/83] Update dependency node to v20.18.0 (#9837) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0dde62a0569dc..49f760cdc7749 100644 --- a/pom.xml +++ b/pom.xml @@ -98,7 +98,7 @@ THE SOFTWARE. false 8.1 - 20.17.0 + 20.18.0
org.jenkins-ci.plugins junit - 1303.v05e2505656b_7 + 1304.vc85a_b_ca_96613 hpi From 7e3de0a3af49ea493b7551e391c08124dbe1c0f4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 12:56:38 -0700 Subject: [PATCH 65/83] Update dependency postcss-preset-env to v10.0.6 (#9842) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index bd27d5b79effd..5b6068170eecf 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", "postcss-loader": "8.1.1", - "postcss-preset-env": "10.0.5", + "postcss-preset-env": "10.0.6", "postcss-scss": "4.0.9", "prettier": "3.3.3", "sass": "1.79.4", diff --git a/yarn.lock b/yarn.lock index 46e29f140aa73..34961cec1b2ca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4419,7 +4419,7 @@ __metadata: mini-css-extract-plugin: "npm:2.9.1" postcss: "npm:8.4.47" postcss-loader: "npm:8.1.1" - postcss-preset-env: "npm:10.0.5" + postcss-preset-env: "npm:10.0.6" postcss-scss: "npm:4.0.9" prettier: "npm:3.3.3" sass: "npm:1.79.4" @@ -5422,9 +5422,9 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^11.0.1": - version: 11.0.1 - resolution: "postcss-custom-media@npm:11.0.1" +"postcss-custom-media@npm:^11.0.2": + version: 11.0.2 + resolution: "postcss-custom-media@npm:11.0.2" dependencies: "@csstools/cascade-layer-name-parser": "npm:^2.0.1" "@csstools/css-parser-algorithms": "npm:^3.0.1" @@ -5432,7 +5432,7 @@ __metadata: "@csstools/media-query-list-parser": "npm:^3.0.1" peerDependencies: postcss: ^8.4 - checksum: 10c0/771b281a28f105370ede7c4a86f9e3dd8d9ec3bf2d2883d4f2cfe9c42b5ec1bf88f713458b356870315d0ba3a285fbeb7bb514a1203d1c4fb113bd9044369bf2 + checksum: 10c0/7bec2b1e0b5d786c33c5715b611ffc8b9737252ee6bf77ca59255ac16f91ce614406923f43250e5c88b04f1bb050f155dc5ed4d9350dbd704c45fbd72e5a9a04 languageName: node linkType: hard @@ -5907,9 +5907,9 @@ __metadata: languageName: node linkType: hard -"postcss-preset-env@npm:10.0.5": - version: 10.0.5 - resolution: "postcss-preset-env@npm:10.0.5" +"postcss-preset-env@npm:10.0.6": + version: 10.0.6 + resolution: "postcss-preset-env@npm:10.0.6" dependencies: "@csstools/postcss-cascade-layers": "npm:^5.0.0" "@csstools/postcss-color-function": "npm:^4.0.2" @@ -5952,7 +5952,7 @@ __metadata: postcss-color-functional-notation: "npm:^7.0.2" postcss-color-hex-alpha: "npm:^10.0.0" postcss-color-rebeccapurple: "npm:^10.0.0" - postcss-custom-media: "npm:^11.0.1" + postcss-custom-media: "npm:^11.0.2" postcss-custom-properties: "npm:^14.0.1" postcss-custom-selectors: "npm:^8.0.1" postcss-dir-pseudo-class: "npm:^9.0.0" @@ -5974,7 +5974,7 @@ __metadata: postcss-selector-not: "npm:^8.0.0" peerDependencies: postcss: ^8.4 - checksum: 10c0/db5eb1175cb26bed3f1a4c47acc67935ffc784520321470520e59de366ac6f91be1e609fe36056af707ed20f7910721287cff0fae416c437dd3e944de13ffd05 + checksum: 10c0/01660acf3b9ddf4d612a31819e9a5de9fe5383e9eddd2c130180f66ae90c5a881eb408e73454fd50e1839eae71678d738bf72073de08f9013c183b0bd9950fe5 languageName: node linkType: hard From e4f5acdcc7916d03d24d9866fcbe30b27063eb3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 7 Oct 2024 16:05:36 -0700 Subject: [PATCH 66/83] Update eslint monorepo to v9.12.0 (#9843) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 4 +-- yarn.lock | 94 ++++++++++++++++++++++++++++------------------------ 2 files changed, 53 insertions(+), 45 deletions(-) diff --git a/package.json b/package.json index 5b6068170eecf..6e01d39f94bf9 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,12 @@ "@babel/cli": "7.25.7", "@babel/core": "7.25.7", "@babel/preset-env": "7.25.7", - "@eslint/js": "9.11.1", + "@eslint/js": "9.12.0", "babel-loader": "9.2.1", "clean-webpack-plugin": "4.0.0", "css-loader": "7.1.2", "css-minimizer-webpack-plugin": "7.0.0", - "eslint": "9.11.1", + "eslint": "9.12.0", "eslint-config-prettier": "9.1.0", "eslint-formatter-checkstyle": "8.40.0", "globals": "15.10.0", diff --git a/yarn.lock b/yarn.lock index 34961cec1b2ca..1c9ced4c8b74d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1871,10 +1871,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.11.1": - version: 9.11.1 - resolution: "@eslint/js@npm:9.11.1" - checksum: 10c0/22916ef7b09c6f60c62635d897c66e1e3e38d90b5a5cf5e62769033472ecbcfb6ec7c886090a4b32fe65d6ce371da54384e46c26a899e38184dfc152c6152f7b +"@eslint/js@npm:9.12.0": + version: 9.12.0 + resolution: "@eslint/js@npm:9.12.0" + checksum: 10c0/325650a59a1ce3d97c69441501ebaf415607248bacbe8c8ca35adc7cb73b524f592f266a75772f496b06f3239e3ee1996722a242148085f0ee5fb3dd7065897c languageName: node linkType: hard @@ -1894,6 +1894,23 @@ __metadata: languageName: node linkType: hard +"@humanfs/core@npm:^0.19.0": + version: 0.19.0 + resolution: "@humanfs/core@npm:0.19.0" + checksum: 10c0/f87952d5caba6ae427a620eff783c5d0b6cef0cfc256dec359cdaa636c5f161edb8d8dad576742b3de7f0b2f222b34aad6870248e4b7d2177f013426cbcda232 + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.5": + version: 0.16.5 + resolution: "@humanfs/node@npm:0.16.5" + dependencies: + "@humanfs/core": "npm:^0.19.0" + "@humanwhocodes/retry": "npm:^0.3.0" + checksum: 10c0/41c365ab09e7c9eaeed373d09243195aef616d6745608a36fc3e44506148c28843872f85e69e2bf5f1e992e194286155a1c1cecfcece6a2f43875e37cd243935 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -1901,10 +1918,10 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/retry@npm:^0.3.0": - version: 0.3.0 - resolution: "@humanwhocodes/retry@npm:0.3.0" - checksum: 10c0/7111ec4e098b1a428459b4e3be5a5d2a13b02905f805a2468f4fa628d072f0de2da26a27d04f65ea2846f73ba51f4204661709f05bfccff645e3cedef8781bb6 +"@humanwhocodes/retry@npm:^0.3.0, @humanwhocodes/retry@npm:^0.3.1": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 10c0/f0da1282dfb45e8120480b9e2e275e2ac9bbe1cf016d046fdad8e27cc1285c45bb9e711681237944445157b430093412b4446c1ab3fc4bb037861b5904101d3b languageName: node linkType: hard @@ -2021,7 +2038,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -3503,13 +3520,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.0.2": - version: 8.0.2 - resolution: "eslint-scope@npm:8.0.2" +"eslint-scope@npm:^8.1.0": + version: 8.1.0 + resolution: "eslint-scope@npm:8.1.0" dependencies: esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/477f820647c8755229da913025b4567347fd1f0bf7cbdf3a256efff26a7e2e130433df052bd9e3d014025423dc00489bea47eb341002b15553673379c1a7dc36 + checksum: 10c0/ae1df7accae9ea90465c2ded70f7064d6d1f2962ef4cc87398855c4f0b3a5ab01063e0258d954bb94b184f6759febe04c3118195cab5c51978a7229948ba2875 languageName: node linkType: hard @@ -3520,27 +3537,27 @@ __metadata: languageName: node linkType: hard -"eslint-visitor-keys@npm:^4.0.0": - version: 4.0.0 - resolution: "eslint-visitor-keys@npm:4.0.0" - checksum: 10c0/76619f42cf162705a1515a6868e6fc7567e185c7063a05621a8ac4c3b850d022661262c21d9f1fc1d144ecf0d5d64d70a3f43c15c3fc969a61ace0fb25698cf5 +"eslint-visitor-keys@npm:^4.1.0": + version: 4.1.0 + resolution: "eslint-visitor-keys@npm:4.1.0" + checksum: 10c0/5483ef114c93a136aa234140d7aa3bd259488dae866d35cb0d0b52e6a158f614760a57256ac8d549acc590a87042cb40f6951815caa821e55dc4fd6ef4c722eb languageName: node linkType: hard -"eslint@npm:9.11.1": - version: 9.11.1 - resolution: "eslint@npm:9.11.1" +"eslint@npm:9.12.0": + version: 9.12.0 + resolution: "eslint@npm:9.12.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.2.0" "@eslint-community/regexpp": "npm:^4.11.0" "@eslint/config-array": "npm:^0.18.0" "@eslint/core": "npm:^0.6.0" "@eslint/eslintrc": "npm:^3.1.0" - "@eslint/js": "npm:9.11.1" + "@eslint/js": "npm:9.12.0" "@eslint/plugin-kit": "npm:^0.2.0" + "@humanfs/node": "npm:^0.16.5" "@humanwhocodes/module-importer": "npm:^1.0.1" - "@humanwhocodes/retry": "npm:^0.3.0" - "@nodelib/fs.walk": "npm:^1.2.8" + "@humanwhocodes/retry": "npm:^0.3.1" "@types/estree": "npm:^1.0.6" "@types/json-schema": "npm:^7.0.15" ajv: "npm:^6.12.4" @@ -3548,9 +3565,9 @@ __metadata: cross-spawn: "npm:^7.0.2" debug: "npm:^4.3.2" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.0.2" - eslint-visitor-keys: "npm:^4.0.0" - espree: "npm:^10.1.0" + eslint-scope: "npm:^8.1.0" + eslint-visitor-keys: "npm:^4.1.0" + espree: "npm:^10.2.0" esquery: "npm:^1.5.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" @@ -3560,13 +3577,11 @@ __metadata: ignore: "npm:^5.2.0" imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" - is-path-inside: "npm:^3.0.3" json-stable-stringify-without-jsonify: "npm:^1.0.1" lodash.merge: "npm:^4.6.2" minimatch: "npm:^3.1.2" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" - strip-ansi: "npm:^6.0.1" text-table: "npm:^0.2.0" peerDependencies: jiti: "*" @@ -3575,18 +3590,18 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/fc9afc31155fef8c27fc4fd00669aeafa4b89ce5abfbf6f60e05482c03d7ff1d5e7546e416aa47bf0f28c9a56597a94663fd0264c2c42a1890f53cac49189f24 + checksum: 10c0/67cf6ea3ea28dcda7dd54aac33e2d4028eb36991d13defb0d2339c3eaa877d5dddd12cd4416ddc701a68bcde9e0bb9e65524c2e4e9914992c724f5b51e949dda languageName: node linkType: hard -"espree@npm:^10.0.1, espree@npm:^10.1.0": - version: 10.1.0 - resolution: "espree@npm:10.1.0" +"espree@npm:^10.0.1, espree@npm:^10.2.0": + version: 10.2.0 + resolution: "espree@npm:10.2.0" dependencies: acorn: "npm:^8.12.0" acorn-jsx: "npm:^5.3.2" - eslint-visitor-keys: "npm:^4.0.0" - checksum: 10c0/52e6feaa77a31a6038f0c0e3fce93010a4625701925b0715cd54a2ae190b3275053a0717db698697b32653788ac04845e489d6773b508d6c2e8752f3c57470a0 + eslint-visitor-keys: "npm:^4.1.0" + checksum: 10c0/2b6bfb683e7e5ab2e9513949879140898d80a2d9867ea1db6ff5b0256df81722633b60a7523a7c614f05a39aeea159dd09ad2a0e90c0e218732fc016f9086215 languageName: node linkType: hard @@ -4338,13 +4353,6 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 - languageName: node - linkType: hard - "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -4402,12 +4410,12 @@ __metadata: "@babel/cli": "npm:7.25.7" "@babel/core": "npm:7.25.7" "@babel/preset-env": "npm:7.25.7" - "@eslint/js": "npm:9.11.1" + "@eslint/js": "npm:9.12.0" babel-loader: "npm:9.2.1" clean-webpack-plugin: "npm:4.0.0" css-loader: "npm:7.1.2" css-minimizer-webpack-plugin: "npm:7.0.0" - eslint: "npm:9.11.1" + eslint: "npm:9.12.0" eslint-config-prettier: "npm:9.1.0" eslint-formatter-checkstyle: "npm:8.40.0" globals: "npm:15.10.0" From 42fae0104a507bb08e8bae56d884b5c92526e5be Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:08:31 +0000 Subject: [PATCH 67/83] [maven-release-plugin] prepare release jenkins-2.480 --- 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 +- websocket/jetty12-ee9/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 11 insertions(+), 11 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 0065b595ae9ac..e75bbb0084f45 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 2473629d23cc8..642fa9a8d2d6c 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 cli diff --git a/core/pom.xml b/core/pom.xml index 9bff5e5ad0b2a..d98553f5612f9 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index fe1e89a120dce..6106c7ad3176b 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 jenkins-coverage diff --git a/pom.xml b/pom.xml index 49f760cdc7749..9bf06464f2f08 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 pom Jenkins main module @@ -63,7 +63,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - ${scmTag} + jenkins-2.480 https://github.com/jenkinsci/jenkins @@ -75,7 +75,7 @@ THE SOFTWARE. 2.480 -SNAPSHOT - 2024-09-27T11:17:44Z + 2024-10-08T10:40:01Z github diff --git a/test/pom.xml b/test/pom.xml index b3b1b81dab62c..aa388cd1bfef9 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 7a702c49fdc04..2d9dbab9a864d 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 jenkins-war diff --git a/websocket/jetty12-ee9/pom.xml b/websocket/jetty12-ee9/pom.xml index 2253163b3c4c9..19915cadf6b2b 100644 --- a/websocket/jetty12-ee9/pom.xml +++ b/websocket/jetty12-ee9/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 178413f92c8e5..a443875424095 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.480 ../.. From 9da61d9d2363a69239a2c52f751d134eaf4fc009 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 8 Oct 2024 14:08:57 +0000 Subject: [PATCH 68/83] [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 | 8 ++++---- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty12-ee9/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index e75bbb0084f45..0065b595ae9ac 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 642fa9a8d2d6c..2473629d23cc8 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index d98553f5612f9..9bff5e5ad0b2a 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 6106c7ad3176b..fe1e89a120dce 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index 9bf06464f2f08..0ae24f547d808 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} pom Jenkins main module @@ -63,7 +63,7 @@ THE SOFTWARE. scm:git:https://github.com/jenkinsci/jenkins.git scm:git:git@github.com:jenkinsci/jenkins.git - jenkins-2.480 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -73,9 +73,9 @@ THE SOFTWARE. - 2.480 + 2.481 -SNAPSHOT - 2024-10-08T10:40:01Z + 2024-10-08T14:08:31Z github diff --git a/test/pom.xml b/test/pom.xml index aa388cd1bfef9..b3b1b81dab62c 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 2d9dbab9a864d..7a702c49fdc04 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} jenkins-war diff --git a/websocket/jetty12-ee9/pom.xml b/websocket/jetty12-ee9/pom.xml index 19915cadf6b2b..2253163b3c4c9 100644 --- a/websocket/jetty12-ee9/pom.xml +++ b/websocket/jetty12-ee9/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index a443875424095..178413f92c8e5 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.480 + ${revision}${changelist} ../.. From c2ff150aca9ec029386585628fe3569656967146 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 07:51:31 -0700 Subject: [PATCH 69/83] Update dependency org.jenkins-ci.plugins:matrix-project to v839 (#9844) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index b3b1b81dab62c..4104c0cd64346 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -248,7 +248,7 @@ THE SOFTWARE. org.jenkins-ci.plugins matrix-project - 838.v4d7b_7b_f9b_d4b_ + 839.vff91cd7e3a_b_2 test diff --git a/war/pom.xml b/war/pom.xml index 7a702c49fdc04..5fc328e56d289 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -300,7 +300,7 @@ THE SOFTWARE. org.jenkins-ci.plugins matrix-project - 838.v4d7b_7b_f9b_d4b_ + 839.vff91cd7e3a_b_2 hpi From 5a364f28c13362de7928453b4e4d47eb20f12630 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 07:51:49 -0700 Subject: [PATCH 70/83] Update jenkins/ath Docker tag to v6032 (#9845) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ath.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ath.sh b/ath.sh index 22af7a72dd195..58cb1ecef56c9 100644 --- a/ath.sh +++ b/ath.sh @@ -6,7 +6,7 @@ set -o xtrace cd "$(dirname "$0")" # https://github.com/jenkinsci/acceptance-test-harness/releases -export ATH_VERSION=6022.vf596f9d22cd1 +export ATH_VERSION=6032.v4cf2fd6d88ca_ if [[ $# -eq 0 ]]; then export JDK=17 From 89a6c7e8a3fedb7bcb6139f1c2e1649946e10c92 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 22:36:17 -0700 Subject: [PATCH 71/83] Update jenkins/ath Docker tag to v6034 (#9847) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ath.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ath.sh b/ath.sh index 58cb1ecef56c9..a246733c5c2c2 100644 --- a/ath.sh +++ b/ath.sh @@ -6,7 +6,7 @@ set -o xtrace cd "$(dirname "$0")" # https://github.com/jenkinsci/acceptance-test-harness/releases -export ATH_VERSION=6032.v4cf2fd6d88ca_ +export ATH_VERSION=6034.vfb_c575f4f616 if [[ $# -eq 0 ]]; then export JDK=17 From 9005f3ccb8b8909e22ab932dba60a8edad3c7bf8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 22:36:45 -0700 Subject: [PATCH 72/83] Update dependency org.jenkins-ci.plugins:scm-api to v698 (#9848) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pom.xml b/test/pom.xml index 4104c0cd64346..019fe23d98b6f 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -112,7 +112,7 @@ THE SOFTWARE. org.jenkins-ci.plugins scm-api - 696.v778d637b_a_762 + 698.v8e3b_c788f0a_6 diff --git a/war/pom.xml b/war/pom.xml index 5fc328e56d289..6511cded90fcd 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -418,7 +418,7 @@ THE SOFTWARE. org.jenkins-ci.plugins scm-api - 696.v778d637b_a_762 + 698.v8e3b_c788f0a_6 hpi From 857253eeaadd6a08f19ef2e2e7890aecc4b2acf6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 15:18:17 -0700 Subject: [PATCH 73/83] Update dependency lit to v3.2.1 (#9851) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- core/src/site/site.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/site/site.xml b/core/src/site/site.xml index 56902cecd2a16..8b17895170df8 100644 --- a/core/src/site/site.xml +++ b/core/src/site/site.xml @@ -6,7 +6,7 @@ + From 6651e8531eaf8c5d428a36c2e10f7c51ee016b16 Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Fri, 11 Oct 2024 14:42:38 -0400 Subject: [PATCH 74/83] [JENKINS-63343] Validate element types for collections and maps when deserializing XML files (#9727) * [JENKINS-63343] Validate element types in RobustCollectionConverter in some cases * [JENKINS-63343] Also validate keys and values in map entries * [JENKINS-63343] Improve OldDataMonitor error messages and update tests * [JENKINS-63343] Also handle implicit collection with unspecified element types * [JENKINS-63343] Spotless * [JENKINS-63343] Avoid rawtypes * [JENKINS-63343] Add tests for rawtypes * [JENKINS-63343] Adjust Javadoc for clarity * [JENKINS-63343] Avoid ClassCastException and check handling of null in tests * [JENKINS-63343] Fix Javadoc link by adding import * [JENKINS-63343] List.of cannot be used with null values --- .../util/RobustCollectionConverter.java | 48 +++++++- .../java/hudson/util/RobustMapConverter.java | 57 ++++++++- .../util/RobustReflectionConverter.java | 43 +++++-- .../util/RobustCollectionConverterTest.java | 70 +++++++++++ .../hudson/util/RobustMapConverterTest.java | 115 +++++++++++++++++- .../util/RobustReflectionConverterTest.java | 83 ++++++++++++- 6 files changed, 396 insertions(+), 20 deletions(-) diff --git a/core/src/main/java/hudson/util/RobustCollectionConverter.java b/core/src/main/java/hudson/util/RobustCollectionConverter.java index 64dbbc7d9e9ad..f914d909be27a 100644 --- a/core/src/main/java/hudson/util/RobustCollectionConverter.java +++ b/core/src/main/java/hudson/util/RobustCollectionConverter.java @@ -26,6 +26,7 @@ import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.XStreamException; +import com.thoughtworks.xstream.converters.ConversionException; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.converters.collections.CollectionConverter; import com.thoughtworks.xstream.converters.reflection.ReflectionProvider; @@ -34,11 +35,15 @@ import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.mapper.Mapper; import com.thoughtworks.xstream.security.InputManipulationException; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import hudson.diagnosis.OldDataMonitor; +import java.lang.reflect.Type; import java.util.Collection; import java.util.concurrent.CopyOnWriteArrayList; import java.util.concurrent.CopyOnWriteArraySet; import java.util.logging.Logger; import jenkins.util.xstream.CriticalXStreamException; +import org.jvnet.tiger_types.Types; /** * {@link CollectionConverter} that ignores {@link XStreamException}. @@ -52,14 +57,39 @@ @SuppressWarnings({"rawtypes", "unchecked"}) public class RobustCollectionConverter extends CollectionConverter { private final SerializableConverter sc; + /** + * When available, this field holds the declared type of the collection being deserialized. + */ + private final @CheckForNull Class elementType; public RobustCollectionConverter(XStream xs) { - this(xs.getMapper(), xs.getReflectionProvider()); + this(xs.getMapper(), xs.getReflectionProvider(), null); } public RobustCollectionConverter(Mapper mapper, ReflectionProvider reflectionProvider) { + this(mapper, reflectionProvider, null); + } + + /** + * Creates a converter that will validate the types of collection elements during deserialization. + *

Elements with invalid types will be omitted from deserialized collections and may result in an + * {@link OldDataMonitor} warning. + *

This type checking currently uses the erasure of the type argument, so for example, the element type for a + * {@code List>} is just a raw {@code Optional}, so non-integer values inside of the optional + * would still deserialize successfully and the resulting optional would be included in the list. + * + * @see RobustReflectionConverter#unmarshalField + */ + public RobustCollectionConverter(Mapper mapper, ReflectionProvider reflectionProvider, Type collectionType) { super(mapper); sc = new SerializableConverter(mapper, reflectionProvider, new ClassLoaderReference(null)); + if (collectionType != null && Collection.class.isAssignableFrom(Types.erasure(collectionType))) { + var baseType = Types.getBaseClass(collectionType, Collection.class); + var typeArg = Types.getTypeArgument(baseType, 0, Object.class); + this.elementType = Types.erasure(typeArg); + } else { + this.elementType = null; + } } @Override @@ -85,9 +115,19 @@ protected void populateCollection(HierarchicalStreamReader reader, Unmarshalling reader.moveDown(); try { Object item = readBareItem(reader, context, collection); - long nanoNow = System.nanoTime(); - collection.add(item); - XStream2SecurityUtils.checkForCollectionDoSAttack(context, nanoNow); + if (elementType != null && item != null && !elementType.isInstance(item)) { + var exception = new ConversionException("Invalid type for collection element"); + // c.f. TreeUnmarshaller.addInformationTo + exception.add("required-type", elementType.getName()); + exception.add("class", item.getClass().getName()); + exception.add("converter-type", getClass().getName()); + reader.appendErrors(exception); + RobustReflectionConverter.addErrorInContext(context, exception); + } else { + long nanoNow = System.nanoTime(); + collection.add(item); + XStream2SecurityUtils.checkForCollectionDoSAttack(context, nanoNow); + } } catch (CriticalXStreamException e) { throw e; } catch (InputManipulationException e) { diff --git a/core/src/main/java/hudson/util/RobustMapConverter.java b/core/src/main/java/hudson/util/RobustMapConverter.java index f845e38771ccd..c802959d0d096 100644 --- a/core/src/main/java/hudson/util/RobustMapConverter.java +++ b/core/src/main/java/hudson/util/RobustMapConverter.java @@ -31,9 +31,13 @@ import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.mapper.Mapper; import com.thoughtworks.xstream.security.InputManipulationException; +import edu.umd.cs.findbugs.annotations.CheckForNull; +import hudson.diagnosis.OldDataMonitor; +import java.lang.reflect.Type; import java.util.Map; import java.util.logging.Logger; import jenkins.util.xstream.CriticalXStreamException; +import org.jvnet.tiger_types.Types; /** * Loads a {@link Map} while tolerating read errors on its keys and values. @@ -42,13 +46,47 @@ final class RobustMapConverter extends MapConverter { private static final Object ERROR = new Object(); + /** + * When available, this field holds the declared type of the keys of the map being deserialized. + */ + private final @CheckForNull Class keyType; + + /** + * When available, this field holds the declared type of the values of the map being deserialized. + */ + private final @CheckForNull Class valueType; + RobustMapConverter(Mapper mapper) { + this(mapper, null); + } + + /** + * Creates a converter that will validate the types of map entry keys and values during deserialization. + *

Map entries whose key or value has an invalid type will be omitted from deserialized maps and may result in + * an {@link OldDataMonitor} warning. + *

This type checking currently uses the erasure of the type argument, so for example, the value type for a + * {@code Map>} is just a raw {@code Optional}, so non-integer values inside of the + * optional would still deserialize successfully and the resulting map entry would be included in the map. + * + * @see RobustReflectionConverter#unmarshalField + */ + RobustMapConverter(Mapper mapper, Type mapType) { super(mapper); + if (mapType != null && Map.class.isAssignableFrom(Types.erasure(mapType))) { + var baseType = Types.getBaseClass(mapType, Map.class); + var keyTypeArg = Types.getTypeArgument(baseType, 0, Object.class); + this.keyType = Types.erasure(keyTypeArg); + var valueTypeArg = Types.getTypeArgument(baseType, 1, Object.class); + this.valueType = Types.erasure(valueTypeArg); + } else { + this.keyType = null; + this.valueType = null; + } } @Override protected void putCurrentEntryIntoMap(HierarchicalStreamReader reader, UnmarshallingContext context, Map map, Map target) { - Object key = read(reader, context, map); - Object value = read(reader, context, map); + Object key = read(reader, context, map, keyType); + Object value = read(reader, context, map, valueType); if (key != ERROR && value != ERROR) { try { long nanoNow = System.nanoTime(); @@ -64,7 +102,7 @@ final class RobustMapConverter extends MapConverter { } } - private Object read(HierarchicalStreamReader reader, UnmarshallingContext context, Map map) { + private Object read(HierarchicalStreamReader reader, UnmarshallingContext context, Map map, @CheckForNull Class expectedType) { if (!reader.hasMoreChildren()) { var exception = new ConversionException("Invalid map entry"); reader.appendErrors(exception); @@ -73,7 +111,18 @@ private Object read(HierarchicalStreamReader reader, UnmarshallingContext contex } reader.moveDown(); try { - return readBareItem(reader, context, map); + var object = readBareItem(reader, context, map); + if (expectedType != null && object != null && !expectedType.isInstance(object)) { + var exception = new ConversionException("Invalid type for map entry key/value"); + // c.f. TreeUnmarshaller.addInformationTo + exception.add("required-type", expectedType.getName()); + exception.add("class", object.getClass().getName()); + exception.add("converter-type", getClass().getName()); + reader.appendErrors(exception); + RobustReflectionConverter.addErrorInContext(context, exception); + return ERROR; + } + return object; } catch (CriticalXStreamException x) { throw x; } catch (XStreamException | LinkageError x) { diff --git a/core/src/main/java/hudson/util/RobustReflectionConverter.java b/core/src/main/java/hudson/util/RobustReflectionConverter.java index d1bc500003e12..686aad13c342a 100644 --- a/core/src/main/java/hudson/util/RobustReflectionConverter.java +++ b/core/src/main/java/hudson/util/RobustReflectionConverter.java @@ -48,6 +48,7 @@ import hudson.model.Saveable; import hudson.security.ACL; import java.lang.reflect.Field; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; @@ -65,6 +66,7 @@ import jenkins.util.xstream.CriticalXStreamException; import net.jcip.annotations.GuardedBy; import org.acegisecurity.Authentication; +import org.jvnet.tiger_types.Types; /** * Custom {@link ReflectionConverter} that handle errors more gracefully. @@ -80,7 +82,7 @@ @SuppressWarnings({"rawtypes", "unchecked"}) public class RobustReflectionConverter implements Converter { - private static /* non-final for Groovy */ boolean RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = SystemProperties.getBoolean(RobustReflectionConverter.class.getName() + ".recordFailuresForAllAuthentications", false); + static /* non-final for Groovy */ boolean RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = SystemProperties.getBoolean(RobustReflectionConverter.class.getName() + ".recordFailuresForAllAuthentications", false); private static /* non-final for Groovy */ boolean RECORD_FAILURES_FOR_ADMINS = SystemProperties.getBoolean(RobustReflectionConverter.class.getName() + ".recordFailuresForAdmins", false); protected final ReflectionProvider reflectionProvider; @@ -324,7 +326,8 @@ public Object doUnmarshal(final Object result, final HierarchicalStreamReader re } } - Map implicitCollectionsForCurrentObject = null; + Map> implicitCollectionsForCurrentObject = new HashMap<>(); + Map> implicitCollectionElementTypesForCurrentObject = new HashMap<>(); while (reader.hasMoreChildren()) { reader.moveDown(); @@ -365,7 +368,7 @@ public Object doUnmarshal(final Object result, final HierarchicalStreamReader re reflectionProvider.writeField(result, fieldName, value, classDefiningField); seenFields.add(classDefiningField, fieldName); } else { - implicitCollectionsForCurrentObject = writeValueToImplicitCollection(context, value, implicitCollectionsForCurrentObject, result, fieldName); + writeValueToImplicitCollection(reader, context, value, implicitCollectionsForCurrentObject, implicitCollectionElementTypesForCurrentObject, result, fieldName); } } } catch (CriticalXStreamException e) { @@ -451,18 +454,23 @@ private boolean fieldDefinedInClass(Object result, String attrName) { protected Object unmarshalField(final UnmarshallingContext context, final Object result, Class type, Field field) { Converter converter = mapper.getLocalConverter(field.getDeclaringClass(), field.getName()); + if (converter == null) { + if (new RobustCollectionConverter(mapper, reflectionProvider).canConvert(type)) { + converter = new RobustCollectionConverter(mapper, reflectionProvider, field.getGenericType()); + } else if (new RobustMapConverter(mapper).canConvert(type)) { + converter = new RobustMapConverter(mapper, field.getGenericType()); + } + } return context.convertAnother(result, type, converter); } - private Map writeValueToImplicitCollection(UnmarshallingContext context, Object value, Map implicitCollections, Object result, String itemFieldName) { + private void writeValueToImplicitCollection(HierarchicalStreamReader reader, UnmarshallingContext context, Object value, Map> implicitCollections, Map> implicitCollectionElementTypes, Object result, String itemFieldName) { String fieldName = mapper.getFieldNameForItemTypeAndName(context.getRequiredType(), value.getClass(), itemFieldName); if (fieldName != null) { - if (implicitCollections == null) { - implicitCollections = new HashMap(); // lazy instantiation - } - Collection collection = (Collection) implicitCollections.get(fieldName); + Collection collection = implicitCollections.get(fieldName); if (collection == null) { - Class fieldType = mapper.defaultImplementationOf(reflectionProvider.getFieldType(result, fieldName, null)); + Field field = reflectionProvider.getField(result.getClass(), fieldName); + Class fieldType = mapper.defaultImplementationOf(field.getType()); if (!Collection.class.isAssignableFrom(fieldType)) { throw new ObjectAccessException("Field " + fieldName + " of " + result.getClass().getName() + " is configured for an implicit Collection, but field is of type " + fieldType.getName()); @@ -473,10 +481,25 @@ private Map writeValueToImplicitCollection(UnmarshallingContext context, Object collection = (Collection) pureJavaReflectionProvider.newInstance(fieldType); reflectionProvider.writeField(result, fieldName, collection, null); implicitCollections.put(fieldName, collection); + Type fieldGenericType = field.getGenericType(); + Type elementGenericType = Types.getTypeArgument(Types.getBaseClass(fieldGenericType, Collection.class), 0, Object.class); + Class elementType = Types.erasure(elementGenericType); + implicitCollectionElementTypes.put(fieldName, elementType); + } + Class elementType = implicitCollectionElementTypes.getOrDefault(fieldName, Object.class); + if (!elementType.isInstance(value)) { + var exception = new ConversionException("Invalid element type for implicit collection for field: " + fieldName); + // c.f. TreeUnmarshaller.addInformationTo + exception.add("required-type", elementType.getName()); + exception.add("class", value.getClass().getName()); + exception.add("converter-type", getClass().getName()); + reader.appendErrors(exception); + throw exception; } collection.add(value); + } else { + // TODO: Should we warn in this case? The value will be ignored. } - return implicitCollections; } private Class determineWhichClassDefinesField(HierarchicalStreamReader reader) { diff --git a/core/src/test/java/hudson/util/RobustCollectionConverterTest.java b/core/src/test/java/hudson/util/RobustCollectionConverterTest.java index 7786fb0833f76..57f2ad42af39c 100644 --- a/core/src/test/java/hudson/util/RobustCollectionConverterTest.java +++ b/core/src/test/java/hudson/util/RobustCollectionConverterTest.java @@ -32,6 +32,8 @@ import static org.junit.Assert.assertTrue; import com.thoughtworks.xstream.security.InputManipulationException; +import hudson.model.Saveable; +import java.io.IOException; import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; @@ -42,10 +44,24 @@ import java.util.Map; import java.util.Set; import jenkins.util.xstream.CriticalXStreamException; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.jvnet.hudson.test.Issue; public class RobustCollectionConverterTest { + private final boolean originalRecordFailures = RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS; + + @Before + public void before() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = true; + } + + @After + public void after() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = originalRecordFailures; + } + @Test public void workingByDefaultWithSimplePayload() { XStream2 xstream2 = new XStream2(); @@ -173,4 +189,58 @@ private Set preparePayload() { } return set; } + + @Issue("JENKINS-63343") + @Test + public void checkElementTypes() { + var xmlContent = + """ + + + 1 + 2 + oops! + + 3 + + + """; + var actual = (Data) new XStream2().fromXML(xmlContent); + assertEquals(Arrays.asList(1, 2, null, 3), actual.numbers); + } + + @Test + public void rawtypes() { + var xmlContent = + """ + + + 1 + 2 + oops! + 3 + + + """; + var actual = (DataRaw) new XStream2().fromXML(xmlContent); + assertEquals(List.of(1, 2, "oops!", 3), actual.values); + } + + public static class Data implements Saveable { + private List numbers; + + @Override + public void save() throws IOException { + // We only implement Saveable so that RobustReflectionConverter logs deserialization problems. + } + } + + public static class DataRaw implements Saveable { + private List values; + + @Override + public void save() throws IOException { + // We only implement Saveable so that RobustReflectionConverter logs deserialization problems. + } + } } diff --git a/core/src/test/java/hudson/util/RobustMapConverterTest.java b/core/src/test/java/hudson/util/RobustMapConverterTest.java index b74ac9303f71b..c46a7ade2f576 100644 --- a/core/src/test/java/hudson/util/RobustMapConverterTest.java +++ b/core/src/test/java/hudson/util/RobustMapConverterTest.java @@ -32,13 +32,29 @@ import static org.junit.Assert.assertTrue; import com.thoughtworks.xstream.security.InputManipulationException; +import hudson.model.Saveable; +import java.io.IOException; import java.util.HashMap; import java.util.Map; import jenkins.util.xstream.CriticalXStreamException; +import org.junit.After; +import org.junit.Before; import org.junit.Test; import org.jvnet.hudson.test.Issue; public class RobustMapConverterTest { + private final boolean originalRecordFailures = RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS; + + @Before + public void before() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = true; + } + + @After + public void after() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = originalRecordFailures; + } + /** * As RobustMapConverter is the replacer of the default MapConverter * We had to patch it in order to not be impacted by CVE-2021-43859 @@ -146,6 +162,7 @@ private Map preparePayload() { @Test public void robustAgainstInvalidEntry() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = true; XStream2 xstream2 = new XStream2(); String xml = """ @@ -184,7 +201,103 @@ public void robustAgainstInvalidEntryWithNoValue() { assertThat(data.map, equalTo(Map.of("key2", "value2"))); } - private static final class Data { + @Issue("JENKINS-63343") + @Test + public void robustAgainstInvalidKeyType() { + XStream2 xstream2 = new XStream2(); + String xml = + """ + + + + 1 + value1 + + + key2 + value2 + + + + value3 + + + + """; + Data data = (Data) xstream2.fromXML(xml); + var map = new HashMap<>(); + map.put("key2", "value2"); + map.put(null, "value3"); + assertThat(data.map, equalTo(map)); + } + + @Issue("JENKINS-63343") + @Test + public void robustAgainstInvalidValueType() { + XStream2 xstream2 = new XStream2(); + String xml = + """ + + + + key1 + value1 + + + key2 + 2 + + + key3 + + + + + """; + Data data = (Data) xstream2.fromXML(xml); + var map = new HashMap<>(); + map.put("key1", "value1"); + map.put("key3", null); + assertThat(data.map, equalTo(map)); + } + + @Test + public void rawtypes() { + XStream2 xstream2 = new XStream2(); + String xml = + """ + + + + key1 + value1 + + + key2 + 2 + + + + """; + var data = (DataRaw) xstream2.fromXML(xml); + assertThat(data.map, equalTo(Map.of("key1", "value1", "key2", 2))); + } + + private static class Data implements Saveable { Map map; + + @Override + public void save() throws IOException { + // We only implement Saveable so that RobustReflectionConverter logs deserialization problems. + } + } + + private static class DataRaw implements Saveable { + Map map; + + @Override + public void save() throws IOException { + // We only implement Saveable so that RobustReflectionConverter logs deserialization problems. + } } } diff --git a/core/src/test/java/hudson/util/RobustReflectionConverterTest.java b/core/src/test/java/hudson/util/RobustReflectionConverterTest.java index bb392132afdd8..9f3da4b754b3d 100644 --- a/core/src/test/java/hudson/util/RobustReflectionConverterTest.java +++ b/core/src/test/java/hudson/util/RobustReflectionConverterTest.java @@ -26,6 +26,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -41,6 +42,8 @@ import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.mapper.Mapper; import com.thoughtworks.xstream.security.InputManipulationException; +import hudson.model.Saveable; +import java.io.IOException; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; @@ -52,6 +55,9 @@ import java.util.logging.Logger; import jenkins.util.xstream.CriticalXStreamException; import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.Before; +import org.junit.Ignore; import org.junit.Test; import org.jvnet.hudson.test.Issue; @@ -59,11 +65,22 @@ * @author Kohsuke Kawaguchi */ public class RobustReflectionConverterTest { + private final boolean originalRecordFailures = RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS; static { Logger.getLogger(RobustReflectionConverter.class.getName()).setLevel(Level.OFF); } + @Before + public void before() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = true; + } + + @After + public void after() { + RobustReflectionConverter.RECORD_FAILURES_FOR_ALL_AUTHENTICATIONS = originalRecordFailures; + } + @Test public void robustUnmarshalling() { Point p = read(new XStream2()); @@ -132,8 +149,72 @@ public void implicitCollection() { "", xs.toXML(h)); } - public static class Hold { + @Ignore("Throws an NPE in writeValueToImplicitCollection. Issue has existed since RobustReflectionConverter was created.") + @Test + public void implicitCollectionsAllowNullElements() { + XStream2 xs = new XStream2(); + xs.alias("hold", Hold.class); + xs.addImplicitCollection(Hold.class, "items", "item", String.class); + Hold h = (Hold) xs.fromXML("b"); + assertThat(h.items, Matchers.containsInAnyOrder(null, "b")); + assertEquals("\n" + + " \n" + + " b\n" + + "", xs.toXML(h)); + } + + @Issue("JENKINS-63343") + @Test + public void robustAgainstImplicitCollectionElementsWithBadTypes() { + XStream2 xs = new XStream2(); + xs.alias("hold", Hold.class); + // Note that the fix only matters for `addImplicitCollection` overloads like the following where the element type is not provided. + xs.addImplicitCollection(Hold.class, "items"); + Hold h = (Hold) xs.fromXML( + """ + + 123 + abc + 456 + def + + """); + assertThat(h.items, equalTo(List.of("abc", "def"))); + } + + public static class Hold implements Saveable { List items; + + @Override + public void save() throws IOException { + // We only implement Saveable so that RobustReflectionConverter logs deserialization problems. + } + } + + @Test + public void implicitCollectionRawtypes() { + XStream2 xs = new XStream2(); + xs.alias("hold", HoldRaw.class); + xs.addImplicitCollection(HoldRaw.class, "items"); + var h = (HoldRaw) xs.fromXML( + """ + + 123 + abc + 456 + def + + """); + assertThat(h.items, equalTo(List.of(123, "abc", 456, "def"))); + } + + public static class HoldRaw implements Saveable { + List items; + + @Override + public void save() throws IOException { + // We only implement Saveable so that RobustReflectionConverter logs deserialization problems. + } } @Retention(RetentionPolicy.RUNTIME) @interface Owner { From 3ee0e787ff815a15a4aabc2ceea099236294c190 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:55:56 -0700 Subject: [PATCH 75/83] Update jenkins/ath Docker tag to v6038 (#9854) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- ath.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ath.sh b/ath.sh index a246733c5c2c2..7009d692b8d0f 100644 --- a/ath.sh +++ b/ath.sh @@ -6,7 +6,7 @@ set -o xtrace cd "$(dirname "$0")" # https://github.com/jenkinsci/acceptance-test-harness/releases -export ATH_VERSION=6034.vfb_c575f4f616 +export ATH_VERSION=6038.v190f938efc87 if [[ $# -eq 0 ]]; then export JDK=17 From 4a9fb7739a298d0019124b38892caa4a6a4d3b47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:56:19 -0700 Subject: [PATCH 76/83] Update dependency org.jenkins-ci.plugins:credentials to v1389 (#9853) Co-authored-by: renovate[bot] <29139614+renovate[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 019fe23d98b6f..c911388fdef33 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -224,7 +224,7 @@ THE SOFTWARE. org.jenkins-ci.plugins credentials - 1384.vf0a_2ed06f9c6 + 1389.vd7a_b_f5fa_50a_2 test From 925de03663e9768d6f64d19b0b0ed04596f338d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 11:56:41 -0700 Subject: [PATCH 77/83] Update dependency org.jenkins-ci.main:jenkins-test-harness to v2341 (#9850) Co-authored-by: renovate[bot] <29139614+renovate[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 c911388fdef33..ba67c98041371 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -178,7 +178,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-test-harness - 2307.v10e5d0701b_e5 + 2341.v35346d95d2b_7 test From d34b17ee4b85787be56a2d6f32186e3839d5482d Mon Sep 17 00:00:00 2001 From: Devin Nusbaum Date: Sat, 12 Oct 2024 08:06:18 -0400 Subject: [PATCH 78/83] [JENKINS-73835] Do not allow builds to be deleted while they are still running and ensure build discarders run after builds are fully complete (#9810) * [JENKINS-73835] Do not allow builds to be deleted while they are still running * [JENKINS-73835] Avoid redundant calls to Job.logRotate when builds complete and always call Job.logRotate after build finalization * [JENKINS-73835] Add issue reference to RunTest.buildsMayNotBeDeletedWhileRunning * [JENKINS-73835] Adjust DeleteBuildsCommandTest.deleteBuildsShouldSuccessEvenTheBuildIsRunning to match new behavior * [JENKINS-73835] Run/delete.jelly should check Run.isLogUpdated, not Run.isBuilding --- core/src/main/java/hudson/model/Run.java | 9 +++----- .../main/java/hudson/tasks/LogRotator.java | 2 +- .../model/BackgroundGlobalBuildDiscarder.java | 13 +++++++++++- .../model/GlobalBuildDiscarderListener.java | 13 ++++++++++-- .../resources/hudson/model/Run/delete.jelly | 2 +- .../hudson/cli/DeleteBuildsCommandTest.java | 21 ++++++------------- test/src/test/java/hudson/model/RunTest.java | 14 +++++++++++++ .../java/hudson/tasks/LogRotatorTest.java | 16 ++++++++++++++ 8 files changed, 64 insertions(+), 26 deletions(-) diff --git a/core/src/main/java/hudson/model/Run.java b/core/src/main/java/hudson/model/Run.java index 450be07b7f1a3..ec7eaabf32c60 100644 --- a/core/src/main/java/hudson/model/Run.java +++ b/core/src/main/java/hudson/model/Run.java @@ -1551,6 +1551,9 @@ public synchronized void deleteArtifacts() throws IOException { * if we fail to delete. */ public void delete() throws IOException { + if (isLogUpdated()) { + throw new IOException("Unable to delete " + this + " because it is still running"); + } synchronized (this) { // Avoid concurrent delete. See https://issues.jenkins.io/browse/JENKINS-61687 if (isPendingDelete) { @@ -1885,12 +1888,6 @@ protected final void execute(@NonNull RunExecution job) { LOGGER.log(Level.SEVERE, "Failed to save build record", e); } } - - try { - getParent().logRotate(); - } catch (Exception e) { - LOGGER.log(Level.SEVERE, "Failed to rotate log", e); - } } finally { onEndBuilding(); if (logger != null) { diff --git a/core/src/main/java/hudson/tasks/LogRotator.java b/core/src/main/java/hudson/tasks/LogRotator.java index ca95081b0385f..0b47f035d8096 100644 --- a/core/src/main/java/hudson/tasks/LogRotator.java +++ b/core/src/main/java/hudson/tasks/LogRotator.java @@ -250,7 +250,7 @@ private boolean shouldKeepRun(Run r, Run lsb, Run lstb) { LOGGER.log(FINER, "{0} is not to be removed or purged of artifacts because it’s the last stable build", r); return true; } - if (r.isBuilding()) { + if (r.isLogUpdated()) { LOGGER.log(FINER, "{0} is not to be removed or purged of artifacts because it’s still building", r); return true; } diff --git a/core/src/main/java/jenkins/model/BackgroundGlobalBuildDiscarder.java b/core/src/main/java/jenkins/model/BackgroundGlobalBuildDiscarder.java index 1a42c0577a479..ad33643879f57 100644 --- a/core/src/main/java/jenkins/model/BackgroundGlobalBuildDiscarder.java +++ b/core/src/main/java/jenkins/model/BackgroundGlobalBuildDiscarder.java @@ -31,6 +31,7 @@ import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.stream.Stream; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; @@ -56,8 +57,18 @@ protected void execute(TaskListener listener) throws IOException, InterruptedExc } } + /** + * Runs all globally configured build discarders against a job. + */ public static void processJob(TaskListener listener, Job job) { - GlobalBuildDiscarderConfiguration.get().getConfiguredBuildDiscarders().forEach(strategy -> { + processJob(listener, job, GlobalBuildDiscarderConfiguration.get().getConfiguredBuildDiscarders().stream()); + } + + /** + * Runs the specified build discarders against a job. + */ + public static void processJob(TaskListener listener, Job job, Stream strategies) { + strategies.forEach(strategy -> { String displayName = strategy.getDescriptor().getDisplayName(); if (strategy.isApplicable(job)) { try { diff --git a/core/src/main/java/jenkins/model/GlobalBuildDiscarderListener.java b/core/src/main/java/jenkins/model/GlobalBuildDiscarderListener.java index 7ddea84c4241c..6d2c58b447746 100644 --- a/core/src/main/java/jenkins/model/GlobalBuildDiscarderListener.java +++ b/core/src/main/java/jenkins/model/GlobalBuildDiscarderListener.java @@ -35,7 +35,7 @@ import org.kohsuke.accmod.restrictions.NoExternalUse; /** - * Run background build discarders on an individual job once a build is finalized + * Run build discarders on an individual job once a build is finalized */ @Extension @Restricted(NoExternalUse.class) @@ -46,6 +46,15 @@ public class GlobalBuildDiscarderListener extends RunListener { @Override public void onFinalized(Run run) { Job job = run.getParent(); - BackgroundGlobalBuildDiscarder.processJob(new LogTaskListener(LOGGER, Level.FINE), job); + try { + // Job-level build discarder execution is unconditional. + job.logRotate(); + } catch (Exception e) { + LOGGER.log(Level.WARNING, e, () -> "Failed to rotate log for " + run); + } + // Avoid calling Job.logRotate twice in case JobGlobalBuildDiscarderStrategy is configured globally. + BackgroundGlobalBuildDiscarder.processJob(new LogTaskListener(LOGGER, Level.FINE), job, + GlobalBuildDiscarderConfiguration.get().getConfiguredBuildDiscarders().stream() + .filter(s -> !(s instanceof JobGlobalBuildDiscarderStrategy))); } } diff --git a/core/src/main/resources/hudson/model/Run/delete.jelly b/core/src/main/resources/hudson/model/Run/delete.jelly index 83e3cbd77e712..7443203f2650a 100644 --- a/core/src/main/resources/hudson/model/Run/delete.jelly +++ b/core/src/main/resources/hudson/model/Run/delete.jelly @@ -27,7 +27,7 @@ THE SOFTWARE. --> - + diff --git a/test/src/test/java/hudson/cli/DeleteBuildsCommandTest.java b/test/src/test/java/hudson/cli/DeleteBuildsCommandTest.java index dfac64fc1b5aa..5e2e917e98082 100644 --- a/test/src/test/java/hudson/cli/DeleteBuildsCommandTest.java +++ b/test/src/test/java/hudson/cli/DeleteBuildsCommandTest.java @@ -32,21 +32,18 @@ import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.hasSize; import static org.junit.Assert.assertNotNull; -import static org.junit.Assume.assumeFalse; -import hudson.Functions; import hudson.model.ExecutorTest; import hudson.model.FreeStyleProject; import hudson.model.Item; import hudson.model.Run; import hudson.model.labels.LabelAtom; import hudson.tasks.Shell; -import java.io.IOException; import jenkins.model.Jenkins; -import org.junit.AssumptionViolatedException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; /** @@ -139,8 +136,8 @@ public class DeleteBuildsCommandTest { assertThat(result.stdout(), containsString("Deleted 0 builds")); } - @Test public void deleteBuildsShouldSuccessEvenTheBuildIsRunning() throws Exception { - assumeFalse("You can't delete files that are in use on Windows", Functions.isWindows()); + @Issue("JENKINS-73835") + @Test public void deleteBuildsShouldFailIfTheBuildIsRunning() throws Exception { FreeStyleProject project = j.createFreeStyleProject("aProject"); ExecutorTest.startBlockingBuild(project); assertThat(((FreeStyleProject) j.jenkins.getItem("aProject")).getBuilds(), hasSize(1)); @@ -148,15 +145,9 @@ public class DeleteBuildsCommandTest { final CLICommandInvoker.Result result = command .authorizedTo(Jenkins.READ, Item.READ, Run.DELETE) .invokeWithArgs("aProject", "1"); - assertThat(result, succeeded()); - assertThat(result.stdout(), containsString("Deleted 1 builds")); - assertThat(((FreeStyleProject) j.jenkins.getItem("aProject")).getBuilds(), hasSize(0)); - assertThat(project.isBuilding(), equalTo(false)); - try { - project.delete(); - } catch (IOException | InterruptedException x) { - throw new AssumptionViolatedException("Could not delete test project (race condition?)", x); - } + assertThat(result, failedWith(1)); + assertThat(result, hasNoStandardOutput()); + assertThat(result.stderr(), containsString("Unable to delete aProject #1 because it is still running")); } @Test public void deleteBuildsShouldSuccessEvenTheBuildIsStuckInTheQueue() throws Exception { diff --git a/test/src/test/java/hudson/model/RunTest.java b/test/src/test/java/hudson/model/RunTest.java index 34be1f14c2ef5..4df895309abb9 100644 --- a/test/src/test/java/hudson/model/RunTest.java +++ b/test/src/test/java/hudson/model/RunTest.java @@ -30,6 +30,7 @@ import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; import hudson.ExtensionList; @@ -62,6 +63,7 @@ import org.junit.experimental.categories.Category; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.SleepBuilder; import org.jvnet.hudson.test.SmokeTest; import org.jvnet.hudson.test.TestExtension; import org.kohsuke.stapler.DataBoundConstructor; @@ -128,6 +130,18 @@ public void onDeleted(Saveable o, XmlFile file) { } } + @Issue("JENKINS-73835") + @Test public void buildsMayNotBeDeletedWhileRunning() throws Exception { + var p = j.createFreeStyleProject(); + p.getBuildersList().add(new SleepBuilder(999999)); + var b = p.scheduleBuild2(0).waitForStart(); + var ex = assertThrows(IOException.class, () -> b.delete()); + assertThat(ex.getMessage(), containsString("Unable to delete " + b + " because it is still running")); + b.getExecutor().interrupt(); + j.waitForCompletion(b); + b.delete(); // Works fine. + } + @Issue("SECURITY-1902") @Test public void preventXssInBadgeTooltip() throws Exception { j.jenkins.setQuietPeriod(0); diff --git a/test/src/test/java/hudson/tasks/LogRotatorTest.java b/test/src/test/java/hudson/tasks/LogRotatorTest.java index b72e837dbd86a..118a860147a1e 100644 --- a/test/src/test/java/hudson/tasks/LogRotatorTest.java +++ b/test/src/test/java/hudson/tasks/LogRotatorTest.java @@ -50,8 +50,10 @@ import java.util.concurrent.TimeoutException; import java.util.logging.Level; import java.util.logging.Logger; +import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; +import org.jvnet.hudson.test.BuildWatcher; import org.jvnet.hudson.test.FailureBuilder; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; @@ -62,6 +64,9 @@ */ public class LogRotatorTest { + @ClassRule + public static BuildWatcher watcher = new BuildWatcher(); + @Rule public JenkinsRule j = new JenkinsRule(); @@ -96,6 +101,17 @@ public void successVsFailureWithRemoveLastBuild() throws Exception { assertEquals(2, numberOf(project.getLastFailedBuild())); } + @Test + public void ableToDeleteCurrentBuild() throws Exception { + var p = j.createFreeStyleProject(); + // Keep 0 builds, i.e. immediately delete builds as they complete. + LogRotator logRotator = new LogRotator(-1, 0, -1, -1); + logRotator.setRemoveLastBuild(true); + p.setBuildDiscarder(logRotator); + j.buildAndAssertStatus(Result.SUCCESS, p); + assertNull(p.getBuildByNumber(1)); + } + @Test @Issue("JENKINS-2417") public void stableVsUnstable() throws Exception { From 829be14884ec3af76ee9c28b5670856e2829476a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 06:06:31 -0600 Subject: [PATCH 79/83] Fill in since annotations (#9849) Co-authored-by: timja <21194782+timja@users.noreply.github.com> --- core/src/main/java/hudson/model/ComputerSet.java | 2 +- .../main/java/hudson/model/listeners/SaveableListener.java | 4 ++-- core/src/main/java/hudson/security/AuthorizationStrategy.java | 2 +- core/src/main/java/jenkins/model/IComputer.java | 2 +- core/src/main/java/jenkins/model/IDisplayExecutor.java | 2 +- core/src/main/java/jenkins/model/IExecutor.java | 2 +- .../main/java/jenkins/model/ModelObjectWithContextMenu.java | 4 ++-- core/src/main/java/jenkins/model/queue/ITask.java | 2 +- 8 files changed, 10 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/hudson/model/ComputerSet.java b/core/src/main/java/hudson/model/ComputerSet.java index f8e4905b09047..fcc0aa4e41e73 100644 --- a/core/src/main/java/hudson/model/ComputerSet.java +++ b/core/src/main/java/hudson/model/ComputerSet.java @@ -118,7 +118,7 @@ public static List get_monitors() { * @deprecated Use {@link #getComputers()} instead. * @return All {@link Computer} instances managed by this set. */ - @Deprecated(since = "TODO") + @Deprecated(since = "2.480") public Computer[] get_all() { return getComputers().stream().filter(Computer.class::isInstance).toArray(Computer[]::new); } diff --git a/core/src/main/java/hudson/model/listeners/SaveableListener.java b/core/src/main/java/hudson/model/listeners/SaveableListener.java index 02747877e76f8..14877d080bf53 100644 --- a/core/src/main/java/hudson/model/listeners/SaveableListener.java +++ b/core/src/main/java/hudson/model/listeners/SaveableListener.java @@ -60,7 +60,7 @@ public void onChange(Saveable o, XmlFile file) {} * The saveable object. * @param file * The {@link XmlFile} for this saveable object. - * @since TODO + * @since 2.480 */ public void onDeleted(Saveable o, XmlFile file) {} @@ -92,7 +92,7 @@ public static void fireOnChange(Saveable o, XmlFile file) { /** * Fires the {@link #onDeleted} event. - * @since TODO + * @since 2.480 */ public static void fireOnDeleted(Saveable o, XmlFile file) { Listeners.notify(SaveableListener.class, false, l -> l.onDeleted(o, file)); diff --git a/core/src/main/java/hudson/security/AuthorizationStrategy.java b/core/src/main/java/hudson/security/AuthorizationStrategy.java index 08fa10fe9897d..5ca218f6a8fdb 100644 --- a/core/src/main/java/hudson/security/AuthorizationStrategy.java +++ b/core/src/main/java/hudson/security/AuthorizationStrategy.java @@ -162,7 +162,7 @@ public abstract class AuthorizationStrategy extends AbstractDescribableImpl Date: Sat, 12 Oct 2024 08:06:47 -0400 Subject: [PATCH 80/83] Correctly iterate `IComputer`s from `ComputerSet/index.jelly` (#9852) --- core/src/main/resources/hudson/model/ComputerSet/index.jelly | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/hudson/model/ComputerSet/index.jelly b/core/src/main/resources/hudson/model/ComputerSet/index.jelly index 1b3c9aa1ea02a..c96346ac49490 100644 --- a/core/src/main/resources/hudson/model/ComputerSet/index.jelly +++ b/core/src/main/resources/hudson/model/ComputerSet/index.jelly @@ -73,7 +73,7 @@ THE SOFTWARE. - +
From 4622a85d170b2a5a3b681ba0a6f7dcce6a9195b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 12 Oct 2024 06:07:46 -0600 Subject: [PATCH 81/83] Update dependency globals to v15.11.0 (#9856) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 6e01d39f94bf9..bee799d33b554 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "eslint": "9.12.0", "eslint-config-prettier": "9.1.0", "eslint-formatter-checkstyle": "8.40.0", - "globals": "15.10.0", + "globals": "15.11.0", "handlebars-loader": "1.7.3", "mini-css-extract-plugin": "2.9.1", "postcss": "8.4.47", diff --git a/yarn.lock b/yarn.lock index 1c9ced4c8b74d..c2f3678b1cc09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3999,10 +3999,10 @@ __metadata: languageName: node linkType: hard -"globals@npm:15.10.0": - version: 15.10.0 - resolution: "globals@npm:15.10.0" - checksum: 10c0/fef8f320e88f01f1492fef1b04b056908e1f6726eeaffe3bca03247237300c2d86e71585ee641b62ba71460a6eaff0d6ca7fca284e61bd1b3f833c7ad68b160a +"globals@npm:15.11.0": + version: 15.11.0 + resolution: "globals@npm:15.11.0" + checksum: 10c0/861e39bb6bd9bd1b9f355c25c962e5eb4b3f0e1567cf60fa6c06e8c502b0ec8706b1cce055d69d84d0b7b8e028bec5418cf629a54e7047e116538d1c1c1a375c languageName: node linkType: hard @@ -4418,7 +4418,7 @@ __metadata: eslint: "npm:9.12.0" eslint-config-prettier: "npm:9.1.0" eslint-formatter-checkstyle: "npm:8.40.0" - globals: "npm:15.10.0" + globals: "npm:15.11.0" handlebars: "npm:4.7.8" handlebars-loader: "npm:1.7.3" hotkeys-js: "npm:3.12.2" From d0d0cc88c765a25cee7e5214582b9db1b2253949 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Sat, 12 Oct 2024 08:59:27 -0700 Subject: [PATCH 82/83] Winstone 8.2: Upgrade Jetty from 12.0.13 to Jetty 12.0.14 (#9841) --- pom.xml | 2 +- war/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 0ae24f547d808..1a472b3fd02a7 100644 --- a/pom.xml +++ b/pom.xml @@ -97,7 +97,7 @@ THE SOFTWARE. 1.30 false - 8.1 + 8.2 20.18.0 diff --git a/war/pom.xml b/war/pom.xml index 6511cded90fcd..770d20d1047c2 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -645,7 +645,7 @@ THE SOFTWARE. org.eclipse.jetty.ee9 jetty-ee9-maven-plugin - 12.0.13 + 12.0.14