diff --git a/Jenkinsfile b/Jenkinsfile
index ac25f53..9bdbcc7 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -1,11 +1,10 @@
-#!groovy
-def recentLTS = '2.375.2'
+/*
+ See the documentation for more options:
+ https://github.com/jenkins-infra/pipeline-library/
+*/
buildPlugin(
- // Container agents start faster and are easier to administer
- useContainerAgent: true,
+ useContainerAgent: true, // Set to `false` if you need to use Docker for containerized tests
configurations: [
- [platform: 'linux', jdk: '11'],
- [platform: 'linux', jdk: '17', jenkins: recentLTS],
- [platform: 'windows', jdk: '17', jenkins: recentLTS],
- ]
-)
+ [platform: 'linux', jdk: 21],
+ [platform: 'windows', jdk: 17],
+])
diff --git a/pom.xml b/pom.xml
index 910d6f2..15c5211 100644
--- a/pom.xml
+++ b/pom.xml
@@ -34,7 +34,7 @@
scm:git:ssh://github.com/${gitHubRepo}.git
- scm:git:ssh://git@github.com/${gitHubRepo}.git
+ scm:git:git@github.com:${gitHubRepo}.git
${scmTag}
https://github.com/${gitHubRepo}
@@ -42,22 +42,32 @@
999999-SNAPSHOT
jenkinsci/simple-theme-plugin
- 2.361.1
- 1569.vb_72405b_80249
+ 2.421
+ 171
false
+
+
+
+ io.jenkins.tools.bom
+ bom-2.414.x
+ 2357.v1043f8578392
+ pom
+ import
+
+
+
+
io.jenkins
configuration-as-code
- ${configuration-as-code.version}
test
io.jenkins.configuration-as-code
test-harness
- ${configuration-as-code.version}
test
diff --git a/src/main/java/org/codefirst/SimpleThemeDecorator.java b/src/main/java/org/codefirst/SimpleThemeDecorator.java
index 944c185..10aac52 100644
--- a/src/main/java/org/codefirst/SimpleThemeDecorator.java
+++ b/src/main/java/org/codefirst/SimpleThemeDecorator.java
@@ -1,11 +1,14 @@
package org.codefirst;
+import edu.umd.cs.findbugs.annotations.NonNull;
import hudson.Extension;
import hudson.model.PageDecorator;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
+import jenkins.appearance.AppearanceCategory;
+import jenkins.model.GlobalConfigurationCategory;
import net.sf.json.JSONObject;
import org.apache.commons.lang.StringUtils;
import org.jenkinsci.Symbol;
@@ -20,7 +23,7 @@
import org.kohsuke.stapler.StaplerRequest;
@Extension
-@Symbol("simple-theme-plugin")
+@Symbol("simpleTheme")
public class SimpleThemeDecorator extends PageDecorator {
private List elements = new ArrayList<>();
@@ -50,6 +53,12 @@ public boolean configure(StaplerRequest req, JSONObject formData) throws FormExc
return true;
}
+ @NonNull
+ @Override
+ public GlobalConfigurationCategory getCategory() {
+ return GlobalConfigurationCategory.get(AppearanceCategory.class);
+ }
+
public List getElements() {
return elements;
}
diff --git a/src/main/resources/org/codefirst/SimpleThemeDecorator/global.groovy b/src/main/resources/org/codefirst/SimpleThemeDecorator/global.groovy
index 6a5db12..ccfa12a 100644
--- a/src/main/resources/org/codefirst/SimpleThemeDecorator/global.groovy
+++ b/src/main/resources/org/codefirst/SimpleThemeDecorator/global.groovy
@@ -4,7 +4,7 @@ import lib.FormTagLib
def f = namespace(FormTagLib)
-f.section(title: _("Theme")) {
+f.section(title: _("Customizable theme")) {
f.entry(title: _("Theme elements")) {
f.repeatableHeteroProperty(field: "elements", hasHeader: true)
}
diff --git a/src/test/java/org/jenkinsci/plugins/simpletheme/ConfigurationAsCodeTest.java b/src/test/java/org/jenkinsci/plugins/simpletheme/ConfigurationAsCodeTest.java
index bffe4a7..d2e08f9 100644
--- a/src/test/java/org/jenkinsci/plugins/simpletheme/ConfigurationAsCodeTest.java
+++ b/src/test/java/org/jenkinsci/plugins/simpletheme/ConfigurationAsCodeTest.java
@@ -1,6 +1,5 @@
package org.jenkinsci.plugins.simpletheme;
-import static io.jenkins.plugins.casc.misc.Util.getUnclassifiedRoot;
import static io.jenkins.plugins.casc.misc.Util.toStringFromYamlFile;
import static io.jenkins.plugins.casc.misc.Util.toYamlString;
import static org.hamcrest.MatcherAssert.assertThat;
@@ -11,11 +10,17 @@
import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
+import hudson.ExtensionList;
import io.jenkins.plugins.casc.ConfigurationContext;
import io.jenkins.plugins.casc.ConfiguratorRegistry;
+import io.jenkins.plugins.casc.impl.configurators.GlobalConfigurationCategoryConfigurator;
import io.jenkins.plugins.casc.misc.ConfiguredWithCode;
import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule;
import io.jenkins.plugins.casc.model.CNode;
+import io.jenkins.plugins.casc.model.Mapping;
+import java.util.Objects;
+import jenkins.appearance.AppearanceCategory;
+import jenkins.model.GlobalConfigurationCategory;
import org.codefirst.SimpleThemeDecorator;
import org.junit.ClassRule;
import org.junit.Test;
@@ -44,7 +49,7 @@ public void testConfig() {
@Test
public void testExport() throws Exception {
ConfigurationContext context = new ConfigurationContext(ConfiguratorRegistry.get());
- CNode yourAttribute = getUnclassifiedRoot(context).get("simple-theme-plugin");
+ CNode yourAttribute = getAppearanceRoot(context).get("simpleTheme");
String exported = toYamlString(yourAttribute);
@@ -52,4 +57,12 @@ public void testExport() throws Exception {
assertThat(exported, is(expected));
}
+
+ private static Mapping getAppearanceRoot(ConfigurationContext context) throws Exception {
+ GlobalConfigurationCategory category =
+ ExtensionList.lookup(AppearanceCategory.class).get(0);
+ GlobalConfigurationCategoryConfigurator configurator = new GlobalConfigurationCategoryConfigurator(category);
+ return Objects.requireNonNull(configurator.describe(configurator.getTargetComponent(context), context))
+ .asMapping();
+ }
}
diff --git a/src/test/java/org/jenkinsci/plugins/simpletheme/SimpleThemeConfigurationTest.java b/src/test/java/org/jenkinsci/plugins/simpletheme/SimpleThemeConfigurationTest.java
index 8ea3256..5702f33 100644
--- a/src/test/java/org/jenkinsci/plugins/simpletheme/SimpleThemeConfigurationTest.java
+++ b/src/test/java/org/jenkinsci/plugins/simpletheme/SimpleThemeConfigurationTest.java
@@ -27,7 +27,7 @@ public void testConfigRoundTrip() throws Exception {
SimpleThemeDecorator decorator = j.jenkins.getDescriptorByType(SimpleThemeDecorator.class);
fill(decorator);
- j.configRoundtrip();
+ configRoundTrip();
decorator = j.jenkins.getDescriptorByType(SimpleThemeDecorator.class);
@@ -35,12 +35,16 @@ public void testConfigRoundTrip() throws Exception {
assertThat(decorator.getElements(), hasSize(4));
}
+ private void configRoundTrip() throws Exception {
+ j.submit(j.createWebClient().goTo("manage/appearance").getFormByName("config"));
+ }
+
@Test
public void testConfigCreatesHtml() throws Exception {
SimpleThemeDecorator decorator = j.jenkins.getDescriptorByType(SimpleThemeDecorator.class);
fill(decorator);
- HtmlPage configPage = j.createWebClient().goTo("configure");
+ HtmlPage configPage = j.createWebClient().goTo("manage/appearance");
HtmlForm form = configPage.getFormByName("config");
urlThemeInput(form, CssUrlThemeElement.class).setValue("SOMECSSFILE.css");
diff --git a/src/test/resources/org/jenkinsci/plugins/simpletheme/ConfigurationAsCode.yml b/src/test/resources/org/jenkinsci/plugins/simpletheme/ConfigurationAsCode.yml
index db2d63c..161a387 100644
--- a/src/test/resources/org/jenkinsci/plugins/simpletheme/ConfigurationAsCode.yml
+++ b/src/test/resources/org/jenkinsci/plugins/simpletheme/ConfigurationAsCode.yml
@@ -1,6 +1,6 @@
---
-unclassified:
- simple-theme-plugin:
+appearance:
+ simpleTheme:
elements:
- cssUrl:
url: "https://example.bogus/test.css"