diff --git a/src/it/ensure-java-level-marker-11-migration/invoker.properties b/src/it/ensure-java-level-marker-11-migration/invoker.properties new file mode 100644 index 0000000000..ea9aa6b6b3 --- /dev/null +++ b/src/it/ensure-java-level-marker-11-migration/invoker.properties @@ -0,0 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +invoker.goals=-ntp validate diff --git a/src/it/ensure-java-level-marker-11-migration/pom.xml b/src/it/ensure-java-level-marker-11-migration/pom.xml new file mode 100644 index 0000000000..f61baeab60 --- /dev/null +++ b/src/it/ensure-java-level-marker-11-migration/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + org.jenkins-ci.plugins + plugin + 4.77 + + + org.jenkins-ci.tools.hpi.its + ensure-java-level-marker-11-migration + 1.0-SNAPSHOT + hpi + MyNewPlugin + + 2.361.4 + @project.version@ + false + + diff --git a/src/it/ensure-java-level-marker-11-migration/verify.groovy b/src/it/ensure-java-level-marker-11-migration/verify.groovy new file mode 100644 index 0000000000..2f2575e7af --- /dev/null +++ b/src/it/ensure-java-level-marker-11-migration/verify.groovy @@ -0,0 +1,24 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +assert new File(basedir, 'target/java-level').list().length == 1 +assert new File(basedir, 'target/java-level/11').exists() +assert new File(basedir, 'build.log').getText('UTF-8').contains("Removing old marker file") + +return true diff --git a/src/it/ensure-java-level-marker-11/invoker.properties b/src/it/ensure-java-level-marker-11/invoker.properties new file mode 100644 index 0000000000..ea9aa6b6b3 --- /dev/null +++ b/src/it/ensure-java-level-marker-11/invoker.properties @@ -0,0 +1,20 @@ +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# + +invoker.goals=-ntp validate diff --git a/src/it/ensure-java-level-marker-11/pom.xml b/src/it/ensure-java-level-marker-11/pom.xml new file mode 100644 index 0000000000..b457eed0bf --- /dev/null +++ b/src/it/ensure-java-level-marker-11/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + org.jenkins-ci.plugins + plugin + 4.77 + + + org.jenkins-ci.tools.hpi.its + ensure-java-level-marker-11 + 1.0-SNAPSHOT + hpi + MyNewPlugin + + 2.361.4 + @project.version@ + false + + diff --git a/src/it/ensure-java-level-marker-11/verify.groovy b/src/it/ensure-java-level-marker-11/verify.groovy new file mode 100644 index 0000000000..742429f744 --- /dev/null +++ b/src/it/ensure-java-level-marker-11/verify.groovy @@ -0,0 +1,23 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +assert new File(basedir, 'target/java-level').list().length == 1 +assert new File(basedir, 'target/java-level/11').exists() + +return true diff --git a/src/main/java/org/jenkinsci/maven/plugins/hpi/ValidateMojo.java b/src/main/java/org/jenkinsci/maven/plugins/hpi/ValidateMojo.java index 2ca13a8a02..639846707e 100644 --- a/src/main/java/org/jenkinsci/maven/plugins/hpi/ValidateMojo.java +++ b/src/main/java/org/jenkinsci/maven/plugins/hpi/ValidateMojo.java @@ -2,12 +2,16 @@ import hudson.util.VersionNumber; import io.jenkins.lib.versionnumber.JavaSpecificationVersion; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Properties; import org.apache.maven.model.Scm; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.util.FileUtils; /** * Make sure that we are running in the right environment. @@ -37,6 +41,7 @@ public void execute() throws MojoExecutionException { if (JavaSpecificationVersion.forCurrentJVM().isOlderThan(javaVersion)) { throw new MojoExecutionException("Java " + javaVersion + " or later is necessary to build this plugin."); } + writeProfileMarker(javaVersion); if (new VersionNumber(findJenkinsVersion()).compareTo(new VersionNumber("2.361")) < 0) { throw new MojoExecutionException("This version of maven-hpi-plugin requires Jenkins 2.361 or later"); @@ -94,6 +99,56 @@ public void execute() throws MojoExecutionException { } } + private void writeProfileMarker(JavaSpecificationVersion javaVersion) throws MojoExecutionException { + var path = Path.of(project.getBuild().getDirectory(), "java-level"); + if (!Files.exists(path)) { + try { + Files.createDirectories(path); + } catch (IOException e) { + throw new MojoExecutionException("Failed to create " + path, e); + } + } + var versionPath = path.resolve(Integer.toString(javaVersion.toReleaseVersion())); + boolean found = false; + try (var walk = Files.walk(path)) { + for (var it = walk.iterator(); it.hasNext(); ) { + var p = it.next(); + if (p.equals(path)) { + continue; + } + if (!p.equals(versionPath)) { + getLog().info("Removing old marker file " + p); + delete(p); + } else { + found = true; + } + } + } catch (IOException e) { + throw new MojoExecutionException("Failed to walk " + path, e); + } + if (!found) { + try { + Files.createFile(versionPath); + getLog().info("Created marker file " + versionPath); + } catch (IOException e) { + throw new MojoExecutionException("Failed to create file " + versionPath, e); + } + } + } + + private static void delete(Path p) throws MojoExecutionException { + try { + if (Files.isRegularFile(p)) { + Files.delete(p); + } else if (Files.isDirectory(p)) { + // In case someone manually created a subdirectory, delete it recursively + FileUtils.deleteDirectory(p.toFile()); + } + } catch (IOException e) { + throw new MojoExecutionException("Failed to delete " + p, e); + } + } + private void check(String tag, String value, String badStart, String goodStart, String reason) { if (value.startsWith(badStart)) { String goodValue = goodStart + value.substring(badStart.length());