From b8ac8cd4c51511b9f844846ba80a8aed054288c5 Mon Sep 17 00:00:00 2001 From: Daniel Beck Date: Wed, 6 Sep 2023 11:17:13 +0000 Subject: [PATCH 01/52] [SECURITY-3261] --- .../jenkins/widgets/HistoryPageFilter.java | 6 +- .../widgets/HistoryPageFilterTest.java | 7 + .../widgets/HistoryPageFilterTest.java | 122 ++++++++++++++++++ 3 files changed, 133 insertions(+), 2 deletions(-) create mode 100644 test/src/test/java/jenkins/widgets/HistoryPageFilterTest.java diff --git a/core/src/main/java/jenkins/widgets/HistoryPageFilter.java b/core/src/main/java/jenkins/widgets/HistoryPageFilter.java index adc09b12f22d..cc64f7b3630a 100644 --- a/core/src/main/java/jenkins/widgets/HistoryPageFilter.java +++ b/core/src/main/java/jenkins/widgets/HistoryPageFilter.java @@ -42,6 +42,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import jenkins.model.queue.QueueItem; /** @@ -371,8 +372,9 @@ private boolean fitsSearchString(Object data) { private boolean fitsSearchBuildVariables(AbstractBuild runAsBuild) { Map buildVariables = runAsBuild.getBuildVariables(); - for (String paramsValues : buildVariables.values()) { - if (fitsSearchString(paramsValues)) { + Set sensitiveBuildVariables = runAsBuild.getSensitiveBuildVariables(); + for (Map.Entry param : buildVariables.entrySet()) { + if (!sensitiveBuildVariables.contains(param.getKey()) && fitsSearchString(param.getValue())) { return true; } } diff --git a/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java b/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java index 34f7800d33fb..8739093c606c 100644 --- a/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java +++ b/core/src/test/java/jenkins/widgets/HistoryPageFilterTest.java @@ -43,6 +43,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import jenkins.model.queue.QueueItem; import org.junit.Assert; @@ -485,6 +486,7 @@ private static class MockBuild extends Build { private final int buildNumber; private Map buildVariables = Collections.emptyMap(); + private Set sensitiveBuildVariables = Collections.emptySet(); private MockBuild(int buildNumber) { super(Mockito.mock(FreeStyleProject.class), Mockito.mock(Calendar.class)); @@ -501,6 +503,11 @@ public Map getBuildVariables() { return buildVariables; } + @Override + public Set getSensitiveBuildVariables() { + return sensitiveBuildVariables; // TODO This is never actually set (bad Mock), actual test in test harness + } + MockBuild withBuildVariables(Map buildVariables) { this.buildVariables = buildVariables; return this; diff --git a/test/src/test/java/jenkins/widgets/HistoryPageFilterTest.java b/test/src/test/java/jenkins/widgets/HistoryPageFilterTest.java new file mode 100644 index 000000000000..3dc26fbcaf32 --- /dev/null +++ b/test/src/test/java/jenkins/widgets/HistoryPageFilterTest.java @@ -0,0 +1,122 @@ +package jenkins.widgets; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.empty; + +import hudson.model.AbstractBuild; +import hudson.model.FreeStyleBuild; +import hudson.model.FreeStyleProject; +import hudson.model.ParametersAction; +import hudson.model.ParametersDefinitionProperty; +import hudson.model.PasswordParameterDefinition; +import hudson.model.StringParameterDefinition; +import hudson.tasks.BuildWrapper; +import hudson.util.Secret; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.JenkinsRule; + + +public class HistoryPageFilterTest { + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Test + public void doNotFindSensitiveBuildParams() throws Exception { + final FreeStyleProject freeStyleProject = j.createFreeStyleProject(); + final PasswordParameterDefinition passwordParameterDefinition = new PasswordParameterDefinition("password", Secret.fromString("t0ps3cr3t"), "description"); + final StringParameterDefinition stringParameterDefinition = new StringParameterDefinition("key", "value", "desc"); + freeStyleProject.addProperty(new ParametersDefinitionProperty(passwordParameterDefinition, stringParameterDefinition)); + final FreeStyleBuild build1 = j.buildAndAssertSuccess(freeStyleProject); + final FreeStyleBuild build2 = j.waitForCompletion(Objects.requireNonNull(freeStyleProject.scheduleBuild2( + 0, + new ParametersAction( + passwordParameterDefinition.createValue("p4ssw0rd"), + stringParameterDefinition.createValue("value123")))) + .waitForStart()); + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("value"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs.stream().map(HistoryPageEntry::getEntry).collect(Collectors.toList()), contains(build2, build1)); + assertThat(historyPageFilter.queueItems, empty()); + } + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("t0p"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs, empty()); + assertThat(historyPageFilter.queueItems, empty()); + } + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("value123"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs.stream().map(HistoryPageEntry::getEntry).collect(Collectors.toList()), contains(build2)); + assertThat(historyPageFilter.queueItems, empty()); + } + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("p4ss"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs, empty()); + assertThat(historyPageFilter.queueItems, empty()); + } + } + + @Test + public void doNotFindSensitiveBuildWrapperVars() throws Exception { + final FreeStyleProject freeStyleProject = j.createFreeStyleProject(); + freeStyleProject.getBuildWrappersList().add(new BuildWrapperWithSomeSensitiveVars(Map.of("key1", "value123", "key2", "value234", "key3", "s3cr3t"), Set.of("key3"))); + final FreeStyleBuild build = j.buildAndAssertSuccess(freeStyleProject); + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("value"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs.stream().map(HistoryPageEntry::getEntry).collect(Collectors.toList()), contains(build)); + assertThat(historyPageFilter.queueItems, empty()); + } + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("value123"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs.stream().map(HistoryPageEntry::getEntry).collect(Collectors.toList()), contains(build)); + assertThat(historyPageFilter.queueItems, empty()); + } + { + final HistoryPageFilter historyPageFilter = new HistoryPageFilter<>(30); + historyPageFilter.setSearchString("s3cr3t"); + historyPageFilter.add(freeStyleProject.getBuilds()); + assertThat(historyPageFilter.runs, empty()); + assertThat(historyPageFilter.queueItems, empty()); + } + } + + private static class BuildWrapperWithSomeSensitiveVars extends BuildWrapper { + private final Map variables; + private final Set sensitiveVariables; + + private BuildWrapperWithSomeSensitiveVars(Map variables, Set sensitiveVariables) { + + this.variables = new HashMap<>(variables); + this.sensitiveVariables = new HashSet<>(sensitiveVariables); + } + + @Override + public void makeBuildVariables(AbstractBuild build, Map variables) { + variables.putAll(this.variables); + } + + @Override + public void makeSensitiveBuildVariables(AbstractBuild build, Set sensitiveVariables) { + sensitiveVariables.addAll(this.sensitiveVariables); + } + } +} From 4bf648811f328961627f484349d40420d169cdd0 Mon Sep 17 00:00:00 2001 From: Yaroslav Afenkin Date: Wed, 6 Sep 2023 11:17:19 +0000 Subject: [PATCH 02/52] [SECURITY-3245] --- .../hudson/console/ExpandableDetailsNote.java | 3 +- .../jenkins/security/Security3245Test.java | 68 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 test/src/test/java/jenkins/security/Security3245Test.java diff --git a/core/src/main/java/hudson/console/ExpandableDetailsNote.java b/core/src/main/java/hudson/console/ExpandableDetailsNote.java index 6dcc949199b1..1f558e6a260b 100644 --- a/core/src/main/java/hudson/console/ExpandableDetailsNote.java +++ b/core/src/main/java/hudson/console/ExpandableDetailsNote.java @@ -26,6 +26,7 @@ import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Extension; +import hudson.Functions; import hudson.MarkupText; import java.io.IOException; import java.util.logging.Level; @@ -52,7 +53,7 @@ public ExpandableDetailsNote(String caption, String html) { @Override public ConsoleAnnotator annotate(Object context, MarkupText text, int charPos) { text.addMarkup(charPos, - "
" + html + "
"); + "
" + html + "
"); return null; } diff --git a/test/src/test/java/jenkins/security/Security3245Test.java b/test/src/test/java/jenkins/security/Security3245Test.java new file mode 100644 index 000000000000..9c9a37b46581 --- /dev/null +++ b/test/src/test/java/jenkins/security/Security3245Test.java @@ -0,0 +1,68 @@ +package jenkins.security; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; + +import edu.umd.cs.findbugs.annotations.NonNull; +import hudson.EnvVars; +import hudson.FilePath; +import hudson.Launcher; +import hudson.console.ExpandableDetailsNote; +import hudson.model.FreeStyleBuild; +import hudson.model.FreeStyleProject; +import hudson.model.Run; +import hudson.model.TaskListener; +import hudson.tasks.Builder; +import java.io.IOException; +import java.util.concurrent.atomic.AtomicBoolean; +import jenkins.tasks.SimpleBuildStep; +import org.htmlunit.html.HtmlPage; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; + +public class Security3245Test { + + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Issue("SECURITY-3245") + @Test + public void captionCannotAttributeEscape() throws Exception { + FreeStyleProject p = j.createFreeStyleProject("p"); + p.getBuildersList().add(new ExpandableDetailsNoteTestAction("' onclick=alert(1) foo='bar", "

")); + FreeStyleBuild build = j.buildAndAssertSuccess(p); + + AtomicBoolean alerts = new AtomicBoolean(); + try (JenkinsRule.WebClient wc = j.createWebClient()) { + wc.setAlertHandler((pr, s) -> alerts.set(true)); + final HtmlPage page = wc.goTo(build.getUrl() + "console"); + String content = page.getWebResponse().getContentAsString(); + assertThat(content, containsString("")); + + // Execute JavaScript code to simulate click event + String jsCode = "document.querySelector('.reveal-expandable-detail').dispatchEvent(new MouseEvent('click'));"; + page.executeJavaScript(jsCode); + + Assert.assertFalse("Alert not expected", alerts.get()); + } + } + + static class ExpandableDetailsNoteTestAction extends Builder implements SimpleBuildStep { + + final String caption; + final String html; + + ExpandableDetailsNoteTestAction(String caption, String html) { + this.caption = caption; + this.html = html; + } + + @Override + public void perform(@NonNull Run run, @NonNull FilePath workspace, @NonNull EnvVars env, @NonNull Launcher launcher, @NonNull TaskListener listener) throws IOException { + listener.annotate(new ExpandableDetailsNote(caption, html)); + } + } +} From df7c4ccda8976c06bf31b8fb9938f26fc38501ca Mon Sep 17 00:00:00 2001 From: Kevin-CB Date: Wed, 6 Sep 2023 11:17:25 +0000 Subject: [PATCH 03/52] [SECURITY-3072] --- core/src/main/java/hudson/PluginManager.java | 21 +--- .../hudson/PluginManagerSecurity3072Test.java | 107 ++++++++++++++++++ .../test/java/hudson/PluginManagerTest.java | 27 +++-- 3 files changed, 128 insertions(+), 27 deletions(-) create mode 100644 test/src/test/java/hudson/PluginManagerSecurity3072Test.java diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java index 5d64485cfa1b..bd627324bb19 100644 --- a/core/src/main/java/hudson/PluginManager.java +++ b/core/src/main/java/hudson/PluginManager.java @@ -28,8 +28,6 @@ import static hudson.init.InitMilestone.PLUGINS_LISTED; import static hudson.init.InitMilestone.PLUGINS_PREPARED; import static hudson.init.InitMilestone.PLUGINS_STARTED; -import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; -import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; import static java.util.logging.Level.FINE; import static java.util.logging.Level.INFO; import static java.util.logging.Level.WARNING; @@ -83,7 +81,6 @@ import java.net.URLConnection; import java.net.http.HttpClient; import java.net.http.HttpRequest; -import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.InvalidPathException; import java.nio.file.Paths; @@ -91,10 +88,8 @@ import java.security.CodeSource; import java.time.Duration; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.Collections; -import java.util.EnumSet; import java.util.Enumeration; import java.util.HashMap; import java.util.HashSet; @@ -1883,16 +1878,6 @@ public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, Servl copier = new FileUploadPluginCopier(fileItem); } - if (FileSystems.getDefault().supportedFileAttributeViews().contains("posix")) { - Arrays.stream(Objects.requireNonNull(tmpDir.listFiles())).forEach((file -> { - try { - Files.setPosixFilePermissions(file.toPath(), EnumSet.of(OWNER_READ, OWNER_WRITE)); - } catch (IOException e) { - throw new RuntimeException(e); - } - })); - } - if ("".equals(fileName)) { return new HttpRedirect("advanced"); } @@ -1902,7 +1887,8 @@ public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, Servl } // first copy into a temporary file name - File t = File.createTempFile("uploaded", ".jpi"); + File t = File.createTempFile("uploaded", ".jpi", tmpDir); + tmpDir.deleteOnExit(); t.deleteOnExit(); // TODO Remove this workaround after FILEUPLOAD-293 is resolved. Files.delete(Util.fileToPath(t)); @@ -1913,9 +1899,6 @@ public HttpResponse doUploadPlugin(StaplerRequest req) throws IOException, Servl throw new ServletException(e); } copier.cleanup(); - if (!tmpDir.delete()) { - System.err.println("Failed to delete temporary directory: " + tmpDir); - } final String baseName = identifyPluginShortName(t); diff --git a/test/src/test/java/hudson/PluginManagerSecurity3072Test.java b/test/src/test/java/hudson/PluginManagerSecurity3072Test.java new file mode 100644 index 000000000000..774d6b5ce1c6 --- /dev/null +++ b/test/src/test/java/hudson/PluginManagerSecurity3072Test.java @@ -0,0 +1,107 @@ +package hudson; + +import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; +import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; +import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; +import static org.awaitility.Awaitility.await; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assume.assumeFalse; + +import hudson.model.RootAction; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.attribute.PosixFilePermission; +import java.util.Arrays; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import javax.servlet.ServletException; +import jenkins.model.Jenkins; +import org.htmlunit.html.HtmlForm; +import org.htmlunit.html.HtmlPage; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.TestExtension; +import org.kohsuke.stapler.StaplerRequest; +import org.kohsuke.stapler.StaplerResponse; + +public class PluginManagerSecurity3072Test { + + @Rule + public JenkinsRule r = PluginManagerUtil.newJenkinsRule(); + + @Rule + public TemporaryFolder tmp = new TemporaryFolder(); + + @Test + @Issue("SECURITY-3072") + public void verifyUploadedPluginFromURLPermission() throws Exception { + assumeFalse(Functions.isWindows()); + + HtmlPage page = r.createWebClient().goTo("pluginManager/advanced"); + HtmlForm f = page.getFormByName("uploadPlugin"); + f.getInputByName("pluginUrl").setValue(Jenkins.get().getRootUrl() + "pluginManagerGetPlugin/htmlpublisher.jpi"); + r.submit(f); + + File filesRef = Files.createTempFile("tmp", ".tmp").toFile(); + File filesTmpDir = filesRef.getParentFile(); + filesRef.deleteOnExit(); + + final Set[] filesPermission = new Set[]{new HashSet<>()}; + await().pollInterval(250, TimeUnit.MILLISECONDS) + .atMost(10, TimeUnit.SECONDS) + .until(() -> { + Optional lastUploadedPluginDir = Arrays.stream(Objects.requireNonNull( + filesTmpDir.listFiles((file, fileName) -> + fileName.startsWith("uploadDir")))). + max(Comparator.comparingLong(File::lastModified)); + if (lastUploadedPluginDir.isPresent()) { + filesPermission[0] = Files.getPosixFilePermissions(lastUploadedPluginDir.get().toPath(), LinkOption.NOFOLLOW_LINKS); + Optional pluginFile = Arrays.stream(Objects.requireNonNull( + lastUploadedPluginDir.get().listFiles((file, fileName) -> + fileName.startsWith("uploaded")))). + max(Comparator.comparingLong(File::lastModified)); + assertTrue(pluginFile.isPresent()); + return true; + } else { + return false; + } + }); + assertEquals(EnumSet.of(OWNER_EXECUTE, OWNER_READ, OWNER_WRITE), filesPermission[0]); + } + + @TestExtension("verifyUploadedPluginFromURLPermission") + public static final class ReturnPluginJpiAction implements RootAction { + + @Override + public String getIconFileName() { + return "gear2.png"; + } + + @Override + public String getDisplayName() { + return "URL to retrieve a plugin jpi"; + } + + @Override + public String getUrlName() { + return "pluginManagerGetPlugin"; + } + + public void doDynamic(StaplerRequest staplerRequest, StaplerResponse staplerResponse) throws ServletException, IOException { + staplerResponse.setContentType("application/octet-stream"); + staplerResponse.setStatus(200); + staplerResponse.serveFile(staplerRequest, PluginManagerTest.class.getClassLoader().getResource("plugins/htmlpublisher.jpi")); + } + } +} diff --git a/test/src/test/java/hudson/PluginManagerTest.java b/test/src/test/java/hudson/PluginManagerTest.java index bd761d21d4bd..169b88993f38 100644 --- a/test/src/test/java/hudson/PluginManagerTest.java +++ b/test/src/test/java/hudson/PluginManagerTest.java @@ -24,6 +24,7 @@ package hudson; +import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; import static org.awaitility.Awaitility.await; @@ -173,7 +174,7 @@ public String getUrlName() { } public void doDynamic(StaplerRequest staplerRequest, StaplerResponse staplerResponse) throws ServletException, IOException { - staplerResponse.setContentType("application/octet"); + staplerResponse.setContentType("application/octet-stream"); staplerResponse.setStatus(200); staplerResponse.serveFile(staplerRequest, PluginManagerTest.class.getClassLoader().getResource("plugins/htmlpublisher.jpi")); } @@ -743,24 +744,34 @@ public void verifyUploadedPluginPermission() throws Exception { File dir = tmp.newFolder(); File plugin = new File(dir, "htmlpublisher.jpi"); FileUtils.copyURLToFile(Objects.requireNonNull(getClass().getClassLoader().getResource("plugins/htmlpublisher.jpi")), plugin); - f.getInputByName("name").setValue(plugin.getAbsolutePath()); + f.getInputByName("name").setValueAttribute(plugin.getAbsolutePath()); r.submit(f); - File tmpDir = new File(File.createTempFile("tmp", ".tmp").getParent()); - tmpDir.deleteOnExit(); + File filesRef = Files.createTempFile("tmp", ".tmp").toFile(); + File filesTmpDir = filesRef.getParentFile(); + filesRef.deleteOnExit(); + final Set[] filesPermission = new Set[]{new HashSet<>()}; await().pollInterval(250, TimeUnit.MILLISECONDS) .atMost(10, TimeUnit.SECONDS) .until(() -> { - Optional lastUploadedPlugin = Arrays.stream(Objects.requireNonNull(tmpDir.listFiles((file, fileName) -> fileName.startsWith("uploaded")))).max(Comparator.comparingLong(File::lastModified)); - if (lastUploadedPlugin.isPresent()) { - filesPermission[0] = Files.getPosixFilePermissions(lastUploadedPlugin.get().toPath(), LinkOption.NOFOLLOW_LINKS); + Optional lastUploadedPluginDir = Arrays.stream(Objects.requireNonNull( + filesTmpDir.listFiles((file, fileName) -> + fileName.startsWith("uploadDir")))). + max(Comparator.comparingLong(File::lastModified)); + if (lastUploadedPluginDir.isPresent()) { + filesPermission[0] = Files.getPosixFilePermissions(lastUploadedPluginDir.get().toPath(), LinkOption.NOFOLLOW_LINKS); + Optional pluginFile = Arrays.stream(Objects.requireNonNull( + lastUploadedPluginDir.get().listFiles((file, fileName) -> + fileName.startsWith("uploaded")))). + max(Comparator.comparingLong(File::lastModified)); + assertTrue(pluginFile.isPresent()); return true; } else { return false; } }); - assertEquals(EnumSet.of(OWNER_READ, OWNER_WRITE), filesPermission[0]); + assertEquals(EnumSet.of(OWNER_EXECUTE, OWNER_READ, OWNER_WRITE), filesPermission[0]); } @Test From f06bb8820115996397a2e0010b003ecbf0570865 Mon Sep 17 00:00:00 2001 From: Kevin-CB Date: Wed, 6 Sep 2023 11:17:31 +0000 Subject: [PATCH 04/52] [SECURITY-3073] --- bom/pom.xml | 2 +- .../hudson/util/MultipartFormDataParser.java | 12 ++- .../FileParameterValueSecurity3073Test.java | 81 +++++++++++++++++++ .../model/JenkinsSecurity3073Test.java | 77 ++++++++++++++++++ 4 files changed, 170 insertions(+), 2 deletions(-) create mode 100644 test/src/test/java/hudson/model/FileParameterValueSecurity3073Test.java create mode 100644 test/src/test/java/jenkins/model/JenkinsSecurity3073Test.java diff --git a/bom/pom.xml b/bom/pom.xml index 7f0162f63cf5..ffbb673acf32 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -40,7 +40,7 @@ THE SOFTWARE. 9.5 2.0.7 - 1802.v9e2750160d01 + 1802.1804.va_8d30483a_7f7 2.4.21 diff --git a/core/src/main/java/hudson/util/MultipartFormDataParser.java b/core/src/main/java/hudson/util/MultipartFormDataParser.java index 762c0c35b6b6..ecc4ad292dd7 100644 --- a/core/src/main/java/hudson/util/MultipartFormDataParser.java +++ b/core/src/main/java/hudson/util/MultipartFormDataParser.java @@ -25,6 +25,9 @@ package hudson.util; import edu.umd.cs.findbugs.annotations.CheckForNull; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; import java.util.HashMap; import java.util.Map; import javax.servlet.ServletException; @@ -46,7 +49,6 @@ * @author Kohsuke Kawaguchi */ public class MultipartFormDataParser implements AutoCloseable { - private final ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory()); private final Map byName = new HashMap<>(); /** @@ -74,6 +76,14 @@ public class MultipartFormDataParser implements AutoCloseable { @Restricted(NoExternalUse.class) public MultipartFormDataParser(HttpServletRequest request, int maxParts, long maxPartSize, long maxSize) throws ServletException { + File tmpDir; + try { + tmpDir = Files.createTempDirectory("jenkins-multipart-uploads").toFile(); + } catch (IOException e) { + throw new ServletException("Error creating temporary directory", e); + } + tmpDir.deleteOnExit(); + ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory(DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD, tmpDir)); upload.setFileCountMax(maxParts); upload.setFileSizeMax(maxPartSize); upload.setSizeMax(maxSize); diff --git a/test/src/test/java/hudson/model/FileParameterValueSecurity3073Test.java b/test/src/test/java/hudson/model/FileParameterValueSecurity3073Test.java new file mode 100644 index 000000000000..bcbbd40231e5 --- /dev/null +++ b/test/src/test/java/hudson/model/FileParameterValueSecurity3073Test.java @@ -0,0 +1,81 @@ +package hudson.model; + +import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; +import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; +import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; +import static org.awaitility.Awaitility.await; +import static org.junit.Assert.assertEquals; +import static org.junit.Assume.assumeFalse; + +import hudson.Functions; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.attribute.PosixFilePermission; +import java.util.Arrays; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.apache.commons.io.FileUtils; +import org.htmlunit.html.HtmlForm; +import org.htmlunit.html.HtmlPage; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; + +public class FileParameterValueSecurity3073Test { + + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Rule + public TemporaryFolder tmp = new TemporaryFolder(); + + @Test + @Issue("SECURITY-3073") + public void verifyUploadedFileParameterPermission() throws Exception { + assumeFalse(Functions.isWindows()); + + FreeStyleProject project = j.createFreeStyleProject(); + project.addProperty(new ParametersDefinitionProperty(List.of( + new FileParameterDefinition("filePermission", null) + ))); + File dir = tmp.newFolder(); + File plugin = new File(dir, "htmlpublisher.jpi"); + // We're using a plugin to have a file above DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD + FileUtils.copyURLToFile(Objects.requireNonNull(getClass().getClassLoader().getResource("plugins/htmlpublisher.jpi")), plugin); + + HtmlPage page = j.createWebClient().withThrowExceptionOnFailingStatusCode(false).goTo(project.getUrl() + "/build?delay=0sec"); + HtmlForm form = page.getFormByName("parameters"); + form.getInputByName("file").setValueAttribute(plugin.getAbsolutePath()); + j.submit(form); + + File filesRef = Files.createTempFile("tmp", ".tmp").toFile(); + File filesTmpDir = filesRef.getParentFile(); + filesRef.deleteOnExit(); + + final Set[] filesPermission = new Set[]{new HashSet<>()}; + await().pollInterval(250, TimeUnit.MILLISECONDS) + .atMost(10, TimeUnit.SECONDS) + .until(() -> { + Optional lastUploadedPlugin = Arrays.stream(Objects.requireNonNull( + filesTmpDir.listFiles((file, fileName) -> + fileName.startsWith("jenkins-stapler-uploads")))). + max(Comparator.comparingLong(File::lastModified)); + if (lastUploadedPlugin.isPresent()) { + filesPermission[0] = Files.getPosixFilePermissions(lastUploadedPlugin.get().toPath(), LinkOption.NOFOLLOW_LINKS); + return true; + } else { + return false; + } + }); + assertEquals(EnumSet.of(OWNER_EXECUTE, OWNER_READ, OWNER_WRITE), filesPermission[0]); + } +} diff --git a/test/src/test/java/jenkins/model/JenkinsSecurity3073Test.java b/test/src/test/java/jenkins/model/JenkinsSecurity3073Test.java new file mode 100644 index 000000000000..96c3fb3c634a --- /dev/null +++ b/test/src/test/java/jenkins/model/JenkinsSecurity3073Test.java @@ -0,0 +1,77 @@ +package jenkins.model; + +import static java.nio.file.attribute.PosixFilePermission.OWNER_EXECUTE; +import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; +import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; +import static org.awaitility.Awaitility.await; +import static org.junit.Assert.assertEquals; +import static org.junit.Assume.assumeFalse; + +import hudson.Functions; +import java.io.File; +import java.nio.file.Files; +import java.nio.file.LinkOption; +import java.nio.file.attribute.PosixFilePermission; +import java.util.Arrays; +import java.util.Comparator; +import java.util.EnumSet; +import java.util.HashSet; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.TimeUnit; +import org.apache.commons.io.FileUtils; +import org.htmlunit.html.HtmlForm; +import org.htmlunit.html.HtmlPage; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.jvnet.hudson.test.Issue; +import org.jvnet.hudson.test.JenkinsRule; + +public class JenkinsSecurity3073Test { + + + @Rule + public JenkinsRule j = new JenkinsRule(); + + @Rule + public TemporaryFolder tmp = new TemporaryFolder(); + + @Test + @Issue("SECURITY-3073") + public void verifyUploadedFingerprintFilePermission() throws Exception { + assumeFalse(Functions.isWindows()); + + HtmlPage page = j.createWebClient().goTo("fingerprintCheck"); + // The form doesn't have a name, the page contain the search form and the one we're interested in + HtmlForm form = page.getForms().get(1); + File dir = tmp.newFolder(); + File plugin = new File(dir, "htmlpublisher.jpi"); + // We're using a plugin to have a file above DiskFileItemFactory.DEFAULT_SIZE_THRESHOLD + FileUtils.copyURLToFile(Objects.requireNonNull(getClass().getClassLoader().getResource("plugins/htmlpublisher.jpi")), plugin); + form.getInputByName("name").setValueAttribute(plugin.getAbsolutePath()); + j.submit(form); + + File filesRef = Files.createTempFile("tmp", ".tmp").toFile(); + File filesTmpDir = filesRef.getParentFile(); + filesRef.deleteOnExit(); + + final Set[] filesPermission = new Set[]{new HashSet<>()}; + await().pollInterval(250, TimeUnit.MILLISECONDS) + .atMost(10, TimeUnit.SECONDS) + .until(() -> { + Optional lastUploadedPlugin = Arrays.stream(Objects.requireNonNull( + filesTmpDir.listFiles((file, fileName) -> + fileName.startsWith("jenkins-multipart-uploads")))). + max(Comparator.comparingLong(File::lastModified)); + if (lastUploadedPlugin.isPresent()) { + filesPermission[0] = Files.getPosixFilePermissions(lastUploadedPlugin.get().toPath(), LinkOption.NOFOLLOW_LINKS); + return true; + } else { + return false; + } + }); + assertEquals(EnumSet.of(OWNER_EXECUTE, OWNER_READ, OWNER_WRITE), filesPermission[0]); + } +} From 4685ad82b16545d10bdc1489984564f9edc458d7 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 12 Sep 2023 13:03:04 +0000 Subject: [PATCH 05/52] [maven-release-plugin] prepare release jenkins-2.423 --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 4 ++-- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty10/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index ea33fc828776..58d0d26e7835 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 56560342e5f4..61800d5a6748 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 cli diff --git a/core/pom.xml b/core/pom.xml index 26f9a102c81e..6c0ed9dd8bb4 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 9f27c8d11cf0..dd5c69d7bbf1 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 jenkins-coverage diff --git a/pom.xml b/pom.xml index 78a581e22dbc..4ad0011737ef 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 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.423 https://github.com/jenkinsci/jenkins diff --git a/test/pom.xml b/test/pom.xml index 6498242955f9..8627b903750a 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 1aa3437c0ce3..5caf181ab064 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 jenkins-war diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml index eb4a169a59d1..3391fa605215 100644 --- a/websocket/jetty10/pom.xml +++ b/websocket/jetty10/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.423 ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 77abcc3b7248..0f081abc60de 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.423 ../.. From 0216ffda40fe4829382f2971e38944a7c3890916 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 12 Sep 2023 13:03:16 +0000 Subject: [PATCH 06/52] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 6 +++--- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty10/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 58d0d26e7835..ea33fc828776 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 61800d5a6748..56560342e5f4 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 6c0ed9dd8bb4..26f9a102c81e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index dd5c69d7bbf1..9f27c8d11cf0 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index 4ad0011737ef..6b38b9136b37 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${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.423 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -73,7 +73,7 @@ THE SOFTWARE. - 2.423 + 2.424 -SNAPSHOT diff --git a/test/pom.xml b/test/pom.xml index 8627b903750a..6498242955f9 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 5caf181ab064..1aa3437c0ce3 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} jenkins-war diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml index 3391fa605215..eb4a169a59d1 100644 --- a/websocket/jetty10/pom.xml +++ b/websocket/jetty10/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 0f081abc60de..77abcc3b7248 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.423 + ${revision}${changelist} ../.. From 1b04547bb41882908a24ebd507b8345750e08580 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 22:08:20 +0200 Subject: [PATCH 07/52] Update dependency eslint to v8.49.0 (#8480) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 2 +- war/yarn.lock | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/war/package.json b/war/package.json index 7a7f02e7accf..b2c204587e40 100644 --- a/war/package.json +++ b/war/package.json @@ -30,7 +30,7 @@ "clean-webpack-plugin": "4.0.0", "css-loader": "6.8.1", "css-minimizer-webpack-plugin": "5.0.1", - "eslint": "8.48.0", + "eslint": "8.49.0", "eslint-config-prettier": "9.0.0", "handlebars-loader": "1.7.3", "mini-css-extract-plugin": "2.7.6", diff --git a/war/yarn.lock b/war/yarn.lock index 9a0270ef8d67..863a6db38ddc 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -1750,10 +1750,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:8.48.0": - version: 8.48.0 - resolution: "@eslint/js@npm:8.48.0" - checksum: b2755f9c0ee810c886eba3c50dcacb184ba5a5cd1cbc01988ee506ad7340653cae0bd55f1d95c64b56dfc6d25c2caa7825335ffd2c50165bae9996fe0f396851 +"@eslint/js@npm:8.49.0": + version: 8.49.0 + resolution: "@eslint/js@npm:8.49.0" + checksum: a6601807c8aeeefe866926ad92ed98007c034a735af20ff709009e39ad1337474243d47908500a3bde04e37bfba16bcf1d3452417f962e1345bc8756edd6b830 languageName: node linkType: hard @@ -1764,14 +1764,14 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.11.10": - version: 0.11.10 - resolution: "@humanwhocodes/config-array@npm:0.11.10" +"@humanwhocodes/config-array@npm:^0.11.11": + version: 0.11.11 + resolution: "@humanwhocodes/config-array@npm:0.11.11" dependencies: "@humanwhocodes/object-schema": ^1.2.1 debug: ^4.1.1 minimatch: ^3.0.5 - checksum: 1b1302e2403d0e35bc43e66d67a2b36b0ad1119efc704b5faff68c41f791a052355b010fb2d27ef022670f550de24cd6d08d5ecf0821c16326b7dcd0ee5d5d8a + checksum: db84507375ab77b8ffdd24f498a5b49ad6b64391d30dd2ac56885501d03964d29637e05b1ed5aefa09d57ac667e28028bc22d2da872bfcd619652fbdb5f4ca19 languageName: node linkType: hard @@ -3496,15 +3496,15 @@ __metadata: languageName: node linkType: hard -"eslint@npm:8.48.0": - version: 8.48.0 - resolution: "eslint@npm:8.48.0" +"eslint@npm:8.49.0": + version: 8.49.0 + resolution: "eslint@npm:8.49.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 "@eslint-community/regexpp": ^4.6.1 "@eslint/eslintrc": ^2.1.2 - "@eslint/js": 8.48.0 - "@humanwhocodes/config-array": ^0.11.10 + "@eslint/js": 8.49.0 + "@humanwhocodes/config-array": ^0.11.11 "@humanwhocodes/module-importer": ^1.0.1 "@nodelib/fs.walk": ^1.2.8 ajv: ^6.12.4 @@ -3539,7 +3539,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: f20b359a4f8123fec5c033577368cc020d42978b1b45303974acd8da7a27063168ee3fe297ab5b35327162f6a93154063e3ce6577102f70f9809aff793db9bd0 + checksum: 4dfe257e1e42da2f9da872b05aaaf99b0f5aa022c1a91eee8f2af1ab72651b596366320c575ccd4e0469f7b4c97aff5bb85ae3323ebd6a293c3faef4028b0d81 languageName: node linkType: hard @@ -4355,7 +4355,7 @@ __metadata: clean-webpack-plugin: 4.0.0 css-loader: 6.8.1 css-minimizer-webpack-plugin: 5.0.1 - eslint: 8.48.0 + eslint: 8.49.0 eslint-config-prettier: 9.0.0 handlebars: 4.7.8 handlebars-loader: 1.7.3 From c5fbbbe88dc280d0a0876614c0f9aa6fba2ea2af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 12 Sep 2023 22:08:41 +0200 Subject: [PATCH 08/52] Update dependency @babel/core to v7.22.17 (#8476) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 2 +- war/yarn.lock | 48 ++++++++++++++++++++++++------------------------ 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/war/package.json b/war/package.json index b2c204587e40..79bd8e40f758 100644 --- a/war/package.json +++ b/war/package.json @@ -24,7 +24,7 @@ }, "devDependencies": { "@babel/cli": "7.22.15", - "@babel/core": "7.22.15", + "@babel/core": "7.22.17", "@babel/preset-env": "7.22.15", "babel-loader": "9.1.3", "clean-webpack-plugin": "4.0.0", diff --git a/war/yarn.lock b/war/yarn.lock index 863a6db38ddc..0cbd1719116f 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -66,26 +66,26 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:7.22.15": - version: 7.22.15 - resolution: "@babel/core@npm:7.22.15" +"@babel/core@npm:7.22.17": + version: 7.22.17 + resolution: "@babel/core@npm:7.22.17" dependencies: "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.22.13 "@babel/generator": ^7.22.15 "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-module-transforms": ^7.22.15 + "@babel/helper-module-transforms": ^7.22.17 "@babel/helpers": ^7.22.15 - "@babel/parser": ^7.22.15 + "@babel/parser": ^7.22.16 "@babel/template": ^7.22.15 - "@babel/traverse": ^7.22.15 - "@babel/types": ^7.22.15 + "@babel/traverse": ^7.22.17 + "@babel/types": ^7.22.17 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 80b3705f2f809f024ac065d73b9bcde991ac5789c38320e00890862200b1603b68035cba7b13ecd827479c7d9ea9b5998ac0a1b7fd28940bcf587fb1301e994a + checksum: 355216a342d1b3952d7c040dd4c99ecef6b3501ba99a713703c1fec1ae73bc92a48a0c1234562bdbb4fd334b2e452f5a6c3bb282f0e613fa89e1518c91d1aea1 languageName: node linkType: hard @@ -223,9 +223,9 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.15, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": - version: 7.22.15 - resolution: "@babel/helper-module-transforms@npm:7.22.15" +"@babel/helper-module-transforms@npm:^7.22.15, @babel/helper-module-transforms@npm:^7.22.17, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": + version: 7.22.17 + resolution: "@babel/helper-module-transforms@npm:7.22.17" dependencies: "@babel/helper-environment-visitor": ^7.22.5 "@babel/helper-module-imports": ^7.22.15 @@ -234,7 +234,7 @@ __metadata: "@babel/helper-validator-identifier": ^7.22.15 peerDependencies: "@babel/core": ^7.0.0 - checksum: de571fa352331bb5d5d56e95239c2e5dd79a1454e5167f3d80820d4975ee95052f8198e9fc1310015c55a0407b7566f8ca9d86cf262046884847aa24f8139bca + checksum: 458021c74093e66179765fcc9d1c1cb694f7bdf98656f23486901d35636495c38aab4661547fac2142e13d887987d1ea30cc9fe42968376a51a99bcd207b4989 languageName: node linkType: hard @@ -361,7 +361,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.22.15": +"@babel/parser@npm:^7.22.15, @babel/parser@npm:^7.22.16": version: 7.22.16 resolution: "@babel/parser@npm:7.22.16" bin: @@ -1312,9 +1312,9 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/traverse@npm:7.22.15" +"@babel/traverse@npm:^7.22.15, @babel/traverse@npm:^7.22.17": + version: 7.22.17 + resolution: "@babel/traverse@npm:7.22.17" dependencies: "@babel/code-frame": ^7.22.13 "@babel/generator": ^7.22.15 @@ -1322,22 +1322,22 @@ __metadata: "@babel/helper-function-name": ^7.22.5 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/parser": ^7.22.15 - "@babel/types": ^7.22.15 + "@babel/parser": ^7.22.16 + "@babel/types": ^7.22.17 debug: ^4.1.0 globals: ^11.1.0 - checksum: 12aba7da6fd6109905d5086e1a9d1aea2cdbb0b80533d2d235d5dad2ff97f0315173c063023e601e96086dfeaaeb97f9d3cbaf38a10f04820e47e2848607cef4 + checksum: 1153ca166a0a9b3fddf67f7f7c8c5b4f88aa2c2c00261ff2fc8424a63bc93250ed3fd08b04bd526ad19e797aeb6f22161120646a570cbfe5ff2a5d2f5d28af01 languageName: node linkType: hard -"@babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.22.15 - resolution: "@babel/types@npm:7.22.15" +"@babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.17, @babel/types@npm:^7.22.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.22.17 + resolution: "@babel/types@npm:7.22.17" dependencies: "@babel/helper-string-parser": ^7.22.5 "@babel/helper-validator-identifier": ^7.22.15 to-fast-properties: ^2.0.0 - checksum: a2aa59746dc8500c358a3a9afca2adff49dbade009d616aa8308714485064f2218da04e1823f1243a4992f1424ec6d6719e76a7af9a0ac3647227dca3015eea4 + checksum: 7382220f6eb2548f2c867a98916c3aa8a6063498d5372e5d21d8d184ba354033defb72aeba5858c1b2b42177058b896a34a7dcbae5eccd47fb0104721efa909d languageName: node linkType: hard @@ -4349,7 +4349,7 @@ __metadata: resolution: "jenkins-ui@workspace:." dependencies: "@babel/cli": 7.22.15 - "@babel/core": 7.22.15 + "@babel/core": 7.22.17 "@babel/preset-env": 7.22.15 babel-loader: 9.1.3 clean-webpack-plugin: 4.0.0 From 4e4eba6c30a3882e33c27fde0b6f158f5408a73f Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:31:19 +0000 Subject: [PATCH 09/52] [maven-release-plugin] prepare release jenkins-2.424 --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 4 ++-- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty10/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index c19d9ae135ad..268c45bbb4e4 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 56560342e5f4..13f6f34ed57d 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 cli diff --git a/core/pom.xml b/core/pom.xml index 26f9a102c81e..4d518a3b9f7f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 9f27c8d11cf0..7060dc52357e 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 jenkins-coverage diff --git a/pom.xml b/pom.xml index 6b38b9136b37..1e4c67c7454d 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 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.424 https://github.com/jenkinsci/jenkins diff --git a/test/pom.xml b/test/pom.xml index 6498242955f9..3f68cb9c912d 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 1aa3437c0ce3..9fe2a80e0b03 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 jenkins-war diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml index eb4a169a59d1..71499b2b1965 100644 --- a/websocket/jetty10/pom.xml +++ b/websocket/jetty10/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.424 ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 77abcc3b7248..58bdfa440d0c 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.424 ../.. From e590fe2ecccba4e87deec77e6ddcc5fa4ff94485 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Mon, 18 Sep 2023 16:31:32 +0000 Subject: [PATCH 10/52] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 6 +++--- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty10/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 268c45bbb4e4..c19d9ae135ad 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 13f6f34ed57d..56560342e5f4 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 4d518a3b9f7f..26f9a102c81e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 7060dc52357e..9f27c8d11cf0 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index 1e4c67c7454d..8bb94edff0c9 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${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.424 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -73,7 +73,7 @@ THE SOFTWARE. - 2.424 + 2.425 -SNAPSHOT diff --git a/test/pom.xml b/test/pom.xml index 3f68cb9c912d..6498242955f9 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 9fe2a80e0b03..1aa3437c0ce3 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} jenkins-war diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml index 71499b2b1965..eb4a169a59d1 100644 --- a/websocket/jetty10/pom.xml +++ b/websocket/jetty10/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 58bdfa440d0c..77abcc3b7248 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.424 + ${revision}${changelist} ../.. From 2a07b98e9cfac77f9e1a4eacf7393e620a5aaf20 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 20 Sep 2023 14:42:26 -0400 Subject: [PATCH 11/52] `StringIndexOutOfBoundsException` in `AbstractItem.getUrl` (#8481) --- core/src/main/java/hudson/model/AbstractItem.java | 12 +++++++++--- .../java/jenkins/widgets/BuildListTableTest.java | 4 ++++ 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java index 92900e678445..ef9b97319053 100644 --- a/core/src/main/java/hudson/model/AbstractItem.java +++ b/core/src/main/java/hudson/model/AbstractItem.java @@ -555,9 +555,15 @@ public final String getUrl() { View view = (View) last.getObject(); if (view.getOwner().getItemGroup() == getParent() && !view.isDefault()) { // Showing something inside a view, so should use that as the base URL. - String base = last.getUrl().substring(req.getContextPath().length() + 1) + '/'; - LOGGER.log(Level.FINER, "using {0}{1} for {2} from {3}", new Object[] {base, shortUrl, this, uri}); - return base + shortUrl; + String prefix = req.getContextPath() + "/"; + String url = last.getUrl(); + if (url.startsWith(prefix)) { + String base = url.substring(prefix.length()) + '/'; + LOGGER.log(Level.FINER, "using {0}{1} for {2} from {3} given {4}", new Object[] {base, shortUrl, this, uri, prefix}); + return base + shortUrl; + } else { + LOGGER.finer(() -> url + " does not start with " + prefix + " as expected"); + } } else { LOGGER.log(Level.FINER, "irrelevant {0} for {1} from {2}", new Object[] {view.getViewName(), this, uri}); } diff --git a/test/src/test/java/jenkins/widgets/BuildListTableTest.java b/test/src/test/java/jenkins/widgets/BuildListTableTest.java index ce53249e4c7c..e9a1b473e1ef 100644 --- a/test/src/test/java/jenkins/widgets/BuildListTableTest.java +++ b/test/src/test/java/jenkins/widgets/BuildListTableTest.java @@ -26,21 +26,25 @@ import static org.junit.Assert.assertEquals; +import hudson.model.AbstractItem; import hudson.model.FreeStyleProject; import hudson.model.ListView; import java.net.URI; import java.net.URL; +import java.util.logging.Level; import org.htmlunit.html.HtmlAnchor; import org.htmlunit.html.HtmlPage; 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.LoggerRule; import org.jvnet.hudson.test.MockFolder; public class BuildListTableTest { @Rule public JenkinsRule r = new JenkinsRule(); + @Rule public LoggerRule logging = new LoggerRule().record(AbstractItem.class, Level.FINER); @Issue("JENKINS-19310") @Test public void linksFromFolders() throws Exception { From 09d8e23c22baad20bcdd564148ec9f88fa44e9e8 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 20 Sep 2023 11:42:44 -0700 Subject: [PATCH 12/52] Increase minimum required Remoting version from 4.7 to 4.13 (#8484) --- pom.xml | 2 +- test/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 8bb94edff0c9..66646e25c1c7 100644 --- a/pom.xml +++ b/pom.xml @@ -88,7 +88,7 @@ THE SOFTWARE. 3148.v532a_7e715ee3 - 4.7 + 4.13 Max Medium diff --git a/test/pom.xml b/test/pom.xml index 6498242955f9..60f05acb18d3 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -300,7 +300,7 @@ THE SOFTWARE. org.jenkins-ci.main remoting - 4.6 + 4.12 jar ${project.build.outputDirectory}/old-remoting remoting-unsupported.jar From febca34a3dc16e95ba1d7d9e08fce94bb1f59f34 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 20 Sep 2023 11:43:16 -0700 Subject: [PATCH 13/52] Migrate from deprecated finalization API to Java 9+ API (#8486) * Migrate from deprecated finalization API to Java 9+ API * Use non-deprecated JTH method --- .../java/hudson/util/AtomicFileWriter.java | 52 ++++++++++----- .../java/hudson/util/FileChannelWriter.java | 8 ++- .../hudson/util/AtomicFileWriterTest.java | 8 ++- .../hudson/util/AtomicFileWriterTest.java | 63 +++++++++++++++++++ 4 files changed, 114 insertions(+), 17 deletions(-) create mode 100644 test/src/test/java/hudson/util/AtomicFileWriterTest.java diff --git a/core/src/main/java/hudson/util/AtomicFileWriter.java b/core/src/main/java/hudson/util/AtomicFileWriter.java index f8cc8a84ed3c..4e871b3262f0 100644 --- a/core/src/main/java/hudson/util/AtomicFileWriter.java +++ b/core/src/main/java/hudson/util/AtomicFileWriter.java @@ -30,6 +30,7 @@ import java.io.FileWriter; import java.io.IOException; import java.io.Writer; +import java.lang.ref.Cleaner; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.nio.file.AtomicMoveNotSupportedException; @@ -55,6 +56,9 @@ public class AtomicFileWriter extends Writer { private static final Logger LOGGER = Logger.getLogger(AtomicFileWriter.class.getName()); + private static final Cleaner CLEANER = Cleaner.create( + new NamingThreadFactory(new DaemonThreadFactory(), AtomicFileWriter.class.getName() + ".cleaner")); + private static /* final */ boolean DISABLE_FORCED_FLUSH = SystemProperties.getBoolean( AtomicFileWriter.class.getName() + ".DISABLE_FORCED_FLUSH"); @@ -64,7 +68,7 @@ public class AtomicFileWriter extends Writer { } } - private final Writer core; + private final FileChannelWriter core; private final Path tmpPath; private final Path destPath; @@ -151,6 +155,8 @@ public AtomicFileWriter(@NonNull Path destinationPath, @NonNull Charset charset, } core = new FileChannelWriter(tmpPath, charset, integrityOnFlush, integrityOnClose, StandardOpenOption.WRITE, StandardOpenOption.CREATE); + + CLEANER.register(this, new CleanupChecker(core, tmpPath, destPath)); } @Override @@ -185,7 +191,12 @@ public void close() throws IOException { * the {@link #commit()} is called, to simplify coding. */ public void abort() throws IOException { - closeAndDeleteTempFile(); + // One way or another, the temporary file should be deleted. + try { + close(); + } finally { + Files.deleteIfExists(tmpPath); + } } public void commit() throws IOException { @@ -225,21 +236,32 @@ public void commit() throws IOException { } } - @Override - protected void finalize() throws Throwable { - try { - closeAndDeleteTempFile(); - } finally { - super.finalize(); + private static final class CleanupChecker implements Runnable { + private final FileChannelWriter core; + private final Path tmpPath; + private final Path destPath; + + CleanupChecker(final FileChannelWriter core, final Path tmpPath, final Path destPath) { + this.core = core; + this.tmpPath = tmpPath; + this.destPath = destPath; } - } - private void closeAndDeleteTempFile() throws IOException { - // one way or the other, temporary file should be deleted. - try { - close(); - } finally { - Files.deleteIfExists(tmpPath); + @Override + public void run() { + if (core.isOpen()) { + LOGGER.log(Level.WARNING, "AtomicFileWriter for " + destPath + " was not closed before being released"); + try { + core.close(); + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Failed to close " + tmpPath + " for destination file " + destPath, e); + } + } + try { + Files.deleteIfExists(tmpPath); + } catch (IOException e) { + LOGGER.log(Level.WARNING, "Failed to delete temporary file " + tmpPath + " for destination file " + destPath, e); + } } } diff --git a/core/src/main/java/hudson/util/FileChannelWriter.java b/core/src/main/java/hudson/util/FileChannelWriter.java index 0f6d77d9b464..77e6d807c206 100644 --- a/core/src/main/java/hudson/util/FileChannelWriter.java +++ b/core/src/main/java/hudson/util/FileChannelWriter.java @@ -5,6 +5,7 @@ import java.io.Writer; import java.nio.ByteBuffer; import java.nio.CharBuffer; +import java.nio.channels.Channel; import java.nio.channels.FileChannel; import java.nio.charset.Charset; import java.nio.file.OpenOption; @@ -26,7 +27,7 @@ * @see PR-2548 */ @Restricted(NoExternalUse.class) -public class FileChannelWriter extends Writer { +public class FileChannelWriter extends Writer implements Channel { private static final Logger LOGGER = Logger.getLogger(FileChannelWriter.class.getName()); @@ -82,6 +83,11 @@ public void flush() throws IOException { } } + @Override + public boolean isOpen() { + return channel.isOpen(); + } + @Override public void close() throws IOException { if (channel.isOpen()) { diff --git a/core/src/test/java/hudson/util/AtomicFileWriterTest.java b/core/src/test/java/hudson/util/AtomicFileWriterTest.java index d4b7925cf073..f87eca664f5f 100644 --- a/core/src/test/java/hudson/util/AtomicFileWriterTest.java +++ b/core/src/test/java/hudson/util/AtomicFileWriterTest.java @@ -22,6 +22,7 @@ import java.nio.file.Paths; import java.nio.file.attribute.PosixFilePermission; import java.util.Set; +import org.junit.After; import org.junit.Before; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -72,6 +73,11 @@ public void setUp() throws IOException { afw = new AtomicFileWriter(af.toPath(), Charset.defaultCharset()); } + @After + public void tearDown() throws IOException { + afw.abort(); + } + @Test public void symlinkToDirectory() throws Exception { assumeFalse(Functions.isWindows()); @@ -83,7 +89,7 @@ public void symlinkToDirectory() throws Exception { final Path childFileInSymlinkToDir = Paths.get(zeSymlink.toString(), "childFileInSymlinkToDir"); - new AtomicFileWriter(childFileInSymlinkToDir, StandardCharsets.UTF_8); + new AtomicFileWriter(childFileInSymlinkToDir, StandardCharsets.UTF_8).abort(); } @Test diff --git a/test/src/test/java/hudson/util/AtomicFileWriterTest.java b/test/src/test/java/hudson/util/AtomicFileWriterTest.java new file mode 100644 index 000000000000..5f0de69fafca --- /dev/null +++ b/test/src/test/java/hudson/util/AtomicFileWriterTest.java @@ -0,0 +1,63 @@ +package hudson.util; + +import static org.awaitility.Awaitility.await; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.contains; +import static org.hamcrest.Matchers.empty; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.lang.ref.WeakReference; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.jvnet.hudson.test.LoggerRule; +import org.jvnet.hudson.test.MemoryAssert; + +public class AtomicFileWriterTest { + @Rule + public TemporaryFolder tmp = new TemporaryFolder(); + + @Rule + public LoggerRule logging = + new LoggerRule().record(AtomicFileWriter.class, Level.WARNING).capture(100); + + @Test + public void noResourceLeak() throws IOException { + Path destPath = tmp.newFolder().toPath().resolve("file"); + AtomicFileWriter writer = new AtomicFileWriter(destPath, StandardCharsets.UTF_8); + Path tmpPath = writer.getTemporaryPath(); + assertTrue(Files.exists(tmpPath)); + assertFalse(Files.exists(destPath)); + try { + writer.commit(); + } finally { + writer.abort(); + } + assertFalse(Files.exists(tmpPath)); + assertTrue(Files.exists(destPath)); + assertThat(logging.getMessages(), empty()); + } + + @Test + public void resourceLeak() throws IOException { + Path destPath = tmp.newFolder().toPath().resolve("file"); + WeakReference ref = + new WeakReference<>(new AtomicFileWriter(destPath, StandardCharsets.UTF_8)); + Path tmpPath = ref.get().getTemporaryPath(); + assertTrue(Files.exists(tmpPath)); + assertFalse(Files.exists(destPath)); + MemoryAssert.assertGC(ref, false); + await().atMost(30, TimeUnit.SECONDS).until(() -> !Files.exists(tmpPath)); + assertFalse(Files.exists(destPath)); + assertThat( + logging.getMessages(), + contains("AtomicFileWriter for " + destPath + " was not closed before being released")); + } +} From 807243e6bff02d2122b6554a6a48e915dafa32bb Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 20 Sep 2023 11:43:47 -0700 Subject: [PATCH 14/52] Remove usages of deprecated `ThreadDeath` (#8487) --- core/src/main/java/hudson/model/Run.java | 4 ---- .../main/java/hudson/model/listeners/SaveableListener.java | 2 -- 2 files changed, 6 deletions(-) diff --git a/core/src/main/java/hudson/model/Run.java b/core/src/main/java/hudson/model/Run.java index 87644b3aa343..fc790c3e8985 100644 --- a/core/src/main/java/hudson/model/Run.java +++ b/core/src/main/java/hudson/model/Run.java @@ -1896,8 +1896,6 @@ protected final void execute(@NonNull RunExecution job) { LOGGER.log(FINE, "{0} main build action completed: {1}", new Object[] {this, result}); CheckPoint.MAIN_COMPLETED.report(); - } catch (ThreadDeath t) { - throw t; } catch (AbortException e) { // orderly abortion. result = Result.FAILURE; listener.error(e.getMessage()); @@ -1919,8 +1917,6 @@ protected final void execute(@NonNull RunExecution job) { // even if the main build fails fatally, try to run post build processing job.post(Objects.requireNonNull(listener)); - } catch (ThreadDeath t) { - throw t; } catch (Throwable e) { handleFatalBuildProblem(listener, e); result = Result.FAILURE; diff --git a/core/src/main/java/hudson/model/listeners/SaveableListener.java b/core/src/main/java/hudson/model/listeners/SaveableListener.java index 51cac4861a57..46bbc6ab60be 100644 --- a/core/src/main/java/hudson/model/listeners/SaveableListener.java +++ b/core/src/main/java/hudson/model/listeners/SaveableListener.java @@ -80,8 +80,6 @@ public static void fireOnChange(Saveable o, XmlFile file) { for (SaveableListener l : all()) { try { l.onChange(o, file); - } catch (ThreadDeath t) { - throw t; } catch (Throwable t) { Logger.getLogger(SaveableListener.class.getName()).log(Level.WARNING, null, t); } From b7920ec5eaa6e17a452bdf630744d4da1d169338 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 20 Sep 2023 11:44:04 -0700 Subject: [PATCH 15/52] Remove finalization from `RegistryKey` (#8488) --- core/src/main/java/hudson/util/jna/RegistryKey.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/core/src/main/java/hudson/util/jna/RegistryKey.java b/core/src/main/java/hudson/util/jna/RegistryKey.java index 4d89ee307921..5e1fe398a410 100644 --- a/core/src/main/java/hudson/util/jna/RegistryKey.java +++ b/core/src/main/java/hudson/util/jna/RegistryKey.java @@ -277,12 +277,6 @@ public TreeMap getValues() { } - @Override - protected void finalize() throws Throwable { - super.finalize(); - dispose(); - } - public void dispose() { if (handle != 0) Advapi32.INSTANCE.RegCloseKey(handle); From 7d285718c2b56f7c0ffe486ccbf1bc8c1c10bc52 Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Wed, 20 Sep 2023 20:44:29 +0200 Subject: [PATCH 16/52] LogRecorder programmatic deletion support (#8489) * Add programmatic deletion support for LogRecorder. * Also added event handling through SaveableListener whenever it gets deleted. --- .../main/java/hudson/logging/LogRecorder.java | 12 ++++++- .../logging/LogRecorderManagerTest.java | 34 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/hudson/logging/LogRecorder.java b/core/src/main/java/hudson/logging/LogRecorder.java index ae00f8510f09..bb90e789f109 100644 --- a/core/src/main/java/hudson/logging/LogRecorder.java +++ b/core/src/main/java/hudson/logging/LogRecorder.java @@ -535,6 +535,16 @@ public int hashCode() { */ @RequirePOST public synchronized void doDoDelete(StaplerResponse rsp) throws IOException, ServletException { + delete(); + rsp.sendRedirect2(".."); + } + + /** + * Deletes this log recorder. + * @throws IOException In case anything went wrong while deleting the configuration file. + * @since TODO + */ + public void delete() throws IOException { Jenkins.get().checkPermission(Jenkins.ADMINISTER); getConfigFile().delete(); @@ -544,7 +554,7 @@ public synchronized void doDoDelete(StaplerResponse rsp) throws IOException, Ser loggers.forEach(Target::disable); getParent().getRecorders().forEach(logRecorder -> logRecorder.getLoggers().forEach(Target::enable)); - rsp.sendRedirect2(".."); + SaveableListener.fireOnChange(this, getConfigFile()); } /** diff --git a/test/src/test/java/hudson/logging/LogRecorderManagerTest.java b/test/src/test/java/hudson/logging/LogRecorderManagerTest.java index 2cdfe6a0e688..608e7eb0b464 100644 --- a/test/src/test/java/hudson/logging/LogRecorderManagerTest.java +++ b/test/src/test/java/hudson/logging/LogRecorderManagerTest.java @@ -26,7 +26,9 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasSize; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -34,7 +36,10 @@ import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; +import hudson.XmlFile; import hudson.model.Computer; +import hudson.model.Saveable; +import hudson.model.listeners.SaveableListener; import hudson.remoting.VirtualChannel; import hudson.util.FormValidation; import java.io.IOException; @@ -52,6 +57,7 @@ import org.junit.Test; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.TestExtension; import org.jvnet.hudson.test.Url; /** @@ -204,6 +210,34 @@ public void addingLogRecorderToListAddsToLegacyRecordersMap() throws IOException assertThat(log.getRecorders().size(), is(1)); } + @Test + public void deletingLogRecorder() throws IOException { + LogRecorderManager log = j.jenkins.getLog(); + assertThat(log.getRecorders(), empty()); + LogRecorder logRecorder = new LogRecorder("dummy"); + logRecorder.getLoggers().add(new LogRecorder.Target("dummy", Level.ALL)); + log.getRecorders().add(logRecorder); + logRecorder.save(); + assertThat(log.getRecorders(), hasSize(1)); + logRecorder.delete(); + assertThat(log.getRecorders(), empty()); + assertTrue(DeletingLogRecorderListener.recordDeletion); + } + + @TestExtension("deletingLogRecorder") + public static class DeletingLogRecorderListener extends SaveableListener { + private static boolean recordDeletion; + + @Override + public void onChange(Saveable o, XmlFile file) { + if (o instanceof LogRecorder && "dummy".equals(((LogRecorder) o).getName())) { + if (!file.exists()) { + recordDeletion = true; + } + } + } + } + private static final class Log extends MasterToSlaveCallable { private final Level level; private final String logger; From 3e1747eca666b4a4ff495e83966065ca9480a386 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 20 Sep 2023 14:45:14 -0400 Subject: [PATCH 17/52] =?UTF-8?q?[JENKINS-72016]=20Define=20a=20thread=20p?= =?UTF-8?q?ool=20for=20`ProxyConfiguration`=E2=80=99s=20`HttpClient`=20(#8?= =?UTF-8?q?490)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Define a thread pool for `ProxyConfiguration`’s `HttpClient` * Skip test on Windows https://github.com/jenkinsci/jenkins/pull/8490#issuecomment-1720108881 --- .../main/java/hudson/ProxyConfiguration.java | 7 ++ .../java/hudson/ProxyConfigurationTest.java | 71 +++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 test/src/test/java/hudson/ProxyConfigurationTest.java diff --git a/core/src/main/java/hudson/ProxyConfiguration.java b/core/src/main/java/hudson/ProxyConfiguration.java index a165fa6e3151..08f7131289b2 100644 --- a/core/src/main/java/hudson/ProxyConfiguration.java +++ b/core/src/main/java/hudson/ProxyConfiguration.java @@ -31,7 +31,9 @@ import hudson.model.Descriptor; import hudson.model.Saveable; import hudson.model.listeners.SaveableListener; +import hudson.util.DaemonThreadFactory; import hudson.util.FormValidation; +import hudson.util.NamingThreadFactory; import hudson.util.Scrambler; import hudson.util.Secret; import hudson.util.XStream2; @@ -58,6 +60,8 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; import jenkins.UserAgentURLConnectionDecorator; @@ -370,6 +374,8 @@ public static HttpClient newHttpClient() { return newHttpClientBuilder().followRedirects(HttpClient.Redirect.NORMAL).build(); } + private static final Executor httpClientExecutor = Executors.newCachedThreadPool(new NamingThreadFactory(new DaemonThreadFactory(), "Jenkins HttpClient")); + /** * Create a new {@link HttpClient.Builder} preconfigured with Jenkins-specific default settings. * @@ -397,6 +403,7 @@ public static HttpClient.Builder newHttpClientBuilder() { if (DEFAULT_CONNECT_TIMEOUT_MILLIS > 0) { httpClientBuilder.connectTimeout(Duration.ofMillis(DEFAULT_CONNECT_TIMEOUT_MILLIS)); } + httpClientBuilder.executor(httpClientExecutor); return httpClientBuilder; } diff --git a/test/src/test/java/hudson/ProxyConfigurationTest.java b/test/src/test/java/hudson/ProxyConfigurationTest.java new file mode 100644 index 000000000000..f1f796968525 --- /dev/null +++ b/test/src/test/java/hudson/ProxyConfigurationTest.java @@ -0,0 +1,71 @@ +/* + * The MIT License + * + * Copyright 2023 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 hudson; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +import hudson.model.InvisibleAction; +import hudson.model.UnprotectedRootAction; +import java.net.URI; +import org.junit.Assume; +import org.junit.Rule; +import org.junit.Test; +import org.jvnet.hudson.test.JenkinsRule; +import org.jvnet.hudson.test.TestExtension; +import org.kohsuke.stapler.HttpResponse; +import org.kohsuke.stapler.HttpResponses; + +public final class ProxyConfigurationTest { + + @Rule + public JenkinsRule r = new JenkinsRule(); + + @Test + public void httpClientExecutor() throws Exception { + Assume.assumeFalse("Too slow on Windows", Functions.isWindows()); + for (int i = 0; i < 50_000; i++) { + if (i % 1_000 == 0) { + System.err.println("#" + i); + } + assertThat(ProxyConfiguration.newHttpClient().send(ProxyConfiguration.newHttpRequestBuilder(URI.create(r.getURL() + "ping/")).build(), + java.net.http.HttpResponse.BodyHandlers.discarding()).statusCode(), + is(200)); + } + } + + @TestExtension("httpClientExecutor") + public static final class Ping extends InvisibleAction implements UnprotectedRootAction { + @Override + public String getUrlName() { + return "ping"; + } + + public HttpResponse doIndex() { + return HttpResponses.ok(); + } + } + +} From c8874d02413a8d79f9a33d8d1f226932d90ecb50 Mon Sep 17 00:00:00 2001 From: Markus Winter Date: Wed, 20 Sep 2023 19:45:36 +0100 Subject: [PATCH 18/52] [JENKINS-71880] fix notification in breadcrumb (#8493) * [JENKINS-71880] fix notification in breadcrumb fix the notification when e.g. triggering a build via the breadcrumb. replace the hoverNotification with a notificationBar. When the hoverNotification appears the actual menu disappears making the notification somehow look misplaced. Prepend the message with the actual menu entry to make it more clear what the message means. * run prettier --- war/src/main/js/components/dropdowns/jumplists.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/war/src/main/js/components/dropdowns/jumplists.js b/war/src/main/js/components/dropdowns/jumplists.js index 474fe0bfde4c..31d799381579 100644 --- a/war/src/main/js/components/dropdowns/jumplists.js +++ b/war/src/main/js/components/dropdowns/jumplists.js @@ -106,9 +106,10 @@ function mapChildrenItemsToDropdownItems(items) { method: "post", headers: crumb.wrap({}), }); - if (event.length === 1 && event[0].target != null) { - hoverNotification("Done.", event[0].target); - } + notificationBar.show( + item.displayName + ": Done.", + notificationBar.SUCCESS, + ); } } }, From e996d0cd536cd81d3c4ffb8191c111fec5dd794b Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Wed, 20 Sep 2023 14:46:09 -0400 Subject: [PATCH 19/52] Optimization for `AbstractLazyLoadRunMap.loadNumberOnDisk` (#8494) --- .../java/jenkins/model/lazy/AbstractLazyLoadRunMap.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java b/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java index edd335372e6b..4d2710282ade 100644 --- a/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java +++ b/core/src/main/java/jenkins/model/lazy/AbstractLazyLoadRunMap.java @@ -51,6 +51,7 @@ import java.util.function.IntConsumer; import java.util.logging.Level; import java.util.logging.Logger; +import java.util.regex.Pattern; import jenkins.util.MemoryReductionUtil; import org.kohsuke.accmod.Restricted; import org.kohsuke.accmod.restrictions.NoExternalUse; @@ -332,6 +333,8 @@ public synchronized void purgeCache() { loadNumberOnDisk(); } + private static final Pattern BUILD_NUMBER = Pattern.compile("[0-9]+"); + private void loadNumberOnDisk() { String[] kids = dir.list(); if (kids == null) { @@ -340,10 +343,14 @@ private void loadNumberOnDisk() { } SortedIntList list = new SortedIntList(kids.length / 2); for (String s : kids) { + if (!BUILD_NUMBER.matcher(s).matches()) { + // not a build directory + continue; + } try { list.add(Integer.parseInt(s)); } catch (NumberFormatException e) { - // this isn't a build dir + // matched BUILD_NUMBER but not an int? } } list.sort(); From 47c2b7e2e03900abcdaa4626fbeffbba51eb44e4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:46:18 +0200 Subject: [PATCH 20/52] Update dependency sass to v1.67.0 (#8495) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 2 +- war/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/war/package.json b/war/package.json index 79bd8e40f758..96542c4f8f36 100644 --- a/war/package.json +++ b/war/package.json @@ -39,7 +39,7 @@ "postcss-preset-env": "9.1.3", "postcss-scss": "4.0.8", "prettier": "3.0.3", - "sass": "1.66.1", + "sass": "1.67.0", "sass-loader": "13.3.2", "style-loader": "3.3.3", "stylelint": "15.10.2", diff --git a/war/yarn.lock b/war/yarn.lock index 0cbd1719116f..96a3b638931b 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -4368,7 +4368,7 @@ __metadata: postcss-preset-env: 9.1.3 postcss-scss: 4.0.8 prettier: 3.0.3 - sass: 1.66.1 + sass: 1.67.0 sass-loader: 13.3.2 sortablejs: 1.15.0 style-loader: 3.3.3 @@ -6411,16 +6411,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.66.1": - version: 1.66.1 - resolution: "sass@npm:1.66.1" +"sass@npm:1.67.0": + version: 1.67.0 + resolution: "sass@npm:1.67.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 74fc11d0fcd5e16c5331b57dd59865705a299c64e89f2b99646869caeb011dc8d0b6144a6c74a90c264e9ef70654207dbf44fc9b7e3393f8bd14809b904c8a52 + checksum: 9e7566e8b7386cf265dddcdb266a023fb5759c5a8f48a11da199c8bf419e5f08f4ff6404d85d6bf5eac01e1f7c7061fdb6b7b65cbfda164e59b0a06b72ac8567 languageName: node linkType: hard From 7b158d2257ad4cee3167e8d1ac32f85b6cb87aa1 Mon Sep 17 00:00:00 2001 From: Abhishek Maity Date: Thu, 21 Sep 2023 00:16:52 +0530 Subject: [PATCH 21/52] Add the 'alt' attribute to the logo in the README.md (#8497) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 755a417ea158..99a8177cec24 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ - + Jenkins logo # About From eb0d2c2e9098a5df86afc9f7a77d115550366ec3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:47:03 +0200 Subject: [PATCH 22/52] Update babel monorepo to v7.22.20 (#8498) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 4 +-- war/yarn.lock | 88 ++++++++++++++++++++++++------------------------ 2 files changed, 46 insertions(+), 46 deletions(-) diff --git a/war/package.json b/war/package.json index 96542c4f8f36..984cd50a9309 100644 --- a/war/package.json +++ b/war/package.json @@ -24,8 +24,8 @@ }, "devDependencies": { "@babel/cli": "7.22.15", - "@babel/core": "7.22.17", - "@babel/preset-env": "7.22.15", + "@babel/core": "7.22.20", + "@babel/preset-env": "7.22.20", "babel-loader": "9.1.3", "clean-webpack-plugin": "4.0.0", "css-loader": "6.8.1", diff --git a/war/yarn.lock b/war/yarn.lock index 96a3b638931b..0320176f2423 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -59,33 +59,33 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": - version: 7.22.9 - resolution: "@babel/compat-data@npm:7.22.9" - checksum: bed77d9044ce948b4327b30dd0de0779fa9f3a7ed1f2d31638714ed00229fa71fc4d1617ae0eb1fad419338d3658d0e9a5a083297451e09e73e078d0347ff808 +"@babel/compat-data@npm:^7.22.20, @babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/compat-data@npm:7.22.20" + checksum: efedd1d18878c10fde95e4d82b1236a9aba41395ef798cbb651f58dbf5632dbff475736c507b8d13d4c8f44809d41c0eb2ef0d694283af9ba5dd8339b6dab451 languageName: node linkType: hard -"@babel/core@npm:7.22.17": - version: 7.22.17 - resolution: "@babel/core@npm:7.22.17" +"@babel/core@npm:7.22.20": + version: 7.22.20 + resolution: "@babel/core@npm:7.22.20" dependencies: "@ampproject/remapping": ^2.2.0 "@babel/code-frame": ^7.22.13 "@babel/generator": ^7.22.15 "@babel/helper-compilation-targets": ^7.22.15 - "@babel/helper-module-transforms": ^7.22.17 + "@babel/helper-module-transforms": ^7.22.20 "@babel/helpers": ^7.22.15 "@babel/parser": ^7.22.16 "@babel/template": ^7.22.15 - "@babel/traverse": ^7.22.17 - "@babel/types": ^7.22.17 + "@babel/traverse": ^7.22.20 + "@babel/types": ^7.22.19 convert-source-map: ^1.7.0 debug: ^4.1.0 gensync: ^1.0.0-beta.2 json5: ^2.2.3 semver: ^6.3.1 - checksum: 355216a342d1b3952d7c040dd4c99ecef6b3501ba99a713703c1fec1ae73bc92a48a0c1234562bdbb4fd334b2e452f5a6c3bb282f0e613fa89e1518c91d1aea1 + checksum: 73663a079194b5dc406b2e2e5e50db81977d443e4faf7ef2c27e5836cd9a359e81e551115193dc9b1a93471275351a972e54904f4d3aa6cb156f51e26abf6765 languageName: node linkType: hard @@ -179,10 +179,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-environment-visitor@npm:^7.22.5": - version: 7.22.5 - resolution: "@babel/helper-environment-visitor@npm:7.22.5" - checksum: 248532077d732a34cd0844eb7b078ff917c3a8ec81a7f133593f71a860a582f05b60f818dc5049c2212e5baa12289c27889a4b81d56ef409b4863db49646c4b1 +"@babel/helper-environment-visitor@npm:^7.22.20, @babel/helper-environment-visitor@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-environment-visitor@npm:7.22.20" + checksum: d80ee98ff66f41e233f36ca1921774c37e88a803b2f7dca3db7c057a5fea0473804db9fb6729e5dbfd07f4bed722d60f7852035c2c739382e84c335661590b69 languageName: node linkType: hard @@ -223,18 +223,18 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.22.15, @babel/helper-module-transforms@npm:^7.22.17, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": - version: 7.22.17 - resolution: "@babel/helper-module-transforms@npm:7.22.17" +"@babel/helper-module-transforms@npm:^7.22.15, @babel/helper-module-transforms@npm:^7.22.20, @babel/helper-module-transforms@npm:^7.22.5, @babel/helper-module-transforms@npm:^7.22.9": + version: 7.22.20 + resolution: "@babel/helper-module-transforms@npm:7.22.20" dependencies: - "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-module-imports": ^7.22.15 "@babel/helper-simple-access": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 - "@babel/helper-validator-identifier": ^7.22.15 + "@babel/helper-validator-identifier": ^7.22.20 peerDependencies: "@babel/core": ^7.0.0 - checksum: 458021c74093e66179765fcc9d1c1cb694f7bdf98656f23486901d35636495c38aab4661547fac2142e13d887987d1ea30cc9fe42968376a51a99bcd207b4989 + checksum: 8fce25362df8711bd4620f41c5c18769edfeafe7f8f1dae9691966ef368e57f9da68dfa1707cd63c834c89dc4eaa82c26f12ea33e88fd262ac62844b11dcc389 languageName: node linkType: hard @@ -314,10 +314,10 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-identifier@npm:^7.22.15, @babel/helper-validator-identifier@npm:^7.22.5": - version: 7.22.15 - resolution: "@babel/helper-validator-identifier@npm:7.22.15" - checksum: eb0bee4bda664c0959924bc1ad5611eacfce806f46612202dd164fef1df8fef1a11682a1e7615288987100e9fb304982b6e2a4ff07ffe842ab8765b95ed1118c +"@babel/helper-validator-identifier@npm:^7.22.19, @babel/helper-validator-identifier@npm:^7.22.20, @babel/helper-validator-identifier@npm:^7.22.5": + version: 7.22.20 + resolution: "@babel/helper-validator-identifier@npm:7.22.20" + checksum: 136412784d9428266bcdd4d91c32bcf9ff0e8d25534a9d94b044f77fe76bc50f941a90319b05aafd1ec04f7d127cd57a179a3716009ff7f3412ef835ada95bdc languageName: node linkType: hard @@ -1182,11 +1182,11 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:7.22.15": - version: 7.22.15 - resolution: "@babel/preset-env@npm:7.22.15" +"@babel/preset-env@npm:7.22.20": + version: 7.22.20 + resolution: "@babel/preset-env@npm:7.22.20" dependencies: - "@babel/compat-data": ^7.22.9 + "@babel/compat-data": ^7.22.20 "@babel/helper-compilation-targets": ^7.22.15 "@babel/helper-plugin-utils": ^7.22.5 "@babel/helper-validator-option": ^7.22.15 @@ -1260,7 +1260,7 @@ __metadata: "@babel/plugin-transform-unicode-regex": ^7.22.5 "@babel/plugin-transform-unicode-sets-regex": ^7.22.5 "@babel/preset-modules": 0.1.6-no-external-plugins - "@babel/types": ^7.22.15 + "@babel/types": ^7.22.19 babel-plugin-polyfill-corejs2: ^0.4.5 babel-plugin-polyfill-corejs3: ^0.8.3 babel-plugin-polyfill-regenerator: ^0.5.2 @@ -1268,7 +1268,7 @@ __metadata: semver: ^6.3.1 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c3cf0223cab006cbf0c563a49a5076caa0b62e3b61b4f10ba857347fcd4f85dbb662a78e6f289e4f29f72c36974696737ae86c23da114617f5b00ab2c1c66126 + checksum: 99357a5cb30f53bacdc0d1cd6dff0f052ea6c2d1ba874d969bba69897ef716e87283e84a59dc52fb49aa31fd1b6f55ed756c64c04f5678380700239f6030b881 languageName: node linkType: hard @@ -1312,32 +1312,32 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.22.15, @babel/traverse@npm:^7.22.17": - version: 7.22.17 - resolution: "@babel/traverse@npm:7.22.17" +"@babel/traverse@npm:^7.22.15, @babel/traverse@npm:^7.22.20": + version: 7.22.20 + resolution: "@babel/traverse@npm:7.22.20" dependencies: "@babel/code-frame": ^7.22.13 "@babel/generator": ^7.22.15 - "@babel/helper-environment-visitor": ^7.22.5 + "@babel/helper-environment-visitor": ^7.22.20 "@babel/helper-function-name": ^7.22.5 "@babel/helper-hoist-variables": ^7.22.5 "@babel/helper-split-export-declaration": ^7.22.6 "@babel/parser": ^7.22.16 - "@babel/types": ^7.22.17 + "@babel/types": ^7.22.19 debug: ^4.1.0 globals: ^11.1.0 - checksum: 1153ca166a0a9b3fddf67f7f7c8c5b4f88aa2c2c00261ff2fc8424a63bc93250ed3fd08b04bd526ad19e797aeb6f22161120646a570cbfe5ff2a5d2f5d28af01 + checksum: 97da9afa7f8f505ce52c36ac2531129bc4a0e250880aaf9b467dc044f30a5bce2b756c1af4d961958bc225659546e811a7d536ab3d920fd60921087989b841b9 languageName: node linkType: hard -"@babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.17, @babel/types@npm:^7.22.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.22.17 - resolution: "@babel/types@npm:7.22.17" +"@babel/types@npm:^7.22.10, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.19, @babel/types@npm:^7.22.5, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": + version: 7.22.19 + resolution: "@babel/types@npm:7.22.19" dependencies: "@babel/helper-string-parser": ^7.22.5 - "@babel/helper-validator-identifier": ^7.22.15 + "@babel/helper-validator-identifier": ^7.22.19 to-fast-properties: ^2.0.0 - checksum: 7382220f6eb2548f2c867a98916c3aa8a6063498d5372e5d21d8d184ba354033defb72aeba5858c1b2b42177058b896a34a7dcbae5eccd47fb0104721efa909d + checksum: 2d69740e69b55ba36ece0c17d5afb7b7213b34297157df39ef9ba24965aff677c56f014413052ecc5b2fbbf26910c63e5bb24a969df84d7a17153750cf75915e languageName: node linkType: hard @@ -4349,8 +4349,8 @@ __metadata: resolution: "jenkins-ui@workspace:." dependencies: "@babel/cli": 7.22.15 - "@babel/core": 7.22.17 - "@babel/preset-env": 7.22.15 + "@babel/core": 7.22.20 + "@babel/preset-env": 7.22.20 babel-loader: 9.1.3 clean-webpack-plugin: 4.0.0 css-loader: 6.8.1 From 882987dd297151f459d1022e075537545613fc8d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:47:19 +0200 Subject: [PATCH 23/52] Bump org.jenkins-ci.plugins:matrix-auth from 3.2 to 3.2.1 (#8499) Bumps [org.jenkins-ci.plugins:matrix-auth](https://github.com/jenkinsci/matrix-auth-plugin) from 3.2 to 3.2.1. - [Release notes](https://github.com/jenkinsci/matrix-auth-plugin/releases) - [Changelog](https://github.com/jenkinsci/matrix-auth-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/jenkinsci/matrix-auth-plugin/compare/matrix-auth-3.2...matrix-auth-3.2.1) --- updated-dependencies: - dependency-name: org.jenkins-ci.plugins:matrix-auth dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pom.xml b/test/pom.xml index 60f05acb18d3..bf1a0fb43a06 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -214,7 +214,7 @@ THE SOFTWARE. org.jenkins-ci.plugins matrix-auth - 3.2 + 3.2.1 test From 99590c8baf4d168ba421e29745759aa29fa2f226 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:47:32 +0200 Subject: [PATCH 24/52] Bump io.jenkins.plugins:font-awesome-api from 6.4.0-2 to 6.4.2-1 (#8500) Bumps [io.jenkins.plugins:font-awesome-api](https://github.com/jenkinsci/font-awesome-api-plugin) from 6.4.0-2 to 6.4.2-1. - [Release notes](https://github.com/jenkinsci/font-awesome-api-plugin/releases) - [Changelog](https://github.com/jenkinsci/font-awesome-api-plugin/blob/master/CHANGELOG.md) - [Commits](https://github.com/jenkinsci/font-awesome-api-plugin/compare/v6.4.0-2...v6.4.2-1) --- updated-dependencies: - dependency-name: io.jenkins.plugins:font-awesome-api dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pom.xml b/test/pom.xml index bf1a0fb43a06..0065bbeca2ca 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -73,7 +73,7 @@ THE SOFTWARE. io.jenkins.plugins font-awesome-api - 6.4.0-2 + 6.4.2-1 io.jenkins.plugins From af260cb5264a750dd181f5bca7f9a72cd520a4d7 Mon Sep 17 00:00:00 2001 From: Pierre Beitz Date: Wed, 20 Sep 2023 20:47:44 +0200 Subject: [PATCH 25/52] [chore] Remove useless TODO (#8501) --- core/src/main/java/org/acegisecurity/Authentication.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/acegisecurity/Authentication.java b/core/src/main/java/org/acegisecurity/Authentication.java index 2ecc2fccc4df..c331564f664e 100644 --- a/core/src/main/java/org/acegisecurity/Authentication.java +++ b/core/src/main/java/org/acegisecurity/Authentication.java @@ -34,7 +34,7 @@ import org.acegisecurity.userdetails.UserDetails; /** - * @deprecated use TODO or {@link org.springframework.security.core.Authentication} + * @deprecated use {@link org.springframework.security.core.Authentication} */ @Deprecated public interface Authentication extends Principal, Serializable { From 9edaffcf7be136c54def43ceed626ba4a9656c78 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 20 Sep 2023 11:48:04 -0700 Subject: [PATCH 26/52] Use functionality from `XStream2` where possible (#8504) --- core/src/main/java/jenkins/install/InstallUtil.java | 6 +++--- .../java/hudson/util/RobustReflectionConverterTest.java | 2 +- .../src/test/java/jenkins/security/ClassFilterImplTest.java | 3 ++- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/jenkins/install/InstallUtil.java b/core/src/main/java/jenkins/install/InstallUtil.java index ff6949eaefd8..9280b6c064c4 100644 --- a/core/src/main/java/jenkins/install/InstallUtil.java +++ b/core/src/main/java/jenkins/install/InstallUtil.java @@ -27,7 +27,6 @@ import static java.util.logging.Level.SEVERE; import static java.util.logging.Level.WARNING; -import com.thoughtworks.xstream.XStream; import edu.umd.cs.findbugs.annotations.CheckForNull; import edu.umd.cs.findbugs.annotations.NonNull; import hudson.Functions; @@ -37,6 +36,7 @@ import hudson.model.UpdateCenter.InstallationJob; import hudson.model.UpdateCenter.UpdateCenterJob; import hudson.util.VersionNumber; +import hudson.util.XStream2; import jakarta.inject.Provider; import java.io.File; import java.io.IOException; @@ -289,7 +289,7 @@ private static String getCurrentExecVersion() { if (installingPluginsFile == null || !installingPluginsFile.exists()) { return null; } - return (Map) new XStream().fromXML(installingPluginsFile); + return (Map) new XStream2().fromXML(installingPluginsFile); } /** @@ -319,7 +319,7 @@ public static synchronized void persistInstallStatus(List insta } } try { - String installingPluginXml = new XStream().toXML(statuses); + String installingPluginXml = new XStream2().toXML(statuses); Files.writeString(Util.fileToPath(installingPluginsFile), installingPluginXml, StandardCharsets.UTF_8); } catch (IOException e) { LOGGER.log(SEVERE, "Failed to save " + installingPluginsFile.getAbsolutePath(), e); diff --git a/core/src/test/java/hudson/util/RobustReflectionConverterTest.java b/core/src/test/java/hudson/util/RobustReflectionConverterTest.java index 2ed2fcadffb5..bb392132afdd 100644 --- a/core/src/test/java/hudson/util/RobustReflectionConverterTest.java +++ b/core/src/test/java/hudson/util/RobustReflectionConverterTest.java @@ -78,7 +78,7 @@ private Point read(XStream xs) { @Test public void ifWorkaroundNeeded() { - XStream xs = new XStream(); + XStream xs = new XStream(XStream2.getDefaultDriver()); xs.allowTypes(new Class[] {Point.class}); final ConversionException e = assertThrows(ConversionException.class, () -> read(xs)); assertThat(e.getMessage(), containsString("No such field hudson.util.Point.z")); diff --git a/test/src/test/java/jenkins/security/ClassFilterImplTest.java b/test/src/test/java/jenkins/security/ClassFilterImplTest.java index 9ccc33158cfa..3962e441e236 100644 --- a/test/src/test/java/jenkins/security/ClassFilterImplTest.java +++ b/test/src/test/java/jenkins/security/ClassFilterImplTest.java @@ -47,6 +47,7 @@ import hudson.model.Saveable; import hudson.tasks.BuildStepDescriptor; import hudson.tasks.Builder; +import hudson.util.XStream2; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; @@ -152,7 +153,7 @@ public void xstreamRequiresWhitelist() throws Exception { config.save(); assertThat(config.getConfigFile().asString(), not(containsString("LinkedListMultimap"))); config.unrelated = "modified"; - Files.writeString(config.getConfigFile().getFile().toPath(), new XStream().toXML(config), StandardCharsets.UTF_8); + Files.writeString(config.getConfigFile().getFile().toPath(), new XStream(XStream2.getDefaultDriver()).toXML(config), StandardCharsets.UTF_8); assertThat(config.getConfigFile().asString(), allOf(containsString("LinkedListMultimap"), containsString("modified"))); config.obj = null; config.unrelated = null; From b16efddb086e26834391a28f0c98f2f2d11fb311 Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Thu, 21 Sep 2023 03:48:17 +0900 Subject: [PATCH 27/52] Fix typo in container-debug.js (#8506) documenation -> documentation --- war/src/main/webapp/scripts/yui/container/container-debug.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/war/src/main/webapp/scripts/yui/container/container-debug.js b/war/src/main/webapp/scripts/yui/container/container-debug.js index a792385911da..2c04e5639901 100644 --- a/war/src/main/webapp/scripts/yui/container/container-debug.js +++ b/war/src/main/webapp/scripts/yui/container/container-debug.js @@ -7424,7 +7424,7 @@ version: 2.9.0 *

*

* For more information, see the - * Connection Manager documenation on file uploads. + * Connection Manager documentation on file uploads. *

* @property callback.upload * @type Function @@ -7661,7 +7661,7 @@ version: 2.9.0 * upload handler rather than the standard * success and, or failure handlers. For more * information, see the Connection Manager documenation on file uploads. + * connection/#file">Connection Manager documentation on file uploads. * @method doSubmit */ doSubmit: function () { From 910aa99cf142aed6ec2fc7ca93e33e4cf1fac12b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 20:48:59 +0200 Subject: [PATCH 28/52] Bump org.springframework.security:spring-security-bom from 5.8.6 to 5.8.7 (#8502) Bump org.springframework.security:spring-security-bom Bumps [org.springframework.security:spring-security-bom](https://github.com/spring-projects/spring-security) from 5.8.6 to 5.8.7. - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/5.8.6...5.8.7) --- updated-dependencies: - dependency-name: org.springframework.security:spring-security-bom dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[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 c19d9ae135ad..3104e6b89515 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -64,7 +64,7 @@ THE SOFTWARE. org.springframework.security spring-security-bom - 5.8.6 + 5.8.7 pom import
From 1cb04f4af9bbf370d84f624bb242c4de956d0292 Mon Sep 17 00:00:00 2001 From: James Nord Date: Wed, 20 Sep 2023 19:49:21 +0100 Subject: [PATCH 29/52] fix signup autofocus (#8474) the expression was not valid and caused an exception to be thrown. replace the invalid expression with a null check (for the initial rendering where there is no SignupIno in the page). ``` 10.912 [id=100] WARNING h.ExpressionFactory2$JexlExpression#evaluate: Caught exception evaluating: (data.errors.containsKey('username') || !data) ? true : null in /jenkins/securityRealm/createAccount. Reason: java.lang.Exception: expression not boolean valued java.lang.Exception: expression not boolean valued at org.apache.commons.jexl.parser.ASTNotNode.value(ASTNotNode.java:68) ... at org.kohsuke.stapler.ScriptRequestDispatcher.forward(ScriptRequestDispatcher.java:97) at hudson.security.HudsonPrivateSecurityRealm.createAccount(HudsonPrivateSecurityRealm.java:399) at hudson.security.HudsonPrivateSecurityRealm._doCreateAccount(HudsonPrivateSecurityRealm.java:269) at hudson.security.HudsonPrivateSecurityRealm.doCreateAccount(HudsonPrivateSecurityRealm.java:261) ``` --- .../hudson/security/HudsonPrivateSecurityRealm/signup.jelly | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly index 52e13b720fc7..0dc065a8290d 100644 --- a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly +++ b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/signup.jelly @@ -73,7 +73,7 @@ THE SOFTWARE. ${data.errors.containsKey('username') ? data.errors.get('username') : ''} Date: Fri, 22 Sep 2023 15:54:06 +0200 Subject: [PATCH 30/52] Update jenkins/ath Docker tag to v5717 (#8518) 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 9edfd5f27495..ca69eae354fc 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=5699.v27deb_ef5796c +export ATH_VERSION=5717.v51fb_b_1f0f6d1 if [[ $# -eq 0 ]]; then export JDK=17 From c8b8cb79e75a6dbad3c5495c710f87de39cebf56 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:54:42 +0200 Subject: [PATCH 31/52] Update dependency postcss-preset-env to v9.1.4 (#8517) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 2 +- war/yarn.lock | 264 +++++++++++++++++++++++------------------------ 2 files changed, 133 insertions(+), 133 deletions(-) diff --git a/war/package.json b/war/package.json index 984cd50a9309..d74fc16f7ea9 100644 --- a/war/package.json +++ b/war/package.json @@ -36,7 +36,7 @@ "mini-css-extract-plugin": "2.7.6", "postcss": "8.4.29", "postcss-loader": "7.3.3", - "postcss-preset-env": "9.1.3", + "postcss-preset-env": "9.1.4", "postcss-scss": "4.0.8", "prettier": "3.0.3", "sass": "1.67.0", diff --git a/war/yarn.lock b/war/yarn.lock index 0320176f2423..f667f5b5b54c 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -1341,7 +1341,7 @@ __metadata: languageName: node linkType: hard -"@csstools/cascade-layer-name-parser@npm:^1.0.3, @csstools/cascade-layer-name-parser@npm:^1.0.4": +"@csstools/cascade-layer-name-parser@npm:^1.0.4": version: 1.0.4 resolution: "@csstools/cascade-layer-name-parser@npm:1.0.4" peerDependencies: @@ -1419,31 +1419,31 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-color-function@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-color-function@npm:3.0.3" +"@csstools/postcss-color-function@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-color-function@npm:3.0.4" dependencies: "@csstools/css-color-parser": ^1.3.1 "@csstools/css-parser-algorithms": ^2.3.1 "@csstools/css-tokenizer": ^2.2.0 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 peerDependencies: postcss: ^8.4 - checksum: 9cef65142823670e9ab6667c8855f7499716eab6c2b880d8dbcebaf4c1c720df7c5417d6686b78b162a7c214c5c4e3c04621095182463d9f86a5e58f96a98828 + checksum: b1ac1b33453f4df154aa50b54a01a74fa4c659c1c15cd0d83080396f6e5e9974a514f9a16a058262dd3236dc245763040478a83da8e675883d03dff33db6e577 languageName: node linkType: hard -"@csstools/postcss-color-mix-function@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-color-mix-function@npm:2.0.3" +"@csstools/postcss-color-mix-function@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-color-mix-function@npm:2.0.4" dependencies: "@csstools/css-color-parser": ^1.3.1 "@csstools/css-parser-algorithms": ^2.3.1 "@csstools/css-tokenizer": ^2.2.0 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 peerDependencies: postcss: ^8.4 - checksum: 20c371381de7b65373b17f2f6f4568296bda3503ea25ed2090e03d71949770811fdd839a02608bf3a6cb6a300e4a1c45ca9d9bfc5aacc601420b6078a5378a86 + checksum: f52ca6367273e5a5b4139b422998a91496e26fdde7f91c48099093503fd24d72d9c1603b492c11b6f31d0b6dea72cb283d7c68cc5381c8c9bc6fb32ea31d92d8 languageName: node linkType: hard @@ -1471,17 +1471,17 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-gradients-interpolation-method@npm:^4.0.3": - version: 4.0.3 - resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.3" +"@csstools/postcss-gradients-interpolation-method@npm:^4.0.4": + version: 4.0.4 + resolution: "@csstools/postcss-gradients-interpolation-method@npm:4.0.4" dependencies: "@csstools/css-color-parser": ^1.3.1 "@csstools/css-parser-algorithms": ^2.3.1 "@csstools/css-tokenizer": ^2.2.0 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 peerDependencies: postcss: ^8.4 - checksum: 4433768c89b96f5d506ab02b1d266a499c4e4ed0b568573e38dd009c9dc9a23fed4f2319a52b9097fbe8d158607de14e32b997b3c9f1c2241e582136d54bd7ca + checksum: 796a0a79da02393df562c961effa516e047721f0b4055791702878320465dc5d583ced3705295dd3bc9c03c2f64dbd56971f0b8079df2fc19638f408ff2bceef languageName: node linkType: hard @@ -1498,27 +1498,36 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-ic-unit@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-ic-unit@npm:3.0.0" +"@csstools/postcss-ic-unit@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-ic-unit@npm:3.0.1" dependencies: - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: 91bbe46c8691f641d610f8878fa5a8a01cbf7cb8f2b79222c3de4c21c2afa5e82654fd169b507faa424c8cd8711677aadaa978df4d25269b811be36615eebf61 + checksum: b8120d8e2886cb5fc3276d576b7351821665575d0f2f3cf58c2a376352a19f21c88087ebb8f55bdfe094b2d4f9ef25e5bc8e0944e1761760b4f8c34032b04d9a languageName: node linkType: hard -"@csstools/postcss-is-pseudo-class@npm:^4.0.1": - version: 4.0.1 - resolution: "@csstools/postcss-is-pseudo-class@npm:4.0.1" +"@csstools/postcss-initial@npm:^1.0.0": + version: 1.0.0 + resolution: "@csstools/postcss-initial@npm:1.0.0" + peerDependencies: + postcss: ^8.4 + checksum: 21d15759921509ddc78505265bd376854bf2710cdc27f62c138d4ee991581a34bebd8f61f100fd053e0bb95760121f1e1e4dbe61ae41cbef7b3f817e42c35743 + languageName: node + linkType: hard + +"@csstools/postcss-is-pseudo-class@npm:^4.0.2": + version: 4.0.2 + resolution: "@csstools/postcss-is-pseudo-class@npm:4.0.2" dependencies: "@csstools/selector-specificity": ^3.0.0 postcss-selector-parser: ^6.0.13 peerDependencies: postcss: ^8.4 - checksum: eff256d0c7bf84a4a4fb1dffae54b9ab019b5aec3e2bcc9a41b19e71044a060a282f65f2ef2e4e1f679cd0a6db7fa0622c95220ece22a116181cffd0dffb7e11 + checksum: ef944cbcd4ced80dcf6b276ec8e818389c07a3986036e479adc0f0cdf4b4a65e0230aa5e9f31843e1dfdfe1654d3b301aabbeeca4cd99221712970023c937461 languageName: node linkType: hard @@ -1542,14 +1551,14 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-logical-viewport-units@npm:^2.0.1": - version: 2.0.1 - resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.1" +"@csstools/postcss-logical-viewport-units@npm:^2.0.2": + version: 2.0.2 + resolution: "@csstools/postcss-logical-viewport-units@npm:2.0.2" dependencies: "@csstools/css-tokenizer": ^2.2.0 peerDependencies: postcss: ^8.4 - checksum: f779267989a9e46e7bcf2163a4ae1862d2af171248c31adcd6b1fba73611dbf788d5c58c90c9ef0851db63fa00b2dc09e6883ebc31645ddf5cbbe2da2b7616c0 + checksum: 6d6a86b41cd846d1298a0bdb39f03ece179bc8e1fb96c9d129658102952a389a6f4110ead25d7d8c65ff74313b59a567a4a2e9000a290777d69892b08742fef1 languageName: node linkType: hard @@ -1591,53 +1600,53 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-normalize-display-values@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-normalize-display-values@npm:3.0.0" +"@csstools/postcss-normalize-display-values@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-normalize-display-values@npm:3.0.1" dependencies: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: fcb1c3f862b5966558e1ea91a8e91db86afc34cfe5cc4c2d19a4126153b87a041533dec9a8887f0fa284c361de30a38262799aa83dcc789ed336abc9b17f8d97 + checksum: 895873a7ec7551962fd2c03207b7899cc0f6a575b9bf816de49afff15b28dd751e8cf6fbf2a3bfb8372993309d600b3f35236ddf249a59ecf7c981ec72628305 languageName: node linkType: hard -"@csstools/postcss-oklab-function@npm:^3.0.3": - version: 3.0.3 - resolution: "@csstools/postcss-oklab-function@npm:3.0.3" +"@csstools/postcss-oklab-function@npm:^3.0.4": + version: 3.0.4 + resolution: "@csstools/postcss-oklab-function@npm:3.0.4" dependencies: "@csstools/css-color-parser": ^1.3.1 "@csstools/css-parser-algorithms": ^2.3.1 "@csstools/css-tokenizer": ^2.2.0 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 peerDependencies: postcss: ^8.4 - checksum: 4e3c6f6b9388d23d5c7a8c1b35912af354af5ca985552f7a2d01c6efe5a11e0a6ebeeaa4fd5a159c41a76292856f19de1388772718d3d46f91d41ff6bdd61d85 + checksum: 714a3cd27e2c46a925b74eeb6d1840dc3088655fb49b83aae8632416fcbec0797acde31bdbd9d26ba6707663675ba78a92ccfb12c1f35eec41a5731ed3c32f4f languageName: node linkType: hard -"@csstools/postcss-progressive-custom-properties@npm:^3.0.0": - version: 3.0.0 - resolution: "@csstools/postcss-progressive-custom-properties@npm:3.0.0" +"@csstools/postcss-progressive-custom-properties@npm:^3.0.1": + version: 3.0.1 + resolution: "@csstools/postcss-progressive-custom-properties@npm:3.0.1" dependencies: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: 4b92e5ae893c45bfd4109a0c5b90180af9df121e38a1ad0e828c29bec4f487b89af9140a1d9c58b83ebc28303b733f62926c8bb8cc72ac9db6e10a1e7a31c9ee + checksum: 4bb03459c5f39fcd77518c8229026b68cc24746e44234604fc4f93ea4c6fccf01d23e8cad6043a23e1bc7ce3b677f5d038b9b63ea5971231bb7787535fa035ed languageName: node linkType: hard -"@csstools/postcss-relative-color-syntax@npm:^2.0.3": - version: 2.0.3 - resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.3" +"@csstools/postcss-relative-color-syntax@npm:^2.0.4": + version: 2.0.4 + resolution: "@csstools/postcss-relative-color-syntax@npm:2.0.4" dependencies: "@csstools/css-color-parser": ^1.3.1 "@csstools/css-parser-algorithms": ^2.3.1 "@csstools/css-tokenizer": ^2.2.0 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 peerDependencies: postcss: ^8.4 - checksum: 02465a12737805474e0ff0dbe83a770aaa53f6b7e3a82f47c24cc0a89e392c958e04194e1938e341265748aae1aacc0a59b806aa2c53384a3875663fecf1b6f3 + checksum: 5c1b13e8e17e206547b0cef55d227d66e5a1cf96a11eb91a2ea176cad3c6dd5abec88c742ba90d4812f3cbbd9ef88d2a80b31e6858345e2966393ab7f3fd784f languageName: node linkType: hard @@ -1665,15 +1674,15 @@ __metadata: languageName: node linkType: hard -"@csstools/postcss-text-decoration-shorthand@npm:^3.0.2": - version: 3.0.2 - resolution: "@csstools/postcss-text-decoration-shorthand@npm:3.0.2" +"@csstools/postcss-text-decoration-shorthand@npm:^3.0.3": + version: 3.0.3 + resolution: "@csstools/postcss-text-decoration-shorthand@npm:3.0.3" dependencies: "@csstools/color-helpers": ^3.0.2 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: ce0eedb04f628b874a20caff68848ca98fc8731852a4da8c0014f093d593f920be3ae024b272444e10cdc3c1779630426d288d6cb57883f2c7b2b0ea9f5ed7c3 + checksum: c39e4e7aa275f49c2dc565e606bdecc6605eac3fd46c1bdf551b75674034511c666294f935e203c2e0103f7c422c09ccdbbe1a5c3fb16991072744a963a820ad languageName: node linkType: hard @@ -3138,10 +3147,10 @@ __metadata: languageName: node linkType: hard -"cssdb@npm:^7.7.1": - version: 7.7.1 - resolution: "cssdb@npm:7.7.1" - checksum: 61e3094a3c5cc94c6965ddd1b91af3383f6fb24fe96945e44954c548612a24a06713fe384e4da5efcd37e6383e534e6193aedcac9f2441b207d3c04dcc1aabf7 +"cssdb@npm:^7.7.2": + version: 7.7.2 + resolution: "cssdb@npm:7.7.2" + checksum: 74a8b46fc694b8576686dde6acbf0a28b07a1a1ff01b24c0c3de12e4680f2124d4beb3367b97ec309938d32306e1806fe5e209f8c899f120349cdfb5d327b727 languageName: node linkType: hard @@ -4365,7 +4374,7 @@ __metadata: mini-css-extract-plugin: 2.7.6 postcss: 8.4.29 postcss-loader: 7.3.3 - postcss-preset-env: 9.1.3 + postcss-preset-env: 9.1.4 postcss-scss: 4.0.8 prettier: 3.0.3 sass: 1.67.0 @@ -5346,15 +5355,15 @@ __metadata: languageName: node linkType: hard -"postcss-color-functional-notation@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-color-functional-notation@npm:6.0.0" +"postcss-color-functional-notation@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-color-functional-notation@npm:6.0.1" dependencies: - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: c80683e908ebdb03603029bdd0ad7b3626c40880601ed678e9903fcf46522418db825d4781e9d89f4970bb0772232b4a10e6eac029fdbc1bf14b36aee9c96216 + checksum: afb3eaaad1f3d4b38a9f7f1bd0cdaf2602e82e568147eb7ef45467e28b2b96dcdb45d3c3ddc908571776b7df4b66fe49ec3ff21fce42d49648db9b2ef9f369ed languageName: node linkType: hard @@ -5369,14 +5378,14 @@ __metadata: languageName: node linkType: hard -"postcss-color-rebeccapurple@npm:^9.0.0": - version: 9.0.0 - resolution: "postcss-color-rebeccapurple@npm:9.0.0" +"postcss-color-rebeccapurple@npm:^9.0.1": + version: 9.0.1 + resolution: "postcss-color-rebeccapurple@npm:9.0.1" dependencies: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: 3b3d087e5bd70bddd11fb52d5d82fb1c1a04b5cdc628f5bb9bc5ef1fa6c16d95ffda0c16a3208bd420218761fc4052b9d3201b5f2efc1edbc34b2ac82d0b20d6 + checksum: baf61a300dc4922a9bbcb34c3c7b224c53bd2a3f504fae3cd30ad62a8ded0dea61c5c8e2f15a554d810ff1c2c9f2d681d58f816ee1e6c6049152c76d242e1dca languageName: node linkType: hard @@ -5406,23 +5415,23 @@ __metadata: languageName: node linkType: hard -"postcss-custom-media@npm:^10.0.0": - version: 10.0.0 - resolution: "postcss-custom-media@npm:10.0.0" +"postcss-custom-media@npm:^10.0.1": + version: 10.0.1 + resolution: "postcss-custom-media@npm:10.0.1" dependencies: - "@csstools/cascade-layer-name-parser": ^1.0.3 - "@csstools/css-parser-algorithms": ^2.3.0 - "@csstools/css-tokenizer": ^2.1.1 - "@csstools/media-query-list-parser": ^2.1.2 + "@csstools/cascade-layer-name-parser": ^1.0.4 + "@csstools/css-parser-algorithms": ^2.3.1 + "@csstools/css-tokenizer": ^2.2.0 + "@csstools/media-query-list-parser": ^2.1.4 peerDependencies: postcss: ^8.4 - checksum: f52165a866bd978d3fe295f2d60fd5f591c0db241d2fd7d1197ad511817938ce737eab0c1ff2d5d42adbc3df27ee9645fd76c1af568df333e501ae8872461963 + checksum: 8e56241957e0a53e746934181448eea81f94946d59bfb9cf4bda71d0700a00554ee973e2e4808712da57127a3ab4e455bc0aba9c9d8c975b412d9fc991741388 languageName: node linkType: hard -"postcss-custom-properties@npm:^13.3.0": - version: 13.3.0 - resolution: "postcss-custom-properties@npm:13.3.0" +"postcss-custom-properties@npm:^13.3.1": + version: 13.3.1 + resolution: "postcss-custom-properties@npm:13.3.1" dependencies: "@csstools/cascade-layer-name-parser": ^1.0.4 "@csstools/css-parser-algorithms": ^2.3.1 @@ -5430,21 +5439,21 @@ __metadata: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: 7757a6a5a8cd4da7114e0680f503b0ab2e22d2d84cda2dd7938aad6f2233cd2daec11bb1b5a63b54d954683702a31a694499b3ae906451075ff8eb16316b946f + checksum: 8f54b5afef55368dd162e3c6455f504b309fedaf2e1e3ce6c7ede9ad7a9baa3162e9763a2342814c0e2af2a1a52adb490ec70e1d3419adeaaffc665bd3ca887b languageName: node linkType: hard -"postcss-custom-selectors@npm:^7.1.4": - version: 7.1.4 - resolution: "postcss-custom-selectors@npm:7.1.4" +"postcss-custom-selectors@npm:^7.1.5": + version: 7.1.5 + resolution: "postcss-custom-selectors@npm:7.1.5" dependencies: - "@csstools/cascade-layer-name-parser": ^1.0.3 - "@csstools/css-parser-algorithms": ^2.3.0 - "@csstools/css-tokenizer": ^2.1.1 + "@csstools/cascade-layer-name-parser": ^1.0.4 + "@csstools/css-parser-algorithms": ^2.3.1 + "@csstools/css-tokenizer": ^2.2.0 postcss-selector-parser: ^6.0.13 peerDependencies: postcss: ^8.4 - checksum: dfb5d82f52ddfdaca0174f1840e5da27c0a184ad552bcb800c060b6a67d95efc98d9a7179d6a863a669c8ad1d34b5f006a211e536657b9aea1e97dee5cfe7ce1 + checksum: 416561fc471e4856ec696015262d0502042413ce09f13cc47bced72b450a6e01c3be4f9631bc87c3eea043df90b6e54cebc5e078e97b406467ff90f093b38adb languageName: node linkType: hard @@ -5495,15 +5504,15 @@ __metadata: languageName: node linkType: hard -"postcss-double-position-gradients@npm:^5.0.0": - version: 5.0.0 - resolution: "postcss-double-position-gradients@npm:5.0.0" +"postcss-double-position-gradients@npm:^5.0.1": + version: 5.0.1 + resolution: "postcss-double-position-gradients@npm:5.0.1" dependencies: - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: 432b609a2c0d5e9353e1ec218ec1710847a810dda8361e7296c00d2ee6af6851267e1d1e0a5ab8b5a555ec2dcb530e37f3dbff4526953a6228193cf2bf74fc46 + checksum: 77b3d1d475ea4e79491b750ef775483431c008e1b6fa95a6da992b12150e06e45a29f2085e24b977ef78bba1cc109d08477cc19e3289249597722ba5b81210ec languageName: node linkType: hard @@ -5547,37 +5556,28 @@ __metadata: languageName: node linkType: hard -"postcss-image-set-function@npm:^6.0.0": - version: 6.0.0 - resolution: "postcss-image-set-function@npm:6.0.0" +"postcss-image-set-function@npm:^6.0.1": + version: 6.0.1 + resolution: "postcss-image-set-function@npm:6.0.1" dependencies: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: edea6b3a9cda696bfdbaabe9956e9245e4a9d36eb098dc83b6ba1db59418f350ad18b66e38e8f99fe18c895b71d3d627c3913c097cca2834e4763bf62223cb35 + checksum: 0a4043591af3b92725f439651330cfb0a43f1388772e7aa4441ceee502e347bd131e71b1bcaa3fc50205195f1e00513d3d515108c4de6f57a60b1b06a28ca9a0 languageName: node linkType: hard -"postcss-initial@npm:^4.0.1": - version: 4.0.1 - resolution: "postcss-initial@npm:4.0.1" - peerDependencies: - postcss: ^8.0.0 - checksum: 6956953853865de79c39d11533a2860e9f38b770bb284d0010d98a00b9469e22de344e4e5fd8208614d797030487e8918dd2f2c37d9e24d4dd59d565d4fc3e12 - languageName: node - linkType: hard - -"postcss-lab-function@npm:^6.0.3": - version: 6.0.3 - resolution: "postcss-lab-function@npm:6.0.3" +"postcss-lab-function@npm:^6.0.4": + version: 6.0.4 + resolution: "postcss-lab-function@npm:6.0.4" dependencies: "@csstools/css-color-parser": ^1.3.1 "@csstools/css-parser-algorithms": ^2.3.1 "@csstools/css-tokenizer": ^2.2.0 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 peerDependencies: postcss: ^8.4 - checksum: 4b151846c0d08363a1011e02664211834eb4c45f19ded1833f8ef7f94f89df42b0ca1e285a5e0a620619cc1e7efdfc1a49c2fa19114df07a379ce6b925c66ad6 + checksum: 45fa12f0bce1c4fb54976ba0b56ebc391a749545a2a3597ecd688be7014a0a2e8319ef6710b3b1de9f6c83e824488ea1f2ab1c1cd38787fe65e30257fb54cafd languageName: node linkType: hard @@ -5886,32 +5886,33 @@ __metadata: languageName: node linkType: hard -"postcss-preset-env@npm:9.1.3": - version: 9.1.3 - resolution: "postcss-preset-env@npm:9.1.3" +"postcss-preset-env@npm:9.1.4": + version: 9.1.4 + resolution: "postcss-preset-env@npm:9.1.4" dependencies: "@csstools/postcss-cascade-layers": ^4.0.0 - "@csstools/postcss-color-function": ^3.0.3 - "@csstools/postcss-color-mix-function": ^2.0.3 + "@csstools/postcss-color-function": ^3.0.4 + "@csstools/postcss-color-mix-function": ^2.0.4 "@csstools/postcss-exponential-functions": ^1.0.0 "@csstools/postcss-font-format-keywords": ^3.0.0 - "@csstools/postcss-gradients-interpolation-method": ^4.0.3 + "@csstools/postcss-gradients-interpolation-method": ^4.0.4 "@csstools/postcss-hwb-function": ^3.0.3 - "@csstools/postcss-ic-unit": ^3.0.0 - "@csstools/postcss-is-pseudo-class": ^4.0.1 + "@csstools/postcss-ic-unit": ^3.0.1 + "@csstools/postcss-initial": ^1.0.0 + "@csstools/postcss-is-pseudo-class": ^4.0.2 "@csstools/postcss-logical-float-and-clear": ^2.0.0 "@csstools/postcss-logical-resize": ^2.0.0 - "@csstools/postcss-logical-viewport-units": ^2.0.1 + "@csstools/postcss-logical-viewport-units": ^2.0.2 "@csstools/postcss-media-minmax": ^1.0.7 "@csstools/postcss-media-queries-aspect-ratio-number-values": ^2.0.2 "@csstools/postcss-nested-calc": ^3.0.0 - "@csstools/postcss-normalize-display-values": ^3.0.0 - "@csstools/postcss-oklab-function": ^3.0.3 - "@csstools/postcss-progressive-custom-properties": ^3.0.0 - "@csstools/postcss-relative-color-syntax": ^2.0.3 + "@csstools/postcss-normalize-display-values": ^3.0.1 + "@csstools/postcss-oklab-function": ^3.0.4 + "@csstools/postcss-progressive-custom-properties": ^3.0.1 + "@csstools/postcss-relative-color-syntax": ^2.0.4 "@csstools/postcss-scope-pseudo-class": ^3.0.0 "@csstools/postcss-stepped-value-functions": ^3.0.1 - "@csstools/postcss-text-decoration-shorthand": ^3.0.2 + "@csstools/postcss-text-decoration-shorthand": ^3.0.3 "@csstools/postcss-trigonometric-functions": ^3.0.1 "@csstools/postcss-unset-value": ^3.0.0 autoprefixer: ^10.4.15 @@ -5919,24 +5920,23 @@ __metadata: css-blank-pseudo: ^6.0.0 css-has-pseudo: ^6.0.0 css-prefers-color-scheme: ^9.0.0 - cssdb: ^7.7.1 + cssdb: ^7.7.2 postcss-attribute-case-insensitive: ^6.0.2 postcss-clamp: ^4.1.0 - postcss-color-functional-notation: ^6.0.0 + postcss-color-functional-notation: ^6.0.1 postcss-color-hex-alpha: ^9.0.2 - postcss-color-rebeccapurple: ^9.0.0 - postcss-custom-media: ^10.0.0 - postcss-custom-properties: ^13.3.0 - postcss-custom-selectors: ^7.1.4 + postcss-color-rebeccapurple: ^9.0.1 + postcss-custom-media: ^10.0.1 + postcss-custom-properties: ^13.3.1 + postcss-custom-selectors: ^7.1.5 postcss-dir-pseudo-class: ^8.0.0 - postcss-double-position-gradients: ^5.0.0 + postcss-double-position-gradients: ^5.0.1 postcss-focus-visible: ^9.0.0 postcss-focus-within: ^8.0.0 postcss-font-variant: ^5.0.0 postcss-gap-properties: ^5.0.0 - postcss-image-set-function: ^6.0.0 - postcss-initial: ^4.0.1 - postcss-lab-function: ^6.0.3 + postcss-image-set-function: ^6.0.1 + postcss-lab-function: ^6.0.4 postcss-logical: ^7.0.0 postcss-nesting: ^12.0.1 postcss-opacity-percentage: ^2.0.0 @@ -5949,7 +5949,7 @@ __metadata: postcss-value-parser: ^4.2.0 peerDependencies: postcss: ^8.4 - checksum: 5cf455b0834ae1dcf63327315752b9ec77285b6d31d55487cdd17e4c7d775e75a7ca38b6d8301053b87a52bf87aa4ba75187d7d3fd60e8010914f07921db10e3 + checksum: 2e2afcbed8c4e0699ca6df6f9115f33334b503c7cb075b00c03b609c3780a7d1cb703df1e24f3c179e8cbd63496eeaccc7dcd729cfd1a76759f5d26273ed8a86 languageName: node linkType: hard From b6dc092c2ac2ae967dae92317858ab2c36b4db5d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:54:51 +0200 Subject: [PATCH 32/52] Update dependency postcss to v8.4.30 (#8516) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 2 +- war/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/war/package.json b/war/package.json index d74fc16f7ea9..8f839004aa73 100644 --- a/war/package.json +++ b/war/package.json @@ -34,7 +34,7 @@ "eslint-config-prettier": "9.0.0", "handlebars-loader": "1.7.3", "mini-css-extract-plugin": "2.7.6", - "postcss": "8.4.29", + "postcss": "8.4.30", "postcss-loader": "7.3.3", "postcss-preset-env": "9.1.4", "postcss-scss": "4.0.8", diff --git a/war/yarn.lock b/war/yarn.lock index f667f5b5b54c..a5ffa4c5731a 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -4372,7 +4372,7 @@ __metadata: jquery: 3.7.1 lodash: 4.17.21 mini-css-extract-plugin: 2.7.6 - postcss: 8.4.29 + postcss: 8.4.30 postcss-loader: 7.3.3 postcss-preset-env: 9.1.4 postcss-scss: 4.0.8 @@ -6072,14 +6072,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.29, postcss@npm:^8.4.21, postcss@npm:^8.4.24, postcss@npm:^8.4.25": - version: 8.4.29 - resolution: "postcss@npm:8.4.29" +"postcss@npm:8.4.30, postcss@npm:^8.4.21, postcss@npm:^8.4.24, postcss@npm:^8.4.25": + version: 8.4.30 + resolution: "postcss@npm:8.4.30" dependencies: nanoid: ^3.3.6 picocolors: ^1.0.0 source-map-js: ^1.0.2 - checksum: dd6daa25e781db9ae5b651d9b7bfde0ec6e60e86a37da69a18eb4773d5ddd51e28fc4ff054fbdc04636a31462e6bf09a1e50986f69ac52b10d46b7457cd36d12 + checksum: 6c810c10c9bd3e03ca016e0b6b6756261e640aba1a9a7b1200b55502bc34b9165e38f590aef3493afc2f30ab55cdfcd43fd0f8408d69a77318ddbcf2a8ad164b languageName: node linkType: hard From 63f0af1266cb068b87ae0fce43e115c41c6945b9 Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Fri, 22 Sep 2023 09:57:13 -0400 Subject: [PATCH 33/52] Ignore `ProxyConfigurationTest.httpClientExecutor` (#8512) --- test/src/test/java/hudson/ProxyConfigurationTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/src/test/java/hudson/ProxyConfigurationTest.java b/test/src/test/java/hudson/ProxyConfigurationTest.java index f1f796968525..63e3deabeb91 100644 --- a/test/src/test/java/hudson/ProxyConfigurationTest.java +++ b/test/src/test/java/hudson/ProxyConfigurationTest.java @@ -30,7 +30,7 @@ import hudson.model.InvisibleAction; import hudson.model.UnprotectedRootAction; import java.net.URI; -import org.junit.Assume; +import org.junit.Ignore; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; @@ -43,9 +43,9 @@ public final class ProxyConfigurationTest { @Rule public JenkinsRule r = new JenkinsRule(); + @Ignore("prone to timing out on CI") @Test public void httpClientExecutor() throws Exception { - Assume.assumeFalse("Too slow on Windows", Functions.isWindows()); for (int i = 0; i < 50_000; i++) { if (i % 1_000 == 0) { System.err.println("#" + i); From d066c17356494a71b9024b2a7aafd630650e2f47 Mon Sep 17 00:00:00 2001 From: Kevin Guerroudj <91883215+Kevin-CB@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:58:50 +0200 Subject: [PATCH 34/52] Explicit log levels (#8509) * improve-logs-level-clarity * more verbose instead of lower --- .../main/resources/hudson/logging/LogRecorderManager/all.jelly | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/resources/hudson/logging/LogRecorderManager/all.jelly b/core/src/main/resources/hudson/logging/LogRecorderManager/all.jelly index 476209c54113..71779ed1f4e7 100644 --- a/core/src/main/resources/hudson/logging/LogRecorderManager/all.jelly +++ b/core/src/main/resources/hudson/logging/LogRecorderManager/all.jelly @@ -37,9 +37,8 @@ THE SOFTWARE.
- Log messages at a level lower than INFO are never recorded in the Jenkins log. Use log recorders to record these log messages. + Log messages at a level more verbose than INFO (i.e., CONFIG, FINE, FINER, FINEST) are never recorded in the Jenkins log. Use log recorders to record these log messages.
- From 19023d396a8f71246e94d881d70f037afcc32a56 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:59:08 +0200 Subject: [PATCH 35/52] Bump org.jenkins-ci.plugins:junit from 1217.v4297208a_a_b_ce to 1240.vf9529b_881428 (#8507) Bump org.jenkins-ci.plugins:junit Bumps [org.jenkins-ci.plugins:junit](https://github.com/jenkinsci/junit-plugin) from 1217.v4297208a_a_b_ce to 1240.vf9529b_881428. - [Release notes](https://github.com/jenkinsci/junit-plugin/releases) - [Commits](https://github.com/jenkinsci/junit-plugin/commits) --- updated-dependencies: - dependency-name: org.jenkins-ci.plugins:junit dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- test/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/pom.xml b/test/pom.xml index 0065bbeca2ca..eef40eacece4 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -202,7 +202,7 @@ THE SOFTWARE. org.jenkins-ci.plugins junit - 1217.v4297208a_a_b_ce + 1240.vf9529b_881428 test From c916106983f5e04f7f9855c5c1d4ad23b49c21a1 Mon Sep 17 00:00:00 2001 From: Rodrigo Victor Date: Fri, 22 Sep 2023 11:00:01 -0300 Subject: [PATCH 36/52] fix(typo): adjust typos in pt br translation of plugin setup wizard (#8514) --- .../pluginSetupWizard_pt_BR.properties | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/core/src/main/resources/jenkins/install/pluginSetupWizard_pt_BR.properties b/core/src/main/resources/jenkins/install/pluginSetupWizard_pt_BR.properties index b24c4cf4c34f..31fee518e999 100644 --- a/core/src/main/resources/jenkins/install/pluginSetupWizard_pt_BR.properties +++ b/core/src/main/resources/jenkins/install/pluginSetupWizard_pt_BR.properties @@ -54,13 +54,13 @@ installWizard_skipFirstUser=Pular e continuar como administrador installWizard_installCustom_dependenciesPrefix=Dependências installWizard_upgradeSkipped_message=
As extensões sugeridas não serão \ instaladas.

Você pode instalar extensões com o Gerenciador de Extensões, caso mude \ - de idéia.

Aprenda como estas novas funcionalidades podem melhorar sua experiência com \ + de ideia.

Aprenda como estas novas funcionalidades podem melhorar sua experiência com \ o Jenkins visitando sua página \ principal.

installWizard_installingConsole_dependencyIndicatorNote=** - dependência requerida installWizard_error_title=Erro installWizard_upgradeComplete_message=Parabéns! O Jenkins foi atualizado {0}.

Para aprender mais sobre as suas \ - novas funcionalidades, visite o sítio\ + novas funcionalidades, visite o site\ web do Jenkins! installWizard_retry=Tente novamente installWizard_welcomePanel_message=Extensões do Jenkins adicionam funcionalidades para suportar várias diferentes \ @@ -86,32 +86,32 @@ installWizard_firstUserSkippedMessage=

V usuário admin.

Para entrar, use o nome de usuário "admin" e a senha de administrador que você \ usou para acessar o assistente de configuração.
installWizard_configureProxy_save=Salvar e continuar -installWizard_welcomePanel_customizeActionTitle=Selectione as extensões para instalar +installWizard_welcomePanel_customizeActionTitle=Selecione as extensões para instalar installWizard_upgradeSkipped_banner=Funcionalidades não instaladas installWizard_installComplete_installComplete_restartRequiredNotSupportedMessage=A configuração do Jenkins está \ completa, mas algumas extensões requerem que o Jenkins seja reiniciado e parece que a instância não suporta um \ reinício automático. Por favor, reinicie manualmente esta instância agora para completar a instalação. -installWizard_upgradePanel_message=O Jenkins {0} inclui excelentes novas funcionaldiades que pensamos que você irá \ +installWizard_upgradePanel_message=O Jenkins {0} inclui excelentes novas funcionalidades que pensamos que você irá \ apreciar, instale essas extensões adicionais para tirar proveito delas! -installWizard_installComplete_banner=O Jenkins está pront! +installWizard_installComplete_banner=O Jenkins está pronto! installWizard_skipConfigureInstance=Agora não installWizard_installComplete_message=A configuração do seu Jenkins está completa. installWizard_upgradePanel_banner=Bem-vindo ao Jenkins {0}! installWizard_upgradePanel_skipRecommendedPlugins=Não, obrigado -installWizard_websiteLinkLabel=Sítio web +installWizard_websiteLinkLabel=Site web installWizard_upgradePanel_title=Aprimorar installWizard_installIncomplete_message=O Jenkins foi reiniciado durante a instalação e parece que algumas extensões \ não foram instaladas. installWizard_upgradeSkipped_title=Aprimorar installWizard_installCustom_selectAll=Tudo -installWizard_pluginInstallFailure_message=Algumas extensões foram instaladas apropriadamente, pode-se tentar \ - reinstalá-las ou cotninuar sem as extensões que falharam +installWizard_pluginInstallFailure_message=Algumas extensões não foram instaladas apropriadamente, pode-se tentar \ + reinstalá-las ou continuar sem as extensões que falharam installWizard_installCustom_selected=Selecionado installWizard_saveFirstUser=Salvar e continuar installWizard_installCustom_title=Começando installWizard_saveSecurity=Salvar e continuar -installWizard_offline_message=Esta instância do Jenkins para estar desconectada da Internet.\ -

Para mais informações sobre instalar o sem uma conexão com a Internet, \ +installWizard_offline_message=Esta instância do Jenkins parece estar desconectada da Internet.\ +

Para mais informações sobre instalar sem uma conexão com a Internet, \ veja a \ documentação para instalação do Jenkins desconectado.

Você pode escolher continuar, configurando um\ proxy, ou pular a instalação de extensões.

From c8c7526eedd3ffaf2d2f68df4f4b03adf70a15dd Mon Sep 17 00:00:00 2001 From: Mustafa Ulu Date: Fri, 22 Sep 2023 17:01:31 +0300 Subject: [PATCH 37/52] Turkish localizations for the clouds page (#8510) --- .../resources/jenkins/agents/CloudSet/index_tr.properties | 6 ++++++ .../main/resources/jenkins/agents/Messages_tr.properties | 6 ++++++ .../src/main/resources/jenkins/model/Messages_tr.properties | 2 ++ 3 files changed, 14 insertions(+) create mode 100644 core/src/main/resources/jenkins/agents/CloudSet/index_tr.properties create mode 100644 core/src/main/resources/jenkins/agents/Messages_tr.properties diff --git a/core/src/main/resources/jenkins/agents/CloudSet/index_tr.properties b/core/src/main/resources/jenkins/agents/CloudSet/index_tr.properties new file mode 100644 index 000000000000..8cec5b8f23e4 --- /dev/null +++ b/core/src/main/resources/jenkins/agents/CloudSet/index_tr.properties @@ -0,0 +1,6 @@ +Clouds=Bulutlar +learnMoreDistributedBuilds=Dağıtık yapılandırmalar hakkında daha fazla bilgi edinin +noCloudAvailable=Şu anda kurulu bulut yok, bir tane oluşturun veya daha fazla bulut seçeneği için bir eklenti yükleyin. +noCloudPlugin=İsteğe bağlı olarak ajan hazırlamak için kullanılmak üzere herhangi bir bulut yüklü değil. +newCloud=Yeni bulut +installCloudPlugin=Bir eklenti yükleyin diff --git a/core/src/main/resources/jenkins/agents/Messages_tr.properties b/core/src/main/resources/jenkins/agents/Messages_tr.properties new file mode 100644 index 000000000000..5265f554c784 --- /dev/null +++ b/core/src/main/resources/jenkins/agents/Messages_tr.properties @@ -0,0 +1,6 @@ +CloudSet.DisplayName=Bulutlar +CloudSet.CloudAlreadyExists='{0}' adlı bulut zaten mevcut +CloudSet.SpecifyCloudToCopy=Hangi bulutun kopyalanacağını belirtin +CloudSet.NoSuchCloud=Böyle bir bulut yok: {0} +CloudsLink.DisplayName=Bulutlar +CloudsLink.Description=İsteğe bağlı olarak ajan hazırlamak için kullanılmak üzere bulut tanımları ekleyin, kaldırın ve düzenleyin. diff --git a/core/src/main/resources/jenkins/model/Messages_tr.properties b/core/src/main/resources/jenkins/model/Messages_tr.properties index ea0bb121c326..c0fa8881b9d0 100644 --- a/core/src/main/resources/jenkins/model/Messages_tr.properties +++ b/core/src/main/resources/jenkins/model/Messages_tr.properties @@ -34,3 +34,5 @@ ParameterizedJobMixIn.build_now=Şimdi Yapılandır BlockedBecauseOfBuildInProgress.shortDescription=Yapılandırma #{0} zaten işlemde {1} BlockedBecauseOfBuildInProgress.ETA=\ (ETA: {0}) BuildDiscarderProperty.displayName=Eski yapılandırmalardan kurtul + +GlobalCloudConfiguration.DisplayName=Bulutlar From 2fc718da2a377d9dc411ebae95badf2f42212bef Mon Sep 17 00:00:00 2001 From: Markus Winter Date: Fri, 22 Sep 2023 15:01:52 +0100 Subject: [PATCH 38/52] [JENKINS-71866] Allow to use alternate values for "Build with Parameters" and the "Build" button on the parameters page (#8496) [JENKINS-71866] alternate for Build with Parameters Allow to use alternate values for "Build with Parameters" and the "Build" button on the parameters page. See also JENKINS-46554 and JENKINS-27214 --- .../java/hudson/model/ParametersDefinitionProperty.java | 8 ++++++++ .../main/java/jenkins/model/ParameterizedJobMixIn.java | 4 +++- core/src/main/resources/hudson/model/Messages.properties | 1 + .../main/resources/hudson/model/Messages_bg.properties | 2 ++ .../main/resources/hudson/model/Messages_da.properties | 1 + .../main/resources/hudson/model/Messages_es.properties | 1 + .../main/resources/hudson/model/Messages_et.properties | 1 + .../main/resources/hudson/model/Messages_it.properties | 1 + .../main/resources/hudson/model/Messages_ja.properties | 1 + .../main/resources/hudson/model/Messages_ko.properties | 1 + .../main/resources/hudson/model/Messages_nl.properties | 1 + .../main/resources/hudson/model/Messages_pl.properties | 1 + .../main/resources/hudson/model/Messages_pt_BR.properties | 1 + .../main/resources/hudson/model/Messages_ru.properties | 3 ++- .../main/resources/hudson/model/Messages_sk.properties | 1 + .../main/resources/hudson/model/Messages_sr.properties | 1 + .../main/resources/hudson/model/Messages_sv_SE.properties | 1 + .../main/resources/hudson/model/Messages_tr.properties | 1 + .../main/resources/hudson/model/Messages_zh_TW.properties | 1 + .../hudson/model/ParametersDefinitionProperty/index.jelly | 2 +- .../ParametersDefinitionProperty/index_bg.properties | 2 -- .../ParametersDefinitionProperty/index_da.properties | 1 - .../ParametersDefinitionProperty/index_de.properties | 1 - .../ParametersDefinitionProperty/index_es.properties | 1 - .../ParametersDefinitionProperty/index_et.properties | 1 - .../ParametersDefinitionProperty/index_fr.properties | 1 - .../ParametersDefinitionProperty/index_it.properties | 1 - .../ParametersDefinitionProperty/index_ja.properties | 1 - .../ParametersDefinitionProperty/index_ko.properties | 1 - .../ParametersDefinitionProperty/index_nl.properties | 1 - .../ParametersDefinitionProperty/index_pl.properties | 1 - .../ParametersDefinitionProperty/index_pt_BR.properties | 1 - .../ParametersDefinitionProperty/index_ru.properties | 1 - .../ParametersDefinitionProperty/index_sk.properties | 1 - .../ParametersDefinitionProperty/index_sr.properties | 1 - .../ParametersDefinitionProperty/index_sv_SE.properties | 1 - .../ParametersDefinitionProperty/index_tr.properties | 1 - .../ParametersDefinitionProperty/index_zh_TW.properties | 1 - 38 files changed, 31 insertions(+), 22 deletions(-) diff --git a/core/src/main/java/hudson/model/ParametersDefinitionProperty.java b/core/src/main/java/hudson/model/ParametersDefinitionProperty.java index 27b1aa49bb19..66a70047e89d 100644 --- a/core/src/main/java/hudson/model/ParametersDefinitionProperty.java +++ b/core/src/main/java/hudson/model/ParametersDefinitionProperty.java @@ -34,6 +34,7 @@ import hudson.Util; import hudson.model.Queue.WaitingItem; import hudson.model.queue.ScheduleResult; +import hudson.util.AlternativeUiTextProvider; import java.io.IOException; import java.util.AbstractList; import java.util.ArrayList; @@ -72,6 +73,8 @@ public class ParametersDefinitionProperty extends OptionalJobProperty> implements Action { + public static final AlternativeUiTextProvider.Message BUILD_BUTTON_TEXT = new AlternativeUiTextProvider.Message<>(); + private final List parameterDefinitions; @DataBoundConstructor @@ -87,6 +90,11 @@ private Object readResolve() { return parameterDefinitions == null ? new ParametersDefinitionProperty() : this; } + + public final String getBuildButtonText() { + return AlternativeUiTextProvider.get(BUILD_BUTTON_TEXT, owner, Messages.ParametersDefinitionProperty_BuildButtonText()); + } + @Deprecated public AbstractProject getOwner() { return (AbstractProject) owner; diff --git a/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java b/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java index ab70700ac112..be71a97c7379 100644 --- a/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java +++ b/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java @@ -288,12 +288,14 @@ public static CauseAction getBuildCause(ParameterizedJob job, StaplerRequest req * @since 1.624 */ public static final AlternativeUiTextProvider.Message BUILD_NOW_TEXT = new AlternativeUiTextProvider.Message<>(); + public static final AlternativeUiTextProvider.Message BUILD_WITH_PARAMETERS_TEXT = new AlternativeUiTextProvider.Message<>(); /** * Suggested implementation of {@link ParameterizedJob#getBuildNowText}. */ public final String getBuildNowText() { - return isParameterized() ? AlternativeUiTextProvider.get(BUILD_NOW_TEXT, asJob(), Messages.ParameterizedJobMixIn_build_with_parameters()) + return isParameterized() ? AlternativeUiTextProvider.get(BUILD_WITH_PARAMETERS_TEXT, asJob(), + AlternativeUiTextProvider.get(BUILD_NOW_TEXT, asJob(), Messages.ParameterizedJobMixIn_build_with_parameters())) : AlternativeUiTextProvider.get(BUILD_NOW_TEXT, asJob(), Messages.ParameterizedJobMixIn_build_now()); } diff --git a/core/src/main/resources/hudson/model/Messages.properties b/core/src/main/resources/hudson/model/Messages.properties index ebe77e965edc..c6e48911de7c 100644 --- a/core/src/main/resources/hudson/model/Messages.properties +++ b/core/src/main/resources/hudson/model/Messages.properties @@ -199,6 +199,7 @@ LabelExpression.NoMatch=No agent/cloud matches this label expression. LabelExpression.NoMatch_DidYouMean=No agent/cloud matches this label expression. Did you mean ‘{1}’ instead of ‘{0}’? ManageJenkinsAction.DisplayName=Manage Jenkins MultiStageTimeSeries.EMPTY_STRING= +ParametersDefinitionProperty.BuildButtonText=Build Queue.AllNodesOffline=All nodes of label ‘{0}’ are offline Queue.LabelHasNoNodes=There are no nodes with the label ‘{0}’ Queue.BlockedBy=Blocked by ‘{0}’ diff --git a/core/src/main/resources/hudson/model/Messages_bg.properties b/core/src/main/resources/hudson/model/Messages_bg.properties index 9e1eb7b0b968..42a23b5d8af1 100644 --- a/core/src/main/resources/hudson/model/Messages_bg.properties +++ b/core/src/main/resources/hudson/model/Messages_bg.properties @@ -724,3 +724,5 @@ AbstractItem.BeingDeleted=\ # {0} has been removed from configuration Queue.node_has_been_removed_from_configuration=\ „{0}“ е изтрит от настройките +ParametersDefinitionProperty.BuildButtonText=Изграждане + diff --git a/core/src/main/resources/hudson/model/Messages_da.properties b/core/src/main/resources/hudson/model/Messages_da.properties index a3d96a3993e8..c4818f58b170 100644 --- a/core/src/main/resources/hudson/model/Messages_da.properties +++ b/core/src/main/resources/hudson/model/Messages_da.properties @@ -218,3 +218,4 @@ ManageJenkinsAction.DisplayName=Bestyr Jenkins ParametersDefinitionProperty.DisplayName=Dette byg er parameteriseret AbstractItem.NewNameInUse=Navnet {0} er allerede i brug Job.NoRenameWhileBuilding=Kan ikke omdøbe et job imens det bygger +ParametersDefinitionProperty.BuildButtonText=Byg diff --git a/core/src/main/resources/hudson/model/Messages_es.properties b/core/src/main/resources/hudson/model/Messages_es.properties index 3037740893a2..881ee8c98c7e 100644 --- a/core/src/main/resources/hudson/model/Messages_es.properties +++ b/core/src/main/resources/hudson/model/Messages_es.properties @@ -301,3 +301,4 @@ Computer.ConnectPermission.Description=Este permiso permite que los usuarios pue BallColor.NotBuilt=Sin ejecutar. AbstractBuild_Building=Ejecutando. ParametersDefinitionProperty.DisplayName=Esta ejecución debe parametrizarse +ParametersDefinitionProperty.BuildButtonText=Ejecución diff --git a/core/src/main/resources/hudson/model/Messages_et.properties b/core/src/main/resources/hudson/model/Messages_et.properties index c3c4fbbfb5af..72f77a12ac0c 100644 --- a/core/src/main/resources/hudson/model/Messages_et.properties +++ b/core/src/main/resources/hudson/model/Messages_et.properties @@ -1 +1,2 @@ FreeStyleProject.Description=See on Jenkinsi põhifunktsioon! Jenkins ehitab su projekti, kombineerides sinu versioonihalduse mistahes ehitusprotsessiga. Sa võid seda kasutada ka muudeks asjadeks kui tarkvara ehitamine. +ParametersDefinitionProperty.BuildButtonText=Bild diff --git a/core/src/main/resources/hudson/model/Messages_it.properties b/core/src/main/resources/hudson/model/Messages_it.properties index 63a9962e8ec9..594c10afac37 100644 --- a/core/src/main/resources/hudson/model/Messages_it.properties +++ b/core/src/main/resources/hudson/model/Messages_it.properties @@ -457,3 +457,4 @@ View.Permissions.Title=Visualizza View.ReadPermission.Description=Questo permesso consente agli utenti di \ visualizzare le viste (è implicito se si dispone dell''accesso generico in \ lettura). +ParametersDefinitionProperty.BuildButtonText=Compilazione diff --git a/core/src/main/resources/hudson/model/Messages_ja.properties b/core/src/main/resources/hudson/model/Messages_ja.properties index 709195b8df23..3fc987f24017 100644 --- a/core/src/main/resources/hudson/model/Messages_ja.properties +++ b/core/src/main/resources/hudson/model/Messages_ja.properties @@ -308,3 +308,4 @@ TimeZoneProperty.DisplayName=ユーザー設定タイムゾーン TimeZoneProperty.DisplayDefaultTimeZone=デフォルト TimeZoneProperty.current_time_in_=現在の設定 {0}: {1} TimeZoneProperty.current_time_on_server_in_in_proposed_di=現在のサーバー時刻 {0}: {1}; 表示するゾーン: {2} +ParametersDefinitionProperty.BuildButtonText=ビルド diff --git a/core/src/main/resources/hudson/model/Messages_ko.properties b/core/src/main/resources/hudson/model/Messages_ko.properties index 90b49c67d923..1b1194608e72 100644 --- a/core/src/main/resources/hudson/model/Messages_ko.properties +++ b/core/src/main/resources/hudson/model/Messages_ko.properties @@ -2,3 +2,4 @@ ManageJenkinsAction.DisplayName=Jenkins 관리 ParametersDefinitionProperty.DisplayName=이 빌드는 매개변수가 있습니다 FreeStyleProject.Description=이것은 Jenkins의 주요 기능입니다. Jenkins은 어느 빌드 시스템과 어떤 SCM(형상관리)으로 묶인 당신의 프로젝트를 빌드할 것이고, 소프트웨어 빌드보다 다른 어떤 것에 자주 사용될 수 있습니다. +ParametersDefinitionProperty.BuildButtonText=매개변수가 필요한 빌드입니다. diff --git a/core/src/main/resources/hudson/model/Messages_nl.properties b/core/src/main/resources/hudson/model/Messages_nl.properties index c58b39df6ee0..2e81c05617b4 100644 --- a/core/src/main/resources/hudson/model/Messages_nl.properties +++ b/core/src/main/resources/hudson/model/Messages_nl.properties @@ -94,3 +94,4 @@ Permalink.LastSuccessfulBuild=Laatste succesvolle bouwpoging Permalink.LastFailedBuild=Laatst gefaalde bouwpoging ManageJenkinsAction.DisplayName=Beheer Jenkins ParametersDefinitionProperty.DisplayName=Deze bouwpoging is geparametriseerd +ParametersDefinitionProperty.BuildButtonText=Bouwen diff --git a/core/src/main/resources/hudson/model/Messages_pl.properties b/core/src/main/resources/hudson/model/Messages_pl.properties index 60ddeb423a2a..a9d2c94080d5 100644 --- a/core/src/main/resources/hudson/model/Messages_pl.properties +++ b/core/src/main/resources/hudson/model/Messages_pl.properties @@ -97,3 +97,4 @@ ManagementLink.Category.TROUBLESHOOTING=Rozwiązywanie problemów ManagementLink.Category.TOOLS=Narzędzia i akcje ManagementLink.Category.MISC=Inne ManagementLink.Category.UNCATEGORIZED=Nieskategoryzowane +ParametersDefinitionProperty.BuildButtonText=Buduj diff --git a/core/src/main/resources/hudson/model/Messages_pt_BR.properties b/core/src/main/resources/hudson/model/Messages_pt_BR.properties index 70f756a9a09d..c7dbe7f6adde 100644 --- a/core/src/main/resources/hudson/model/Messages_pt_BR.properties +++ b/core/src/main/resources/hudson/model/Messages_pt_BR.properties @@ -397,3 +397,4 @@ UpdateCenter.PluginCategory.cloud=Provedores de nuvem LoadStatistics.Legends.AvailableExecutors=Executores disponíveis Slave.UnixSlave=Este é um agente Unix Build.post_build_steps_failed=Passos pós-construção falharam +ParametersDefinitionProperty.BuildButtonText=Construir diff --git a/core/src/main/resources/hudson/model/Messages_ru.properties b/core/src/main/resources/hudson/model/Messages_ru.properties index 8887a66d2631..2217b2289be5 100644 --- a/core/src/main/resources/hudson/model/Messages_ru.properties +++ b/core/src/main/resources/hudson/model/Messages_ru.properties @@ -123,4 +123,5 @@ ParameterAction.DisplayName=Параметры ParametersDefinitionProperty.DisplayName=Это - параметризованная сборка ChoiceParameterDefinition.MissingChoices=Варианты обязательны. -UpdateCenter.CoreUpdateMonitor.DisplayName=Оповещение об обновлении Jenkins \ No newline at end of file +UpdateCenter.CoreUpdateMonitor.DisplayName=Оповещение об обновлении Jenkins +ParametersDefinitionProperty.BuildButtonText=Собрать \ No newline at end of file diff --git a/core/src/main/resources/hudson/model/Messages_sk.properties b/core/src/main/resources/hudson/model/Messages_sk.properties index 7e778d113167..f1f84e095b59 100644 --- a/core/src/main/resources/hudson/model/Messages_sk.properties +++ b/core/src/main/resources/hudson/model/Messages_sk.properties @@ -1 +1,2 @@ ParametersDefinitionProperty.DisplayName=Toto zostavenie je parametrizované +ParametersDefinitionProperty.BuildButtonText=Zostav diff --git a/core/src/main/resources/hudson/model/Messages_sr.properties b/core/src/main/resources/hudson/model/Messages_sr.properties index 31b872a8ccf0..fe5ca1b3adba 100644 --- a/core/src/main/resources/hudson/model/Messages_sr.properties +++ b/core/src/main/resources/hudson/model/Messages_sr.properties @@ -286,3 +286,4 @@ CLI.disconnect-node.shortDescription=Прекини везу са машином CLI.connect-node.shortDescription=Повежи са машином CLI.offline-node.shortDescription= Hudson.NotADirectory={0} није директоријум +ParametersDefinitionProperty.BuildButtonText=Изградња diff --git a/core/src/main/resources/hudson/model/Messages_sv_SE.properties b/core/src/main/resources/hudson/model/Messages_sv_SE.properties index fa2c305e9b89..eae53e2bafe4 100644 --- a/core/src/main/resources/hudson/model/Messages_sv_SE.properties +++ b/core/src/main/resources/hudson/model/Messages_sv_SE.properties @@ -7,3 +7,4 @@ ManageJenkinsAction.DisplayName=Hantera Jenkins ParametersDefinitionProperty.DisplayName=Detta bygge är parametriserat FreeStyleProject.Description=Detta är en central del i Jenkins. Jenkins kommer att bygga ditt projekt med valfri versionshanterare och med vilket byggsystem som helst, och detta kan även användas för något annat än mjukvarubyggen. +ParametersDefinitionProperty.BuildButtonText=Bygg diff --git a/core/src/main/resources/hudson/model/Messages_tr.properties b/core/src/main/resources/hudson/model/Messages_tr.properties index af308cf8f4fd..0cd0dfd8d03a 100644 --- a/core/src/main/resources/hudson/model/Messages_tr.properties +++ b/core/src/main/resources/hudson/model/Messages_tr.properties @@ -111,3 +111,4 @@ ManagementLink.Category.TROUBLESHOOTING=Sorun Giderme ManagementLink.Category.TOOLS=Araçlar ve Aksiyonlar ManagementLink.Category.MISC=Diğer ManagementLink.Category.UNCATEGORIZED=Sınıflandırılmamış +ParametersDefinitionProperty.BuildButtonText=Yapılandırma diff --git a/core/src/main/resources/hudson/model/Messages_zh_TW.properties b/core/src/main/resources/hudson/model/Messages_zh_TW.properties index a87d2b59afb5..04c6a60ca31e 100644 --- a/core/src/main/resources/hudson/model/Messages_zh_TW.properties +++ b/core/src/main/resources/hudson/model/Messages_zh_TW.properties @@ -294,3 +294,4 @@ Jenkins.CheckDisplayName.DisplayNameNotUniqueWarning=已經有作業的顯示名 Jenkins.NotAllowedName="{0}" 並不是可以使用的名稱 ParametersDefinitionProperty.DisplayName=參數化建置 +ParametersDefinitionProperty.BuildButtonText=建置 diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index.jelly b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index.jelly index 46217280ffb1..1302960c1afc 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index.jelly +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index.jelly @@ -64,7 +64,7 @@ THE SOFTWARE. ${%Cancel} diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_bg.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_bg.properties index 1251d0486aa0..b0424399a344 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_bg.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_bg.properties @@ -23,7 +23,5 @@ # This build requires parameters: description=\ Това изграждане изисква параметри: -Build=\ - Изграждане LOADING=\ ЗАРЕЖДАНЕ diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_da.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_da.properties index 18f85365a597..75e1a5b2107b 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_da.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_da.properties @@ -20,5 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Build=Byg description=Dette byg kræver parametre: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_de.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_de.properties index 1303bd4374db..2df7cfa34635 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_de.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_de.properties @@ -1,3 +1,2 @@ LOADING=LADE DATEN description=Dieser Build erfordert Parameter: -Build=Build diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_es.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_es.properties index a39e4ae6d93b..68de1058c631 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_es.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_es.properties @@ -21,5 +21,4 @@ # THE SOFTWARE. description=Esta ejecución requiere parámetros adicionales: -Build=Ejecución LOADING=CARGANDO diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_et.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_et.properties index 20d2a0ce42c8..fadb8cc9e19f 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_et.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_et.properties @@ -1,5 +1,4 @@ # This file is under the MIT License by authors -Build=Bild LOADING=LAEN description=See bild vajab parameetreid: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_fr.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_fr.properties index e7e88ed2b282..b454ec735c65 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_fr.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_fr.properties @@ -21,5 +21,4 @@ # THE SOFTWARE. description=Ce build nécessite des paramètres : -Build=Build LOADING=CHARGEMENT diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_it.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_it.properties index 01e8b2e60f68..47b5e5ca8ea8 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_it.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_it.properties @@ -21,6 +21,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Build=Compilazione description=Questa compilazione richiede dei parametri: LOADING=Caricamento in corso diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ja.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ja.properties index c20e0f901614..df9f0d64a82a 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ja.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ja.properties @@ -21,5 +21,4 @@ # THE SOFTWARE. description=このビルドはパラメータが必要です。 -Build=ビルド LOADING=ロード中 diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ko.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ko.properties index e2cbe89ab155..3da199497d4d 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ko.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ko.properties @@ -20,6 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Build=빌드하기 LOADING=여는 중 description=매개변수가 필요한 빌드입니다. diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_nl.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_nl.properties index 4b74b1c58358..a517b0697bba 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_nl.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_nl.properties @@ -1,4 +1,3 @@ # This file is under the MIT License by authors -Build=Bouwen description=Deze bouwpoging heeft parameters nodig: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pl.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pl.properties index 38518c3a3ca7..7c914ba7dcb3 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pl.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pl.properties @@ -20,6 +20,5 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Build=Buduj LOADING=ŁADOWANIE description=To zadanie wymaga parametrów: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pt_BR.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pt_BR.properties index 5259e7c068bc..725a2d4dedb8 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pt_BR.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_pt_BR.properties @@ -23,4 +23,3 @@ LOADING=CARREGANDO description=Esta construção requer parâmetros: -Build=Construir diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ru.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ru.properties index dab4bc5e690d..e21db465391a 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ru.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_ru.properties @@ -1,5 +1,4 @@ # This file is under the MIT License by authors -Build=Собрать LOADING=ЗАГРУЗКА description=Для этой сборки необходимы следующие параметры: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sk.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sk.properties index dba7efb93a01..df6261b1a000 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sk.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sk.properties @@ -20,5 +20,4 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN # THE SOFTWARE. -Build=Zostav description=Toto zostavenie vyžaduje parametre: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sr.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sr.properties index ddc4c76c730e..c6853f6aaa70 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sr.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sr.properties @@ -2,4 +2,3 @@ LOADING=УЧИТАВАЊЕ description=Ова изградња захтева параметре: -Build=Изградња diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sv_SE.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sv_SE.properties index de74342e7b1a..23598ba89fe7 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sv_SE.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_sv_SE.properties @@ -1,5 +1,4 @@ # This file is under the MIT License by authors -Build=Bygg LOADING=LADDAR description=Det här bygget kräver parametrar: diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_tr.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_tr.properties index dbfafb4fb861..afc60f285104 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_tr.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_tr.properties @@ -21,4 +21,3 @@ # THE SOFTWARE. description=tanım -Build=Yapılandırma diff --git a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_zh_TW.properties b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_zh_TW.properties index 611fafc2676d..6511ec0b83bd 100644 --- a/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_zh_TW.properties +++ b/core/src/main/resources/hudson/model/ParametersDefinitionProperty/index_zh_TW.properties @@ -22,4 +22,3 @@ LOADING=載入中 description=這項建置需要參數: -Build=建置 From d714d311d4b47d880227365e1ae76ba763631e9f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 24 Sep 2023 09:49:23 +0100 Subject: [PATCH 39/52] Update dependency sass to v1.68.0 (#8521) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- war/package.json | 2 +- war/yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/war/package.json b/war/package.json index 8f839004aa73..d7798b1515b5 100644 --- a/war/package.json +++ b/war/package.json @@ -39,7 +39,7 @@ "postcss-preset-env": "9.1.4", "postcss-scss": "4.0.8", "prettier": "3.0.3", - "sass": "1.67.0", + "sass": "1.68.0", "sass-loader": "13.3.2", "style-loader": "3.3.3", "stylelint": "15.10.2", diff --git a/war/yarn.lock b/war/yarn.lock index a5ffa4c5731a..b895e8148966 100644 --- a/war/yarn.lock +++ b/war/yarn.lock @@ -4377,7 +4377,7 @@ __metadata: postcss-preset-env: 9.1.4 postcss-scss: 4.0.8 prettier: 3.0.3 - sass: 1.67.0 + sass: 1.68.0 sass-loader: 13.3.2 sortablejs: 1.15.0 style-loader: 3.3.3 @@ -6411,16 +6411,16 @@ __metadata: languageName: node linkType: hard -"sass@npm:1.67.0": - version: 1.67.0 - resolution: "sass@npm:1.67.0" +"sass@npm:1.68.0": + version: 1.68.0 + resolution: "sass@npm:1.68.0" dependencies: chokidar: ">=3.0.0 <4.0.0" immutable: ^4.0.0 source-map-js: ">=0.6.2 <2.0.0" bin: sass: sass.js - checksum: 9e7566e8b7386cf265dddcdb266a023fb5759c5a8f48a11da199c8bf419e5f08f4ff6404d85d6bf5eac01e1f7c7061fdb6b7b65cbfda164e59b0a06b72ac8567 + checksum: 65ccede83c96768beeb8dcaf67957b7c76b12ff1276bfd2849d7be151d46ba1400048a67717e6e5e4969bc75e87348e5530f5f272833f2e60a891c21a33d8ab0 languageName: node linkType: hard From 3f1c555052a8ade6043abdc3303647cf5c06eadb Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Sun, 24 Sep 2023 07:38:48 -0700 Subject: [PATCH 40/52] Fix compilation error with `maven.compiler.release=21` (#8520) --- core/src/main/java/hudson/tasks/Publisher.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/hudson/tasks/Publisher.java b/core/src/main/java/hudson/tasks/Publisher.java index 1b798e5b3813..e486dc8c541a 100644 --- a/core/src/main/java/hudson/tasks/Publisher.java +++ b/core/src/main/java/hudson/tasks/Publisher.java @@ -130,10 +130,7 @@ public Descriptor getDescriptor() { * * @see DescriptorExtensionList#createDescriptorList(hudson.model.Hudson, Class) */ - @SuppressFBWarnings(value = "SE_COMPARATOR_SHOULD_BE_SERIALIZABLE", justification = "Since the publisher is not Serializable, " + - "no need for the Comparator") - public static final class DescriptorExtensionListImpl extends DescriptorExtensionList> - implements Comparator>> { + public static final class DescriptorExtensionListImpl extends DescriptorExtensionList> { public DescriptorExtensionListImpl(Jenkins hudson) { super(hudson, Publisher.class); @@ -142,10 +139,14 @@ public DescriptorExtensionListImpl(Jenkins hudson) { @Override protected List>> sort(List>> r) { List>> copy = new ArrayList<>(r); - copy.sort(this); + copy.sort(new ExtensionComponentComparator()); return copy; } + } + @SuppressFBWarnings(value = "SE_COMPARATOR_SHOULD_BE_SERIALIZABLE", justification = "Since the publisher is not Serializable, " + + "no need for the Comparator") + private static final class ExtensionComponentComparator implements Comparator>> { @Override public int compare(ExtensionComponent> lhs, ExtensionComponent> rhs) { int r = classify(lhs.getInstance()) - classify(rhs.getInstance()); From 56f97714c1fee15eb66690c9edd2d39397f81a05 Mon Sep 17 00:00:00 2001 From: Mustafa Ulu Date: Sun, 24 Sep 2023 17:39:27 +0300 Subject: [PATCH 41/52] Turkish localization for "Build with Parameters" link (#8519) --- core/src/main/resources/hudson/model/Messages_tr.properties | 2 +- core/src/main/resources/jenkins/model/Messages_tr.properties | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/main/resources/hudson/model/Messages_tr.properties b/core/src/main/resources/hudson/model/Messages_tr.properties index 0cd0dfd8d03a..9a199011159d 100644 --- a/core/src/main/resources/hudson/model/Messages_tr.properties +++ b/core/src/main/resources/hudson/model/Messages_tr.properties @@ -111,4 +111,4 @@ ManagementLink.Category.TROUBLESHOOTING=Sorun Giderme ManagementLink.Category.TOOLS=Araçlar ve Aksiyonlar ManagementLink.Category.MISC=Diğer ManagementLink.Category.UNCATEGORIZED=Sınıflandırılmamış -ParametersDefinitionProperty.BuildButtonText=Yapılandırma +ParametersDefinitionProperty.BuildButtonText=Yapılandır diff --git a/core/src/main/resources/jenkins/model/Messages_tr.properties b/core/src/main/resources/jenkins/model/Messages_tr.properties index c0fa8881b9d0..33350ab87fe8 100644 --- a/core/src/main/resources/jenkins/model/Messages_tr.properties +++ b/core/src/main/resources/jenkins/model/Messages_tr.properties @@ -30,6 +30,7 @@ Hudson.NoJavaInPath=java, PATH içerisinde değil. JDK Hudson.NoName=İsim belirtilmedi Hudson.UnsafeChar=''{0}'' güvenli olmayan bir karakter Hudson.ViewName=Hepsi +ParameterizedJobMixIn.build_with_parameters=Parametrelerle Yapılandır ParameterizedJobMixIn.build_now=Şimdi Yapılandır BlockedBecauseOfBuildInProgress.shortDescription=Yapılandırma #{0} zaten işlemde {1} BlockedBecauseOfBuildInProgress.ETA=\ (ETA: {0}) From c0f6fbe979cea4963a6702f7867e5af00cbf97fb Mon Sep 17 00:00:00 2001 From: Francis Labrie Date: Sun, 24 Sep 2023 10:40:28 -0400 Subject: [PATCH 42/52] [JENKINS-72018] Form entries in .repeated-chunk using .show-if-not-only CSS class are not hidden when they are alone (#8491) * - Add the missing definition for the .only CSS class inside of .repeated-chunk .show-if-not-only ones. Without these CSS classes, form entries using .show-if-not-only class are not hidden when alone. * Update war/src/main/scss/form/_reorderable-list.scss Co-authored-by: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> * Update war/src/main/scss/form/_reorderable-list.scss Co-authored-by: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> * Update war/src/main/scss/form/_reorderable-list.scss Co-authored-by: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> --------- Co-authored-by: Francis Labrie Co-authored-by: Daniel Beck <1831569+daniel-beck@users.noreply.github.com> --- war/src/main/scss/form/_reorderable-list.scss | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/war/src/main/scss/form/_reorderable-list.scss b/war/src/main/scss/form/_reorderable-list.scss index 577f1853d4b9..c19152975d2e 100644 --- a/war/src/main/scss/form/_reorderable-list.scss +++ b/war/src/main/scss/form/_reorderable-list.scss @@ -29,6 +29,10 @@ visibility: visible; } +.repeated-chunk.first.last .show-if-not-only { + visibility: hidden; +} + /* == nested repeatable elements / 2 deep == */ .repeated-chunk .repeated-chunk .show-if-last { visibility: hidden; @@ -50,6 +54,10 @@ visibility: visible; } +.repeated-chunk .repeated-chunk.first.last .show-if-not-only { + visibility: hidden; +} + /* == nested repeatable elements / 3 deep == */ .repeated-chunk .repeated-chunk .repeated-chunk .show-if-last { visibility: hidden; @@ -67,10 +75,14 @@ visibility: hidden; } -.repeated-chunk .repeated-chunk .show-if-not-only { +.repeated-chunk .repeated-chunk .repeated-chunk .show-if-not-only { visibility: visible; } +.repeated-chunk .repeated-chunk .repeated-chunk.first.last .show-if-not-only { + visibility: hidden; +} + /*
s marked with to-be-removed is used in conjunction with repeatable.jelly and hetero-list.jelly and represents a master copy that gets pulled out from HTML, then inserted later upon demand multiple times From 9f6bf542829ad1248af0b4dc6af08bdf65d4a1f6 Mon Sep 17 00:00:00 2001 From: EBIBO Date: Tue, 26 Sep 2023 05:10:11 +0800 Subject: [PATCH 43/52] [JENKINS-71890] Model links in build history views and administrative monitors no longer work (#8485) --- war/src/main/js/components/dropdowns/jumplists.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/war/src/main/js/components/dropdowns/jumplists.js b/war/src/main/js/components/dropdowns/jumplists.js index 31d799381579..3297da22e9ea 100644 --- a/war/src/main/js/components/dropdowns/jumplists.js +++ b/war/src/main/js/components/dropdowns/jumplists.js @@ -11,7 +11,7 @@ function init() { * Appends a ⌄ button at the end of links which support jump lists */ function generateJumplistAccessors() { - document.querySelectorAll("A.model-link").forEach((link) => { + behaviorShim.specify("A.model-link", "-jumplist-", 999, (link) => { const isFirefox = navigator.userAgent.indexOf("Firefox") !== -1; // Firefox adds unwanted lines when copying buttons in text, so use a span instead const dropdownChevron = document.createElement( From 6485e250cb29d164ca16516fd335dff43b5ab2ed Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Sep 2023 09:54:26 +0200 Subject: [PATCH 44/52] Bump stapler.version from 1802.1804.va_8d30483a_7f7 to 1814.vdc9dd5217ee2 (#8522) Bump stapler.version Bumps `stapler.version` from 1802.1804.va_8d30483a_7f7 to 1814.vdc9dd5217ee2. Updates `org.kohsuke.stapler:stapler` from 1802.1804.va_8d30483a_7f7 to 1814.vdc9dd5217ee2 - [Release notes](https://github.com/jenkinsci/stapler/releases) - [Changelog](https://github.com/jenkinsci/stapler/blob/master/CHANGELOG.md) - [Commits](https://github.com/jenkinsci/stapler/commits) Updates `org.kohsuke.stapler:stapler-groovy` from 1802.1804.va_8d30483a_7f7 to 1814.vdc9dd5217ee2 - [Release notes](https://github.com/jenkinsci/stapler/releases) - [Changelog](https://github.com/jenkinsci/stapler/blob/master/CHANGELOG.md) - [Commits](https://github.com/jenkinsci/stapler/commits) --- updated-dependencies: - dependency-name: org.kohsuke.stapler:stapler dependency-type: direct:production - dependency-name: org.kohsuke.stapler:stapler-groovy dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[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 3104e6b89515..457db13a49d0 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -40,7 +40,7 @@ THE SOFTWARE. 9.5 2.0.9 - 1802.1804.va_8d30483a_7f7 + 1814.vdc9dd5217ee2 2.4.21 From 77e6e4de69b8efca2874280b89791b2129992748 Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Tue, 26 Sep 2023 09:54:46 +0200 Subject: [PATCH 45/52] Logging XmlFile write to help track race conditions during tests. (#8513) --- core/src/main/java/hudson/XmlFile.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/hudson/XmlFile.java b/core/src/main/java/hudson/XmlFile.java index f624104df673..91d96959b61d 100644 --- a/core/src/main/java/hudson/XmlFile.java +++ b/core/src/main/java/hudson/XmlFile.java @@ -201,6 +201,9 @@ private Object unmarshal(Object o, boolean nullOut) throws IOException { } public void write(Object o) throws IOException { + if (LOGGER.isLoggable(Level.FINEST)) { + LOGGER.log(Level.FINEST, new Throwable(), () -> "Writing " + file); + } mkdirs(); AtomicFileWriter w = force ? new AtomicFileWriter(file) From 4e96cc7345c0aa041cdc6a363f478880f99741f2 Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 26 Sep 2023 13:04:02 +0000 Subject: [PATCH 46/52] [maven-release-plugin] prepare release jenkins-2.425 --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 4 ++-- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty10/pom.xml | 2 +- websocket/spi/pom.xml | 2 +- 9 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 457db13a49d0..162041de495d 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index 56560342e5f4..af306ab1e715 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 cli diff --git a/core/pom.xml b/core/pom.xml index 26f9a102c81e..089c8d247531 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 9f27c8d11cf0..31dd22d4408a 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 jenkins-coverage diff --git a/pom.xml b/pom.xml index 66646e25c1c7..8c9695c7b34e 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 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.425 https://github.com/jenkinsci/jenkins diff --git a/test/pom.xml b/test/pom.xml index eef40eacece4..6b5200dd9af6 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 1aa3437c0ce3..28889a98bde8 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 jenkins-war diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml index eb4a169a59d1..d41537676386 100644 --- a/websocket/jetty10/pom.xml +++ b/websocket/jetty10/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - ${revision}${changelist} + 2.425 ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index 77abcc3b7248..bfa3548d069b 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.425 ../.. From da99f119b53de149ea1b0ed7a627e5e2d5cf75fc Mon Sep 17 00:00:00 2001 From: Jenkins Release Bot <66998184+jenkins-release-bot@users.noreply.github.com> Date: Tue, 26 Sep 2023 13:04:13 +0000 Subject: [PATCH 47/52] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- cli/pom.xml | 2 +- core/pom.xml | 2 +- coverage/pom.xml | 2 +- pom.xml | 6 +++--- test/pom.xml | 2 +- war/pom.xml | 2 +- websocket/jetty10/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 162041de495d..457db13a49d0 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} jenkins-bom diff --git a/cli/pom.xml b/cli/pom.xml index af306ab1e715..56560342e5f4 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} cli diff --git a/core/pom.xml b/core/pom.xml index 089c8d247531..26f9a102c81e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -29,7 +29,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} jenkins-core diff --git a/coverage/pom.xml b/coverage/pom.xml index 31dd22d4408a..9f27c8d11cf0 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -5,7 +5,7 @@ org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} jenkins-coverage diff --git a/pom.xml b/pom.xml index 8c9695c7b34e..6c4bdcfc8385 100644 --- a/pom.xml +++ b/pom.xml @@ -34,7 +34,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${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.425 + ${scmTag} https://github.com/jenkinsci/jenkins @@ -73,7 +73,7 @@ THE SOFTWARE. - 2.425 + 2.426 -SNAPSHOT diff --git a/test/pom.xml b/test/pom.xml index 6b5200dd9af6..eef40eacece4 100644 --- a/test/pom.xml +++ b/test/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} jenkins-test diff --git a/war/pom.xml b/war/pom.xml index 28889a98bde8..1aa3437c0ce3 100644 --- a/war/pom.xml +++ b/war/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} jenkins-war diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml index d41537676386..eb4a169a59d1 100644 --- a/websocket/jetty10/pom.xml +++ b/websocket/jetty10/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} ../.. diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml index bfa3548d069b..77abcc3b7248 100644 --- a/websocket/spi/pom.xml +++ b/websocket/spi/pom.xml @@ -28,7 +28,7 @@ THE SOFTWARE. org.jenkins-ci.main jenkins-parent - 2.425 + ${revision}${changelist} ../.. From 70fddd6c7a3eee1c5aa9953c3f35a882a48e6a1c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 27 Sep 2023 11:20:00 +0200 Subject: [PATCH 48/52] Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.0 to 3.5.1 (#8524) Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.0...maven-shade-plugin-3.5.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-shade-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[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 56560342e5f4..cd79b0518036 100644 --- a/cli/pom.xml +++ b/cli/pom.xml @@ -119,7 +119,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.0 + 3.5.1 From 105951c11c670fad5904a3a2d64caba7d109bd96 Mon Sep 17 00:00:00 2001 From: Vincent Latombe Date: Wed, 27 Sep 2023 11:21:10 +0200 Subject: [PATCH 49/52] Add data-bound setters for View (#8511) * Add data-bound setters for View This allows programmatic edit of View * Clean up * Fix test --------- Co-authored-by: Alexander Brandes --- core/src/main/java/hudson/model/View.java | 28 +++++++++++++++---- .../hudson/model/View/configure.jelly | 12 ++++---- .../java/hudson/model/ViewDescriptorTest.java | 2 +- test/src/test/java/hudson/model/ViewTest.java | 14 ++++++++++ 4 files changed, 43 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/hudson/model/View.java b/core/src/main/java/hudson/model/View.java index 3f9c2765ed89..d09ab50033c3 100644 --- a/core/src/main/java/hudson/model/View.java +++ b/core/src/main/java/hudson/model/View.java @@ -297,7 +297,7 @@ public synchronized String getDescription() { @DataBoundSetter public synchronized void setDescription(String description) { - this.description = description; + this.description = Util.nullify(description); } /** @@ -405,6 +405,14 @@ public boolean isFilterExecutors() { return filterExecutors; } + /** + * @since TODO + */ + @DataBoundSetter + public void setFilterExecutors(boolean filterExecutors) { + this.filterExecutors = filterExecutors; + } + /** * If true, only show relevant queue items */ @@ -412,6 +420,14 @@ public boolean isFilterQueue() { return filterQueue; } + /** + * @since TODO + */ + @DataBoundSetter + public void setFilterQueue(boolean filterQueue) { + this.filterQueue = filterQueue; + } + /** * If this view uses {@code } for rendering, this method returns columns to be displayed. */ @@ -1013,13 +1029,13 @@ public final synchronized void doConfigSubmit(StaplerRequest req, StaplerRespons submit(req); - description = Util.nullify(req.getParameter("description")); - filterExecutors = req.getParameter("filterExecutors") != null; - filterQueue = req.getParameter("filterQueue") != null; - + var json = req.getSubmittedForm(); + setDescription(json.optString("description")); + setFilterExecutors(json.optBoolean("filterExecutors")); + setFilterQueue(json.optBoolean("filterQueue")); rename(req.getParameter("name")); - getProperties().rebuild(req, req.getSubmittedForm(), getApplicablePropertyDescriptors()); + getProperties().rebuild(req, json, getApplicablePropertyDescriptors()); save(); diff --git a/core/src/main/resources/hudson/model/View/configure.jelly b/core/src/main/resources/hudson/model/View/configure.jelly index 4b0d1a3ba5a0..beceff8230ab 100644 --- a/core/src/main/resources/hudson/model/View/configure.jelly +++ b/core/src/main/resources/hudson/model/View/configure.jelly @@ -39,14 +39,14 @@ THE SOFTWARE. - - + + - - + + - - + + diff --git a/test/src/test/java/hudson/model/ViewDescriptorTest.java b/test/src/test/java/hudson/model/ViewDescriptorTest.java index d833a7e1a1b6..facfaecd1d77 100644 --- a/test/src/test/java/hudson/model/ViewDescriptorTest.java +++ b/test/src/test/java/hudson/model/ViewDescriptorTest.java @@ -120,7 +120,7 @@ public void invisiblePropertiesOnViewShoudBePersisted() throws Exception { HtmlForm editViewForm = editViewPage.getFormByName("viewConfig"); - editViewForm.getTextAreaByName("description").setText("This list view is awesome !"); + editViewForm.getTextAreaByName("_.description").setText("This list view is awesome !"); r.submit(editViewForm); //Check that the description is updated on view diff --git a/test/src/test/java/hudson/model/ViewTest.java b/test/src/test/java/hudson/model/ViewTest.java index cc88433b75a0..3ea19e1ee59c 100644 --- a/test/src/test/java/hudson/model/ViewTest.java +++ b/test/src/test/java/hudson/model/ViewTest.java @@ -117,6 +117,20 @@ public class ViewTest { @Rule public LoggerRule logging = new LoggerRule(); + @Test + public void roundTrip() throws Exception { + ListView view = new ListView("foo"); + view.setDescription("Some description"); + view.setFilterExecutors(true); + view.setFilterQueue(true); + j.jenkins.addView(view); + j.configRoundtrip(view); + + assertEquals("Some description", view.getDescription()); + assertEquals(true, view.isFilterExecutors()); + assertEquals(true, view.isFilterQueue()); + } + @Issue("JENKINS-7100") @Test public void xHudsonHeader() throws Exception { assertNotNull(j.createWebClient().goTo("").getWebResponse().getResponseHeaderValue("X-Hudson")); From 87888c7d5fa72eae3b65ad34cf11034ac12237f2 Mon Sep 17 00:00:00 2001 From: Stefan Spieker Date: Wed, 27 Sep 2023 11:22:30 +0200 Subject: [PATCH 50/52] Use `isEmpty()` and simplified assertions in Test (#8473) * use isEmpty() and simplified assertions * use `assertThat` instead of `assertFalse` to get better messages in case of failure * Update test/src/test/java/lib/hudson/ListScmBrowsersTest.java Co-authored-by: James Nord * Update test/src/test/java/hudson/PluginManagerTest.java Co-authored-by: James Nord * Update test/src/test/java/hudson/PluginManagerTest.java Co-authored-by: James Nord * Update test/src/test/java/hudson/PluginManagerTest.java Co-authored-by: James Nord * Update test/src/test/java/hudson/model/HelpLinkTest.java Co-authored-by: James Nord * Update test/src/test/java/hudson/model/HelpLinkTest.java Co-authored-by: James Nord * Update test/src/test/java/lib/hudson/ListScmBrowsersTest.java Co-authored-by: James Nord * Update test/src/test/java/lib/hudson/ListScmBrowsersTest.java Co-authored-by: James Nord * spotless fix --------- Co-authored-by: James Nord --- test/src/test/java/hudson/PluginManagerTest.java | 7 +++++-- .../java/hudson/cli/ReloadConfigurationCommandTest.java | 2 +- .../java/hudson/model/FingerprintCleanupThreadTest.java | 2 +- test/src/test/java/hudson/model/HelpLinkTest.java | 6 ++++-- test/src/test/java/hudson/model/JobTest.java | 7 ++----- .../hudson/model/LabelLoadStatisticsQueueLengthTest.java | 5 ++--- .../hudson/node_monitors/ClockMonitorDescriptorTest.java | 2 +- test/src/test/java/lib/hudson/ListScmBrowsersTest.java | 5 ++++- 8 files changed, 20 insertions(+), 16 deletions(-) diff --git a/test/src/test/java/hudson/PluginManagerTest.java b/test/src/test/java/hudson/PluginManagerTest.java index 169b88993f38..507354b8e1b8 100644 --- a/test/src/test/java/hudson/PluginManagerTest.java +++ b/test/src/test/java/hudson/PluginManagerTest.java @@ -28,6 +28,9 @@ import static java.nio.file.attribute.PosixFilePermission.OWNER_READ; import static java.nio.file.attribute.PosixFilePermission.OWNER_WRITE; import static org.awaitility.Awaitility.await; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -488,7 +491,7 @@ private String callDependerValue() throws Exception { // Check that the basic API endpoint invocation works. assertEquals("ok", response.getString("status")); JSONArray data = response.getJSONArray("data"); - assertTrue(data.size() > 0); + assertThat(data, not(empty())); // Check that there was some data in the response and that the first entry // at least had some of the expected fields. @@ -564,7 +567,7 @@ private void dynamicLoadAndDisable(String plugin) throws IOException, Interrupte f.getInputByName("name").setValue(plugin.getAbsolutePath()); r.submit(f); - assertTrue(r.jenkins.getUpdateCenter().getJobs().size() > 0); + assertThat(r.jenkins.getUpdateCenter().getJobs(), not(empty())); // wait for all the download jobs to complete boolean done = true; diff --git a/test/src/test/java/hudson/cli/ReloadConfigurationCommandTest.java b/test/src/test/java/hudson/cli/ReloadConfigurationCommandTest.java index da82fb6534ba..afa742afb3ea 100644 --- a/test/src/test/java/hudson/cli/ReloadConfigurationCommandTest.java +++ b/test/src/test/java/hudson/cli/ReloadConfigurationCommandTest.java @@ -102,7 +102,7 @@ public void reloadSlaveConfig() throws Exception { } private void modifyNode(Node node) throws Exception { - replace(node.getNodeName().equals("") ? "config.xml" : String.format("nodes/%s/config.xml", node.getNodeName()), "oldLabel", "newLabel"); + replace(node.getNodeName().isEmpty() ? "config.xml" : String.format("nodes/%s/config.xml", node.getNodeName()), "oldLabel", "newLabel"); assertThat(node.getLabelString(), equalTo("oldLabel")); diff --git a/test/src/test/java/hudson/model/FingerprintCleanupThreadTest.java b/test/src/test/java/hudson/model/FingerprintCleanupThreadTest.java index 2b3e90613f27..4d87ac7b1bea 100644 --- a/test/src/test/java/hudson/model/FingerprintCleanupThreadTest.java +++ b/test/src/test/java/hudson/model/FingerprintCleanupThreadTest.java @@ -327,7 +327,7 @@ public void delete(String id) { @Override public boolean isReady() { - return storage.size() != 0; + return !storage.isEmpty(); } @Override diff --git a/test/src/test/java/hudson/model/HelpLinkTest.java b/test/src/test/java/hudson/model/HelpLinkTest.java index fc4b8bfc1e39..71e7de67aeae 100644 --- a/test/src/test/java/hudson/model/HelpLinkTest.java +++ b/test/src/test/java/hudson/model/HelpLinkTest.java @@ -1,6 +1,8 @@ package hudson.model; -import static org.junit.Assert.assertTrue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.not; import hudson.matrix.MatrixProject; import hudson.tasks.BuildStepDescriptor; @@ -94,7 +96,7 @@ private void clickAllHelpLinks(JenkinsRule.WebClient webClient, AbstractProject private void clickAllHelpLinks(HtmlPage p) throws Exception { List helpLinks = DomNodeUtil.selectNodes(p, "//a[@class='jenkins-help-button']"); - assertTrue(helpLinks.size() > 0); + assertThat(helpLinks, not(empty())); System.out.println("Clicking " + helpLinks.size() + " help links"); for (HtmlAnchor helpLink : (List) helpLinks) { diff --git a/test/src/test/java/hudson/model/JobTest.java b/test/src/test/java/hudson/model/JobTest.java index 8a219784d14b..e456760ec8ab 100644 --- a/test/src/test/java/hudson/model/JobTest.java +++ b/test/src/test/java/hudson/model/JobTest.java @@ -52,6 +52,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.Comparator; +import java.util.Objects; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; @@ -556,11 +557,7 @@ public void setVirtualName(String virtualName) { @NonNull @Override public String getNodeName() { - if (virtualName != null) { - return virtualName; - } else { - return super.getNodeName(); - } + return Objects.requireNonNullElseGet(virtualName, super::getNodeName); } } diff --git a/test/src/test/java/hudson/model/LabelLoadStatisticsQueueLengthTest.java b/test/src/test/java/hudson/model/LabelLoadStatisticsQueueLengthTest.java index d977a8ed64a2..d488758b1b8e 100644 --- a/test/src/test/java/hudson/model/LabelLoadStatisticsQueueLengthTest.java +++ b/test/src/test/java/hudson/model/LabelLoadStatisticsQueueLengthTest.java @@ -3,6 +3,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThan; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -203,9 +204,7 @@ private void maintainQueueAndForceRunOfLoadStatisticsUpdater( Thread.sleep(10); } - assertTrue( - "After waiting there are buildable items in the build queue.", - queue.getBuildableItems().size() > 0); + assertFalse("After waiting there are buildable items in the build queue.", queue.getBuildableItems().isEmpty()); // create a LoadStatisticsUpdater, and run it in order to update the // load stats for all the labels diff --git a/test/src/test/java/hudson/node_monitors/ClockMonitorDescriptorTest.java b/test/src/test/java/hudson/node_monitors/ClockMonitorDescriptorTest.java index 7a235a9dfa92..13896bf8af51 100644 --- a/test/src/test/java/hudson/node_monitors/ClockMonitorDescriptorTest.java +++ b/test/src/test/java/hudson/node_monitors/ClockMonitorDescriptorTest.java @@ -37,6 +37,6 @@ public void testClockMonitor() throws Exception { assertTrue(cd.abs() >= 0); assertTrue(cd.abs() < TimeUnit.SECONDS.toMillis(5)); assertFalse(cd.isDangerous()); - assertTrue("html output too short", cd.toHtml().length() > 0); + assertFalse("html output too short", cd.toHtml().isEmpty()); } } diff --git a/test/src/test/java/lib/hudson/ListScmBrowsersTest.java b/test/src/test/java/lib/hudson/ListScmBrowsersTest.java index 4b11c0ff07d2..942effdf47ff 100644 --- a/test/src/test/java/lib/hudson/ListScmBrowsersTest.java +++ b/test/src/test/java/lib/hudson/ListScmBrowsersTest.java @@ -1,5 +1,8 @@ package lib.hudson; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertTrue; import hudson.matrix.MatrixProject; @@ -38,7 +41,7 @@ public void selectBoxesUnique_MatrixProject() throws Exception { private void check(Item p) throws IOException, SAXException { HtmlPage page = j.createWebClient().getPage(p, "configure"); List selects = DomNodeUtil.selectNodes(page, "//select"); - assertTrue(selects.size() > 0); + assertThat(selects, not(empty())); for (HtmlSelect select : selects) { Set title = new HashSet<>(); for (HtmlOption o : select.getOptions()) { From db48740dd21e55b38578c8d1a681a13eb253e176 Mon Sep 17 00:00:00 2001 From: James Nord Date: Wed, 27 Sep 2023 10:23:26 +0100 Subject: [PATCH 51/52] [JEP-237] introduce FIPS property (#8482) Introduces the code that core and plugins can use to switch behaviour based on FIPS-140 requirements --- .../main/java/jenkins/security/FIPS140.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 core/src/main/java/jenkins/security/FIPS140.java diff --git a/core/src/main/java/jenkins/security/FIPS140.java b/core/src/main/java/jenkins/security/FIPS140.java new file mode 100644 index 000000000000..527c90085996 --- /dev/null +++ b/core/src/main/java/jenkins/security/FIPS140.java @@ -0,0 +1,60 @@ +/* + * The MIT License + * + * Copyright (c) 2023, 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 + * 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.security; + +import java.util.logging.Level; +import java.util.logging.Logger; +import jenkins.util.SystemProperties; + +/** + * Utilities to help code change behaviour when it is desired to run in a FIPS-140 enabled environment. + * The environment (host, JVM and servlet container), must be suitably configured which is outside the scope of the Jenkins project. + * @see FIPS-140-2 + * @see JEP-237 + * @since TODO + */ +public class FIPS140 { + + private static final Logger LOGGER = Logger.getLogger(FIPS140.class.getName()); + + private static final boolean FIPS_COMPLIANCE_MODE = SystemProperties.getBoolean(FIPS140.class.getName() + ".COMPLIANCE"); + + static { + if (useCompliantAlgorithms()) { + LOGGER.log(Level.CONFIG, "System has been asked to run in FIPS-140 compliant mode"); + } + } + + /** + * Provide a hint that the system should strive to be compliant with FIPS-140-2. + * This can be used by code that needs to make choices at runtime whether to disable some optional behaviour that is not compliant with FIPS-140, + * or to switch to a compliant (yet less secure) alternative. + * If this returns {@code true} it does not mean that the instance is compliant, it merely acts as a hint. + * @return {@code true} iff the system should prefer compliance with FIPS-140-2 over compatibility with existing data or alternative non approved algorithms. + */ + public static boolean useCompliantAlgorithms() { + return FIPS_COMPLIANCE_MODE; + } + +} From 9dabd874c2b183339ac419ea94b637db8f206b62 Mon Sep 17 00:00:00 2001 From: Basil Crow Date: Wed, 27 Sep 2023 02:26:24 -0700 Subject: [PATCH 52/52] Remove KXML2 library (#8503) --- bom/pom.xml | 6 ------ core/pom.xml | 5 ----- test/src/test/java/jenkins/ClassPathTest.java | 7 +------ 3 files changed, 1 insertion(+), 17 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 457db13a49d0..2b6f593e7721 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -175,12 +175,6 @@ THE SOFTWARE. jcip-annotations 1.0 - - - net.sf.kxml - kxml2 - 2.3.0 - org.antlr antlr4-runtime diff --git a/core/pom.xml b/core/pom.xml index 26f9a102c81e..f51d46ef586f 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -265,11 +265,6 @@ THE SOFTWARE. net.jcip jcip-annotations - - - net.sf.kxml - kxml2 - org.antlr antlr4-runtime diff --git a/test/src/test/java/jenkins/ClassPathTest.java b/test/src/test/java/jenkins/ClassPathTest.java index b9b380708a82..01b29253e0cc 100644 --- a/test/src/test/java/jenkins/ClassPathTest.java +++ b/test/src/test/java/jenkins/ClassPathTest.java @@ -75,12 +75,7 @@ public class ClassPathTest { "org/fusesource/jansi/internal/Kernel32$SMALL_RECT.class", "org/fusesource/jansi/internal/Kernel32.class", "org/fusesource/jansi/internal/WindowsSupport.class", - "org/fusesource/jansi/WindowsAnsiOutputStream.class", - // TODO duplicated in [kxml2-2.3.0.jar, xpp3-1.1.4c.jar] - "org/xmlpull/v1/XmlPullParser.class", - "org/xmlpull/v1/XmlPullParserException.class", - "org/xmlpull/v1/XmlPullParserFactory.class", - "org/xmlpull/v1/XmlSerializer.class"))); + "org/fusesource/jansi/WindowsAnsiOutputStream.class"))); @Issue("JENKINS-46754") @Test