type) {
+ T category = all().get(type);
+ if (category == null) {
+ throw new AssertionError("Category not found. It seems the " + type + " is not annotated with @Extension and so not registered");
+ }
+ return category;
+ }
+
+ /**
+ * This category is used when the {@link hudson.model.UserPropertyDescriptor} has not implemented
+ * the {@link UserPropertyDescriptor#getUserPropertyCategory()} method
+ * (or the getUserPropertyCategoryAsString method for compatibility reason).
+ *
+ * If you do not know what to use, choose the {@link Account} instead of this one.
+ */
+ @Extension
+ @Symbol("unclassified")
+ @Restricted(DoNotUse.class)
+ public static class Unclassified extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Unclassified_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Unclassified_ShortDescription();
+ }
+ }
+
+ /**
+ * User property related to account settings (e.g. timezone, email, ...).
+ *
+ * It could be seen as the default choice for {@link UserProperty} that are defining their category.
+ * Currently it has the same effect as {@link Unclassified} but the behavior could change in the future.
+ */
+ @Extension
+ @Symbol("account")
+ public static class Account extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Account_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Account_ShortDescription();
+ }
+ }
+
+ /**
+ * Preferences related configurations (e.g. notification type, default view, ...).
+ */
+ @Extension
+ @Symbol("preferences")
+ public static class Preferences extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Preferences_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Preferences_ShortDescription();
+ }
+ }
+
+ /**
+ * Per user feature flags (e.g. new design, ...).
+ */
+ @Extension
+ @Symbol("experimental")
+ public static class Experimental extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Experimental_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Experimental_ShortDescription();
+ }
+ }
+
+ /**
+ * User interface related configurations (e.g. theme, language, ...).
+ *
+ * See also {@link jenkins.appearance.AppearanceCategory}.
+ */
+ @Extension
+ @Symbol("appearance")
+ public static class Appearance extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Appearance_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Appearance_ShortDescription();
+ }
+ }
+
+
+ /**
+ * Security related configurations (e.g. API Token, SSH keys, ...).
+ * With this separation, we can more easily add control on their modifications.
+ */
+ @Extension
+ @Symbol("security")
+ public static class Security extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Security_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Security_ShortDescription();
+ }
+ }
+
+ /**
+ * For user properties that are not expected to be displayed,
+ * typically automatically configured by automated behavior, without direct user interaction.
+ */
+ @Extension
+ @Symbol("invisible")
+ public static class Invisible extends UserPropertyCategory {
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategory_Invisible_DisplayName();
+ }
+
+ @Override
+ public String getShortDescription() {
+ return Messages.UserPropertyCategory_Invisible_ShortDescription();
+ }
+ }
+}
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java
new file mode 100644
index 000000000000..822cdc6f4c99
--- /dev/null
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAccountAction.java
@@ -0,0 +1,121 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2022, 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.model.userproperty;
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import hudson.DescriptorExtensionList;
+import hudson.Extension;
+import hudson.model.Action;
+import hudson.model.Descriptor;
+import hudson.model.TransientUserActionFactory;
+import hudson.model.User;
+import hudson.model.UserProperty;
+import hudson.model.UserPropertyDescriptor;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import javax.servlet.ServletException;
+import jenkins.model.Jenkins;
+import jenkins.security.UserDetailsCache;
+import net.sf.json.JSONObject;
+import org.jenkinsci.Symbol;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.StaplerResponse;
+import org.kohsuke.stapler.verb.POST;
+
+@Restricted(NoExternalUse.class)
+public class UserPropertyCategoryAccountAction extends UserPropertyCategoryAction implements Action {
+ public UserPropertyCategoryAccountAction(@NonNull User user) {
+ super(user);
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategoryAccountAction_DisplayName();
+ }
+
+ @Override
+ public String getIconFileName() {
+ return getTargetUser().hasPermission(Jenkins.ADMINISTER) ? "symbol-settings" : null;
+ }
+
+ @Override
+ public String getUrlName() {
+ return "account";
+ }
+
+ public @NonNull List getMyCategoryDescriptors() {
+ return allByTwoCategoryClasses(UserPropertyCategory.Unclassified.class, UserPropertyCategory.Account.class);
+ }
+
+ private static List allByTwoCategoryClasses(
+ @NonNull Class extends UserPropertyCategory> categoryClass1,
+ @NonNull Class extends UserPropertyCategory> categoryClass2
+ ) {
+ DescriptorExtensionList all = UserProperty.all();
+
+ List filteredList = new ArrayList<>(all.size());
+ for (UserPropertyDescriptor descriptor : all) {
+ Class extends UserPropertyCategory> currClass = descriptor.getUserPropertyCategory().getClass();
+ if (currClass.equals(categoryClass1) || currClass.equals(categoryClass2)) {
+ filteredList.add(descriptor);
+ }
+ }
+
+ return filteredList;
+ }
+
+ @POST
+ public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException {
+ User targetUser = this.getTargetUser();
+ targetUser.checkPermission(Jenkins.ADMINISTER);
+
+ JSONObject json = req.getSubmittedForm();
+
+ String oldFullName = targetUser.getFullName();
+ targetUser.setFullName(json.getString("fullName"));
+ targetUser.setDescription(json.getString("description"));
+
+ super.doConfigSubmit(req, rsp);
+
+ if (!oldFullName.equals(targetUser.getFullName())) {
+ UserDetailsCache.get().invalidate(oldFullName);
+ }
+ }
+
+ /**
+ * Inject the outer class configuration page into the sidenav and the request routing of the user
+ */
+ @Extension(ordinal = 400)
+ @Symbol("account")
+ public static class AccountActionFactory extends TransientUserActionFactory {
+ public Collection extends Action> createFor(User target) {
+ return Collections.singleton(new UserPropertyCategoryAccountAction(target));
+ }
+ }
+}
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAction.java
new file mode 100644
index 000000000000..caec7c1bdf88
--- /dev/null
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAction.java
@@ -0,0 +1,65 @@
+package hudson.model.userproperty;
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import hudson.model.Descriptor;
+import hudson.model.User;
+import hudson.model.UserProperty;
+import hudson.model.UserPropertyDescriptor;
+import hudson.util.FormApply;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.servlet.ServletException;
+import jenkins.model.Jenkins;
+import net.sf.json.JSONObject;
+import org.kohsuke.stapler.StaplerRequest;
+import org.kohsuke.stapler.StaplerResponse;
+import org.kohsuke.stapler.verb.POST;
+
+public abstract class UserPropertyCategoryAction {
+
+ private final User targetUser;
+
+ public UserPropertyCategoryAction(User targetUser) {
+ this.targetUser = targetUser;
+ }
+
+ public @NonNull User getTargetUser() {
+ return targetUser;
+ }
+
+ public @NonNull abstract List getMyCategoryDescriptors();
+
+ @POST
+ public void doConfigSubmit(StaplerRequest req, StaplerResponse rsp) throws IOException, ServletException, Descriptor.FormException {
+ this.targetUser.checkPermission(Jenkins.ADMINISTER);
+
+ JSONObject json = req.getSubmittedForm();
+
+ List props = new ArrayList<>();
+ List myCategoryDescriptors = getMyCategoryDescriptors();
+ int i = 0;
+ for (UserPropertyDescriptor d : myCategoryDescriptors) {
+ UserProperty p = this.targetUser.getProperty(d.clazz);
+
+ JSONObject o = json.optJSONObject("userProperty" + i++);
+ if (o != null) {
+ if (p != null) {
+ p = p.reconfigure(req, o);
+ } else {
+ p = d.newInstance(req, o);
+ }
+ }
+
+ if (p != null) {
+ props.add(p);
+ }
+ }
+ this.targetUser.addProperties(props);
+
+ this.targetUser.save();
+
+ // we are in /user///, going to /user//
+ FormApply.success("..").generateResponse(req, rsp, this);
+ }
+}
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAppearanceAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAppearanceAction.java
new file mode 100644
index 000000000000..88d08a8add70
--- /dev/null
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryAppearanceAction.java
@@ -0,0 +1,76 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2022, 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.model.userproperty;
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import hudson.Extension;
+import hudson.model.Action;
+import hudson.model.TransientUserActionFactory;
+import hudson.model.User;
+import hudson.model.UserProperty;
+import hudson.model.UserPropertyDescriptor;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import jenkins.model.Jenkins;
+import org.jenkinsci.Symbol;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+
+@Restricted(NoExternalUse.class)
+public class UserPropertyCategoryAppearanceAction extends UserPropertyCategoryAction implements Action {
+ public UserPropertyCategoryAppearanceAction(@NonNull User user) {
+ super(user);
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategoryAppearanceAction_DisplayName();
+ }
+
+ @Override
+ public String getIconFileName() {
+ return getTargetUser().hasPermission(Jenkins.ADMINISTER) ? "symbol-brush-outline" : null;
+ }
+
+ @Override
+ public String getUrlName() {
+ return "appearance";
+ }
+
+ public @NonNull List getMyCategoryDescriptors() {
+ return UserProperty.allByCategoryClass(UserPropertyCategory.Appearance.class);
+ }
+
+ /**
+ * Inject the outer class configuration page into the sidenav and the request routing of the user
+ */
+ @Extension(ordinal = 350)
+ @Symbol("appearance")
+ public static class AppearanceActionFactory extends TransientUserActionFactory {
+ public Collection extends Action> createFor(User target) {
+ return Collections.singleton(new UserPropertyCategoryAppearanceAction(target));
+ }
+ }
+}
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java
new file mode 100644
index 000000000000..bb242bacad7a
--- /dev/null
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryExperimentalAction.java
@@ -0,0 +1,76 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2022, 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.model.userproperty;
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import hudson.Extension;
+import hudson.model.Action;
+import hudson.model.TransientUserActionFactory;
+import hudson.model.User;
+import hudson.model.UserProperty;
+import hudson.model.UserPropertyDescriptor;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import jenkins.model.Jenkins;
+import org.jenkinsci.Symbol;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+
+@Restricted(NoExternalUse.class)
+public class UserPropertyCategoryExperimentalAction extends UserPropertyCategoryAction implements Action {
+ public UserPropertyCategoryExperimentalAction(@NonNull User user) {
+ super(user);
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategoryExperimentalAction_DisplayName();
+ }
+
+ @Override
+ public String getIconFileName() {
+ return getTargetUser().hasPermission(Jenkins.ADMINISTER) ? "symbol-flask" : null;
+ }
+
+ @Override
+ public String getUrlName() {
+ return "experiments";
+ }
+
+ public @NonNull List getMyCategoryDescriptors() {
+ return UserProperty.allByCategoryClass(UserPropertyCategory.Experimental.class);
+ }
+
+ /**
+ * Inject the outer class configuration page into the sidenav and the request routing of the user
+ */
+ @Extension(ordinal = 100)
+ @Symbol("experimental")
+ public static class ExperimentalActionFactory extends TransientUserActionFactory {
+ public Collection extends Action> createFor(User target) {
+ return Collections.singleton(new UserPropertyCategoryExperimentalAction(target));
+ }
+ }
+}
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java
new file mode 100644
index 000000000000..7a74b702e6c0
--- /dev/null
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategoryPreferencesAction.java
@@ -0,0 +1,76 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2022, 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.model.userproperty;
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import hudson.Extension;
+import hudson.model.Action;
+import hudson.model.TransientUserActionFactory;
+import hudson.model.User;
+import hudson.model.UserProperty;
+import hudson.model.UserPropertyDescriptor;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import jenkins.model.Jenkins;
+import org.jenkinsci.Symbol;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+
+@Restricted(NoExternalUse.class)
+public class UserPropertyCategoryPreferencesAction extends UserPropertyCategoryAction implements Action {
+ public UserPropertyCategoryPreferencesAction(@NonNull User user) {
+ super(user);
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategoryPreferencesAction_DisplayName();
+ }
+
+ @Override
+ public String getIconFileName() {
+ return getTargetUser().hasPermission(Jenkins.ADMINISTER) ? "symbol-parameters" : null;
+ }
+
+ @Override
+ public String getUrlName() {
+ return "preferences";
+ }
+
+ public @NonNull List getMyCategoryDescriptors() {
+ return UserProperty.allByCategoryClass(UserPropertyCategory.Preferences.class);
+ }
+
+ /**
+ * Inject the outer class configuration page into the sidenav and the request routing of the user
+ */
+ @Extension(ordinal = 300)
+ @Symbol("preferences")
+ public static class PreferencesActionFactory extends TransientUserActionFactory {
+ public Collection extends Action> createFor(User target) {
+ return Collections.singleton(new UserPropertyCategoryPreferencesAction(target));
+ }
+ }
+}
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java
new file mode 100644
index 000000000000..a6cb3e6ed3c4
--- /dev/null
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategorySecurityAction.java
@@ -0,0 +1,77 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2022, 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.model.userproperty;
+
+
+import edu.umd.cs.findbugs.annotations.NonNull;
+import hudson.Extension;
+import hudson.model.Action;
+import hudson.model.TransientUserActionFactory;
+import hudson.model.User;
+import hudson.model.UserProperty;
+import hudson.model.UserPropertyDescriptor;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import jenkins.model.Jenkins;
+import org.jenkinsci.Symbol;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+
+@Restricted(NoExternalUse.class)
+public class UserPropertyCategorySecurityAction extends UserPropertyCategoryAction implements Action {
+ public UserPropertyCategorySecurityAction(@NonNull User user) {
+ super(user);
+ }
+
+ @Override
+ public String getDisplayName() {
+ return Messages.UserPropertyCategorySecurityAction_DisplayName();
+ }
+
+ @Override
+ public String getIconFileName() {
+ return getTargetUser().hasPermission(Jenkins.ADMINISTER) ? "symbol-lock-closed" : null;
+ }
+
+ @Override
+ public String getUrlName() {
+ return "security";
+ }
+
+ public @NonNull List getMyCategoryDescriptors() {
+ return UserProperty.allByCategoryClass(UserPropertyCategory.Security.class);
+ }
+
+ /**
+ * Inject the outer class configuration page into the sidenav and the request routing of the user
+ */
+ @Extension(ordinal = 200)
+ @Symbol("security")
+ public static class SecurityActionFactory extends TransientUserActionFactory {
+ public Collection extends Action> createFor(User target) {
+ return Collections.singleton(new UserPropertyCategorySecurityAction(target));
+ }
+ }
+}
diff --git a/core/src/main/java/hudson/search/UserSearchProperty.java b/core/src/main/java/hudson/search/UserSearchProperty.java
index 7e9836944c0b..a3515dd08874 100644
--- a/core/src/main/java/hudson/search/UserSearchProperty.java
+++ b/core/src/main/java/hudson/search/UserSearchProperty.java
@@ -5,6 +5,7 @@
import hudson.model.User;
import hudson.model.UserProperty;
import hudson.model.UserPropertyDescriptor;
+import hudson.model.userproperty.UserPropertyCategory;
import net.sf.json.JSONObject;
import org.jenkinsci.Symbol;
import org.kohsuke.stapler.StaplerRequest;
@@ -54,6 +55,10 @@ public UserProperty newInstance(StaplerRequest req, JSONObject formData) throws
return new UserSearchProperty(formData.optBoolean("insensitiveSearch"));
}
+ @Override
+ public @NonNull UserPropertyCategory getUserPropertyCategory() {
+ return UserPropertyCategory.get(UserPropertyCategory.Preferences.class);
+ }
}
}
diff --git a/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java b/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
index 53b798d941db..bd122244c7e2 100644
--- a/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
+++ b/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
@@ -39,6 +39,7 @@
import hudson.model.User;
import hudson.model.UserProperty;
import hudson.model.UserPropertyDescriptor;
+import hudson.model.userproperty.UserPropertyCategory;
import hudson.security.FederatedLoginService.FederatedIdentity;
import hudson.security.captcha.CaptchaSupport;
import hudson.util.FormValidation;
@@ -801,7 +802,6 @@ public boolean equals(Object o) {
public int hashCode() {
return getUsername().hashCode();
}
-
}
public static class ConverterImpl extends XStream2.PassthruConverter {
@@ -884,6 +884,11 @@ public boolean isEnabled() {
public UserProperty newInstance(User user) {
return null;
}
+
+ @Override
+ public @NonNull UserPropertyCategory getUserPropertyCategory() {
+ return UserPropertyCategory.get(UserPropertyCategory.Security.class);
+ }
}
}
diff --git a/core/src/main/java/jenkins/model/experimentalflags/UserExperimentalFlagsProperty.java b/core/src/main/java/jenkins/model/experimentalflags/UserExperimentalFlagsProperty.java
index 6732f2e5d696..85332d26973c 100644
--- a/core/src/main/java/jenkins/model/experimentalflags/UserExperimentalFlagsProperty.java
+++ b/core/src/main/java/jenkins/model/experimentalflags/UserExperimentalFlagsProperty.java
@@ -31,6 +31,7 @@
import hudson.model.User;
import hudson.model.UserProperty;
import hudson.model.UserPropertyDescriptor;
+import hudson.model.userproperty.UserPropertyCategory;
import java.util.HashMap;
import java.util.Map;
import net.sf.json.JSONObject;
@@ -76,13 +77,19 @@ public static final class DescriptorImpl extends UserPropertyDescriptor {
public UserProperty newInstance(@Nullable StaplerRequest req, @NonNull JSONObject formData) throws FormException {
JSONObject flagsObj = formData.getJSONObject("flags");
Map flags = new HashMap<>();
- for (Object key : flagsObj.keySet()) {
- String value = (String) flagsObj.get((String) key);
+ for (String key : flagsObj.keySet()) {
+ String value = (String) flagsObj.get(key);
if (!value.isEmpty()) {
- flags.put((String) key, value);
+ flags.put(key, value);
}
}
return new UserExperimentalFlagsProperty(flags);
}
+
+ @NonNull
+ @Override
+ public UserPropertyCategory getUserPropertyCategory() {
+ return UserPropertyCategory.get(UserPropertyCategory.Experimental.class);
+ }
}
}
diff --git a/core/src/main/java/jenkins/security/ApiTokenProperty.java b/core/src/main/java/jenkins/security/ApiTokenProperty.java
index 69904a0e4785..464fdcbdf16c 100644
--- a/core/src/main/java/jenkins/security/ApiTokenProperty.java
+++ b/core/src/main/java/jenkins/security/ApiTokenProperty.java
@@ -33,6 +33,7 @@
import hudson.model.User;
import hudson.model.UserProperty;
import hudson.model.UserPropertyDescriptor;
+import hudson.model.userproperty.UserPropertyCategory;
import hudson.security.ACL;
import hudson.util.HttpResponses;
import hudson.util.Secret;
@@ -657,6 +658,11 @@ public HttpResponse doRevokeAllExcept(@AncestorInPath User u,
return HttpResponses.ok();
}
+
+ @Override
+ public @NonNull UserPropertyCategory getUserPropertyCategory() {
+ return UserPropertyCategory.get(UserPropertyCategory.Security.class);
+ }
}
/**
diff --git a/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java b/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java
index 52f74d452ffa..cb8b8accf295 100644
--- a/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java
+++ b/core/src/main/java/jenkins/security/LastGrantedAuthoritiesProperty.java
@@ -6,6 +6,7 @@
import hudson.model.User;
import hudson.model.UserProperty;
import hudson.model.UserPropertyDescriptor;
+import hudson.model.userproperty.UserPropertyCategory;
import hudson.security.SecurityRealm;
import java.io.IOException;
import java.util.ArrayList;
@@ -171,6 +172,11 @@ public boolean isEnabled() {
public UserProperty newInstance(User user) {
return null;
}
+
+ @Override
+ public @NonNull UserPropertyCategory getUserPropertyCategory() {
+ return UserPropertyCategory.get(UserPropertyCategory.Invisible.class);
+ }
}
private static final Logger LOGGER = Logger.getLogger(LastGrantedAuthoritiesProperty.class.getName());
diff --git a/core/src/main/java/jenkins/security/seed/UserSeedProperty.java b/core/src/main/java/jenkins/security/seed/UserSeedProperty.java
index d7420910cb64..968ee9320f58 100644
--- a/core/src/main/java/jenkins/security/seed/UserSeedProperty.java
+++ b/core/src/main/java/jenkins/security/seed/UserSeedProperty.java
@@ -31,6 +31,7 @@
import hudson.model.User;
import hudson.model.UserProperty;
import hudson.model.UserPropertyDescriptor;
+import hudson.model.userproperty.UserPropertyCategory;
import hudson.util.HttpResponses;
import java.io.IOException;
import java.security.SecureRandom;
@@ -153,5 +154,10 @@ public synchronized HttpResponse doRenewSessionSeed(@AncestorInPath @NonNull Use
public boolean isEnabled() {
return !DISABLE_USER_SEED && !HIDE_USER_SEED_SECTION;
}
+
+ @Override
+ public @NonNull UserPropertyCategory getUserPropertyCategory() {
+ return UserPropertyCategory.get(UserPropertyCategory.Security.class);
+ }
}
}
diff --git a/core/src/main/resources/hudson/model/Messages.properties b/core/src/main/resources/hudson/model/Messages.properties
index 9cd382511856..d56c57ff5ee0 100644
--- a/core/src/main/resources/hudson/model/Messages.properties
+++ b/core/src/main/resources/hudson/model/Messages.properties
@@ -422,3 +422,5 @@ ManagementLink.Category.MISC=Other
ManagementLink.Category.UNCATEGORIZED=Uncategorized
FileParameterValue.IndexTitle=File Parameters
+
+UserPreferencesProperty.DisplayName=Preferences
diff --git a/core/src/main/resources/hudson/model/User/configure.jelly b/core/src/main/resources/hudson/model/User/configure.jelly
deleted file mode 100644
index 9b4100248559..000000000000
--- a/core/src/main/resources/hudson/model/User/configure.jelly
+++ /dev/null
@@ -1,67 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/core/src/main/resources/hudson/model/User/sidepanel.jelly b/core/src/main/resources/hudson/model/User/sidepanel.jelly
index 834061995daf..f8024b0c21b8 100644
--- a/core/src/main/resources/hudson/model/User/sidepanel.jelly
+++ b/core/src/main/resources/hudson/model/User/sidepanel.jelly
@@ -33,7 +33,6 @@ THE SOFTWARE.
-
diff --git a/core/src/main/resources/hudson/model/userproperty/Messages.properties b/core/src/main/resources/hudson/model/userproperty/Messages.properties
new file mode 100644
index 000000000000..5e52b8d2906c
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/Messages.properties
@@ -0,0 +1,48 @@
+# The MIT License
+#
+# Copyright (c) 2022, 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.
+
+UserPropertyCategory.Unclassified.DisplayName=Unclassified
+UserPropertyCategory.Unclassified.ShortDescription=User properties without a category yet
+
+UserPropertyCategory.Account.DisplayName=Account
+UserPropertyCategory.Account.ShortDescription=User properties related to the user account configuration (e.g. timezone, email, ...)
+
+UserPropertyCategory.Preferences.DisplayName=Preferences
+UserPropertyCategory.Preferences.ShortDescription=User properties related to the user preferences (e.g. notification type, default view, ...)
+
+UserPropertyCategory.Experimental.DisplayName=Experiments
+UserPropertyCategory.Experimental.ShortDescription=Per user flags to enable/disable experimental features (e.g. new design, ...)
+
+UserPropertyCategory.Appearance.DisplayName=Appearance
+UserPropertyCategory.Appearance.ShortDescription=User properties related to the appearance of Jenkins
+
+UserPropertyCategory.Security.DisplayName=Security
+UserPropertyCategory.Security.ShortDescription=User properties related to the security of the user account (e.g. API token, SSH keys, ...)
+
+UserPropertyCategory.Invisible.DisplayName=Invisible
+UserPropertyCategory.Invisible.ShortDescription=User properties that do not require a configuration page
+
+UserPropertyCategoryAccountAction.DisplayName=Account
+UserPropertyCategoryAppearanceAction.DisplayName=Appearance
+UserPropertyCategoryExperimentalAction.DisplayName=Experiments
+UserPropertyCategoryPreferencesAction.DisplayName=Preferences
+UserPropertyCategorySecurityAction.DisplayName=Security
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly
new file mode 100644
index 000000000000..8d2a8e9368e7
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.jelly
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+ ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/resources/jenkins/model/experimentalflags/Messages_sv_SE.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties
similarity index 94%
rename from core/src/main/resources/jenkins/model/experimentalflags/Messages_sv_SE.properties
rename to core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties
index 4f1b584608af..41e4d5b9689f 100644
--- a/core/src/main/resources/jenkins/model/experimentalflags/Messages_sv_SE.properties
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index.properties
@@ -20,4 +20,6 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-UserExperimentalFlagsProperty.DisplayName=Experiment
+title=Account
+Full\ name=Full Name
+Description=Description
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties
new file mode 100644
index 000000000000..8654e841998b
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_bg.properties
@@ -0,0 +1,28 @@
+# The MIT License
+#
+# Bulgarian translation: Copyright (c) 2015, 2016, Alexander Shopov
+#
+# 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.
+
+Description=\
+ Описание
+Full\ name=\
+ Пълно име
+Save=\
+ Запазване
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties
new file mode 100644
index 000000000000..aad7c2e559ef
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ca.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Description=Descripció
+Full\ name=Nom
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties
new file mode 100644
index 000000000000..541815f7d164
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_cs.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, 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.
+
+Description=Popis
+Save=Uložit
+Full\ name=Jméno
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties
new file mode 100644
index 000000000000..a5abfe2acc7a
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_da.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, Inc. Kohsuke Kawaguchi. Knud Poulsen.
+#
+# 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.
+
+Full\ name=Dit navn
+Save=Gem
+Description=Beskrivelse
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties
new file mode 100644
index 000000000000..06240b1aa6ce
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_de.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Simon Wiest
+#
+# 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.
+
+Full\ name=Ihr Name
+Description=Beschreibung
+Save=Speichern
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties
new file mode 100644
index 000000000000..f7839a14fe3d
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_es.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi
+#
+# 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.
+
+Full\ name=Nombre
+Save=Guardar
+Description=Descripción
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties
new file mode 100644
index 000000000000..03769c1d17c4
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fi.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, 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.
+
+Description=Kuvaus
+Save=Tallenna
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties
new file mode 100644
index 000000000000..3b677fa5d67b
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_fr.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Eric Lefevre-Ardant
+#
+# 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.
+
+Full\ name=Votre nom
+Description=Présentation
+Save=Sauvegarder
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties
new file mode 100644
index 000000000000..6e8cb34dc914
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_hu.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Description=Leírás
+Full\ name=Ön neve
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties
new file mode 100644
index 000000000000..d3523f2f3116
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_it.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Italian localization plugin for Jenkins
+# Copyright © 2020 Alessandro Menti
+#
+# 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.
+
+Description=Descrizione
+Full\ name=Nome completo
+Save=Salva
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties
new file mode 100644
index 000000000000..be1c04668bbf
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ja.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Seiji Sogabe, id:cactusman
+#
+# 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.
+
+Full\ name=あなたの名前
+Description=説明
+Save=保存
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties
new file mode 100644
index 000000000000..fd0ca539d7d9
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ko.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Description=소개
+Full\ name=이름
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties
new file mode 100644
index 000000000000..b16f28220290
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_lv.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, 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.
+
+Full\ name=Tavs vārds
+description.title=Apraksts
+Save=Saglabāt
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties
new file mode 100644
index 000000000000..58a3343fb3d8
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nb_NO.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, 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.
+
+Description=Beskrivelse
+Save=Lagre
+Full\ name=Ditt navn
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties
new file mode 100644
index 000000000000..7756763a1a74
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_nl.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, id:sorokh
+#
+# 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.
+
+Full\ name=Uw naam
+Description=Omschrijving
+Save=Opslaan
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties
new file mode 100644
index 000000000000..f90e9574abde
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pl.properties
@@ -0,0 +1,26 @@
+# The MIT License
+#
+# Copyright (c) 2004-2016, Sun Microsystems, Damian Szczepanik
+#
+# 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.
+
+Description=Opis
+Full\ name=Twoje imię i nazwisko
+# User ‘{0}’ Configuration
+Save=Zapisz
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties
new file mode 100644
index 000000000000..c46179879578
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_pt_BR.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Reginaldo L. Russinholi, Cleiber Silva
+#
+# 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.
+
+Full\ name=Seu nome
+Description=Descrição
+Save=Salvar
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties
new file mode 100644
index 000000000000..b05ddbbb49a8
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_ru.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Mike Salnikov
+#
+# 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.
+
+Full\ name=Полное имя
+Description=Описание
+Save=Сохранить
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties
new file mode 100644
index 000000000000..8c8f98e91b07
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sk.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Description=Popis
+Full\ name=Meno
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties
new file mode 100644
index 000000000000..241621057f54
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sr.properties
@@ -0,0 +1,5 @@
+# This file is under the MIT License by authors
+
+Full\ name=Име и презиме
+Description=Опис
+Save=Сачувај
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties
new file mode 100644
index 000000000000..6e75a39365c2
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_sv_SE.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2010, Sun Microsystems, 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.
+
+Description=Beskrivning
+Save=Spara
+Full\ name=Ditt namn
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties
new file mode 100644
index 000000000000..ead6d67dee06
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_tr.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2009, Sun Microsystems, Inc., Kohsuke Kawaguchi, Oguz Dag
+#
+# 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.
+
+Full\ name=İsminiz
+Description=Açıklama
+Save=Kaydet
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties
new file mode 100644
index 000000000000..3dc2751ccdeb
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_uk.properties
@@ -0,0 +1,4 @@
+# This file is under the MIT License by authors
+
+Description=Опис
+Full\ name=Ваше ім''я
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties
new file mode 100644
index 000000000000..8a05a4258d59
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAccountAction/index_zh_TW.properties
@@ -0,0 +1,25 @@
+# The MIT License
+#
+# Copyright (c) 2004-2013, Sun Microsystems, Inc., Chunghwa Telecom Co., Ltd.,
+# and Pei-Tang Huang
+#
+# 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.
+Full\ name=全名
+Description=說明
+Save=儲存
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAppearanceAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAppearanceAction/index.jelly
new file mode 100644
index 000000000000..0d90ad4b2d76
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAppearanceAction/index.jelly
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%warningNoItems}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAppearanceAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAppearanceAction/index.properties
new file mode 100644
index 000000000000..f24a3f6e3851
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryAppearanceAction/index.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2022, 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.
+
+title=Appearance
+warningNoItems=No appearance items are available for configuration.
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly
new file mode 100644
index 000000000000..0d90ad4b2d76
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.jelly
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%warningNoItems}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties
new file mode 100644
index 000000000000..4e5e6b02073d
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryExperimentalAction/index.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2022, 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.
+
+title=Experiments
+warningNoItems=No experiments are currently available.
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly
new file mode 100644
index 000000000000..6971e5abf8d0
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.jelly
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+ ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%warningNoItems}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/resources/jenkins/model/experimentalflags/Messages_fr.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties
similarity index 94%
rename from core/src/main/resources/jenkins/model/experimentalflags/Messages_fr.properties
rename to core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties
index 8e48740af070..89bd19371237 100644
--- a/core/src/main/resources/jenkins/model/experimentalflags/Messages_fr.properties
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategoryPreferencesAction/index.properties
@@ -20,4 +20,5 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-UserExperimentalFlagsProperty.DisplayName=Expérimentations
+title=Preferences
+warningNoItems=No preferences available.
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly
new file mode 100644
index 000000000000..0d90501fbbb0
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.jelly
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+ ${%title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ${%warningNoItems}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties
new file mode 100644
index 000000000000..be9c8e93e5f2
--- /dev/null
+++ b/core/src/main/resources/hudson/model/userproperty/UserPropertyCategorySecurityAction/index.properties
@@ -0,0 +1,24 @@
+# The MIT License
+#
+# Copyright (c) 2022, 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.
+
+title=Security
+warningNoItems=No security configuration available.
diff --git a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly
index 88939feeaca3..559e2370a720 100644
--- a/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly
+++ b/core/src/main/resources/hudson/security/HudsonPrivateSecurityRealm/index.jelly
@@ -63,7 +63,7 @@ THE SOFTWARE.
diff --git a/core/src/main/resources/jenkins/model/experimentalflags/Messages.properties b/core/src/main/resources/jenkins/model/experimentalflags/Messages.properties
index ddf8f546e32b..13e00e615459 100644
--- a/core/src/main/resources/jenkins/model/experimentalflags/Messages.properties
+++ b/core/src/main/resources/jenkins/model/experimentalflags/Messages.properties
@@ -20,4 +20,4 @@
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
-UserExperimentalFlagsProperty.DisplayName=Experiments
+UserExperimentalFlagsProperty.DisplayName=Feature preview
diff --git a/core/src/main/resources/jenkins/model/experimentalflags/UserExperimentalFlagsProperty/config.jelly b/core/src/main/resources/jenkins/model/experimentalflags/UserExperimentalFlagsProperty/config.jelly
index 4fe6097089bb..a70fddf3403e 100644
--- a/core/src/main/resources/jenkins/model/experimentalflags/UserExperimentalFlagsProperty/config.jelly
+++ b/core/src/main/resources/jenkins/model/experimentalflags/UserExperimentalFlagsProperty/config.jelly
@@ -40,7 +40,7 @@ THE SOFTWARE.
${%FlagDisplayName} |
- ${%FlagDescription} |
+ ${%FlagDescription} |
${%FlagConfig} |
diff --git a/test/src/test/java/hudson/model/UserPropertyTest.java b/test/src/test/java/hudson/model/UserPropertyTest.java
index 0d2b7d5b1374..91c977d4ec28 100644
--- a/test/src/test/java/hudson/model/UserPropertyTest.java
+++ b/test/src/test/java/hudson/model/UserPropertyTest.java
@@ -6,6 +6,7 @@
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
+import static org.htmlunit.html.HtmlFormUtil.submit;
import static org.junit.Assert.assertNotNull;
import java.io.File;
@@ -35,12 +36,17 @@ public class UserPropertyTest {
@Rule
public JenkinsRule j = new JenkinsRule();
+ public User configRoundtrip(User u) throws Exception {
+ submit(j.createWebClient().goTo(u.getUrl()+"/account/").getFormByName("config"));
+ return u;
+ }
+
@Test
@Issue("JENKINS-9062")
public void test() throws Exception {
User u = User.get("foo");
u.addProperty(new UserProperty1());
- j.configRoundtrip(u);
+ configRoundtrip(u);
for (UserProperty p : u.getAllProperties())
assertNotNull(p);
}
@@ -82,7 +88,7 @@ public void nestedUserReference() throws Exception {
List fileLines = Files.readAllLines(testFile.toPath(), StandardCharsets.US_ASCII);
assertThat(fileLines, hasSize(1));
- j.configRoundtrip(user);
+ configRoundtrip(user);
user = User.get("nestedUserReference", false, Collections.emptyMap());
assertThat("nested reference should exist after user configuration change", user, nestedUserSet());
diff --git a/test/src/test/java/hudson/model/UserTest.java b/test/src/test/java/hudson/model/UserTest.java
index 4f5d6e8f4365..b27adbdc15e7 100644
--- a/test/src/test/java/hudson/model/UserTest.java
+++ b/test/src/test/java/hudson/model/UserTest.java
@@ -64,12 +64,14 @@
import jenkins.model.IdStrategy;
import jenkins.model.Jenkins;
import jenkins.security.ApiTokenProperty;
+import org.htmlunit.FailingHttpStatusCodeException;
import org.htmlunit.WebAssert;
import org.htmlunit.WebRequest;
import org.htmlunit.WebResponse;
import org.htmlunit.html.HtmlForm;
import org.htmlunit.html.HtmlPage;
import org.htmlunit.util.WebConnectionWrapper;
+import org.jenkinsci.plugins.matrixauth.PermissionEntry;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
@@ -403,20 +405,23 @@ public void testDoConfigSubmit() throws Exception {
User user = realm.createAccount("John Smith", "password");
User user2 = realm.createAccount("John Smith2", "password");
user2.save();
- auth.add(Jenkins.ADMINISTER, user.getId());
- auth.add(Jenkins.READ, user2.getId());
+ auth.add(Jenkins.ADMINISTER, PermissionEntry.user(user.getId()));
+ auth.add(Jenkins.READ, PermissionEntry.user(user2.getId()));
SecurityContextHolder.getContext().setAuthentication(user.impersonate2());
- HtmlForm form = j.createWebClient().withBasicCredentials(user.getId(), "password").goTo(user2.getUrl() + "/configure").getFormByName("config");
+ HtmlForm form = j.createWebClient().withBasicCredentials(user.getId(), "password").goTo(user2.getUrl() + "/account/").getFormByName("config");
form.getInputByName("_.fullName").setValue("Alice Smith");
j.submit(form);
assertEquals("User should have full name Alice Smith.", "Alice Smith", user2.getFullName());
SecurityContextHolder.getContext().setAuthentication(user2.impersonate2());
- assertThrows("User should not have permission to configure another user.", AccessDeniedException3.class, () -> user.doConfigSubmit(null, null));
- form = j.createWebClient().withBasicCredentials(user2.getId(), "password").goTo(user2.getUrl() + "/configure").getFormByName("config");
+ try (JenkinsRule.WebClient webClient = j.createWebClient().withBasicCredentials(user2.getId(), "password")) {
+ FailingHttpStatusCodeException failingHttpStatusCodeException = assertThrows("User should not have permission to configure another user.", FailingHttpStatusCodeException.class, () -> webClient.goTo(user.getUrl() + "/account/"));
+ assertThat(failingHttpStatusCodeException.getStatusCode(), is(403));
+ form = webClient.goTo(user2.getUrl() + "/account/").getFormByName("config");
+ form.getInputByName("_.fullName").setValue("John");
+ j.submit(form);
+ }
- form.getInputByName("_.fullName").setValue("John");
- j.submit(form);
- assertEquals("User should be albe to configure himself.", "John", user2.getFullName());
+ assertEquals("User should be able to configure himself.", "John", user2.getFullName());
}
@@ -771,7 +776,7 @@ public WebResponse getResponse(WebRequest request) throws IOException {
return r;
}
};
- wc.login("alice").goTo("me/configure");
+ wc.login("alice").goTo("me/account/");
assertThat(failingResources, empty());
}
diff --git a/test/src/test/java/hudson/security/HudsonPrivateSecurityRealmTest.java b/test/src/test/java/hudson/security/HudsonPrivateSecurityRealmTest.java
index d0f58f92d5ec..92745bf5f9b0 100644
--- a/test/src/test/java/hudson/security/HudsonPrivateSecurityRealmTest.java
+++ b/test/src/test/java/hudson/security/HudsonPrivateSecurityRealmTest.java
@@ -651,7 +651,7 @@ public void changingPassword_mustInvalidateAllSessions() throws Exception {
wc_anotherTab.login(alice.getId());
assertUserConnected(wc_anotherTab, alice.getId());
- HtmlPage configurePage = wc.goTo(alice.getUrl() + "/configure");
+ HtmlPage configurePage = wc.goTo(alice.getUrl() + "/security/");
HtmlPasswordInput password1 = configurePage.getElementByName("user.password");
HtmlPasswordInput password2 = configurePage.getElementByName("user.password2");
@@ -683,7 +683,7 @@ public void notChangingPassword_hasNoImpactOnSeed() throws Exception {
wc_anotherTab.login(alice.getId());
assertUserConnected(wc_anotherTab, alice.getId());
- HtmlPage configurePage = wc.goTo(alice.getUrl() + "/configure");
+ HtmlPage configurePage = wc.goTo(alice.getUrl() + "/security/");
// not changing password this time
HtmlForm form = configurePage.getFormByName("config");
j.submit(form);
@@ -713,7 +713,7 @@ public void changingPassword_withSeedDisable_hasNoImpact() throws Exception {
wc_anotherTab.login(alice.getId());
assertUserConnected(wc_anotherTab, alice.getId());
- HtmlPage configurePage = wc.goTo(alice.getUrl() + "/configure");
+ HtmlPage configurePage = wc.goTo(alice.getUrl() + "/security/");
HtmlPasswordInput password1 = configurePage.getElementByName("user.password");
HtmlPasswordInput password2 = configurePage.getElementByName("user.password2");
diff --git a/test/src/test/java/jenkins/security/ApiCrumbExclusionTest.java b/test/src/test/java/jenkins/security/ApiCrumbExclusionTest.java
index 59f89e8f4977..c746fc7cc4d5 100644
--- a/test/src/test/java/jenkins/security/ApiCrumbExclusionTest.java
+++ b/test/src/test/java/jenkins/security/ApiCrumbExclusionTest.java
@@ -108,7 +108,7 @@ private void makeRequestAndFail(int expectedCode) {
}
private void checkWeCanChangeMyDescription(int expectedCode) throws IOException, SAXException {
- HtmlPage page = wc.goTo("me/configure");
+ HtmlPage page = wc.goTo("me/account/");
HtmlForm form = page.getFormByName("config");
form.getTextAreaByName("_.description").setText("random description: " + Math.random());
diff --git a/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java b/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java
index 30361ed8658c..162ac231b664 100644
--- a/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java
+++ b/test/src/test/java/jenkins/security/ApiTokenPropertyTest.java
@@ -80,7 +80,7 @@ public void basics() throws Exception {
assertEquals(u, wc.executeOnServer(User::current));
// Make sure the UI shows the token to the user
- HtmlPage config = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage config = wc.goTo(u.getUrl() + "/security/");
HtmlForm form = config.getFormByName("config");
assertEquals(token, form.getInputByName("_.apiToken").getValue());
@@ -126,7 +126,7 @@ public void adminsShouldBeUnableToSeeTokensByDefault() throws Exception {
// Make sure the UI does not show the token to another user
WebClient wc = createClientForUser("bar");
- HtmlPage config = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage config = wc.goTo(u.getUrl() + "/security/");
HtmlForm form = config.getFormByName("config");
assertEquals(Messages.ApiTokenProperty_ChangeToken_TokenIsHidden(), form.getInputByName("_.apiToken").getValue());
}
diff --git a/test/src/test/java/jenkins/security/BasicHeaderApiTokenAuthenticatorTest.java b/test/src/test/java/jenkins/security/BasicHeaderApiTokenAuthenticatorTest.java
index 873194dfb089..940715b0fe6a 100644
--- a/test/src/test/java/jenkins/security/BasicHeaderApiTokenAuthenticatorTest.java
+++ b/test/src/test/java/jenkins/security/BasicHeaderApiTokenAuthenticatorTest.java
@@ -70,7 +70,7 @@ public void legacyToken_regularCase() throws Throwable {
// default SecurityListener will save the user when adding the LastGrantedAuthoritiesProperty
// and so the user is persisted
wc.login("user1");
- HtmlPage page = wc.goTo("user/user1/configure");
+ HtmlPage page = wc.goTo("user/user1/security/");
String tokenValue = ((HtmlTextInput) page.getDocumentElement().querySelector("#apiToken")).getText();
token.set(tokenValue);
}
@@ -118,7 +118,7 @@ public void legacyToken_withoutLastGrantedAuthorities() throws Throwable {
{
JenkinsRule.WebClient wc = j.createWebClient();
wc.login("user1");
- HtmlPage page = wc.goTo("user/user1/configure");
+ HtmlPage page = wc.goTo("user/user1/security/");
String tokenValue = ((HtmlTextInput) page.getDocumentElement().querySelector("#apiToken")).getText();
token.set(tokenValue);
}
diff --git a/test/src/test/java/jenkins/security/LastGrantedAuthoritiesPropertyTest.java b/test/src/test/java/jenkins/security/LastGrantedAuthoritiesPropertyTest.java
index 4d29e609860f..5c1c7318c3a9 100644
--- a/test/src/test/java/jenkins/security/LastGrantedAuthoritiesPropertyTest.java
+++ b/test/src/test/java/jenkins/security/LastGrantedAuthoritiesPropertyTest.java
@@ -43,7 +43,7 @@ public void basicFlow() throws Exception {
assertAuthorities(u.impersonate2(), "alice:authenticated:development:us");
// visiting the configuration page shouldn't change authorities
- HtmlPage pg = wc.goTo("user/alice/configure");
+ HtmlPage pg = wc.goTo("user/alice/account/");
j.submit(pg.getFormByName("config"));
p = u.getProperty(LastGrantedAuthoritiesProperty.class);
diff --git a/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsRestartTest.java b/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsRestartTest.java
index ea1dec6081ae..d76d382e10c1 100644
--- a/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsRestartTest.java
+++ b/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsRestartTest.java
@@ -103,7 +103,7 @@ public void roundtripWithRestart() throws Throwable {
WebClient restWc = j.createWebClient().withBasicCredentials(u.getId(), tokenValue.get());
checkUserIsConnected(restWc, u.getId());
- HtmlPage config = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage config = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, config.getWebResponse().getStatusCode());
assertThat(config.getWebResponse().getContentAsString(), containsString(tokenUuid.get()));
assertThat(config.getWebResponse().getContentAsString(), containsString(tokenName));
@@ -113,7 +113,7 @@ public void roundtripWithRestart() throws Throwable {
restWc.goToXml("whoAmI/api/xml");
}
- HtmlPage configWithStats = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage configWithStats = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, configWithStats.getWebResponse().getStatusCode());
HtmlSpan useCounterSpan = configWithStats.getDocumentElement().getOneHtmlElementByAttribute("span", "class", "token-use-counter");
assertThat(useCounterSpan.getTextContent(), containsString("" + NUM_CALL_WITH_TOKEN));
@@ -131,7 +131,7 @@ public void roundtripWithRestart() throws Throwable {
WebClient wc = j.createWebClient().login(u.getId());
checkUserIsConnected(wc, u.getId());
- HtmlPage config = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage config = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, config.getWebResponse().getStatusCode());
assertThat(config.getWebResponse().getContentAsString(), containsString(tokenUuid.get()));
assertThat(config.getWebResponse().getContentAsString(), containsString(TOKEN_NAME));
@@ -144,7 +144,7 @@ public void roundtripWithRestart() throws Throwable {
WebClient restWc = j.createWebClient().withBasicCredentials(u.getId(), tokenValue.get());
checkUserIsNotConnected(restWc);
- HtmlPage configWithoutToken = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage configWithoutToken = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, configWithoutToken.getWebResponse().getStatusCode());
assertThat(configWithoutToken.getWebResponse().getContentAsString(), not(containsString(tokenUuid.get())));
assertThat(configWithoutToken.getWebResponse().getContentAsString(), not(containsString(TOKEN_NAME)));
diff --git a/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java b/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java
index 68185e6efac3..0eb010e77d77 100644
--- a/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java
+++ b/test/src/test/java/jenkins/security/apitoken/ApiTokenStatsTest.java
@@ -91,7 +91,7 @@ public void roundtrip() throws Exception {
WebClient restWc = j.createWebClient().withBasicCredentials(u.getId(), tokenValue);
checkUserIsConnected(restWc, u.getId());
- HtmlPage config = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage config = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, config.getWebResponse().getStatusCode());
assertThat(config.getWebResponse().getContentAsString(), containsString(tokenUuid));
assertThat(config.getWebResponse().getContentAsString(), containsString(tokenName));
@@ -102,7 +102,7 @@ public void roundtrip() throws Exception {
restWc.goToXml("whoAmI/api/xml");
}
- HtmlPage configWithStats = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage configWithStats = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, configWithStats.getWebResponse().getStatusCode());
HtmlSpan useCounterSpan = configWithStats.getDocumentElement().getOneHtmlElementByAttribute("span", "class", "token-use-counter");
assertThat(useCounterSpan.getTextContent(), containsString("" + NUM_CALL_WITH_TOKEN));
@@ -112,7 +112,7 @@ public void roundtrip() throws Exception {
// token is no more valid
checkUserIsNotConnected(restWc);
- HtmlPage configWithoutToken = wc.goTo(u.getUrl() + "/configure");
+ HtmlPage configWithoutToken = wc.goTo(u.getUrl() + "/security/");
assertEquals(200, configWithoutToken.getWebResponse().getStatusCode());
assertThat(configWithoutToken.getWebResponse().getContentAsString(), not(containsString(tokenUuid)));
assertThat(configWithoutToken.getWebResponse().getContentAsString(), not(containsString(tokenName)));
diff --git a/test/src/test/java/jenkins/security/seed/UserSeedPropertyTest.java b/test/src/test/java/jenkins/security/seed/UserSeedPropertyTest.java
index d87761ad391c..a9a3c8830a53 100644
--- a/test/src/test/java/jenkins/security/seed/UserSeedPropertyTest.java
+++ b/test/src/test/java/jenkins/security/seed/UserSeedPropertyTest.java
@@ -256,7 +256,7 @@ public void userSeedSection_isCorrectlyDisplayed() throws Exception {
User alice = User.getById(ALICE, false);
assertNotNull(alice);
- HtmlPage htmlPage = wc.goTo(alice.getUrl() + "/configure");
+ HtmlPage htmlPage = wc.goTo(alice.getUrl() + "/security/");
htmlPage.getDocumentElement().getOneHtmlElementByAttribute("div", "class", "user-seed-panel");
}
@@ -280,7 +280,7 @@ public void userSeedSection_isCorrectlyHidden_withSpecificSetting() throws Excep
User alice = User.getById(ALICE, false);
assertNotNull(alice);
- HtmlPage htmlPage = wc.goTo(alice.getUrl() + "/configure");
+ HtmlPage htmlPage = wc.goTo(alice.getUrl() + "/security/");
assertThrows("Seed section should not be displayed", ElementNotFoundException.class, () -> htmlPage.getDocumentElement().getOneHtmlElementByAttribute("div", "class", "user-seed-panel"));
}
finally {
diff --git a/war/src/main/resources/images/symbols/flask.svg b/war/src/main/resources/images/symbols/flask.svg
new file mode 100644
index 000000000000..9c4c478d820d
--- /dev/null
+++ b/war/src/main/resources/images/symbols/flask.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
From 4f532a13020e46cff36968b0aa1297d0adf0af70 Mon Sep 17 00:00:00 2001
From: Vincent Latombe
Date: Thu, 11 Jul 2024 10:00:48 +0200
Subject: [PATCH 134/179] Include redirected URL, but in FINE level to avoid
adding noise to logs.
---
.../src/main/java/hudson/model/UpdateCenter.java | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java
index e452a73123fe..f5219ac7edbc 100644
--- a/core/src/main/java/hudson/model/UpdateCenter.java
+++ b/core/src/main/java/hudson/model/UpdateCenter.java
@@ -1311,7 +1311,7 @@ public File download(DownloadJob job, URL src) throws IOException {
File dst = job.getDestination();
File tmp = new File(dst.getPath() + ".tmp");
- LOGGER.info(() -> "Downloading " + job.getName() + " from " + src);
+ LOGGER.info("Downloading " + job.getName());
Thread t = Thread.currentThread();
String oldName = t.getName();
t.setName(oldName + ": " + src);
@@ -1322,6 +1322,10 @@ public File download(DownloadJob job, URL src) throws IOException {
sha512 != null ? new DigestOutputStream(_out, sha512) : _out, sha256) : _out, sha1) : _out;
InputStream in = con.getInputStream();
CountingInputStream cin = new CountingInputStream(in)) {
+ if (LOGGER.isLoggable(Level.FINE)) {
+ var connectionUrl = con.getURL();
+ LOGGER.fine(() -> "Downloading " + job.getName() + " from " + getSourceUrl(src, connectionUrl));
+ }
while ((len = cin.read(buf)) >= 0) {
out.write(buf, 0, len);
final int count = cin.getCount();
@@ -1369,6 +1373,16 @@ public File download(DownloadJob job, URL src) throws IOException {
}
}
+ private static String getSourceUrl(@NonNull URL src, @NonNull URL connectionURL) {
+ var sourceUrlString = src.toExternalForm();
+ var finalUrlString = connectionURL.toExternalForm();
+ if (!sourceUrlString.equals(finalUrlString)) {
+ return sourceUrlString + " → " + finalUrlString;
+ } else {
+ return sourceUrlString;
+ }
+ }
+
/**
* Connects to the given URL for downloading the binary. Useful for tweaking
* how the connection gets established.
From 8ca14f8c1dce4d03d21739d0246299de6685c71d Mon Sep 17 00:00:00 2001
From: Vincent Latombe
Date: Thu, 11 Jul 2024 13:18:25 +0200
Subject: [PATCH 135/179] Refactor to cover error case
---
.../main/java/hudson/model/UpdateCenter.java | 29 +++++++++----------
1 file changed, 13 insertions(+), 16 deletions(-)
diff --git a/core/src/main/java/hudson/model/UpdateCenter.java b/core/src/main/java/hudson/model/UpdateCenter.java
index f5219ac7edbc..218cbf6b96a4 100644
--- a/core/src/main/java/hudson/model/UpdateCenter.java
+++ b/core/src/main/java/hudson/model/UpdateCenter.java
@@ -1323,8 +1323,8 @@ public File download(DownloadJob job, URL src) throws IOException {
InputStream in = con.getInputStream();
CountingInputStream cin = new CountingInputStream(in)) {
if (LOGGER.isLoggable(Level.FINE)) {
- var connectionUrl = con.getURL();
- LOGGER.fine(() -> "Downloading " + job.getName() + " from " + getSourceUrl(src, connectionUrl));
+ var sourceUrlString = getSourceUrl(src, con);
+ LOGGER.fine(() -> "Downloading " + job.getName() + " from " + sourceUrlString);
}
while ((len = cin.read(buf)) >= 0) {
out.write(buf, 0, len);
@@ -1362,25 +1362,22 @@ public File download(DownloadJob job, URL src) throws IOException {
return tmp;
} catch (IOException e) {
// assist troubleshooting in case of e.g. "too many redirects" by printing actual URL
- String extraMessage = "";
- if (con != null && con.getURL() != null && !src.toString().equals(con.getURL().toString())) {
- // Two URLs are considered equal if different hosts resolve to same IP. Prefer to log in case of string inequality,
- // because who knows how the server responds to different host name in the request header?
- // Also, since it involved name resolution, it'd be an expensive operation.
- extraMessage = " (redirected to: " + con.getURL() + ")";
- }
- throw new IOException("Failed to download from " + src + extraMessage, e);
+ throw new IOException("Failed to download from " + getSourceUrl(src, con), e);
}
}
- private static String getSourceUrl(@NonNull URL src, @NonNull URL connectionURL) {
+ private static String getSourceUrl(@NonNull URL src, @CheckForNull URLConnection connection) {
var sourceUrlString = src.toExternalForm();
- var finalUrlString = connectionURL.toExternalForm();
- if (!sourceUrlString.equals(finalUrlString)) {
- return sourceUrlString + " → " + finalUrlString;
- } else {
- return sourceUrlString;
+ if (connection != null) {
+ var connectionURL = connection.getURL();
+ if (connectionURL != null) {
+ var finalUrlString = connectionURL.toExternalForm();
+ if (!sourceUrlString.equals(finalUrlString)) {
+ return sourceUrlString + " → " + finalUrlString;
+ }
+ }
}
+ return sourceUrlString;
}
/**
From c36e1ae957d4230f3096f60022922ec03f13e31b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 12 Jul 2024 06:45:02 +0100
Subject: [PATCH 136/179] Update dependency node to v20.15.1 (#9454)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
war/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/war/pom.xml b/war/pom.xml
index 228c7c6b7351..636b3e265c69 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -47,7 +47,7 @@ THE SOFTWARE.
8080
2.13.1-117.v2f1a_b_66ff91d
- 20.15.0
+ 20.15.1
1.22.19
From 6f650a2b1a53b085d4aab9f2f4ec2cd1cd13e0ba Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 12 Jul 2024 12:15:16 -0700
Subject: [PATCH 137/179] Bump org.jenkins-ci.plugins:credentials from
1361.v56f5ca_35d21c to 1371.vfee6b_095f0a_3 (#9455)
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 763287b95706..b00467dc3f31 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -222,7 +222,7 @@ THE SOFTWARE.
org.jenkins-ci.plugins
credentials
- 1361.v56f5ca_35d21c
+ 1371.vfee6b_095f0a_3
test
From 5162cc40ff745a6d87420baa9d026fb8c699f86b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 13 Jul 2024 12:16:28 +0100
Subject: [PATCH 138/179] Update dependency sass to v1.77.7 (#9458)
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 74cd8d6954a3..d1c1469928d8 100644
--- a/war/package.json
+++ b/war/package.json
@@ -42,7 +42,7 @@
"postcss-preset-env": "9.6.0",
"postcss-scss": "4.0.9",
"prettier": "3.3.2",
- "sass": "1.77.6",
+ "sass": "1.77.7",
"sass-loader": "14.2.1",
"style-loader": "4.0.0",
"stylelint": "16.6.1",
diff --git a/war/yarn.lock b/war/yarn.lock
index 705806a75440..1df0556db44a 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -4432,7 +4432,7 @@ __metadata:
postcss-preset-env: "npm:9.6.0"
postcss-scss: "npm:4.0.9"
prettier: "npm:3.3.2"
- sass: "npm:1.77.6"
+ sass: "npm:1.77.7"
sass-loader: "npm:14.2.1"
sortablejs: "npm:1.15.2"
style-loader: "npm:4.0.0"
@@ -6390,16 +6390,16 @@ __metadata:
languageName: node
linkType: hard
-"sass@npm:1.77.6":
- version: 1.77.6
- resolution: "sass@npm:1.77.6"
+"sass@npm:1.77.7":
+ version: 1.77.7
+ resolution: "sass@npm:1.77.7"
dependencies:
chokidar: "npm:>=3.0.0 <4.0.0"
immutable: "npm:^4.0.0"
source-map-js: "npm:>=0.6.2 <2.0.0"
bin:
sass: sass.js
- checksum: 10c0/fe5a393c0aa29eda9f83c06be9b94788b61fe8bad0616ee6e3a25d21ab504f430d40c0064fdca89b02b8e426411ae6dcd906c91f2e48c263575c3d392b6daeb1
+ checksum: 10c0/6cacbf4b5165d30a9be0f09438aed85ff0617e5087442e65c23c8464750ff1b9988855a58f36b420b62f992d1e82403f99810aba7731519d3d026847e21a5635
languageName: node
linkType: hard
From c24633c303f1c2f339cdd6d29ab7c032acb79837 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Sat, 13 Jul 2024 07:41:33 -0400
Subject: [PATCH 139/179] Call out body of `main-panel` using HTML comments
(#9457)
---
core/src/main/resources/lib/layout/main-panel.jelly | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/core/src/main/resources/lib/layout/main-panel.jelly b/core/src/main/resources/lib/layout/main-panel.jelly
index 3c2206e1a47a..6b16dd6f557f 100644
--- a/core/src/main/resources/lib/layout/main-panel.jelly
+++ b/core/src/main/resources/lib/layout/main-panel.jelly
@@ -23,7 +23,7 @@ THE SOFTWARE.
-->
-
+
Generates the body as the main content part of a Jenkins page.
@@ -58,6 +58,8 @@ THE SOFTWARE.
+
start of main content ⇒
+
⇐ end of main content
From 43bfcde087a818dd06cb573662f8a9d0173d0a3b Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 13 Jul 2024 19:57:55 -0700
Subject: [PATCH 140/179] Update jenkins/ath Docker tag to v5895 (#9460)
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 36af3cea0e85..4feb60dda029 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=5883.vdea_99c1762a_d
+export ATH_VERSION=5895.v44475b_ca_0c78
if [[ $# -eq 0 ]]; then
export JDK=17
From ca47dd45f669ddb12b03266299df0473894fd203 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 14 Jul 2024 15:36:02 -0700
Subject: [PATCH 141/179] Update dependency webpack to v5.93.0 (#9468)
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 d1c1469928d8..c0120beeeca4 100644
--- a/war/package.json
+++ b/war/package.json
@@ -48,7 +48,7 @@
"stylelint": "16.6.1",
"stylelint-checkstyle-reporter": "1.0.0",
"stylelint-config-standard": "36.0.1",
- "webpack": "5.92.1",
+ "webpack": "5.93.0",
"webpack-cli": "5.1.4",
"webpack-remove-empty-scripts": "1.0.4"
},
diff --git a/war/yarn.lock b/war/yarn.lock
index 1df0556db44a..02210da4fb91 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -4440,7 +4440,7 @@ __metadata:
stylelint-checkstyle-reporter: "npm:1.0.0"
stylelint-config-standard: "npm:36.0.1"
tippy.js: "npm:6.3.7"
- webpack: "npm:5.92.1"
+ webpack: "npm:5.93.0"
webpack-cli: "npm:5.1.4"
webpack-remove-empty-scripts: "npm:1.0.4"
window-handle: "npm:1.0.1"
@@ -7090,9 +7090,9 @@ __metadata:
languageName: node
linkType: hard
-"webpack@npm:5.92.1":
- version: 5.92.1
- resolution: "webpack@npm:5.92.1"
+"webpack@npm:5.93.0":
+ version: 5.93.0
+ resolution: "webpack@npm:5.93.0"
dependencies:
"@types/eslint-scope": "npm:^3.7.3"
"@types/estree": "npm:^1.0.5"
@@ -7123,7 +7123,7 @@ __metadata:
optional: true
bin:
webpack: bin/webpack.js
- checksum: 10c0/43ca7c76b9c1005bd85f05303d048f918bac10276a209e3ef5e359353fbfef4e5fcee876265e6bc305bf5ef326576e02df63bc7e5af878fb7f06d7e1795b811a
+ checksum: 10c0/f0c72f1325ff57a4cc461bb978e6e1296f2a7d45c9765965271aa686ccdd448512956f4d7fdcf8c164d073af046c5a0aba17ce85ea98e33e5e2bfbfe13aa5808
languageName: node
linkType: hard
From 18fc78120796c9b4937f3d56877b0fc4dec9f4d5 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 14 Jul 2024 15:36:28 -0700
Subject: [PATCH 142/179] Update dependency sass to v1.77.8 (#9467)
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 c0120beeeca4..160bf0d3d554 100644
--- a/war/package.json
+++ b/war/package.json
@@ -42,7 +42,7 @@
"postcss-preset-env": "9.6.0",
"postcss-scss": "4.0.9",
"prettier": "3.3.2",
- "sass": "1.77.7",
+ "sass": "1.77.8",
"sass-loader": "14.2.1",
"style-loader": "4.0.0",
"stylelint": "16.6.1",
diff --git a/war/yarn.lock b/war/yarn.lock
index 02210da4fb91..3442511ce2c9 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -4432,7 +4432,7 @@ __metadata:
postcss-preset-env: "npm:9.6.0"
postcss-scss: "npm:4.0.9"
prettier: "npm:3.3.2"
- sass: "npm:1.77.7"
+ sass: "npm:1.77.8"
sass-loader: "npm:14.2.1"
sortablejs: "npm:1.15.2"
style-loader: "npm:4.0.0"
@@ -6390,16 +6390,16 @@ __metadata:
languageName: node
linkType: hard
-"sass@npm:1.77.7":
- version: 1.77.7
- resolution: "sass@npm:1.77.7"
+"sass@npm:1.77.8":
+ version: 1.77.8
+ resolution: "sass@npm:1.77.8"
dependencies:
chokidar: "npm:>=3.0.0 <4.0.0"
immutable: "npm:^4.0.0"
source-map-js: "npm:>=0.6.2 <2.0.0"
bin:
sass: sass.js
- checksum: 10c0/6cacbf4b5165d30a9be0f09438aed85ff0617e5087442e65c23c8464750ff1b9988855a58f36b420b62f992d1e82403f99810aba7731519d3d026847e21a5635
+ checksum: 10c0/2bfd62794070352c804f949e69bd8bb5b4ec846deeb924251b2c3f7b503170fb1ae186f513f0166907749eb34e0277dee747edcb78c886fb471aac01be1e864c
languageName: node
linkType: hard
From a4a31a18a131b88ce646607cc2b5203658fe6d5c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 14 Jul 2024 15:36:46 -0700
Subject: [PATCH 143/179] Update babel monorepo to v7.24.8 (#9466)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
war/package.json | 6 +-
war/yarn.lock | 234 +++++++++++++++++++++++------------------------
2 files changed, 120 insertions(+), 120 deletions(-)
diff --git a/war/package.json b/war/package.json
index 160bf0d3d554..3a2a40e8fd6c 100644
--- a/war/package.json
+++ b/war/package.json
@@ -23,9 +23,9 @@
"lint": "yarn lint:js && yarn lint:css"
},
"devDependencies": {
- "@babel/cli": "7.24.7",
- "@babel/core": "7.24.7",
- "@babel/preset-env": "7.24.7",
+ "@babel/cli": "7.24.8",
+ "@babel/core": "7.24.8",
+ "@babel/preset-env": "7.24.8",
"@eslint/js": "9.6.0",
"babel-loader": "9.1.3",
"clean-webpack-plugin": "4.0.0",
diff --git a/war/yarn.lock b/war/yarn.lock
index 3442511ce2c9..70efc55f2347 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -22,9 +22,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/cli@npm:7.24.7":
- version: 7.24.7
- resolution: "@babel/cli@npm:7.24.7"
+"@babel/cli@npm:7.24.8":
+ version: 7.24.8
+ resolution: "@babel/cli@npm:7.24.8"
dependencies:
"@jridgewell/trace-mapping": "npm:^0.3.25"
"@nicolo-ribaudo/chokidar-2": "npm:2.1.8-no-fsevents.3"
@@ -45,7 +45,7 @@ __metadata:
bin:
babel: ./bin/babel.js
babel-external-helpers: ./bin/babel-external-helpers.js
- checksum: 10c0/0d29ffa7c817c70cf39243567a17e9e60b1f9632632f2a0f3aef061e28c228146fd98d262e09173f34e963dc7e8c29fb3e535243ffed641980691a0e4386b189
+ checksum: 10c0/b7f464ccb00db60aed63d71e980df823900d20c740bc2d9eb36c3abd4b3e2402cc438818382344085ef6603aeea2e6ee19af8f0ecb934966eccf077b87af7c7c
languageName: node
linkType: hard
@@ -59,45 +59,45 @@ __metadata:
languageName: node
linkType: hard
-"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/compat-data@npm:7.24.7"
- checksum: 10c0/dcd93a5632b04536498fbe2be5af1057f635fd7f7090483d8e797878559037e5130b26862ceb359acbae93ed27e076d395ddb4663db6b28a665756ffd02d324f
+"@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/compat-data@npm:7.24.8"
+ checksum: 10c0/7f465e9d8e44c5b516eeb3001362a3cd9a6df51dd90d3ac9868e1e7fa631ac57fc781cec6700110d4f555ba37fe59c4a71927b445106fe0062e79e79ffe11091
languageName: node
linkType: hard
-"@babel/core@npm:7.24.7":
- version: 7.24.7
- resolution: "@babel/core@npm:7.24.7"
+"@babel/core@npm:7.24.8":
+ version: 7.24.8
+ resolution: "@babel/core@npm:7.24.8"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.24.7"
- "@babel/generator": "npm:^7.24.7"
- "@babel/helper-compilation-targets": "npm:^7.24.7"
- "@babel/helper-module-transforms": "npm:^7.24.7"
- "@babel/helpers": "npm:^7.24.7"
- "@babel/parser": "npm:^7.24.7"
+ "@babel/generator": "npm:^7.24.8"
+ "@babel/helper-compilation-targets": "npm:^7.24.8"
+ "@babel/helper-module-transforms": "npm:^7.24.8"
+ "@babel/helpers": "npm:^7.24.8"
+ "@babel/parser": "npm:^7.24.8"
"@babel/template": "npm:^7.24.7"
- "@babel/traverse": "npm:^7.24.7"
- "@babel/types": "npm:^7.24.7"
+ "@babel/traverse": "npm:^7.24.8"
+ "@babel/types": "npm:^7.24.8"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
- checksum: 10c0/4004ba454d3c20a46ea66264e06c15b82e9f6bdc35f88819907d24620da70dbf896abac1cb4cc4b6bb8642969e45f4d808497c9054a1388a386cf8c12e9b9e0d
+ checksum: 10c0/5e21b40cc69746deda3fe3d6540351d9cb0d1ad5aea055b7c319db26071ff5789fd9580d1aa47b114f07631e8e2109f4e71696ca11d7c7e60d157767022c1bd2
languageName: node
linkType: hard
-"@babel/generator@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/generator@npm:7.24.7"
+"@babel/generator@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/generator@npm:7.24.8"
dependencies:
- "@babel/types": "npm:^7.24.7"
+ "@babel/types": "npm:^7.24.8"
"@jridgewell/gen-mapping": "npm:^0.3.5"
"@jridgewell/trace-mapping": "npm:^0.3.25"
jsesc: "npm:^2.5.1"
- checksum: 10c0/06b1f3350baf527a3309e50ffd7065f7aee04dd06e1e7db794ddfde7fe9d81f28df64edd587173f8f9295496a7ddb74b9a185d4bf4de7bb619e6d4ec45c8fd35
+ checksum: 10c0/e8a278e75a895f13a7b17dd79abe1e894fe82a5ed3abb127c33c14c66773d69993762521c094c6c364723f8f7375683b0d4a96097781175a29407baedf67b769
languageName: node
linkType: hard
@@ -120,16 +120,16 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/helper-compilation-targets@npm:7.24.7"
+"@babel/helper-compilation-targets@npm:^7.22.6, @babel/helper-compilation-targets@npm:^7.24.7, @babel/helper-compilation-targets@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-compilation-targets@npm:7.24.8"
dependencies:
- "@babel/compat-data": "npm:^7.24.7"
- "@babel/helper-validator-option": "npm:^7.24.7"
- browserslist: "npm:^4.22.2"
+ "@babel/compat-data": "npm:^7.24.8"
+ "@babel/helper-validator-option": "npm:^7.24.8"
+ browserslist: "npm:^4.23.1"
lru-cache: "npm:^5.1.1"
semver: "npm:^6.3.1"
- checksum: 10c0/1d580a9bcacefe65e6bf02ba1dafd7ab278269fef45b5e281d8354d95c53031e019890464e7f9351898c01502dd2e633184eb0bcda49ed2ecd538675ce310f51
+ checksum: 10c0/2885c44ef6aaf82b7e4352b30089bb09fbe08ed5ec24eb452c2bdc3c021e2a65ab412f74b3d67ec1398da0356c730b33a2ceca1d67d34c85080d31ca6efa9aec
languageName: node
linkType: hard
@@ -228,9 +228,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/helper-module-transforms@npm:7.24.7"
+"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-module-transforms@npm:7.24.8"
dependencies:
"@babel/helper-environment-visitor": "npm:^7.24.7"
"@babel/helper-module-imports": "npm:^7.24.7"
@@ -239,7 +239,7 @@ __metadata:
"@babel/helper-validator-identifier": "npm:^7.24.7"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10c0/4f311755fcc3b4cbdb689386309cdb349cf0575a938f0b9ab5d678e1a81bbb265aa34ad93174838245f2ac7ff6d5ddbd0104638a75e4e961958ed514355687b6
+ checksum: 10c0/b76496d5045af55be9de60e59e65e56a43033f01ccc746b26b7af911c358668c206b688ce70a23ab31ec04f9728f3a38e8d01073c85244115ab62f271a7fa3d1
languageName: node
linkType: hard
@@ -252,10 +252,10 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
- version: 7.24.7
- resolution: "@babel/helper-plugin-utils@npm:7.24.7"
- checksum: 10c0/c3d38cd9b3520757bb4a279255cc3f956fc0ac1c193964bd0816ebd5c86e30710be8e35252227e0c9d9e0f4f56d9b5f916537f2bc588084b0988b4787a967d31
+"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.7, @babel/helper-plugin-utils@npm:^7.24.8, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3":
+ version: 7.24.8
+ resolution: "@babel/helper-plugin-utils@npm:7.24.8"
+ checksum: 10c0/0376037f94a3bfe6b820a39f81220ac04f243eaee7193774b983e956c1750883ff236b30785795abbcda43fac3ece74750566830c2daa4d6e3870bb0dff34c2d
languageName: node
linkType: hard
@@ -314,10 +314,10 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-string-parser@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/helper-string-parser@npm:7.24.7"
- checksum: 10c0/47840c7004e735f3dc93939c77b099bb41a64bf3dda0cae62f60e6f74a5ff80b63e9b7cf77b5ec25a324516381fc994e1f62f922533236a8e3a6af57decb5e1e
+"@babel/helper-string-parser@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-string-parser@npm:7.24.8"
+ checksum: 10c0/6361f72076c17fabf305e252bf6d580106429014b3ab3c1f5c4eb3e6d465536ea6b670cc0e9a637a77a9ad40454d3e41361a2909e70e305116a23d68ce094c08
languageName: node
linkType: hard
@@ -328,10 +328,10 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-validator-option@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/helper-validator-option@npm:7.24.7"
- checksum: 10c0/21aea2b7bc5cc8ddfb828741d5c8116a84cbc35b4a3184ec53124f08e09746f1f67a6f9217850188995ca86059a7942e36d8965a6730784901def777b7e8a436
+"@babel/helper-validator-option@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helper-validator-option@npm:7.24.8"
+ checksum: 10c0/73db93a34ae89201351288bee7623eed81a54000779462a986105b54ffe82069e764afd15171a428b82e7c7a9b5fec10b5d5603b216317a414062edf5c67a21f
languageName: node
linkType: hard
@@ -347,13 +347,13 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helpers@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/helpers@npm:7.24.7"
+"@babel/helpers@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/helpers@npm:7.24.8"
dependencies:
"@babel/template": "npm:^7.24.7"
- "@babel/types": "npm:^7.24.7"
- checksum: 10c0/aa8e230f6668773e17e141dbcab63e935c514b4b0bf1fed04d2eaefda17df68e16b61a56573f7f1d4d1e605ce6cc162b5f7e9fdf159fde1fd9b77c920ae47d27
+ "@babel/types": "npm:^7.24.8"
+ checksum: 10c0/42b8939b0a0bf72d6df9721973eb0fd7cd48f42641c5c9c740916397faa586255c06d36c6e6a7e091860723096281c620f6ffaee0011a3bb254a6f5475d89a12
languageName: node
linkType: hard
@@ -369,12 +369,12 @@ __metadata:
languageName: node
linkType: hard
-"@babel/parser@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/parser@npm:7.24.7"
+"@babel/parser@npm:^7.24.7, @babel/parser@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/parser@npm:7.24.8"
bin:
parser: ./bin/babel-parser.js
- checksum: 10c0/8b244756872185a1c6f14b979b3535e682ff08cb5a2a5fd97cc36c017c7ef431ba76439e95e419d43000c5b07720495b00cf29a7f0d9a483643d08802b58819b
+ checksum: 10c0/ce69671de8fa6f649abf849be262707ac700b573b8b1ce1893c66cc6cd76aeb1294a19e8c290b0eadeb2f47d3f413a2e57a281804ffbe76bfb9fa50194cf3c52
languageName: node
linkType: hard
@@ -719,21 +719,21 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-classes@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/plugin-transform-classes@npm:7.24.7"
+"@babel/plugin-transform-classes@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-classes@npm:7.24.8"
dependencies:
"@babel/helper-annotate-as-pure": "npm:^7.24.7"
- "@babel/helper-compilation-targets": "npm:^7.24.7"
+ "@babel/helper-compilation-targets": "npm:^7.24.8"
"@babel/helper-environment-visitor": "npm:^7.24.7"
"@babel/helper-function-name": "npm:^7.24.7"
- "@babel/helper-plugin-utils": "npm:^7.24.7"
+ "@babel/helper-plugin-utils": "npm:^7.24.8"
"@babel/helper-replace-supers": "npm:^7.24.7"
"@babel/helper-split-export-declaration": "npm:^7.24.7"
globals: "npm:^11.1.0"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10c0/e51dba7ce8b770d1eee929e098d5a3be3efc3e8b941e22dda7d0097dc4e7be5feabd2da7b707ac06fcac5661b31223c541941dec08ce76c1faa55544d87d06ec
+ checksum: 10c0/4423da0f747bdb6aab1995d98a74533fa679f637ec20706810dd57fb4ba2b1885ec8cae6a0b2c3f69f27165de6ff6aa2da9c4061c893848736a8267d0c653079
languageName: node
linkType: hard
@@ -749,14 +749,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-destructuring@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/plugin-transform-destructuring@npm:7.24.7"
+"@babel/plugin-transform-destructuring@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-destructuring@npm:7.24.8"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.24.7"
+ "@babel/helper-plugin-utils": "npm:^7.24.8"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10c0/929f07a807fb62230bfbf881cfcedf187ac5daf2f1b01da94a75c7a0f6f72400268cf4bcfee534479e43260af8193e42c31ee03c8b0278ba77d0036ed6709c27
+ checksum: 10c0/804968c1d5f5072c717505296c1e5d5ec33e90550423de66de82bbcb78157156e8470bbe77a04ab8c710a88a06360a30103cf223ac7eff4829adedd6150de5ce
languageName: node
linkType: hard
@@ -902,16 +902,16 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-modules-commonjs@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.7"
+"@babel/plugin-transform-modules-commonjs@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.8"
dependencies:
- "@babel/helper-module-transforms": "npm:^7.24.7"
- "@babel/helper-plugin-utils": "npm:^7.24.7"
+ "@babel/helper-module-transforms": "npm:^7.24.8"
+ "@babel/helper-plugin-utils": "npm:^7.24.8"
"@babel/helper-simple-access": "npm:^7.24.7"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10c0/9442292b3daf6a5076cdc3c4c32bf423bda824ccaeb0dd0dc8b3effaa1fecfcb0130ae6e647fef12a5d5ff25bcc99a0d6bfc6d24a7525345e1bcf46fcdf81752
+ checksum: 10c0/f1cf552307ebfced20d3907c1dd8be941b277f0364aa655e2b5fee828c84c54065745183104dae86f1f93ea0406db970a463ef7ceaaed897623748e99640e5a7
languageName: node
linkType: hard
@@ -1026,16 +1026,16 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-optional-chaining@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.7"
+"@babel/plugin-transform-optional-chaining@npm:^7.24.7, @babel/plugin-transform-optional-chaining@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.8"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.24.7"
+ "@babel/helper-plugin-utils": "npm:^7.24.8"
"@babel/helper-skip-transparent-expression-wrappers": "npm:^7.24.7"
"@babel/plugin-syntax-optional-chaining": "npm:^7.8.3"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10c0/b9e3649b299e103b0d1767bbdba56574d065ff776e5350403b7bfd4e3982743c0cdb373d33bdbf94fa3c322d155e45d0aad946acf0aa741b870aed22dfec8b8e
+ checksum: 10c0/4ffbe1aad7dec7c9aa2bf6ceb4b2f91f96815b2784f2879bde80e46934f59d64a12cb2c6262e40897c4754d77d2c35d8a5cfed63044fdebf94978b1ed3d14b17
languageName: node
linkType: hard
@@ -1155,14 +1155,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/plugin-transform-typeof-symbol@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.7"
+"@babel/plugin-transform-typeof-symbol@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/plugin-transform-typeof-symbol@npm:7.24.8"
dependencies:
- "@babel/helper-plugin-utils": "npm:^7.24.7"
+ "@babel/helper-plugin-utils": "npm:^7.24.8"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10c0/5649e7260a138681e68b296ab5931e2b1f132f287d6b4131d49b24f9dc20d62902b7e9d63c4d2decd5683b41df35ef4b9b03f58c7f9f65e4c25a6d8bbf04e9e9
+ checksum: 10c0/2f570a4fbbdc5fd85f48165a97452826560051e3b8efb48c3bb0a0a33ee8485633439e7b71bfe3ef705583a1df43f854f49125bd759abdedc195b2cf7e60012a
languageName: node
linkType: hard
@@ -1213,14 +1213,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/preset-env@npm:7.24.7":
- version: 7.24.7
- resolution: "@babel/preset-env@npm:7.24.7"
+"@babel/preset-env@npm:7.24.8":
+ version: 7.24.8
+ resolution: "@babel/preset-env@npm:7.24.8"
dependencies:
- "@babel/compat-data": "npm:^7.24.7"
- "@babel/helper-compilation-targets": "npm:^7.24.7"
- "@babel/helper-plugin-utils": "npm:^7.24.7"
- "@babel/helper-validator-option": "npm:^7.24.7"
+ "@babel/compat-data": "npm:^7.24.8"
+ "@babel/helper-compilation-targets": "npm:^7.24.8"
+ "@babel/helper-plugin-utils": "npm:^7.24.8"
+ "@babel/helper-validator-option": "npm:^7.24.8"
"@babel/plugin-bugfix-firefox-class-in-computed-class-key": "npm:^7.24.7"
"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "npm:^7.24.7"
"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "npm:^7.24.7"
@@ -1251,9 +1251,9 @@ __metadata:
"@babel/plugin-transform-block-scoping": "npm:^7.24.7"
"@babel/plugin-transform-class-properties": "npm:^7.24.7"
"@babel/plugin-transform-class-static-block": "npm:^7.24.7"
- "@babel/plugin-transform-classes": "npm:^7.24.7"
+ "@babel/plugin-transform-classes": "npm:^7.24.8"
"@babel/plugin-transform-computed-properties": "npm:^7.24.7"
- "@babel/plugin-transform-destructuring": "npm:^7.24.7"
+ "@babel/plugin-transform-destructuring": "npm:^7.24.8"
"@babel/plugin-transform-dotall-regex": "npm:^7.24.7"
"@babel/plugin-transform-duplicate-keys": "npm:^7.24.7"
"@babel/plugin-transform-dynamic-import": "npm:^7.24.7"
@@ -1266,7 +1266,7 @@ __metadata:
"@babel/plugin-transform-logical-assignment-operators": "npm:^7.24.7"
"@babel/plugin-transform-member-expression-literals": "npm:^7.24.7"
"@babel/plugin-transform-modules-amd": "npm:^7.24.7"
- "@babel/plugin-transform-modules-commonjs": "npm:^7.24.7"
+ "@babel/plugin-transform-modules-commonjs": "npm:^7.24.8"
"@babel/plugin-transform-modules-systemjs": "npm:^7.24.7"
"@babel/plugin-transform-modules-umd": "npm:^7.24.7"
"@babel/plugin-transform-named-capturing-groups-regex": "npm:^7.24.7"
@@ -1276,7 +1276,7 @@ __metadata:
"@babel/plugin-transform-object-rest-spread": "npm:^7.24.7"
"@babel/plugin-transform-object-super": "npm:^7.24.7"
"@babel/plugin-transform-optional-catch-binding": "npm:^7.24.7"
- "@babel/plugin-transform-optional-chaining": "npm:^7.24.7"
+ "@babel/plugin-transform-optional-chaining": "npm:^7.24.8"
"@babel/plugin-transform-parameters": "npm:^7.24.7"
"@babel/plugin-transform-private-methods": "npm:^7.24.7"
"@babel/plugin-transform-private-property-in-object": "npm:^7.24.7"
@@ -1287,7 +1287,7 @@ __metadata:
"@babel/plugin-transform-spread": "npm:^7.24.7"
"@babel/plugin-transform-sticky-regex": "npm:^7.24.7"
"@babel/plugin-transform-template-literals": "npm:^7.24.7"
- "@babel/plugin-transform-typeof-symbol": "npm:^7.24.7"
+ "@babel/plugin-transform-typeof-symbol": "npm:^7.24.8"
"@babel/plugin-transform-unicode-escapes": "npm:^7.24.7"
"@babel/plugin-transform-unicode-property-regex": "npm:^7.24.7"
"@babel/plugin-transform-unicode-regex": "npm:^7.24.7"
@@ -1296,11 +1296,11 @@ __metadata:
babel-plugin-polyfill-corejs2: "npm:^0.4.10"
babel-plugin-polyfill-corejs3: "npm:^0.10.4"
babel-plugin-polyfill-regenerator: "npm:^0.6.1"
- core-js-compat: "npm:^3.31.0"
+ core-js-compat: "npm:^3.37.1"
semver: "npm:^6.3.1"
peerDependencies:
"@babel/core": ^7.0.0-0
- checksum: 10c0/c6714346f3ccc1271eaa90051c75b8bb57b20ef57408ab68740e2f3552693ae0ee5a4bcce3a00211d40e4947af1f7b8ab422066b953f0095461937fb72d11274
+ checksum: 10c0/a6f29498ec58989845a61f9c10b1b4e80586f1810a33db461d597cdb0ad2cd847381a993038b09f727512a08b2c1a33a330a5d4e6d65463ee98a1b4302d52ec6
languageName: node
linkType: hard
@@ -1344,32 +1344,32 @@ __metadata:
languageName: node
linkType: hard
-"@babel/traverse@npm:^7.24.7":
- version: 7.24.7
- resolution: "@babel/traverse@npm:7.24.7"
+"@babel/traverse@npm:^7.24.7, @babel/traverse@npm:^7.24.8":
+ version: 7.24.8
+ resolution: "@babel/traverse@npm:7.24.8"
dependencies:
"@babel/code-frame": "npm:^7.24.7"
- "@babel/generator": "npm:^7.24.7"
+ "@babel/generator": "npm:^7.24.8"
"@babel/helper-environment-visitor": "npm:^7.24.7"
"@babel/helper-function-name": "npm:^7.24.7"
"@babel/helper-hoist-variables": "npm:^7.24.7"
"@babel/helper-split-export-declaration": "npm:^7.24.7"
- "@babel/parser": "npm:^7.24.7"
- "@babel/types": "npm:^7.24.7"
+ "@babel/parser": "npm:^7.24.8"
+ "@babel/types": "npm:^7.24.8"
debug: "npm:^4.3.1"
globals: "npm:^11.1.0"
- checksum: 10c0/a5135e589c3f1972b8877805f50a084a04865ccb1d68e5e1f3b94a8841b3485da4142e33413d8fd76bc0e6444531d3adf1f59f359c11ffac452b743d835068ab
+ checksum: 10c0/67a5cc35824455cdb54fb9e196a44b3186283e29018a9c2331f51763921e18e891b3c60c283615a27540ec8eb4c8b89f41c237b91f732a7aa518b2eb7a0d434d
languageName: node
linkType: hard
-"@babel/types@npm:^7.24.7, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
- version: 7.24.7
- resolution: "@babel/types@npm:7.24.7"
+"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
+ version: 7.24.8
+ resolution: "@babel/types@npm:7.24.8"
dependencies:
- "@babel/helper-string-parser": "npm:^7.24.7"
+ "@babel/helper-string-parser": "npm:^7.24.8"
"@babel/helper-validator-identifier": "npm:^7.24.7"
to-fast-properties: "npm:^2.0.0"
- checksum: 10c0/d9ecbfc3eb2b05fb1e6eeea546836ac30d990f395ef3fe3f75ced777a222c3cfc4489492f72e0ce3d9a5a28860a1ce5f81e66b88cf5088909068b3ff4fab72c1
+ checksum: 10c0/2d7bf561ae993e794cb052c5a81d3a6d1877da13e1e2eb2a59ae75a8fb1c965b618fb3e4abd42548f5f9a4587d3a149185a32d6c4c4ea82195da7dd86f2da0f1
languageName: node
linkType: hard
@@ -2784,7 +2784,7 @@ __metadata:
languageName: node
linkType: hard
-"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.22.2, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1":
+"browserslist@npm:^4.0.0, browserslist@npm:^4.21.10, browserslist@npm:^4.23.0, browserslist@npm:^4.23.1":
version: 4.23.1
resolution: "browserslist@npm:4.23.1"
dependencies:
@@ -3036,12 +3036,12 @@ __metadata:
languageName: node
linkType: hard
-"core-js-compat@npm:^3.31.0, core-js-compat@npm:^3.36.1":
- version: 3.36.1
- resolution: "core-js-compat@npm:3.36.1"
+"core-js-compat@npm:^3.36.1, core-js-compat@npm:^3.37.1":
+ version: 3.37.1
+ resolution: "core-js-compat@npm:3.37.1"
dependencies:
browserslist: "npm:^4.23.0"
- checksum: 10c0/70fba18a4095cd8ac04e5ba8cee251e328935859cf2851c1f67770068ea9f9fe71accb1b7de17cd3c9a28d304a4c41712bd9aa895110ebb6e3be71b666b029d1
+ checksum: 10c0/4e2da9c900f2951a57947af7aeef4d16f2c75d7f7e966c0d0b62953f65225003ade5e84d3ae98847f65b24c109c606821d9dc925db8ca418fb761e7c81963c2a
languageName: node
linkType: hard
@@ -4409,9 +4409,9 @@ __metadata:
version: 0.0.0-use.local
resolution: "jenkins-ui@workspace:."
dependencies:
- "@babel/cli": "npm:7.24.7"
- "@babel/core": "npm:7.24.7"
- "@babel/preset-env": "npm:7.24.7"
+ "@babel/cli": "npm:7.24.8"
+ "@babel/core": "npm:7.24.8"
+ "@babel/preset-env": "npm:7.24.8"
"@eslint/js": "npm:9.6.0"
babel-loader: "npm:9.1.3"
clean-webpack-plugin: "npm:4.0.0"
From 4bf964ee69d0f5903ba8e7110a93215d7549ac6b Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Sun, 14 Jul 2024 15:37:08 -0700
Subject: [PATCH 144/179] Bump org.jenkins-ci:jenkins from 1.118 to 1.119
(#9469)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 858fffab01bb..aca537f6d625 100644
--- a/pom.xml
+++ b/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci
jenkins
- 1.118
+ 1.119
From 678f1abebe70670592393f9fa1b3b48041e0868c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 15 Jul 2024 14:21:24 +0100
Subject: [PATCH 145/179] Update dependency stylelint to v16.7.0 (#9470)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
war/package.json | 2 +-
war/yarn.lock | 46 +++++++++++++++++++++++-----------------------
2 files changed, 24 insertions(+), 24 deletions(-)
diff --git a/war/package.json b/war/package.json
index 3a2a40e8fd6c..03c7424e0d4f 100644
--- a/war/package.json
+++ b/war/package.json
@@ -45,7 +45,7 @@
"sass": "1.77.8",
"sass-loader": "14.2.1",
"style-loader": "4.0.0",
- "stylelint": "16.6.1",
+ "stylelint": "16.7.0",
"stylelint-checkstyle-reporter": "1.0.0",
"stylelint-config-standard": "36.0.1",
"webpack": "5.93.0",
diff --git a/war/yarn.lock b/war/yarn.lock
index 70efc55f2347..0702d9aaf22e 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -1413,7 +1413,7 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/css-parser-algorithms@npm:^2.6.3, @csstools/css-parser-algorithms@npm:^2.7.1":
+"@csstools/css-parser-algorithms@npm:^2.7.1":
version: 2.7.1
resolution: "@csstools/css-parser-algorithms@npm:2.7.1"
peerDependencies:
@@ -1422,14 +1422,14 @@ __metadata:
languageName: node
linkType: hard
-"@csstools/css-tokenizer@npm:^2.3.1, @csstools/css-tokenizer@npm:^2.4.1":
+"@csstools/css-tokenizer@npm:^2.4.1":
version: 2.4.1
resolution: "@csstools/css-tokenizer@npm:2.4.1"
checksum: 10c0/fe71cee85ec7372da07083d088b6a704f43e5d3d2d8071c4b8a86fae60408b559a218a43f8625bf2f0be5c7f90c8f3ad20a1aae1921119a1c02b51c310cc2b6b
languageName: node
linkType: hard
-"@csstools/media-query-list-parser@npm:^2.1.11, @csstools/media-query-list-parser@npm:^2.1.13":
+"@csstools/media-query-list-parser@npm:^2.1.13":
version: 2.1.13
resolution: "@csstools/media-query-list-parser@npm:2.1.13"
peerDependencies:
@@ -3301,15 +3301,15 @@ __metadata:
languageName: node
linkType: hard
-"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4":
- version: 4.3.4
- resolution: "debug@npm:4.3.4"
+"debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5":
+ version: 4.3.5
+ resolution: "debug@npm:4.3.5"
dependencies:
ms: "npm:2.1.2"
peerDependenciesMeta:
supports-color:
optional: true
- checksum: 10c0/cedbec45298dd5c501d01b92b119cd3faebe5438c3917ff11ae1bff86a6c722930ac9c8659792824013168ba6db7c4668225d845c633fbdafbbf902a6389f736
+ checksum: 10c0/082c375a2bdc4f4469c99f325ff458adad62a3fc2c482d59923c260cb08152f34e2659f72b3767db8bb2f21ca81a60a42d1019605a412132d7b9f59363a005cc
languageName: node
linkType: hard
@@ -4436,7 +4436,7 @@ __metadata:
sass-loader: "npm:14.2.1"
sortablejs: "npm:1.15.2"
style-loader: "npm:4.0.0"
- stylelint: "npm:16.6.1"
+ stylelint: "npm:16.7.0"
stylelint-checkstyle-reporter: "npm:1.0.0"
stylelint-config-standard: "npm:36.0.1"
tippy.js: "npm:6.3.7"
@@ -4619,10 +4619,10 @@ __metadata:
languageName: node
linkType: hard
-"known-css-properties@npm:^0.31.0":
- version: 0.31.0
- resolution: "known-css-properties@npm:0.31.0"
- checksum: 10c0/8e643cbed32d7733278ba215c43dfc38fc7e77d391f66b81f07228af97d69ce2cebba03a9bc1ac859479e162aea812e258b30f4c93cb7b7adfd0622a141d36da
+"known-css-properties@npm:^0.34.0":
+ version: 0.34.0
+ resolution: "known-css-properties@npm:0.34.0"
+ checksum: 10c0/8549969f02b1858554e89faf4548ece37625d0d21b42e8d54fa53184e68e1512ef2531bb15941575ad816361ab7447b598c1b18c1b96ce0a868333d1a68f2e2c
languageName: node
linkType: hard
@@ -6107,7 +6107,7 @@ __metadata:
languageName: node
linkType: hard
-"postcss@npm:8.4.39, postcss@npm:^8.4.33, postcss@npm:^8.4.38":
+"postcss@npm:8.4.39, postcss@npm:^8.4.33, postcss@npm:^8.4.38, postcss@npm:^8.4.39":
version: 8.4.39
resolution: "postcss@npm:8.4.39"
dependencies:
@@ -6696,13 +6696,13 @@ __metadata:
languageName: node
linkType: hard
-"stylelint@npm:16.6.1":
- version: 16.6.1
- resolution: "stylelint@npm:16.6.1"
+"stylelint@npm:16.7.0":
+ version: 16.7.0
+ resolution: "stylelint@npm:16.7.0"
dependencies:
- "@csstools/css-parser-algorithms": "npm:^2.6.3"
- "@csstools/css-tokenizer": "npm:^2.3.1"
- "@csstools/media-query-list-parser": "npm:^2.1.11"
+ "@csstools/css-parser-algorithms": "npm:^2.7.1"
+ "@csstools/css-tokenizer": "npm:^2.4.1"
+ "@csstools/media-query-list-parser": "npm:^2.1.13"
"@csstools/selector-specificity": "npm:^3.1.1"
"@dual-bundle/import-meta-resolve": "npm:^4.1.0"
balanced-match: "npm:^2.0.0"
@@ -6710,7 +6710,7 @@ __metadata:
cosmiconfig: "npm:^9.0.0"
css-functions-list: "npm:^3.2.2"
css-tree: "npm:^2.3.1"
- debug: "npm:^4.3.4"
+ debug: "npm:^4.3.5"
fast-glob: "npm:^3.3.2"
fastest-levenshtein: "npm:^1.0.16"
file-entry-cache: "npm:^9.0.0"
@@ -6721,13 +6721,13 @@ __metadata:
ignore: "npm:^5.3.1"
imurmurhash: "npm:^0.1.4"
is-plain-object: "npm:^5.0.0"
- known-css-properties: "npm:^0.31.0"
+ known-css-properties: "npm:^0.34.0"
mathml-tag-names: "npm:^2.1.3"
meow: "npm:^13.2.0"
micromatch: "npm:^4.0.7"
normalize-path: "npm:^3.0.0"
picocolors: "npm:^1.0.1"
- postcss: "npm:^8.4.38"
+ postcss: "npm:^8.4.39"
postcss-resolve-nested-selector: "npm:^0.1.1"
postcss-safe-parser: "npm:^7.0.0"
postcss-selector-parser: "npm:^6.1.0"
@@ -6741,7 +6741,7 @@ __metadata:
write-file-atomic: "npm:^5.0.1"
bin:
stylelint: bin/stylelint.mjs
- checksum: 10c0/8dc9b0024d6fb109380a142171ab8a134c3863aa8b8736f0083310a0d05f173dcda5680f29267697dfa0aaeb2f08aef4ef113e4bb4f8582fcfdd97f35be51d71
+ checksum: 10c0/98cb36037684433d991a0c507bbf8155309e96470177487f493e66de098631e5303b235470fc5c8086cd98013385b669c4e3cb68ad01421b898e1da6848e5d78
languageName: node
linkType: hard
From 9526f917946a77c10e0a8b49810ddee9ad92cac4 Mon Sep 17 00:00:00 2001
From: Basil Crow
Date: Mon, 15 Jul 2024 13:47:22 -0700
Subject: [PATCH 146/179] Fix lint on default branch (#9472)
---
war/src/main/scss/form/_layout.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/war/src/main/scss/form/_layout.scss b/war/src/main/scss/form/_layout.scss
index e32b9db9e2c0..8983245875e2 100644
--- a/war/src/main/scss/form/_layout.scss
+++ b/war/src/main/scss/form/_layout.scss
@@ -45,7 +45,7 @@
font-weight: var(--form-label-font-weight);
margin-top: 0;
margin-bottom: 0.5rem;
- padding-inline: 0 0;
+ padding-inline: 0;
}
.jenkins-form-description {
From 53bb12cfa2f5d8e9936f94f76fe1f338417ea9a8 Mon Sep 17 00:00:00 2001
From: Basil Crow
Date: Mon, 15 Jul 2024 18:48:23 -0700
Subject: [PATCH 147/179] Upgrade test harness from 2225.2227.vfc00092c557a_ to
2225.2229.vc4c7fcb_6673c (#9473)
---
test/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test/pom.xml b/test/pom.xml
index b00467dc3f31..56f5a371c12a 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -147,7 +147,7 @@ THE SOFTWARE.
${project.groupId}
jenkins-test-harness
- 2225.2227.vfc00092c557a_
+ 2225.2229.vc4c7fcb_6673c
test
From ef376fe6f61731ae2acee82a2ea8a760003f7b21 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Mon, 15 Jul 2024 19:48:46 -0600
Subject: [PATCH 148/179] Update eslint monorepo to v9.7.0 (#9471)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
war/package.json | 4 ++--
war/yarn.lock | 42 +++++++++++++++++++++---------------------
2 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/war/package.json b/war/package.json
index 03c7424e0d4f..5362fa04963d 100644
--- a/war/package.json
+++ b/war/package.json
@@ -26,12 +26,12 @@
"@babel/cli": "7.24.8",
"@babel/core": "7.24.8",
"@babel/preset-env": "7.24.8",
- "@eslint/js": "9.6.0",
+ "@eslint/js": "9.7.0",
"babel-loader": "9.1.3",
"clean-webpack-plugin": "4.0.0",
"css-loader": "7.1.2",
"css-minimizer-webpack-plugin": "7.0.0",
- "eslint": "9.6.0",
+ "eslint": "9.7.0",
"eslint-config-prettier": "9.1.0",
"eslint-formatter-checkstyle": "8.40.0",
"globals": "15.8.0",
diff --git a/war/yarn.lock b/war/yarn.lock
index 0702d9aaf22e..0d4cec409982 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -1862,10 +1862,10 @@ __metadata:
languageName: node
linkType: hard
-"@eslint-community/regexpp@npm:^4.6.1":
- version: 4.10.0
- resolution: "@eslint-community/regexpp@npm:4.10.0"
- checksum: 10c0/c5f60ef1f1ea7649fa7af0e80a5a79f64b55a8a8fa5086de4727eb4c86c652aedee407a9c143b8995d2c0b2d75c1222bec9ba5d73dbfc1f314550554f0979ef4
+"@eslint-community/regexpp@npm:^4.11.0":
+ version: 4.11.0
+ resolution: "@eslint-community/regexpp@npm:4.11.0"
+ checksum: 10c0/0f6328869b2741e2794da4ad80beac55cba7de2d3b44f796a60955b0586212ec75e6b0253291fd4aad2100ad471d1480d8895f2b54f1605439ba4c875e05e523
languageName: node
linkType: hard
@@ -1897,10 +1897,10 @@ __metadata:
languageName: node
linkType: hard
-"@eslint/js@npm:9.6.0":
- version: 9.6.0
- resolution: "@eslint/js@npm:9.6.0"
- checksum: 10c0/83967a7e59f2e958c9bbb3acd0929cad00d59d927ad786ed8e0d30b07f983c6bea3af6f4ad32da32145db40b7a741a816ba339bdd8960fc7fc8231716d943b7f
+"@eslint/js@npm:9.7.0":
+ version: 9.7.0
+ resolution: "@eslint/js@npm:9.7.0"
+ checksum: 10c0/73fc10666f6f4aed6f58e407e09f42ceb0d42fa60c52701c64ea9f59a81a6a8ad5caecdfd423d03088481515fe7ec17eb461acb4ef1ad70b649b6eae465b3164
languageName: node
linkType: hard
@@ -3531,13 +3531,13 @@ __metadata:
languageName: node
linkType: hard
-"eslint-scope@npm:^8.0.1":
- version: 8.0.1
- resolution: "eslint-scope@npm:8.0.1"
+"eslint-scope@npm:^8.0.2":
+ version: 8.0.2
+ resolution: "eslint-scope@npm:8.0.2"
dependencies:
esrecurse: "npm:^4.3.0"
estraverse: "npm:^5.2.0"
- checksum: 10c0/0ec40ab284e58ac7ef064ecd23c127e03d339fa57173c96852336c73afc70ce5631da21dc1c772415a37a421291845538dd69db83c68d611044c0fde1d1fa269
+ checksum: 10c0/477f820647c8755229da913025b4567347fd1f0bf7cbdf3a256efff26a7e2e130433df052bd9e3d014025423dc00489bea47eb341002b15553673379c1a7dc36
languageName: node
linkType: hard
@@ -3555,15 +3555,15 @@ __metadata:
languageName: node
linkType: hard
-"eslint@npm:9.6.0":
- version: 9.6.0
- resolution: "eslint@npm:9.6.0"
+"eslint@npm:9.7.0":
+ version: 9.7.0
+ resolution: "eslint@npm:9.7.0"
dependencies:
"@eslint-community/eslint-utils": "npm:^4.2.0"
- "@eslint-community/regexpp": "npm:^4.6.1"
+ "@eslint-community/regexpp": "npm:^4.11.0"
"@eslint/config-array": "npm:^0.17.0"
"@eslint/eslintrc": "npm:^3.1.0"
- "@eslint/js": "npm:9.6.0"
+ "@eslint/js": "npm:9.7.0"
"@humanwhocodes/module-importer": "npm:^1.0.1"
"@humanwhocodes/retry": "npm:^0.3.0"
"@nodelib/fs.walk": "npm:^1.2.8"
@@ -3572,7 +3572,7 @@ __metadata:
cross-spawn: "npm:^7.0.2"
debug: "npm:^4.3.2"
escape-string-regexp: "npm:^4.0.0"
- eslint-scope: "npm:^8.0.1"
+ eslint-scope: "npm:^8.0.2"
eslint-visitor-keys: "npm:^4.0.0"
espree: "npm:^10.1.0"
esquery: "npm:^1.5.0"
@@ -3595,7 +3595,7 @@ __metadata:
text-table: "npm:^0.2.0"
bin:
eslint: bin/eslint.js
- checksum: 10c0/82ea5ad3f28aaef89e2a98f4e6df0eae9d4e16ccd6d667c69977042e0b103fa5df98bf16d3df72d1ae77edd8c1dccfdf4afa2a55309aa8081a1bc54af6229826
+ checksum: 10c0/e2369a9534404f62f37ee5560e56fb84e0776a9c8f084550170017992772e7034d73571bdf4060e2fe9b836f136d45b07d50407d4b9361de720ee77794259274
languageName: node
linkType: hard
@@ -4412,12 +4412,12 @@ __metadata:
"@babel/cli": "npm:7.24.8"
"@babel/core": "npm:7.24.8"
"@babel/preset-env": "npm:7.24.8"
- "@eslint/js": "npm:9.6.0"
+ "@eslint/js": "npm:9.7.0"
babel-loader: "npm:9.1.3"
clean-webpack-plugin: "npm:4.0.0"
css-loader: "npm:7.1.2"
css-minimizer-webpack-plugin: "npm:7.0.0"
- eslint: "npm:9.6.0"
+ eslint: "npm:9.7.0"
eslint-config-prettier: "npm:9.1.0"
eslint-formatter-checkstyle: "npm:8.40.0"
globals: "npm:15.8.0"
From cd5dad10921aab5e26813dfc41170ca900d08d19 Mon Sep 17 00:00:00 2001
From: Jenkins Release Bot
<66998184+jenkins-release-bot@users.noreply.github.com>
Date: Tue, 16 Jul 2024 13:36:31 +0000
Subject: [PATCH 149/179] [maven-release-plugin] prepare release jenkins-2.468
---
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 150deffe0389..032434750fe6 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
jenkins-bom
diff --git a/cli/pom.xml b/cli/pom.xml
index c037ed4a0ee8..b183c600710c 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
cli
diff --git a/core/pom.xml b/core/pom.xml
index 95c289164930..b9b2c4d89d7b 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
jenkins-core
diff --git a/coverage/pom.xml b/coverage/pom.xml
index fe1e89a120dc..2c2e71da40a2 100644
--- a/coverage/pom.xml
+++ b/coverage/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
jenkins-coverage
diff --git a/pom.xml b/pom.xml
index aca537f6d625..b048478ca91f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
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.468
https://github.com/jenkinsci/jenkins
@@ -75,7 +75,7 @@ THE SOFTWARE.
2.468
-SNAPSHOT
- 2024-07-09T17:52:36Z
+ 2024-07-16T10:33:53Z
github
diff --git a/test/pom.xml b/test/pom.xml
index 56f5a371c12a..83fa1ce6fe56 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
jenkins-test
diff --git a/war/pom.xml b/war/pom.xml
index 636b3e265c69..970601001568 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.468
jenkins-war
diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml
index c91e1583c039..36c4d45e9653 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.468
../..
diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml
index a99aada6a446..d539aa7c75b4 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.468
../..
From 6afa31f0b31e780772d0fd842ebef141fd1d06fb Mon Sep 17 00:00:00 2001
From: Jenkins Release Bot
<66998184+jenkins-release-bot@users.noreply.github.com>
Date: Tue, 16 Jul 2024 13:36:52 +0000
Subject: [PATCH 150/179] [maven-release-plugin] prepare for next development
iteration
---
bom/pom.xml | 2 +-
cli/pom.xml | 2 +-
core/pom.xml | 2 +-
coverage/pom.xml | 2 +-
pom.xml | 8 ++++----
test/pom.xml | 2 +-
war/pom.xml | 2 +-
websocket/jetty10/pom.xml | 2 +-
websocket/spi/pom.xml | 2 +-
9 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/bom/pom.xml b/bom/pom.xml
index 032434750fe6..150deffe0389 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
jenkins-bom
diff --git a/cli/pom.xml b/cli/pom.xml
index b183c600710c..c037ed4a0ee8 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
cli
diff --git a/core/pom.xml b/core/pom.xml
index b9b2c4d89d7b..95c289164930 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
jenkins-core
diff --git a/coverage/pom.xml b/coverage/pom.xml
index 2c2e71da40a2..fe1e89a120dc 100644
--- a/coverage/pom.xml
+++ b/coverage/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
jenkins-coverage
diff --git a/pom.xml b/pom.xml
index b048478ca91f..a952ef72e8d3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${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.468
+ ${scmTag}
https://github.com/jenkinsci/jenkins
@@ -73,9 +73,9 @@ THE SOFTWARE.
- 2.468
+ 2.469
-SNAPSHOT
- 2024-07-16T10:33:53Z
+ 2024-07-16T13:36:31Z
github
diff --git a/test/pom.xml b/test/pom.xml
index 83fa1ce6fe56..56f5a371c12a 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
jenkins-test
diff --git a/war/pom.xml b/war/pom.xml
index 970601001568..636b3e265c69 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
jenkins-war
diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml
index 36c4d45e9653..c91e1583c039 100644
--- a/websocket/jetty10/pom.xml
+++ b/websocket/jetty10/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
../..
diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml
index d539aa7c75b4..a99aada6a446 100644
--- a/websocket/spi/pom.xml
+++ b/websocket/spi/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.468
+ ${revision}${changelist}
../..
From 4efe3e2beef3a5a1bb3390ab467d66f94383471a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 16 Jul 2024 17:49:18 +0100
Subject: [PATCH 151/179] Update dependency prettier to v3.3.3 (#9474)
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 5362fa04963d..7db10f3a120d 100644
--- a/war/package.json
+++ b/war/package.json
@@ -41,7 +41,7 @@
"postcss-loader": "8.1.1",
"postcss-preset-env": "9.6.0",
"postcss-scss": "4.0.9",
- "prettier": "3.3.2",
+ "prettier": "3.3.3",
"sass": "1.77.8",
"sass-loader": "14.2.1",
"style-loader": "4.0.0",
diff --git a/war/yarn.lock b/war/yarn.lock
index 0d4cec409982..c398e460b0a5 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -4431,7 +4431,7 @@ __metadata:
postcss-loader: "npm:8.1.1"
postcss-preset-env: "npm:9.6.0"
postcss-scss: "npm:4.0.9"
- prettier: "npm:3.3.2"
+ prettier: "npm:3.3.3"
sass: "npm:1.77.8"
sass-loader: "npm:14.2.1"
sortablejs: "npm:1.15.2"
@@ -6125,12 +6125,12 @@ __metadata:
languageName: node
linkType: hard
-"prettier@npm:3.3.2":
- version: 3.3.2
- resolution: "prettier@npm:3.3.2"
+"prettier@npm:3.3.3":
+ version: 3.3.3
+ resolution: "prettier@npm:3.3.3"
bin:
prettier: bin/prettier.cjs
- checksum: 10c0/39ed27d17f0238da6dd6571d63026566bd790d3d0edac57c285fbab525982060c8f1e01955fe38134ab10f0951a6076da37f015db8173c02f14bc7f0803a384c
+ checksum: 10c0/b85828b08e7505716324e4245549b9205c0cacb25342a030ba8885aba2039a115dbcf75a0b7ca3b37bc9d101ee61fab8113fc69ca3359f2a226f1ecc07ad2e26
languageName: node
linkType: hard
From 2d0d5d8f0e935a793094246f4d50a28fdc5cca52 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Tue, 16 Jul 2024 20:37:52 -0700
Subject: [PATCH 152/179] Bump commons-codec:commons-codec from 1.17.0 to
1.17.1 (#9475)
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 150deffe0389..63d8b5cd65f7 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -113,7 +113,7 @@ THE SOFTWARE.
commons-codec
commons-codec
- 1.17.0
+ 1.17.1
commons-collections
From c47975525dbdd4b750ed02fcd450a99ebeafbe9d Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 17 Jul 2024 12:29:09 -0700
Subject: [PATCH 153/179] Bump softprops/action-gh-release from 2.0.6 to 2.0.7
(#9477)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/publish-release-artifact.yml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/publish-release-artifact.yml b/.github/workflows/publish-release-artifact.yml
index 04e3d0aa993e..b435d88ad373 100644
--- a/.github/workflows/publish-release-artifact.yml
+++ b/.github/workflows/publish-release-artifact.yml
@@ -73,7 +73,7 @@ jobs:
wget -q https://get.jenkins.io/${REPO}/${PROJECT_VERSION}/${FILE_NAME}
- name: Upload Release Asset
id: upload-war
- uses: softprops/action-gh-release@a74c6b72af54cfa997e81df42d94703d6313a2d0
+ uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -108,7 +108,7 @@ jobs:
- name: Upload Release Asset
id: upload-deb
if: always()
- uses: softprops/action-gh-release@a74c6b72af54cfa997e81df42d94703d6313a2d0
+ uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -144,7 +144,7 @@ jobs:
- name: Upload Release Asset
id: upload-rpm
if: always()
- uses: softprops/action-gh-release@a74c6b72af54cfa997e81df42d94703d6313a2d0
+ uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -180,7 +180,7 @@ jobs:
- name: Upload Release Asset
id: upload-msi
if: always()
- uses: softprops/action-gh-release@a74c6b72af54cfa997e81df42d94703d6313a2d0
+ uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -216,7 +216,7 @@ jobs:
- name: Upload Release Asset
id: upload-suse-rpm
if: always()
- uses: softprops/action-gh-release@a74c6b72af54cfa997e81df42d94703d6313a2d0
+ uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
From 108770cd991455a8d07fc6111368bb3b42686a12 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 19 Jul 2024 16:29:18 +0200
Subject: [PATCH 154/179] Update dependency @babel/core to v7.24.9 (#9479)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
war/package.json | 2 +-
war/yarn.lock | 42 +++++++++++++++++++++---------------------
2 files changed, 22 insertions(+), 22 deletions(-)
diff --git a/war/package.json b/war/package.json
index 7db10f3a120d..a1fc1a8b5d0c 100644
--- a/war/package.json
+++ b/war/package.json
@@ -24,7 +24,7 @@
},
"devDependencies": {
"@babel/cli": "7.24.8",
- "@babel/core": "7.24.8",
+ "@babel/core": "7.24.9",
"@babel/preset-env": "7.24.8",
"@eslint/js": "9.7.0",
"babel-loader": "9.1.3",
diff --git a/war/yarn.lock b/war/yarn.lock
index c398e460b0a5..f7fa1b3c1117 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -66,38 +66,38 @@ __metadata:
languageName: node
linkType: hard
-"@babel/core@npm:7.24.8":
- version: 7.24.8
- resolution: "@babel/core@npm:7.24.8"
+"@babel/core@npm:7.24.9":
+ version: 7.24.9
+ resolution: "@babel/core@npm:7.24.9"
dependencies:
"@ampproject/remapping": "npm:^2.2.0"
"@babel/code-frame": "npm:^7.24.7"
- "@babel/generator": "npm:^7.24.8"
+ "@babel/generator": "npm:^7.24.9"
"@babel/helper-compilation-targets": "npm:^7.24.8"
- "@babel/helper-module-transforms": "npm:^7.24.8"
+ "@babel/helper-module-transforms": "npm:^7.24.9"
"@babel/helpers": "npm:^7.24.8"
"@babel/parser": "npm:^7.24.8"
"@babel/template": "npm:^7.24.7"
"@babel/traverse": "npm:^7.24.8"
- "@babel/types": "npm:^7.24.8"
+ "@babel/types": "npm:^7.24.9"
convert-source-map: "npm:^2.0.0"
debug: "npm:^4.1.0"
gensync: "npm:^1.0.0-beta.2"
json5: "npm:^2.2.3"
semver: "npm:^6.3.1"
- checksum: 10c0/5e21b40cc69746deda3fe3d6540351d9cb0d1ad5aea055b7c319db26071ff5789fd9580d1aa47b114f07631e8e2109f4e71696ca11d7c7e60d157767022c1bd2
+ checksum: 10c0/e104ec6efbf099f55184933e9ab078eb5821c792ddfef3e9c6561986ec4ff103f5c11e3d7d6e5e8929e50e2c58db1cc80e5b6f14b530335b6622095ec4b4124c
languageName: node
linkType: hard
-"@babel/generator@npm:^7.24.8":
- version: 7.24.8
- resolution: "@babel/generator@npm:7.24.8"
+"@babel/generator@npm:^7.24.8, @babel/generator@npm:^7.24.9":
+ version: 7.24.10
+ resolution: "@babel/generator@npm:7.24.10"
dependencies:
- "@babel/types": "npm:^7.24.8"
+ "@babel/types": "npm:^7.24.9"
"@jridgewell/gen-mapping": "npm:^0.3.5"
"@jridgewell/trace-mapping": "npm:^0.3.25"
jsesc: "npm:^2.5.1"
- checksum: 10c0/e8a278e75a895f13a7b17dd79abe1e894fe82a5ed3abb127c33c14c66773d69993762521c094c6c364723f8f7375683b0d4a96097781175a29407baedf67b769
+ checksum: 10c0/abcfd75f625aecc87ce6036ef788b12723fd3c46530df1130d1f00d18e48b462849ddaeef8b1a02bfdcb6e28956389a98c5729dad1c3c5448307dacb6c959f29
languageName: node
linkType: hard
@@ -228,9 +228,9 @@ __metadata:
languageName: node
linkType: hard
-"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8":
- version: 7.24.8
- resolution: "@babel/helper-module-transforms@npm:7.24.8"
+"@babel/helper-module-transforms@npm:^7.24.7, @babel/helper-module-transforms@npm:^7.24.8, @babel/helper-module-transforms@npm:^7.24.9":
+ version: 7.24.9
+ resolution: "@babel/helper-module-transforms@npm:7.24.9"
dependencies:
"@babel/helper-environment-visitor": "npm:^7.24.7"
"@babel/helper-module-imports": "npm:^7.24.7"
@@ -239,7 +239,7 @@ __metadata:
"@babel/helper-validator-identifier": "npm:^7.24.7"
peerDependencies:
"@babel/core": ^7.0.0
- checksum: 10c0/b76496d5045af55be9de60e59e65e56a43033f01ccc746b26b7af911c358668c206b688ce70a23ab31ec04f9728f3a38e8d01073c85244115ab62f271a7fa3d1
+ checksum: 10c0/e27bca43bc113731ee4f2b33a4c5bf9c7eebf4d64487b814c305cbd5feb272c29fcd3d79634ba03131ade171e5972bc7ede8dbc83ba0deb02f1e62d318c87770
languageName: node
linkType: hard
@@ -1362,14 +1362,14 @@ __metadata:
languageName: node
linkType: hard
-"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
- version: 7.24.8
- resolution: "@babel/types@npm:7.24.8"
+"@babel/types@npm:^7.24.7, @babel/types@npm:^7.24.8, @babel/types@npm:^7.24.9, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3":
+ version: 7.24.9
+ resolution: "@babel/types@npm:7.24.9"
dependencies:
"@babel/helper-string-parser": "npm:^7.24.8"
"@babel/helper-validator-identifier": "npm:^7.24.7"
to-fast-properties: "npm:^2.0.0"
- checksum: 10c0/2d7bf561ae993e794cb052c5a81d3a6d1877da13e1e2eb2a59ae75a8fb1c965b618fb3e4abd42548f5f9a4587d3a149185a32d6c4c4ea82195da7dd86f2da0f1
+ checksum: 10c0/4970b3481cab39c5c3fdb7c28c834df5c7049f3c7f43baeafe121bb05270ebf0da7c65b097abf314877f213baa591109c82204f30d66cdd46c22ece4a2f32415
languageName: node
linkType: hard
@@ -4410,7 +4410,7 @@ __metadata:
resolution: "jenkins-ui@workspace:."
dependencies:
"@babel/cli": "npm:7.24.8"
- "@babel/core": "npm:7.24.8"
+ "@babel/core": "npm:7.24.9"
"@babel/preset-env": "npm:7.24.8"
"@eslint/js": "npm:9.7.0"
babel-loader: "npm:9.1.3"
From ee2181180ce1046f6e452419afacb42c502b0d88 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 19 Jul 2024 09:24:52 -0700
Subject: [PATCH 155/179] Bump org.jenkins-ci.plugins.workflow:workflow-api
from 1316.v33eb_726c50b_a_ to 1322.v857eeeea_9902 (#9481)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
test/pom.xml | 2 +-
war/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/pom.xml b/test/pom.xml
index 56f5a371c12a..ede4a5e74bff 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -121,7 +121,7 @@ THE SOFTWARE.
org.jenkins-ci.plugins.workflow
workflow-api
- 1316.v33eb_726c50b_a_
+ 1322.v857eeeea_9902
org.jenkins-ci.plugins.workflow
diff --git a/war/pom.xml b/war/pom.xml
index 636b3e265c69..5da75ee1a520 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -305,7 +305,7 @@ THE SOFTWARE.
org.jenkins-ci.plugins.workflow
workflow-api
- 1316.v33eb_726c50b_a_
+ 1322.v857eeeea_9902
hpi
From 02e37b3c83e2f709a4f7508d9c9ac8c73f1fe9f6 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Fri, 19 Jul 2024 09:25:57 -0700
Subject: [PATCH 156/179] Bump softprops/action-gh-release from 2.0.7 to 2.0.8
(#9484)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
.github/workflows/publish-release-artifact.yml | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/.github/workflows/publish-release-artifact.yml b/.github/workflows/publish-release-artifact.yml
index b435d88ad373..ae5e6bf92602 100644
--- a/.github/workflows/publish-release-artifact.yml
+++ b/.github/workflows/publish-release-artifact.yml
@@ -73,7 +73,7 @@ jobs:
wget -q https://get.jenkins.io/${REPO}/${PROJECT_VERSION}/${FILE_NAME}
- name: Upload Release Asset
id: upload-war
- uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
+ uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -108,7 +108,7 @@ jobs:
- name: Upload Release Asset
id: upload-deb
if: always()
- uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
+ uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -144,7 +144,7 @@ jobs:
- name: Upload Release Asset
id: upload-rpm
if: always()
- uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
+ uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -180,7 +180,7 @@ jobs:
- name: Upload Release Asset
id: upload-msi
if: always()
- uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
+ uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
@@ -216,7 +216,7 @@ jobs:
- name: Upload Release Asset
id: upload-suse-rpm
if: always()
- uses: softprops/action-gh-release@fb2d03176f42a1f0dd433ca263f314051d3edd44
+ uses: softprops/action-gh-release@c062e08bd532815e2082a85e87e3ef29c3e6d191
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
From 9e629f65175e9ba1b2620fe2ffcb9282669b5261 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Fri, 19 Jul 2024 16:58:35 -0400
Subject: [PATCH 157/179] Note the plugin responsible for loading a detached
plugin (#9478)
---
core/src/main/java/hudson/ClassicPluginStrategy.java | 2 +-
core/src/main/java/hudson/PluginManager.java | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/src/main/java/hudson/ClassicPluginStrategy.java b/core/src/main/java/hudson/ClassicPluginStrategy.java
index 8c39f14ef2d5..3d6edf832f9f 100644
--- a/core/src/main/java/hudson/ClassicPluginStrategy.java
+++ b/core/src/main/java/hudson/ClassicPluginStrategy.java
@@ -252,7 +252,7 @@ private void fix(Attributes atts, List optionalDepende
for (Dependency d : DetachedPluginsUtil.getImpliedDependencies(pluginName, jenkinsVersion)) {
LOGGER.fine(() -> "implied dep " + pluginName + " → " + d.shortName);
- pluginManager.considerDetachedPlugin(d.shortName);
+ pluginManager.considerDetachedPlugin(d.shortName, pluginName);
optionalDependencies.add(d);
}
}
diff --git a/core/src/main/java/hudson/PluginManager.java b/core/src/main/java/hudson/PluginManager.java
index eda266735173..75dd52c4d7b7 100644
--- a/core/src/main/java/hudson/PluginManager.java
+++ b/core/src/main/java/hudson/PluginManager.java
@@ -615,7 +615,7 @@ public void run(Reactor reactor) throws Exception {
}});
}
- void considerDetachedPlugin(String shortName) {
+ void considerDetachedPlugin(String shortName, String source) {
if (new File(rootDir, shortName + ".jpi").isFile() ||
new File(rootDir, shortName + ".hpi").isFile() ||
new File(rootDir, shortName + ".jpl").isFile() ||
@@ -627,7 +627,7 @@ void considerDetachedPlugin(String shortName) {
for (String loadedFile : loadPluginsFromWar(getDetachedLocation(), (dir, name) -> normalisePluginName(name).equals(shortName))) {
String loaded = normalisePluginName(loadedFile);
File arc = new File(rootDir, loaded + ".jpi");
- LOGGER.info(() -> "Loading a detached plugin as a dependency: " + arc);
+ LOGGER.info(() -> "Loading a detached plugin " + arc + " as a dependency of " + source);
try {
plugins.add(strategy.createPluginWrapper(arc));
} catch (IOException e) {
From baa0b2c25c1735b44764006db876406721271cc6 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Sat, 20 Jul 2024 18:44:14 -0400
Subject: [PATCH 158/179] Deprecating `SubTask.getLastBuiltOn` (#9442)
---
core/src/main/java/hudson/model/AbstractProject.java | 1 +
core/src/main/java/hudson/model/queue/MappingWorksheet.java | 3 +++
core/src/main/java/hudson/model/queue/QueueTaskFilter.java | 1 +
core/src/main/java/hudson/model/queue/SubTask.java | 2 ++
.../model/queue/BuildKeepsRunningWhenFaultySubTasksTest.java | 1 +
5 files changed, 8 insertions(+)
diff --git a/core/src/main/java/hudson/model/AbstractProject.java b/core/src/main/java/hudson/model/AbstractProject.java
index c323f50bca0b..c568f8df8b31 100644
--- a/core/src/main/java/hudson/model/AbstractProject.java
+++ b/core/src/main/java/hudson/model/AbstractProject.java
@@ -1011,6 +1011,7 @@ public List getActions() {
* null if no information is available (for example,
* if no build was done yet.)
*/
+ @SuppressWarnings("deprecation")
@Override
public Node getLastBuiltOn() {
// where was it built on?
diff --git a/core/src/main/java/hudson/model/queue/MappingWorksheet.java b/core/src/main/java/hudson/model/queue/MappingWorksheet.java
index 9dbeaa3816f4..8150dd1bc132 100644
--- a/core/src/main/java/hudson/model/queue/MappingWorksheet.java
+++ b/core/src/main/java/hudson/model/queue/MappingWorksheet.java
@@ -190,7 +190,9 @@ public class WorkChunk extends ReadOnlyList {
* If the previous execution of this task run on a certain node
* and this task prefers to run on the same node, return that.
* Otherwise null.
+ * @deprecated Unused.
*/
+ @Deprecated
public final ExecutorChunk lastBuiltOn;
@@ -200,6 +202,7 @@ private WorkChunk(List base, int index) {
this.index = index;
this.assignedLabel = getAssignedLabel(base.get(0));
+ @SuppressWarnings("deprecation")
Node lbo = base.get(0).getLastBuiltOn();
for (ExecutorChunk ec : executors) {
if (ec.node == lbo) {
diff --git a/core/src/main/java/hudson/model/queue/QueueTaskFilter.java b/core/src/main/java/hudson/model/queue/QueueTaskFilter.java
index e2a113dfaa59..a36c5ca7c753 100644
--- a/core/src/main/java/hudson/model/queue/QueueTaskFilter.java
+++ b/core/src/main/java/hudson/model/queue/QueueTaskFilter.java
@@ -52,6 +52,7 @@ public Label getAssignedLabel() {
return base.getAssignedLabel();
}
+ @Deprecated
@Override
public Node getLastBuiltOn() {
return base.getLastBuiltOn();
diff --git a/core/src/main/java/hudson/model/queue/SubTask.java b/core/src/main/java/hudson/model/queue/SubTask.java
index f8b7dd435088..0690d074617c 100644
--- a/core/src/main/java/hudson/model/queue/SubTask.java
+++ b/core/src/main/java/hudson/model/queue/SubTask.java
@@ -62,7 +62,9 @@ default Label getAssignedLabel() {
* and this task prefers to run on the same node, return that.
* Otherwise null.
* @return by default, null
+ * @deprecated Unused.
*/
+ @Deprecated
default Node getLastBuiltOn() {
return null;
}
diff --git a/test/src/test/java/hudson/model/queue/BuildKeepsRunningWhenFaultySubTasksTest.java b/test/src/test/java/hudson/model/queue/BuildKeepsRunningWhenFaultySubTasksTest.java
index c296c2bd6871..7bb9b4d442c6 100644
--- a/test/src/test/java/hudson/model/queue/BuildKeepsRunningWhenFaultySubTasksTest.java
+++ b/test/src/test/java/hudson/model/queue/BuildKeepsRunningWhenFaultySubTasksTest.java
@@ -107,6 +107,7 @@ public Label getAssignedLabel() {
return null;
}
+ @Deprecated
@Override
public Node getLastBuiltOn() {
return null;
From 62e4ac4778c78e2a4a963608870bc204da148db0 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Sat, 20 Jul 2024 18:44:34 -0400
Subject: [PATCH 159/179] [JENKINS-66105] Allow follow redirects to work after
303 from `buildWithParameters` (#9446)
---
.../hudson/model/BuildAuthorizationToken.java | 5 ---
core/src/main/java/hudson/model/Queue.java | 5 +++
.../jenkins/model/ParameterizedJobMixIn.java | 1 +
.../ParametersDefinitionPropertyTest.java | 31 +++++++++++++++++++
4 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/core/src/main/java/hudson/model/BuildAuthorizationToken.java b/core/src/main/java/hudson/model/BuildAuthorizationToken.java
index f101eb3d6e74..a09ed113e1cf 100644
--- a/core/src/main/java/hudson/model/BuildAuthorizationToken.java
+++ b/core/src/main/java/hudson/model/BuildAuthorizationToken.java
@@ -29,7 +29,6 @@
import hudson.security.ACL;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
-import jenkins.security.ApiTokenProperty;
import org.kohsuke.stapler.HttpResponses;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
@@ -82,10 +81,6 @@ public static void checkPermission(Job, ?> project, BuildAuthorizationToken to
return;
}
- if (req.getAttribute(ApiTokenProperty.class.getName()) instanceof User) {
- return;
- }
-
rsp.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
rsp.addHeader("Allow", "POST");
throw HttpResponses.forwardToView(project, "requirePOST.jelly");
diff --git a/core/src/main/java/hudson/model/Queue.java b/core/src/main/java/hudson/model/Queue.java
index d489f042100d..0d299fb9426d 100644
--- a/core/src/main/java/hudson/model/Queue.java
+++ b/core/src/main/java/hudson/model/Queue.java
@@ -130,6 +130,7 @@
import org.kohsuke.stapler.HttpResponse;
import org.kohsuke.stapler.HttpResponses;
import org.kohsuke.stapler.QueryParameter;
+import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.export.Exported;
import org.kohsuke.stapler.export.ExportedBean;
import org.kohsuke.stapler.interceptor.RequirePOST;
@@ -2414,6 +2415,10 @@ public Api getApi() throws AccessDeniedException {
}
}
+ public HttpResponse doIndex(StaplerRequest req) {
+ return HttpResponses.text("Queue item exists. For details check, for example, " + req.getRequestURI() + "api/json?tree=cancelled,executable[url]");
+ }
+
protected Object readResolve() {
this.future = new FutureImpl(task);
return this;
diff --git a/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java b/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java
index 734534220901..662ffa9359e2 100644
--- a/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java
+++ b/core/src/main/java/jenkins/model/ParameterizedJobMixIn.java
@@ -218,6 +218,7 @@ public final void doBuild(StaplerRequest req, StaplerResponse rsp, @QueryParamet
Queue.Item item = Jenkins.get().getQueue().schedule2(asJob(), delay.getTimeInSeconds(), getBuildCause(asJob(), req)).getItem();
if (item != null) {
+ // TODO JENKINS-66105 use SC_SEE_OTHER if !ScheduleResult.created
rsp.sendRedirect(SC_CREATED, req.getContextPath() + '/' + item.getUrl());
} else {
rsp.sendRedirect(".");
diff --git a/test/src/test/java/hudson/model/ParametersDefinitionPropertyTest.java b/test/src/test/java/hudson/model/ParametersDefinitionPropertyTest.java
index 0f06cd43a7f6..54d3b3a0c847 100644
--- a/test/src/test/java/hudson/model/ParametersDefinitionPropertyTest.java
+++ b/test/src/test/java/hudson/model/ParametersDefinitionPropertyTest.java
@@ -24,11 +24,19 @@
package hudson.model;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
+import hudson.security.FullControlOnceLoggedInAuthorizationStrategy;
+import java.net.URL;
import java.util.Locale;
import java.util.logging.Level;
import net.sf.json.JSONObject;
+import org.htmlunit.HttpMethod;
+import org.htmlunit.WebRequest;
+import org.htmlunit.WebResponse;
import org.junit.Rule;
import org.junit.Test;
import org.jvnet.hudson.test.Issue;
@@ -92,4 +100,27 @@ public ParameterDefinition newInstance(StaplerRequest req, JSONObject formData)
}
+ @Issue("JENKINS-66105")
+ @Test
+ public void statusCodes() throws Exception {
+ r.jenkins.setSecurityRealm(r.createDummySecurityRealm());
+ r.jenkins.setAuthorizationStrategy(new FullControlOnceLoggedInAuthorizationStrategy());
+ FreeStyleProject p = r.createFreeStyleProject("p");
+ ParametersDefinitionProperty pdp = new ParametersDefinitionProperty(new StringParameterDefinition("K"));
+ p.addProperty(pdp);
+ p.setConcurrentBuild(true);
+ p.setAssignedLabel(Label.get("nonexistent")); // force it to stay in queue
+ JenkinsRule.WebClient wc = r.createWebClient();
+ wc.withBasicApiToken("dev");
+ assertThat("initially 201 Created queue item", buildWithParameters(wc, "v1").getStatusCode(), is(201));
+ WebResponse rsp = buildWithParameters(wc, "v1");
+ assertThat("then 303 See Other → 200 OK", rsp.getStatusCode(), is(200));
+ assertThat("offers advice on API", rsp.getContentAsString(), containsString("api/json?tree="));
+ assertThat("201 Created queue item for different key", buildWithParameters(wc, "v2").getStatusCode(), is(201));
+ }
+
+ private WebResponse buildWithParameters(JenkinsRule.WebClient wc, String value) throws Exception {
+ return wc.getPage(new WebRequest(new URL(wc.getContextPath() + "job/p/buildWithParameters?K=" + value), HttpMethod.POST)).getWebResponse();
+ }
+
}
From 7680da0cef93fa7edd5b4eb2faf6cf9c04374f68 Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Sat, 20 Jul 2024 18:44:43 -0400
Subject: [PATCH 160/179] `Lifecycle.onBootFailure` (#9483)
---
core/src/main/java/hudson/lifecycle/ExitLifecycle.java | 6 ++++++
core/src/main/java/hudson/lifecycle/Lifecycle.java | 10 ++++++++++
core/src/main/java/hudson/util/BootFailure.java | 2 ++
3 files changed, 18 insertions(+)
diff --git a/core/src/main/java/hudson/lifecycle/ExitLifecycle.java b/core/src/main/java/hudson/lifecycle/ExitLifecycle.java
index f8fcc3abefbf..038dafc442a3 100644
--- a/core/src/main/java/hudson/lifecycle/ExitLifecycle.java
+++ b/core/src/main/java/hudson/lifecycle/ExitLifecycle.java
@@ -26,6 +26,7 @@
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import hudson.Extension;
+import hudson.util.BootFailure;
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.model.Jenkins;
@@ -72,4 +73,9 @@ public void restart() {
System.exit(exitOnRestart);
}
+
+ @Override
+ public void onBootFailure(BootFailure problem) {
+ restart();
+ }
}
diff --git a/core/src/main/java/hudson/lifecycle/Lifecycle.java b/core/src/main/java/hudson/lifecycle/Lifecycle.java
index dbc53d2b5005..fcd7769aeff2 100644
--- a/core/src/main/java/hudson/lifecycle/Lifecycle.java
+++ b/core/src/main/java/hudson/lifecycle/Lifecycle.java
@@ -32,6 +32,8 @@
import hudson.Util;
import hudson.init.InitMilestone;
import hudson.init.Initializer;
+import hudson.util.BootFailure;
+import hudson.util.JenkinsReloadFailed;
import java.io.File;
import java.io.IOException;
import java.io.UncheckedIOException;
@@ -324,6 +326,14 @@ public boolean supportsDynamicLoad() {
return true;
}
+ /**
+ * Called when Jenkins has failed to boot.
+ * @param problem a boot failure (could be {@link JenkinsReloadFailed})
+ * @since TODO
+ */
+ public void onBootFailure(BootFailure problem) {
+ }
+
@Restricted(NoExternalUse.class)
public static final class PlaceholderLifecycle extends ExitLifecycle {
diff --git a/core/src/main/java/hudson/util/BootFailure.java b/core/src/main/java/hudson/util/BootFailure.java
index a460ffea148e..f23cf7fa66b7 100644
--- a/core/src/main/java/hudson/util/BootFailure.java
+++ b/core/src/main/java/hudson/util/BootFailure.java
@@ -15,6 +15,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;
+import jenkins.model.Jenkins;
import jenkins.util.groovy.GroovyHookScript;
import org.kohsuke.stapler.WebApp;
@@ -51,6 +52,7 @@ public void publish(ServletContext context, @CheckForNull File home) {
.bind("servletContext", context)
.bind("attempts", loadAttempts(home))
.run();
+ Jenkins.get().getLifecycle().onBootFailure(this);
}
/**
From e4f3a0d2fed3b3a97b1970289316d2f0ac6ae89b Mon Sep 17 00:00:00 2001
From: Basil Crow
Date: Sat, 20 Jul 2024 15:44:58 -0700
Subject: [PATCH 161/179] [JENKINS-73467] No facility to try unsupported
Remoting versions when using inbound agents (#9485)
---
core/src/main/java/jenkins/agents/WebSocketAgents.java | 5 ++++-
.../resources/hudson/TcpSlaveAgentListener/index.jelly | 7 +++++--
2 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/core/src/main/java/jenkins/agents/WebSocketAgents.java b/core/src/main/java/jenkins/agents/WebSocketAgents.java
index 005587c6365a..d9560f156ebd 100644
--- a/core/src/main/java/jenkins/agents/WebSocketAgents.java
+++ b/core/src/main/java/jenkins/agents/WebSocketAgents.java
@@ -36,6 +36,7 @@
import hudson.remoting.ChannelBuilder;
import hudson.remoting.ChunkHeader;
import hudson.remoting.Engine;
+import hudson.slaves.SlaveComputer;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.ClosedChannelException;
@@ -107,7 +108,9 @@ public HttpResponse doIndex(StaplerRequest req, StaplerResponse rsp) throws IOEx
Capability remoteCapability = Capability.fromASCII(remoteCapabilityStr);
LOGGER.fine(() -> "received " + remoteCapability);
rsp.setHeader(Capability.KEY, new Capability().toASCII());
- rsp.setHeader(Engine.REMOTING_MINIMUM_VERSION_HEADER, RemotingVersionInfo.getMinimumSupportedVersion().toString());
+ if (!SlaveComputer.ALLOW_UNSUPPORTED_REMOTING_VERSIONS) {
+ rsp.setHeader(Engine.REMOTING_MINIMUM_VERSION_HEADER, RemotingVersionInfo.getMinimumSupportedVersion().toString());
+ }
rsp.setHeader(Engine.WEBSOCKET_COOKIE_HEADER, cookie);
return WebSockets.upgrade(new Session(state, agent, remoteCapability));
}
diff --git a/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly b/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly
index 1b04d3c2c9ae..9e4b36af14a2 100644
--- a/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly
+++ b/core/src/main/resources/hudson/TcpSlaveAgentListener/index.jelly
@@ -40,8 +40,11 @@ THE SOFTWARE.
-
-
+
+
+
+
+
Jenkins
From 77f620e3cc57be3b08a323407c613452929e7545 Mon Sep 17 00:00:00 2001
From: Mark Waite
Date: Sat, 20 Jul 2024 16:45:12 -0600
Subject: [PATCH 162/179] Update version numbers of new APIs in Javadoc (#9486)
Update @since TODO javadoc comments
---
core/src/main/java/hudson/model/AdministrativeMonitor.java | 2 +-
core/src/main/java/hudson/model/User.java | 2 +-
core/src/main/java/hudson/model/UserProperty.java | 2 +-
core/src/main/java/hudson/model/UserPropertyDescriptor.java | 4 ++--
.../java/hudson/model/userproperty/UserPropertyCategory.java | 2 +-
.../GlobalComputerRetentionCheckIntervalConfiguration.java | 4 ++--
6 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/core/src/main/java/hudson/model/AdministrativeMonitor.java b/core/src/main/java/hudson/model/AdministrativeMonitor.java
index e2f69d654ca8..61208dea6467 100644
--- a/core/src/main/java/hudson/model/AdministrativeMonitor.java
+++ b/core/src/main/java/hudson/model/AdministrativeMonitor.java
@@ -236,7 +236,7 @@ public boolean hasRequiredPermission() {
*
* @return true if the current user has the minimum required permission to view any administrative monitor.
*
- * @since TODO
+ * @since 2.468
*/
public static boolean hasPermissionToDisplay() {
return Jenkins.get().hasAnyPermission(Jenkins.SYSTEM_READ, Jenkins.MANAGE);
diff --git a/core/src/main/java/hudson/model/User.java b/core/src/main/java/hudson/model/User.java
index e588a79b347a..792622eb3c54 100644
--- a/core/src/main/java/hudson/model/User.java
+++ b/core/src/main/java/hudson/model/User.java
@@ -344,7 +344,7 @@ public synchronized void addProperty(@NonNull UserProperty p) throws IOException
* The properties not included in the list will be let untouched.
* It will call the {@link UserProperty#setUser(User)} method and at the end, {@link #save()} once.
*
- * @since TODO
+ * @since 2.468
*/
public synchronized void addProperties(@NonNull List multipleProperties) throws IOException {
List newProperties = new ArrayList<>(this.properties);
diff --git a/core/src/main/java/hudson/model/UserProperty.java b/core/src/main/java/hudson/model/UserProperty.java
index 6538a5fdf661..a6ebeb738b23 100644
--- a/core/src/main/java/hudson/model/UserProperty.java
+++ b/core/src/main/java/hudson/model/UserProperty.java
@@ -86,7 +86,7 @@ public static DescriptorExtensionList all(
/**
* Returns all the registered {@link UserPropertyCategory} descriptors for a given category.
*
- * @since TODO
+ * @since 2.468
*/
public static List allByCategoryClass(@NonNull Class extends UserPropertyCategory> categoryClass) {
DescriptorExtensionList all = all();
diff --git a/core/src/main/java/hudson/model/UserPropertyDescriptor.java b/core/src/main/java/hudson/model/UserPropertyDescriptor.java
index ff3171c1fbf7..66762bf3c716 100644
--- a/core/src/main/java/hudson/model/UserPropertyDescriptor.java
+++ b/core/src/main/java/hudson/model/UserPropertyDescriptor.java
@@ -85,7 +85,7 @@ public boolean isEnabled() {
*
* @return never null, always the same value for a given instance of {@link Descriptor}.
*
- * @since TODO
+ * @since 2.468
*/
public @NonNull UserPropertyCategory getUserPropertyCategory() {
// As this method is expected to be overloaded by subclasses
@@ -120,7 +120,7 @@ public boolean isEnabled() {
*
* @return String name corresponding to the symbol of {@link #getUserPropertyCategory()}
*
- * @since TODO
+ * @since 2.468
*/
@Deprecated
protected @CheckForNull String getUserPropertyCategoryAsString() {
diff --git a/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java b/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java
index 803b7e2d3527..5d5467b6eed4 100644
--- a/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java
+++ b/core/src/main/java/hudson/model/userproperty/UserPropertyCategory.java
@@ -43,7 +43,7 @@
* as the catch-all "unclassified".) Categories themselves are extensible — plugins may introduce
* its own category as well, although that should only happen if you are creating a big enough subsystem.
*
- * @since TODO
+ * @since 2.468
* @see UserProperty
*/
public abstract class UserPropertyCategory implements ExtensionPoint, ModelObject {
diff --git a/core/src/main/java/jenkins/model/GlobalComputerRetentionCheckIntervalConfiguration.java b/core/src/main/java/jenkins/model/GlobalComputerRetentionCheckIntervalConfiguration.java
index c73b862ef1e5..46d760fe8ee2 100644
--- a/core/src/main/java/jenkins/model/GlobalComputerRetentionCheckIntervalConfiguration.java
+++ b/core/src/main/java/jenkins/model/GlobalComputerRetentionCheckIntervalConfiguration.java
@@ -23,7 +23,7 @@ public class GlobalComputerRetentionCheckIntervalConfiguration extends GlobalCon
/**
* Gets the check interval for computer retention.
*
- * @since TODO
+ * @since 2.463
*/
public int getComputerRetentionCheckInterval() {
if (computerRetentionCheckInterval <= 0) {
@@ -42,7 +42,7 @@ public int getComputerRetentionCheckInterval() {
*
* @param interval new check interval in seconds
* @throws IllegalArgumentException interval must be greater than zero
- * @since TODO
+ * @since 2.463
*/
private void setComputerRetentionCheckInterval(int interval) throws IllegalArgumentException {
if (interval <= 0) {
From 19d568c0e0bf9a49fef7216e04a9c5d3cf25f20f Mon Sep 17 00:00:00 2001
From: Markus Winter
Date: Sun, 21 Jul 2024 14:46:00 +0200
Subject: [PATCH 163/179] [JENKINS-73453] make icons in table buttons resizable
(#9482)
[JENKINS-73543] make icon in buttons in tables resizable
With #9131 the jenkins-table__button was replaced at certain places with
jenkins-button. But this change caused two regressions:
- The icon size for large table was almost the same as that for medium
tables
- The icons wrapped in jenkins-button were not resizable
- with small table the buttons overflowed the table cell
This change restores the old icon size for large tables and adds
additional css rules for jenkins-button inside tables so they are
properly resized and the padding is correct
---
war/src/main/scss/components/_table.scss | 27 ++++++++++++++++++++----
1 file changed, 23 insertions(+), 4 deletions(-)
diff --git a/war/src/main/scss/components/_table.scss b/war/src/main/scss/components/_table.scss
index 685b740de69a..f247407a8f3b 100644
--- a/war/src/main/scss/components/_table.scss
+++ b/war/src/main/scss/components/_table.scss
@@ -167,11 +167,12 @@
.jenkins-button {
margin: -10px 0;
padding: 0.5rem 0.75rem;
+ min-height: 1.75rem;
// Increase the size of symbols compared to regular buttons
svg {
- width: 1.375rem !important;
- height: 1.375rem !important;
+ width: 1.5rem !important;
+ height: 1.5rem !important;
}
}
@@ -180,8 +181,8 @@
svg,
.build-status-icon__wrapper,
img {
- width: 1.375rem !important;
- height: 1.375rem !important;
+ width: 1.5rem !important;
+ height: 1.5rem !important;
}
}
@@ -202,6 +203,15 @@
height: 1.3rem !important;
}
}
+
+ .jenkins-button {
+ padding: 0.4rem 0.6rem;
+
+ svg {
+ width: 1.3rem !important;
+ height: 1.3rem !important;
+ }
+ }
}
&--auto-width {
@@ -225,6 +235,15 @@
height: 1rem !important;
}
}
+
+ .jenkins-button {
+ padding: 0.3rem 0.5rem;
+
+ svg {
+ width: 1rem !important;
+ height: 1rem !important;
+ }
+ }
}
&__button,
From 81b90e4c118bcdc9b283037e819fb2d6217da18a Mon Sep 17 00:00:00 2001
From: James Nord
Date: Mon, 22 Jul 2024 00:41:04 +0100
Subject: [PATCH 164/179] [JENKINS-73404] SecretTextArea missing FormValidation
support (#9450)
* [JENKINS-73404] unit test
* roundtrip as Secrets
* [JENKINS-73404] add validation for SecretTextArea
reworked the jelly and simplified the javascript.
the textarea is now always present in the DOM, so no need to remove
inputs to add a textarea. Rather we just remove /hide the "hidden" attribute
from the elements we want to show/hide and give the textArea the
expected class and attributes for validation to occur
* remove unused data-prompt attribute
* Adapt getHiddenSecretValue to backend changes
* Adapt to Secrets being sent as "" rather than null
values for SecretTextArea are now always sent. Whilst this is a change
in behavior the only way once set to unset is to set the value to the
mpty string "" which would still produce a Secret
Additionally this matches the behaviour of f:password and f:textarea
Given both of the above this change in behaviour should not break any
production use cases.
* Remove trailing spaces
---------
Co-authored-by: Mark Waite
---
.../resources/lib/form/secretTextarea.jelly | 28 +++-
.../lib/form/secretTextarea/secret.css | 6 +-
.../lib/form/secretTextarea/secret.js | 35 ++---
.../hudson/util/FormFieldValidatorTest.java | 125 +++++++++++++++++-
.../java/lib/form/SecretTextareaTest.java | 15 ++-
.../ValidatingDescribable/config.jelly | 20 +++
6 files changed, 195 insertions(+), 34 deletions(-)
create mode 100644 test/src/test/resources/hudson/util/FormFieldValidatorTest/ValidatingDescribable/config.jelly
diff --git a/core/src/main/resources/lib/form/secretTextarea.jelly b/core/src/main/resources/lib/form/secretTextarea.jelly
index ca95219fc3f3..323a8435d0f3 100644
--- a/core/src/main/resources/lib/form/secretTextarea.jelly
+++ b/core/src/main/resources/lib/form/secretTextarea.jelly
@@ -2,7 +2,7 @@
@@ -45,6 +46,11 @@ You may add multiple changelog entries if applicable by adding a new entry to th
N/A
+
+
```[tasklist]
### Submitter checklist
- [ ] The Jira issue, if it exists, is well-described.
From e9d210a86dd8efedad973d92c5ef78fd3f4514d2 Mon Sep 17 00:00:00 2001
From: Markus Winter
Date: Mon, 22 Jul 2024 18:33:56 +0200
Subject: [PATCH 166/179] modernise build time trend page (#9465)
* modernise build time trend page
- use jenkins-table
- add time since column
- make the link to the console an explicit icon (like for the agent
history)
- hide the agent column for pipeline jobs
* apply prettier
* missing let declaration
* fix tests
* change flex-direction with media
* apply prettier
* revert change to buildListTable
---
.../java/jenkins/widgets/BuildTimeTrend.java | 8 +++
.../hudson/model/Job/buildTimeTrend.jelly | 47 +++++++++-------
.../model/Job/buildTimeTrend_resources.css | 11 +++-
.../model/Job/buildTimeTrend_resources.js | 55 +++++++++++++------
.../jenkins/widgets/BuildTimeTrendTest.java | 12 ++--
5 files changed, 87 insertions(+), 46 deletions(-)
diff --git a/core/src/main/java/jenkins/widgets/BuildTimeTrend.java b/core/src/main/java/jenkins/widgets/BuildTimeTrend.java
index 59ab879f05da..dd0f0434ecb3 100644
--- a/core/src/main/java/jenkins/widgets/BuildTimeTrend.java
+++ b/core/src/main/java/jenkins/widgets/BuildTimeTrend.java
@@ -25,7 +25,9 @@
package jenkins.widgets;
import hudson.model.AbstractBuild;
+import hudson.model.AbstractProject;
import hudson.model.BallColor;
+import hudson.model.Job;
import hudson.model.Node;
import hudson.model.Run;
import jenkins.console.ConsoleUrlProvider;
@@ -37,6 +39,10 @@
@Restricted(DoNotUse.class) // only for buildTimeTrend.jelly
public class BuildTimeTrend extends RunListProgressiveRendering {
+ public boolean isAbstractProject(Job, ?> job) {
+ return job instanceof AbstractProject;
+ }
+
@Override protected void calculate(Run, ?> build, JSONObject element) {
BallColor iconColor = build.getIconColor();
element.put("iconName", iconColor.getIconName());
@@ -46,6 +52,8 @@ public class BuildTimeTrend extends RunListProgressiveRendering {
element.put("displayName", build.getDisplayName());
element.put("duration", build.getDuration());
element.put("durationString", build.getDurationString());
+ element.put("timestampString", build.getTimestampString());
+ element.put("timestampString2", build.getTimestampString2());
element.put("consoleUrl", ConsoleUrlProvider.getRedirectUrl(build));
if (build instanceof AbstractBuild) {
AbstractBuild, ?> b = (AbstractBuild) build;
diff --git a/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly b/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly
index 18f874a6751f..7efb53f362a4 100644
--- a/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly
+++ b/core/src/main/resources/hudson/model/Job/buildTimeTrend.jelly
@@ -25,7 +25,7 @@ THE SOFTWARE.
-
+
@@ -45,29 +45,36 @@ THE SOFTWARE.
+
${%Build Time Trend}
-
+
+
+
+ ${handler.setBuilds(it.builds)}
+
+
+
+
+
+
+ ${%S} |
+ ${%Build} |
+ ${%Time Since} |
+ ${%Duration} |
+
+ ${%Agent} |
+
+ |
+
+
+
+
+
+
-
-
-
-
- ${handler.setBuilds(it.builds)}
-
-
-
- |
- ${%Build} |
- ${%Duration} |
-
- ${%Agent} |
-
-
-
-
diff --git a/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.css b/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.css
index 13efe1c1e375..af8ba3705509 100644
--- a/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.css
+++ b/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.css
@@ -1,3 +1,10 @@
-img.build-time-graph {
- float: right;
+#buildTimeTrend {
+ display: flex;
+ gap: 15px;
+}
+
+@media (max-width: 1300px) {
+ #buildTimeTrend {
+ flex-direction: column-reverse;
+ }
}
diff --git a/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.js b/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.js
index 8a6cbfd49253..9ea25a3441de 100644
--- a/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.js
+++ b/core/src/main/resources/hudson/model/Job/buildTimeTrend_resources.js
@@ -2,30 +2,31 @@
* Public method to be called by progressiveRendering's callback
*/
window.buildTimeTrend_displayBuilds = function (data) {
- var p = document.getElementById("trend");
- var isDistributedBuildsEnabled =
- "true" === p.getAttribute("data-is-distributed-build-enabled");
- var rootURL = document.head.getAttribute("data-rooturl");
+ const p = document.getElementById("trend");
+ p.classList.remove("jenkins-hidden");
- for (var x = 0; data.length > x; x++) {
- var e = data[x];
- var tr = document.createElement("tr");
+ const showAgent = "true" === p.dataset.showAgent;
+ const rootURL = document.head.getAttribute("data-rooturl");
+
+ for (let x = 0; data.length > x; x++) {
+ const e = data[x];
+ let tr = document.createElement("tr");
let td = document.createElement("td");
td.setAttribute("data", e.iconColorOrdinal);
-
- let link = document.createElement("a");
- link.classList.add("build-status-link");
- link.href = e.consoleUrl;
- td.appendChild(link);
+ td.classList.add("jenkins-table__cell--tight", "jenkins-table__icon");
+ let div = document.createElement("div");
+ div.classList.add("jenkins-table__cell__button-wrapper");
let svg = generateSVGIcon(e.iconName);
- link.appendChild(svg);
+ svg.setAttribute("tooltip", e.iconColorDescription);
+ div.appendChild(svg);
+ td.appendChild(div);
tr.appendChild(td);
td = document.createElement("td");
td.setAttribute("data", e.number);
- link = document.createElement("a");
+ let link = document.createElement("a");
link.href = e.number + "/";
link.classList.add("model-link", "inside");
link.innerText = escapeHTML(e.displayName);
@@ -33,15 +34,20 @@ window.buildTimeTrend_displayBuilds = function (data) {
td.appendChild(link);
tr.appendChild(td);
+ td = document.createElement("td");
+ td.setAttribute("data", e.timestampString2);
+ td.textContent = e.timestampString;
+ tr.appendChild(td);
+
td = document.createElement("td");
td.setAttribute("data", e.duration);
td.innerText = escapeHTML(e.durationString);
tr.appendChild(td);
- if (isDistributedBuildsEnabled) {
- var buildInfo = null;
- var buildInfoStr = escapeHTML(e.builtOnStr || "");
+ if (showAgent) {
+ let buildInfo = null;
+ let buildInfoStr = escapeHTML(e.builtOnStr || "");
if (e.builtOn) {
buildInfo = document.createElement("a");
buildInfo.href = rootURL + "/computer/" + e.builtOn;
@@ -58,6 +64,19 @@ window.buildTimeTrend_displayBuilds = function (data) {
}
tr.appendChild(td);
}
+
+ let tdConsole = document.createElement("td");
+ tdConsole.classList.add("jenkins-table__cell--tight");
+ let div2 = document.createElement("div");
+ div2.classList.add("jenkins-table__cell__button-wrapper");
+ link = document.createElement("a");
+ link.classList.add("jenkins-button", "jenkins-button--tertiary");
+ link.href = e.consoleUrl;
+ link.appendChild(generateSVGIcon("console"));
+ div2.appendChild(link);
+ tdConsole.appendChild(div2);
+ tr.appendChild(tdConsole);
+
p.appendChild(tr);
Behaviour.applySubtree(tr);
}
@@ -132,7 +151,7 @@ window.displayBuilds = function (data) {
var div2 = document.createElement("div");
div2.classList.add("jenkins-table__cell__button-wrapper");
var a3 = document.createElement("a");
- a3.classList.add("jenkins-button");
+ a3.classList.add("jenkins-button", "jenkins-button--tertiary");
a3.href = e.consoleUrl;
a3.innerHTML = p.dataset.consoleOutputIcon;
div2.appendChild(a3);
diff --git a/test/src/test/java/jenkins/widgets/BuildTimeTrendTest.java b/test/src/test/java/jenkins/widgets/BuildTimeTrendTest.java
index cd729ed55668..38823a27a99a 100644
--- a/test/src/test/java/jenkins/widgets/BuildTimeTrendTest.java
+++ b/test/src/test/java/jenkins/widgets/BuildTimeTrendTest.java
@@ -74,7 +74,7 @@ public void withAbstractJob_OnBuiltInNode() throws Exception {
wc.withThrowExceptionOnFailingStatusCode(false);
HtmlPage page = wc.getPage(p, "buildTimeTrend");
- HtmlTable table = page.getDocumentElement().querySelector("table[data-is-distributed-build-enabled=false]");
+ HtmlTable table = page.getDocumentElement().querySelector("table[data-show-agent=false]");
assertNotNull(table);
}
@@ -91,7 +91,7 @@ public void withAbstractJob_OnAgentNode() throws Exception {
wc.withThrowExceptionOnFailingStatusCode(false);
HtmlPage page = wc.getPage(p, "buildTimeTrend");
- DomNodeList anchors = page.getDocumentElement().querySelectorAll("table[data-is-distributed-build-enabled=true] td a");
+ DomNodeList anchors = page.getDocumentElement().querySelectorAll("table[data-show-agent=true] td a");
Optional anchor = anchors.stream()
.filter(a -> a.getTextContent().equals(agent.getNodeName()))
.findFirst();
@@ -115,7 +115,7 @@ public void withAbstractJob_OnBoth() throws Exception {
wc.withThrowExceptionOnFailingStatusCode(false);
HtmlPage page = wc.getPage(p, "buildTimeTrend");
- DomNodeList anchors = page.getDocumentElement().querySelectorAll("table[data-is-distributed-build-enabled=true] td a");
+ DomNodeList anchors = page.getDocumentElement().querySelectorAll("table[data-show-agent=true] td a");
Optional anchor = anchors.stream()
.filter(a -> a.getTextContent().equals(agent.getNodeName()))
.findFirst();
@@ -123,7 +123,7 @@ public void withAbstractJob_OnBoth() throws Exception {
assertTrue(anchor.isPresent());
String builtInNode = hudson.model.Messages.Hudson_Computer_DisplayName();
- DomNodeList tds = page.getDocumentElement().querySelectorAll("table[data-is-distributed-build-enabled=true] td");
+ DomNodeList tds = page.getDocumentElement().querySelectorAll("table[data-show-agent=true] td");
Optional td = tds.stream()
.filter(t -> t.getTextContent().equals(builtInNode))
.findFirst();
@@ -142,7 +142,7 @@ public void withNonAbstractJob_withoutAgents() throws Exception {
wc.withThrowExceptionOnFailingStatusCode(false);
HtmlPage page = wc.getPage(p, "buildTimeTrend");
- DomNodeList tds = page.getDocumentElement().querySelectorAll("table[data-is-distributed-build-enabled=false] td");
+ DomNodeList tds = page.getDocumentElement().querySelectorAll("table[data-show-agent=false] td");
Optional td = tds.stream()
.filter(t -> t.getTextContent().equals("#1"))
.findFirst();
@@ -168,7 +168,7 @@ public void withNonAbstractJob_withAgents() throws Exception {
wc.withThrowExceptionOnFailingStatusCode(false);
HtmlPage page = wc.getPage(p, "buildTimeTrend");
- DomNodeList tds = page.getDocumentElement().querySelectorAll("table[data-is-distributed-build-enabled=true] td");
+ DomNodeList tds = page.getDocumentElement().querySelectorAll("table[data-show-agent=false] td");
Optional td = tds.stream()
.filter(t -> t.getTextContent().equals("#1"))
.findFirst();
From 0255a59b2364d2f838eaa64ee5e0fdb365e486b5 Mon Sep 17 00:00:00 2001
From: Markus Winter
Date: Mon, 22 Jul 2024 18:34:15 +0200
Subject: [PATCH 167/179] experimental flag to run Jenkins without YUI (#9489)
* experimental flag to run Jenkins without YUI
The YUI library is old and no longer maintained.
Add a user experimental flag to disable YUI. It's disabled by default.
When enabling all the YUI related js libraries and css classes are not
loaded.
Following PR are required to get Jenkins to not show any errors
eventually #7569
Some plugins that use YUI (not complete):
credentials
ldap
global-build-stats
build-monitor
categorized-view
Plugins that make use of makeButton (not complete)
credentials (fixed with https://github.com/jenkinsci/credentials-plugin/pull/533)
openid
acceptance-test-harness
* fix typo
Co-authored-by: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
* add license and restrict class
---------
Co-authored-by: Jan Faracik <43062514+janfaracik@users.noreply.github.com>
---
.../RemoveYuiUserExperimentalFlag.java | 49 +++++++++++++++++++
.../main/resources/lib/layout/layout.jelly | 47 ++++++++++--------
2 files changed, 75 insertions(+), 21 deletions(-)
create mode 100644 core/src/main/java/jenkins/model/experimentalflags/RemoveYuiUserExperimentalFlag.java
diff --git a/core/src/main/java/jenkins/model/experimentalflags/RemoveYuiUserExperimentalFlag.java b/core/src/main/java/jenkins/model/experimentalflags/RemoveYuiUserExperimentalFlag.java
new file mode 100644
index 000000000000..e8f8dcc31775
--- /dev/null
+++ b/core/src/main/java/jenkins/model/experimentalflags/RemoveYuiUserExperimentalFlag.java
@@ -0,0 +1,49 @@
+/*
+ * The MIT License
+ *
+ * Copyright (c) 2024, Markus Winter
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+package jenkins.model.experimentalflags;
+
+import edu.umd.cs.findbugs.annotations.Nullable;
+import hudson.Extension;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
+
+@Extension
+@Restricted(NoExternalUse.class)
+public class RemoveYuiUserExperimentalFlag extends BooleanUserExperimentalFlag {
+ public RemoveYuiUserExperimentalFlag() {
+ super("remove-yui.flag");
+ }
+
+ @Override
+ public String getDisplayName() {
+ return "Remove YUI";
+ }
+
+ @Nullable
+ @Override
+ public String getShortDescription() {
+ return "Remove YUI from all Jenkins UI pages. This will break anything that depends on YUI";
+ }
+}
diff --git a/core/src/main/resources/lib/layout/layout.jelly b/core/src/main/resources/lib/layout/layout.jelly
index 21ac81ff18b6..210ca66f855a 100644
--- a/core/src/main/resources/lib/layout/layout.jelly
+++ b/core/src/main/resources/lib/layout/layout.jelly
@@ -128,31 +128,36 @@ THE SOFTWARE.
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -173,7 +178,7 @@ THE SOFTWARE.
-
+
From 979f47b15db7791fb14f6a2e787375ecfd84f11d Mon Sep 17 00:00:00 2001
From: Jenkins Release Bot
<66998184+jenkins-release-bot@users.noreply.github.com>
Date: Tue, 23 Jul 2024 13:33:48 +0000
Subject: [PATCH 168/179] [maven-release-plugin] prepare release jenkins-2.469
---
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 63d8b5cd65f7..ef87e06b0d0e 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
jenkins-bom
diff --git a/cli/pom.xml b/cli/pom.xml
index c037ed4a0ee8..aceaf8e93ac5 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
cli
diff --git a/core/pom.xml b/core/pom.xml
index 95c289164930..e943dcc89273 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
jenkins-core
diff --git a/coverage/pom.xml b/coverage/pom.xml
index fe1e89a120dc..3dafc2950c1b 100644
--- a/coverage/pom.xml
+++ b/coverage/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
jenkins-coverage
diff --git a/pom.xml b/pom.xml
index a952ef72e8d3..20218f941726 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
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.469
https://github.com/jenkinsci/jenkins
@@ -75,7 +75,7 @@ THE SOFTWARE.
2.469
-SNAPSHOT
- 2024-07-16T13:36:31Z
+ 2024-07-23T10:34:21Z
github
diff --git a/test/pom.xml b/test/pom.xml
index ede4a5e74bff..56d98c8ab3d5 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
jenkins-test
diff --git a/war/pom.xml b/war/pom.xml
index 5da75ee1a520..664137a35f66 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- ${revision}${changelist}
+ 2.469
jenkins-war
diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml
index c91e1583c039..a415630f09df 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.469
../..
diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml
index a99aada6a446..d87556dcb693 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.469
../..
From 0d5232fca40a12b2d14f7ded577a90f0cb3c6f06 Mon Sep 17 00:00:00 2001
From: Jenkins Release Bot
<66998184+jenkins-release-bot@users.noreply.github.com>
Date: Tue, 23 Jul 2024 13:34:10 +0000
Subject: [PATCH 169/179] [maven-release-plugin] prepare for next development
iteration
---
bom/pom.xml | 2 +-
cli/pom.xml | 2 +-
core/pom.xml | 2 +-
coverage/pom.xml | 2 +-
pom.xml | 8 ++++----
test/pom.xml | 2 +-
war/pom.xml | 2 +-
websocket/jetty10/pom.xml | 2 +-
websocket/spi/pom.xml | 2 +-
9 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/bom/pom.xml b/bom/pom.xml
index ef87e06b0d0e..63d8b5cd65f7 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
jenkins-bom
diff --git a/cli/pom.xml b/cli/pom.xml
index aceaf8e93ac5..c037ed4a0ee8 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
cli
diff --git a/core/pom.xml b/core/pom.xml
index e943dcc89273..95c289164930 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -29,7 +29,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
jenkins-core
diff --git a/coverage/pom.xml b/coverage/pom.xml
index 3dafc2950c1b..fe1e89a120dc 100644
--- a/coverage/pom.xml
+++ b/coverage/pom.xml
@@ -5,7 +5,7 @@
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
jenkins-coverage
diff --git a/pom.xml b/pom.xml
index 20218f941726..dcf21e286330 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${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.469
+ ${scmTag}
https://github.com/jenkinsci/jenkins
@@ -73,9 +73,9 @@ THE SOFTWARE.
- 2.469
+ 2.470
-SNAPSHOT
- 2024-07-23T10:34:21Z
+ 2024-07-23T13:33:48Z
github
diff --git a/test/pom.xml b/test/pom.xml
index 56d98c8ab3d5..ede4a5e74bff 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
jenkins-test
diff --git a/war/pom.xml b/war/pom.xml
index 664137a35f66..5da75ee1a520 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
jenkins-war
diff --git a/websocket/jetty10/pom.xml b/websocket/jetty10/pom.xml
index a415630f09df..c91e1583c039 100644
--- a/websocket/jetty10/pom.xml
+++ b/websocket/jetty10/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
../..
diff --git a/websocket/spi/pom.xml b/websocket/spi/pom.xml
index d87556dcb693..a99aada6a446 100644
--- a/websocket/spi/pom.xml
+++ b/websocket/spi/pom.xml
@@ -28,7 +28,7 @@ THE SOFTWARE.
org.jenkins-ci.main
jenkins-parent
- 2.469
+ ${revision}${changelist}
../..
From 220165fd27f776e0e3155fd077d6f212a4824a1b Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Tue, 23 Jul 2024 21:50:21 -0400
Subject: [PATCH 170/179] `ItemListener.onCheckDelete` &
`ItemDeletion.cancelBuildsInProgress` (#9480)
* `ItemListener.onCheckDelete` & `ItemDeletion.cancelBuildsInProgress`
* Remove missing parameter from javadoc
---------
Co-authored-by: Vincent Latombe
---
.../main/java/hudson/model/AbstractItem.java | 94 +--------------
.../hudson/model/listeners/ItemListener.java | 25 ++++
.../jenkins/model/queue/ItemDeletion.java | 109 +++++++++++++++++-
3 files changed, 137 insertions(+), 91 deletions(-)
diff --git a/core/src/main/java/hudson/model/AbstractItem.java b/core/src/main/java/hudson/model/AbstractItem.java
index 614b1c13eb4d..adebec8f289f 100644
--- a/core/src/main/java/hudson/model/AbstractItem.java
+++ b/core/src/main/java/hudson/model/AbstractItem.java
@@ -25,7 +25,6 @@
package hudson.model;
-import static hudson.model.queue.Executables.getParentOf;
import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST;
import com.infradna.tool.bridge_method_injector.WithBridgeMethods;
@@ -39,9 +38,6 @@
import hudson.cli.declarative.CLIResolver;
import hudson.model.listeners.ItemListener;
import hudson.model.listeners.SaveableListener;
-import hudson.model.queue.SubTask;
-import hudson.model.queue.Tasks;
-import hudson.model.queue.WorkUnit;
import hudson.security.ACL;
import hudson.security.ACLContext;
import hudson.security.AccessControlled;
@@ -57,12 +53,8 @@
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.Collection;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.ListIterator;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
@@ -705,11 +697,13 @@ public void delete(StaplerRequest req, StaplerResponse rsp) throws IOException,
*
*
* Any exception indicates the deletion has failed, but {@link AbortException} would prevent the caller
- * from showing the stack trace. This
+ * from showing the stack trace.
+ * @see ItemDeletion
*/
@Override
public void delete() throws IOException, InterruptedException {
checkPermission(DELETE);
+ ItemListener.checkBeforeDelete(this);
boolean responsibleForAbortingBuilds = !ItemDeletion.contains(this);
boolean ownsRegistration = ItemDeletion.register(this);
if (!ownsRegistration && ItemDeletion.isRegistered(this)) {
@@ -719,87 +713,7 @@ public void delete() throws IOException, InterruptedException {
try {
// if a build is in progress. Cancel it.
if (responsibleForAbortingBuilds || ownsRegistration) {
- Queue queue = Queue.getInstance();
- if (this instanceof Queue.Task) {
- // clear any items in the queue so they do not get picked up
- queue.cancel((Queue.Task) this);
- }
- // now cancel any child items - this happens after ItemDeletion registration, so we can use a snapshot
- for (Queue.Item i : queue.getItems()) {
- Item item = Tasks.getItemOf(i.task);
- while (item != null) {
- if (item == this) {
- if (!queue.cancel(i)) {
- LOGGER.warning(() -> "failed to cancel " + i);
- }
- break;
- }
- if (item.getParent() instanceof Item) {
- item = (Item) item.getParent();
- } else {
- break;
- }
- }
- }
- // interrupt any builds in progress (and this should be a recursive test so that folders do not pay
- // the 15 second delay for every child item). This happens after queue cancellation, so will be
- // a complete set of builds in flight
- Map buildsInProgress = new LinkedHashMap<>();
- for (Computer c : Jenkins.get().getComputers()) {
- for (Executor e : c.getAllExecutors()) {
- final WorkUnit workUnit = e.getCurrentWorkUnit();
- final Queue.Executable executable = workUnit != null ? workUnit.getExecutable() : null;
- final SubTask subtask = executable != null ? getParentOf(executable) : null;
-
- if (subtask != null) {
- Item item = Tasks.getItemOf(subtask);
- while (item != null) {
- if (item == this) {
- buildsInProgress.put(e, e.getCurrentExecutable());
- e.interrupt(Result.ABORTED);
- break;
- }
- if (item.getParent() instanceof Item) {
- item = (Item) item.getParent();
- } else {
- break;
- }
- }
- }
- }
- }
- if (!buildsInProgress.isEmpty()) {
- // give them 15 seconds or so to respond to the interrupt
- long expiration = System.nanoTime() + TimeUnit.SECONDS.toNanos(15);
- // comparison with executor.getCurrentExecutable() == computation currently should always be true
- // as we no longer recycle Executors, but safer to future-proof in case we ever revisit recycling
- while (!buildsInProgress.isEmpty() && expiration - System.nanoTime() > 0L) {
- // we know that ItemDeletion will prevent any new builds in the queue
- // ItemDeletion happens-before Queue.cancel so we know that the Queue will stay clear
- // Queue.cancel happens-before collecting the buildsInProgress list
- // thus buildsInProgress contains the complete set we need to interrupt and wait for
- for (Iterator> iterator =
- buildsInProgress.entrySet().iterator();
- iterator.hasNext(); ) {
- Map.Entry entry = iterator.next();
- // comparison with executor.getCurrentExecutable() == executable currently should always be
- // true as we no longer recycle Executors, but safer to future-proof in case we ever
- // revisit recycling.
- if (!entry.getKey().isAlive()
- || entry.getValue() != entry.getKey().getCurrentExecutable()) {
- iterator.remove();
- }
- // I don't know why, but we have to keep interrupting
- entry.getKey().interrupt(Result.ABORTED);
- }
- Thread.sleep(50L);
- }
- if (!buildsInProgress.isEmpty()) {
- throw new Failure(Messages.AbstractItem_FailureToStopBuilds(
- buildsInProgress.size(), getFullDisplayName()
- ));
- }
- }
+ ItemDeletion.cancelBuildsInProgress(this);
}
if (this instanceof ItemGroup) {
// delete individual items first
diff --git a/core/src/main/java/hudson/model/listeners/ItemListener.java b/core/src/main/java/hudson/model/listeners/ItemListener.java
index aef431c3207b..fe09a9c56373 100644
--- a/core/src/main/java/hudson/model/listeners/ItemListener.java
+++ b/core/src/main/java/hudson/model/listeners/ItemListener.java
@@ -35,6 +35,8 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.util.Listeners;
+import org.kohsuke.accmod.Restricted;
+import org.kohsuke.accmod.restrictions.NoExternalUse;
/**
* Receives notifications about CRUD operations of {@link Item}.
@@ -94,6 +96,16 @@ public void onCopied(Item src, Item item) {
public void onLoaded() {
}
+ /**
+ * Called before an item is deleted, providing the ability to veto the deletion operation before it starts.
+ * @param item the item being deleted
+ * @throws Failure to veto the operation.
+ * @throws InterruptedException If a blocking condition was interrupted, also vetoing the operation.
+ * @since TODO
+ */
+ public void onCheckDelete(Item item) throws Failure, InterruptedException {
+ }
+
/**
* Called right before a job is going to be deleted.
*
@@ -205,6 +217,19 @@ public static void fireOnUpdated(final Item item) {
Listeners.notify(ItemListener.class, false, l -> l.onUpdated(item));
}
+ @Restricted(NoExternalUse.class)
+ public static void checkBeforeDelete(Item item) throws Failure, InterruptedException {
+ for (ItemListener l : all()) {
+ try {
+ l.onCheckDelete(item);
+ } catch (Failure e) {
+ throw e;
+ } catch (RuntimeException x) {
+ LOGGER.log(Level.WARNING, "failed to send event to listener of " + l.getClass(), x);
+ }
+ }
+ }
+
/** @since 1.548 */
public static void fireOnDeleted(final Item item) {
Listeners.notify(ItemListener.class, false, l -> l.onDeleted(item));
diff --git a/core/src/main/java/jenkins/model/queue/ItemDeletion.java b/core/src/main/java/jenkins/model/queue/ItemDeletion.java
index e5c9fc2ca87e..fd18edde04a5 100644
--- a/core/src/main/java/jenkins/model/queue/ItemDeletion.java
+++ b/core/src/main/java/jenkins/model/queue/ItemDeletion.java
@@ -28,25 +28,42 @@
import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.ExtensionList;
+import hudson.model.AbstractItem;
import hudson.model.Action;
+import hudson.model.Computer;
+import hudson.model.Executor;
+import hudson.model.Failure;
import hudson.model.Item;
+import hudson.model.Messages;
import hudson.model.Queue;
+import hudson.model.Result;
+import hudson.model.queue.Executables;
+import hudson.model.queue.SubTask;
import hudson.model.queue.Tasks;
+import hudson.model.queue.WorkUnit;
import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
import java.util.Set;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
+import java.util.logging.Logger;
+import jenkins.model.Jenkins;
import net.jcip.annotations.GuardedBy;
/**
* A {@link Queue.QueueDecisionHandler} that blocks items being deleted from entering the queue.
- *
+ * @see AbstractItem#delete()
* @since 2.55
*/
@Extension
public class ItemDeletion extends Queue.QueueDecisionHandler {
+ private static final Logger LOGGER = Logger.getLogger(ItemDeletion.class.getName());
+
/**
* Lock to guard the {@link #registrations} set.
*/
@@ -176,4 +193,94 @@ public boolean shouldSchedule(Queue.Task p, List actions) {
}
return true;
}
+
+ /**
+ * Cancels any builds in progress of this item (if a job) or descendants (if a folder).
+ * Also cancels any associated queue items.
+ * @param initiatingItem an item being deleted
+ * @since TODO
+ */
+ public static void cancelBuildsInProgress(@NonNull Item initiatingItem) throws Failure, InterruptedException {
+ Queue queue = Queue.getInstance();
+ if (initiatingItem instanceof Queue.Task) {
+ // clear any items in the queue so they do not get picked up
+ queue.cancel((Queue.Task) initiatingItem);
+ }
+ // now cancel any child items - this happens after ItemDeletion registration, so we can use a snapshot
+ for (Queue.Item i : queue.getItems()) {
+ Item item = Tasks.getItemOf(i.task);
+ while (item != null) {
+ if (item == initiatingItem) {
+ if (!queue.cancel(i)) {
+ LOGGER.warning(() -> "failed to cancel " + i);
+ }
+ break;
+ }
+ if (item.getParent() instanceof Item) {
+ item = (Item) item.getParent();
+ } else {
+ break;
+ }
+ }
+ }
+ // interrupt any builds in progress (and this should be a recursive test so that folders do not pay
+ // the 15 second delay for every child item). This happens after queue cancellation, so will be
+ // a complete set of builds in flight
+ Map buildsInProgress = new LinkedHashMap<>();
+ for (Computer c : Jenkins.get().getComputers()) {
+ for (Executor e : c.getAllExecutors()) {
+ final WorkUnit workUnit = e.getCurrentWorkUnit();
+ final Queue.Executable executable = workUnit != null ? workUnit.getExecutable() : null;
+ final SubTask subtask = executable != null ? Executables.getParentOf(executable) : null;
+ if (subtask != null) {
+ Item item = Tasks.getItemOf(subtask);
+ while (item != null) {
+ if (item == initiatingItem) {
+ buildsInProgress.put(e, e.getCurrentExecutable());
+ e.interrupt(Result.ABORTED);
+ break;
+ }
+ if (item.getParent() instanceof Item) {
+ item = (Item) item.getParent();
+ } else {
+ break;
+ }
+ }
+ }
+ }
+ }
+ if (!buildsInProgress.isEmpty()) {
+ // give them 15 seconds or so to respond to the interrupt
+ long expiration = System.nanoTime() + TimeUnit.SECONDS.toNanos(15);
+ // comparison with executor.getCurrentExecutable() == computation currently should always be true
+ // as we no longer recycle Executors, but safer to future-proof in case we ever revisit recycling
+ while (!buildsInProgress.isEmpty() && expiration - System.nanoTime() > 0L) {
+ // we know that ItemDeletion will prevent any new builds in the queue
+ // ItemDeletion happens-before Queue.cancel so we know that the Queue will stay clear
+ // Queue.cancel happens-before collecting the buildsInProgress list
+ // thus buildsInProgress contains the complete set we need to interrupt and wait for
+ for (Iterator> iterator =
+ buildsInProgress.entrySet().iterator();
+ iterator.hasNext(); ) {
+ Map.Entry entry = iterator.next();
+ // comparison with executor.getCurrentExecutable() == executable currently should always be
+ // true as we no longer recycle Executors, but safer to future-proof in case we ever
+ // revisit recycling.
+ if (!entry.getKey().isAlive()
+ || entry.getValue() != entry.getKey().getCurrentExecutable()) {
+ iterator.remove();
+ }
+ // I don't know why, but we have to keep interrupting
+ entry.getKey().interrupt(Result.ABORTED);
+ }
+ Thread.sleep(50L);
+ }
+ if (!buildsInProgress.isEmpty()) {
+ throw new Failure(Messages.AbstractItem_FailureToStopBuilds(
+ buildsInProgress.size(), initiatingItem.getFullDisplayName()
+ ));
+ }
+ }
+ }
+
}
From 2d7bcec27bce8e3bbb620be8069afc00a2a75825 Mon Sep 17 00:00:00 2001
From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com>
Date: Wed, 24 Jul 2024 17:17:38 -0700
Subject: [PATCH 171/179] Bump org.jenkins-ci.plugins:junit from
1265.v65b_14fa_f12f0 to 1279.v72cf99b_25c43 (#9492)
Signed-off-by: dependabot[bot]
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
---
test/pom.xml | 2 +-
war/pom.xml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/pom.xml b/test/pom.xml
index ede4a5e74bff..2cd2359d1ba7 100644
--- a/test/pom.xml
+++ b/test/pom.xml
@@ -228,7 +228,7 @@ THE SOFTWARE.
org.jenkins-ci.plugins
junit
- 1265.v65b_14fa_f12f0
+ 1279.v72cf99b_25c43
test
diff --git a/war/pom.xml b/war/pom.xml
index 5da75ee1a520..e8196566716a 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -298,7 +298,7 @@ THE SOFTWARE.
org.jenkins-ci.plugins
junit
- 1265.v65b_14fa_f12f0
+ 1279.v72cf99b_25c43
hpi
From cff28cdd3e832790eeda4fcf7e294cb0d0501527 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 25 Jul 2024 18:03:47 -0700
Subject: [PATCH 172/179] Update jenkins/ath Docker tag to v5906 (#9496)
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 4feb60dda029..d71a318fb0b7 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=5895.v44475b_ca_0c78
+export ATH_VERSION=5906.v3b_8f6cb_90e60
if [[ $# -eq 0 ]]; then
export JDK=17
From 4daa0788740542086f421f862fe1f5f85a78914d Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 25 Jul 2024 19:17:25 -0700
Subject: [PATCH 173/179] Update jenkins/ath Docker tag to v5909 (#9497)
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 d71a318fb0b7..81106967e54b 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=5906.v3b_8f6cb_90e60
+export ATH_VERSION=5909.vc4fa_3e55b_f84
if [[ $# -eq 0 ]]; then
export JDK=17
From 6f7edd18681ab38d0e0db7f002c21b8bd7f8766e Mon Sep 17 00:00:00 2001
From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com>
Date: Sat, 27 Jul 2024 09:58:51 +0200
Subject: [PATCH 174/179] Add missing at-since in AdministrativeMonitor (#9493)
---
core/src/main/java/hudson/model/AdministrativeMonitor.java | 2 ++
1 file changed, 2 insertions(+)
diff --git a/core/src/main/java/hudson/model/AdministrativeMonitor.java b/core/src/main/java/hudson/model/AdministrativeMonitor.java
index 61208dea6467..8ef938f1310e 100644
--- a/core/src/main/java/hudson/model/AdministrativeMonitor.java
+++ b/core/src/main/java/hudson/model/AdministrativeMonitor.java
@@ -213,6 +213,7 @@ public Permission getRequiredPermission() {
*
* @see #getRequiredPermission()
* @see #hasRequiredPermission()
+ * @since 2.468
*/
public void checkRequiredPermission() {
Jenkins.get().checkPermission(getRequiredPermission());
@@ -226,6 +227,7 @@ public void checkRequiredPermission() {
*
* @see #getRequiredPermission()
* @see #checkRequiredPermission()
+ * @since 2.468
*/
public boolean hasRequiredPermission() {
return Jenkins.get().hasPermission(getRequiredPermission());
From 9967a76db9d4ade2510734fb35c522635c47a899 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sat, 27 Jul 2024 11:46:10 -0700
Subject: [PATCH 175/179] Update dependency sass-loader to v15 (#9498)
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 a1fc1a8b5d0c..5f42845e5b66 100644
--- a/war/package.json
+++ b/war/package.json
@@ -43,7 +43,7 @@
"postcss-scss": "4.0.9",
"prettier": "3.3.3",
"sass": "1.77.8",
- "sass-loader": "14.2.1",
+ "sass-loader": "15.0.0",
"style-loader": "4.0.0",
"stylelint": "16.7.0",
"stylelint-checkstyle-reporter": "1.0.0",
diff --git a/war/yarn.lock b/war/yarn.lock
index f7fa1b3c1117..97b3c957b34e 100644
--- a/war/yarn.lock
+++ b/war/yarn.lock
@@ -4433,7 +4433,7 @@ __metadata:
postcss-scss: "npm:4.0.9"
prettier: "npm:3.3.3"
sass: "npm:1.77.8"
- sass-loader: "npm:14.2.1"
+ sass-loader: "npm:15.0.0"
sortablejs: "npm:1.15.2"
style-loader: "npm:4.0.0"
stylelint: "npm:16.7.0"
@@ -6364,9 +6364,9 @@ __metadata:
languageName: node
linkType: hard
-"sass-loader@npm:14.2.1":
- version: 14.2.1
- resolution: "sass-loader@npm:14.2.1"
+"sass-loader@npm:15.0.0":
+ version: 15.0.0
+ resolution: "sass-loader@npm:15.0.0"
dependencies:
neo-async: "npm:^2.6.2"
peerDependencies:
@@ -6386,7 +6386,7 @@ __metadata:
optional: true
webpack:
optional: true
- checksum: 10c0/9a48d454584d96d6c562eb323bb9e3c6808e930eeaaa916975b97d45831e0b87936a8655cdb3a4512a25abc9587dea65a9616e42396be0d7e7c507a4795a8146
+ checksum: 10c0/8e17d21194f5806a971e98c149ac5a2387fa3b4327a81f2194253b61181c6dac965970c30e1e1b294f977e1822ff7c03feb0e26864f1f43cdea34a82caaf40af
languageName: node
linkType: hard
From f9cc2a537ab43399233680f6f4f4abbabe6cb52c Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Sun, 28 Jul 2024 09:31:18 +0200
Subject: [PATCH 176/179] Update dependency node to v20.16.0 (#9500)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
war/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/war/pom.xml b/war/pom.xml
index e8196566716a..02b0efeb0f3e 100644
--- a/war/pom.xml
+++ b/war/pom.xml
@@ -47,7 +47,7 @@ THE SOFTWARE.
8080
2.13.1-117.v2f1a_b_66ff91d
- 20.15.1
+ 20.16.0
1.22.19
From 90fb0d6e5e679296f3a20c2914bac5f6388fc1d0 Mon Sep 17 00:00:00 2001
From: Markus Winter
Date: Sun, 28 Jul 2024 16:12:33 +0200
Subject: [PATCH 177/179] scroll fields from added hetero-list entry into
viewport (#9488)
* remove YUI from ensureVisible
replace usage of YUI with plain javascript in the ensureVisible method
The current logic seems to have no effect, so it is changed in the
following
When the element is bigger then the current viewport height, scroll so
that the element is at the top.
If the elements is smaller than the viewport height and the bottom is
outside scoll so that the bottom is at the lower end of the viewport.
Otherwise no scrolling is needed the element is already completely
inside the viewport.
* apply prettier
* remove body.scrollTop
---
.../main/webapp/scripts/hudson-behavior.js | 30 +++++++++----------
1 file changed, 14 insertions(+), 16 deletions(-)
diff --git a/war/src/main/webapp/scripts/hudson-behavior.js b/war/src/main/webapp/scripts/hudson-behavior.js
index 8d1a0a9e8e8a..110a09fa199f 100644
--- a/war/src/main/webapp/scripts/hudson-behavior.js
+++ b/war/src/main/webapp/scripts/hudson-behavior.js
@@ -2242,14 +2242,13 @@ function getStyle(e, a) {
*/
// eslint-disable-next-line no-unused-vars
function ensureVisible(e) {
- var viewport = YAHOO.util.Dom.getClientRegion();
- var pos = YAHOO.util.Dom.getRegion(e);
-
- var Y = viewport.top;
- var H = viewport.height;
+ const scrollTop = document.documentElement.scrollTop;
+ let Y = scrollTop;
+ let H = window.innerHeight;
+ let c = 0;
function handleStickers(name, f) {
- var e = document.getElementById(name);
+ const e = document.getElementById(name);
if (e) {
f(e);
}
@@ -2261,6 +2260,7 @@ function ensureVisible(e) {
t = t.clientHeight;
Y += t;
H -= t;
+ c += t;
});
handleStickers("bottom-sticker", function (b) {
@@ -2268,17 +2268,15 @@ function ensureVisible(e) {
H -= b;
});
- var y = pos.top;
- var h = pos.height;
+ const box = e.getBoundingClientRect();
+ const y = Math.round(box.top + scrollTop);
+ const h = e.offsetHeight;
+ const d = y + h - (Y + H);
- var d = y + h - (Y + H);
- if (d > 0) {
- document.body.scrollTop += d;
- } else {
- d = Y - y;
- if (d > 0) {
- document.body.scrollTop -= d;
- }
+ if (h > H) {
+ document.documentElement.scrollTop = y - c;
+ } else if (d > 0) {
+ document.documentElement.scrollTop += d;
}
}
From 11f87f70adfc7c19609f6fd4644d06ca02d541d6 Mon Sep 17 00:00:00 2001
From: Daniel Beck <1831569+daniel-beck@users.noreply.github.com>
Date: Sun, 28 Jul 2024 16:12:48 +0200
Subject: [PATCH 178/179] Deprecate AdministrativeMonitor#getRequiredPermission
(#9494)
Co-authored-by: Daniel Beck
---
core/src/main/java/hudson/model/AdministrativeMonitor.java | 3 +++
1 file changed, 3 insertions(+)
diff --git a/core/src/main/java/hudson/model/AdministrativeMonitor.java b/core/src/main/java/hudson/model/AdministrativeMonitor.java
index 8ef938f1310e..bdbfb48027d3 100644
--- a/core/src/main/java/hudson/model/AdministrativeMonitor.java
+++ b/core/src/main/java/hudson/model/AdministrativeMonitor.java
@@ -200,7 +200,10 @@ public void doDisable(StaplerRequest req, StaplerResponse rsp) throws IOExceptio
* Form UI elements that change system state, e.g. toggling a feature on or off, need to be hidden from users
* lacking Administer permission.
*
+ * @since 2.233
+ * @deprecated Callers should use {@link #checkRequiredPermission()} or {@link #hasRequiredPermission()}.
*/
+ @Deprecated
public Permission getRequiredPermission() {
return Jenkins.ADMINISTER;
}
From cbfe2d4d00ade7db192e21ebfbc47d906d5f725b Mon Sep 17 00:00:00 2001
From: Jesse Glick
Date: Sun, 28 Jul 2024 10:13:05 -0400
Subject: [PATCH 179/179] Tolerate `HttpResponse` thrown from
`Descriptor.newInstance` (#9495)
* Tolerate `HttpResponse` thrown from `Descriptor.newInstance`
* Incremental version
* Pick up release of https://github.com/jenkinsci/stapler/pull/571
---
bom/pom.xml | 2 +-
core/src/main/java/hudson/model/Descriptor.java | 5 ++++-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/bom/pom.xml b/bom/pom.xml
index 63d8b5cd65f7..8f8e6412f7b0 100644
--- a/bom/pom.xml
+++ b/bom/pom.xml
@@ -40,7 +40,7 @@ THE SOFTWARE.
2.0.0-M2
2.0.13
- 1881.vd39f3ee5c629
+ 1892.v73465f3d074d
2.4.21
diff --git a/core/src/main/java/hudson/model/Descriptor.java b/core/src/main/java/hudson/model/Descriptor.java
index 07789531e94d..b5eb07784d27 100644
--- a/core/src/main/java/hudson/model/Descriptor.java
+++ b/core/src/main/java/hudson/model/Descriptor.java
@@ -594,6 +594,9 @@ public T newInstance(@Nullable StaplerRequest req, @NonNull JSONObject formData)
return verifyNewInstance(bindJSON(req, clazz, formData, true));
}
} catch (NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException | RuntimeException e) {
+ if (e instanceof RuntimeException && e instanceof HttpResponse) {
+ throw (RuntimeException) e;
+ }
throw new LinkageError("Failed to instantiate " + clazz + " from " + RedactSecretJsonInErrorMessageSanitizer.INSTANCE.sanitize(formData), e);
}
}
@@ -674,7 +677,7 @@ public Object instantiate(Class actualType, JSONObject json) {
+ actualType.getName() + " " + json);
}
} catch (Exception x) {
- LOGGER.log(Level.WARNING, "falling back to default instantiation " + actualType.getName() + " " + json, x);
+ LOGGER.log(x instanceof HttpResponse ? Level.FINE : Level.WARNING, "falling back to default instantiation " + actualType.getName() + " " + json, x);
// If nested objects are not using newInstance, bindJSON will wind up throwing the same exception anyway,
// so logging above will result in a duplicated stack trace.
// However if they *are* then this is the only way to find errors in that newInstance.
|