You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rg...@apache.org on 2023/01/21 00:35:48 UTC

[logging-log4j-tools] 01/01: #20 - Add maven changelog plugins

This is an automated email from the ASF dual-hosted git repository.

rgoers pushed a commit to branch maven-plugin
in repository https://gitbox.apache.org/repos/asf/logging-log4j-tools.git

commit cecac69c9e6a36d5310607a0d9d4ee5a9af2a04b
Author: Ralph Goers <rg...@apache.org>
AuthorDate: Fri Jan 20 17:35:22 2023 -0700

    #20 - Add maven changelog plugins
---
 .../changelog/exporter/ChangelogExporter.java      |   7 +-
 .../changelog/exporter/ChangelogExporterArgs.java  |   6 +-
 .../changelog/releaser/ChangelogReleaser.java      |   6 +-
 .../changelog/releaser/ChangelogReleaserArgs.java  |   6 +-
 log4j-maven-changelog-plugin/pom.xml               | 142 +++++++++++++++++++++
 .../java/org/apache/logging/log4j/ExportMojo.java  |  68 ++++++++++
 .../java/org/apache/logging/log4j/ReleaseMojo.java |  71 +++++++++++
 pom.xml                                            |   4 +-
 8 files changed, 299 insertions(+), 11 deletions(-)

diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java
index 236dcea..82c0c17 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporter.java
@@ -34,10 +34,10 @@ public final class ChangelogExporter {
     private ChangelogExporter() {}
 
     public static void main(final String[] mainArgs) {
+        performExport(ChangelogExporterArgs.fromSystemProperties());
+    }
 
-        // Read arguments
-        final ChangelogExporterArgs args = ChangelogExporterArgs.fromSystemProperties();
-
+    public static void performExport(final ChangelogExporterArgs args) {
         // Find release directories
         final List<Path> releaseDirectories = findReleaseDirectories(args);
         final int releaseDirectoryCount = releaseDirectories.size();
@@ -107,7 +107,6 @@ public final class ChangelogExporter {
         // Export the release index
         final Path changelogIndexTemplateFile = ChangelogFiles.indexTemplateFile(args.changelogDirectory);
         exportIndex(args.outputDirectory, changelogReleases, changelogIndexTemplateFile);
-
     }
 
     private static List<Path> findReleaseDirectories(ChangelogExporterArgs args) {
diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporterArgs.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporterArgs.java
index 8d79d9a..32a4878 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporterArgs.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/exporter/ChangelogExporterArgs.java
@@ -20,7 +20,7 @@ import java.nio.file.Path;
 
 import static org.apache.logging.log4j.changelog.util.PropertyUtils.requireNonBlankPathProperty;
 
-final class ChangelogExporterArgs {
+public final class ChangelogExporterArgs {
 
     final Path changelogDirectory;
 
@@ -37,4 +37,8 @@ final class ChangelogExporterArgs {
         return new ChangelogExporterArgs(changelogDirectory, outputDirectory);
     }
 
+    public static ChangelogExporterArgs fromArgs(final Path changelogDirectory, final Path outputDirectory) {
+        return new ChangelogExporterArgs(changelogDirectory, outputDirectory);
+    }
+
 }
diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaser.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaser.java
index 55b4fca..02268b3 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaser.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaser.java
@@ -35,9 +35,10 @@ public final class ChangelogReleaser {
 
     public static void main(final String[] mainArgs) throws Exception {
 
-        // Read arguments
-        final ChangelogReleaserArgs args = ChangelogReleaserArgs.fromSystemProperties();
+        performRelease(ChangelogReleaserArgs.fromSystemProperties());
+    }
 
+    public static void performRelease(final ChangelogReleaserArgs args) throws Exception {
         // Read the release date and version
         final String releaseDate = ISO_DATE.format(LocalDate.now());
         final int releaseVersionMajor = VersionUtils.versionMajor(args.releaseVersion);
@@ -53,7 +54,6 @@ public final class ChangelogReleaser {
 
         // Write the release changelog template
         populateReleaseChangelogTemplateFile(unreleasedDirectory, releaseDirectory);
-
     }
 
     private static void populateChangelogEntryFiles(
diff --git a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaserArgs.java b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaserArgs.java
index f6bf6cb..7a47c3c 100644
--- a/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaserArgs.java
+++ b/log4j-changelog/src/main/java/org/apache/logging/log4j/changelog/releaser/ChangelogReleaserArgs.java
@@ -22,7 +22,7 @@ import static org.apache.logging.log4j.changelog.util.PropertyUtils.requireNonBl
 import static org.apache.logging.log4j.changelog.util.PropertyUtils.requireNonBlankStringProperty;
 import static org.apache.logging.log4j.changelog.util.VersionUtils.requireSemanticVersioning;
 
-final class ChangelogReleaserArgs {
+public final class ChangelogReleaserArgs {
 
     final Path changelogDirectory;
 
@@ -41,4 +41,8 @@ final class ChangelogReleaserArgs {
         return new ChangelogReleaserArgs(changelogDirectory, releaseVersion);
     }
 
+    public static ChangelogReleaserArgs fromArgs(final Path changelogDirectory, final String releaseVersion) {
+        return new ChangelogReleaserArgs(changelogDirectory, releaseVersion);
+    }
+
 }
diff --git a/log4j-maven-changelog-plugin/pom.xml b/log4j-maven-changelog-plugin/pom.xml
new file mode 100644
index 0000000..7dc4ea6
--- /dev/null
+++ b/log4j-maven-changelog-plugin/pom.xml
@@ -0,0 +1,142 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  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
+
+      https://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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.logging.log4j</groupId>
+    <artifactId>log4j-tools-parent</artifactId>
+    <version>${revision}</version>
+    <relativePath>../log4j-tools-parent/pom.xml</relativePath>
+  </parent>
+  <artifactId>log4j-maven-changelog-plugin</artifactId>
+  <packaging>maven-plugin</packaging>
+
+  <name>log4j-maven-changelog-plugin Maven Plugin</name>
+
+  <!-- FIXME change it to the project's website -->
+  <url>http://maven.apache.org</url>
+
+  <properties>
+    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+  </properties>
+
+  <dependencyManagement>
+    <dependencies>
+      <dependency>
+        <groupId>org.codehaus.plexus</groupId>
+        <artifactId>plexus-utils</artifactId>
+        <version>3.3.1</version>
+      </dependency>
+    </dependencies>
+  </dependencyManagement>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.maven</groupId>
+      <artifactId>maven-plugin-api</artifactId>
+      <version>3.8.7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.maven.plugin-tools</groupId>
+      <artifactId>maven-plugin-annotations</artifactId>
+      <version>3.6.4</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.codehaus.plexus</groupId>
+      <artifactId>plexus-utils</artifactId>
+      <version>3.3.1</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.logging.log4j</groupId>
+      <artifactId>log4j-changelog</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <version>4.8.2</version>
+      <scope>test</scope>
+    </dependency>
+  </dependencies>
+
+  <build>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-plugin-plugin</artifactId>
+        <version>3.5</version>
+        <configuration>
+          <goalPrefix>log4j-changelog</goalPrefix>
+          <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+          <mojoDependencies>
+          </mojoDependencies>
+        </configuration>
+        <executions>
+          <execution>
+            <id>mojo-descriptor</id>
+            <goals>
+              <goal>descriptor</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+  <profiles>
+    <profile>
+      <id>run-its</id>
+      <build>
+
+        <plugins>
+          <plugin>
+            <groupId>org.apache.maven.plugins</groupId>
+            <artifactId>maven-invoker-plugin</artifactId>
+            <version>1.7</version>
+            <configuration>
+              <debug>true</debug>
+              <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
+              <pomIncludes>
+                <pomInclude>*/pom.xml</pomInclude>
+              </pomIncludes>
+              <postBuildHookScript>verify</postBuildHookScript>
+              <localRepositoryPath>${project.build.directory}/local-repo</localRepositoryPath>
+              <settingsFile>src/it/settings.xml</settingsFile>
+              <goals>
+                <goal>clean</goal>
+                <goal>test-compile</goal>
+              </goals>
+            </configuration>
+            <executions>
+              <execution>
+                <id>integration-test</id>
+                <goals>
+                  <goal>install</goal>
+                  <goal>integration-test</goal>
+                  <goal>verify</goal>
+                </goals>
+              </execution>
+            </executions>
+          </plugin>
+        </plugins>
+
+      </build>
+    </profile>
+  </profiles>
+</project>
diff --git a/log4j-maven-changelog-plugin/src/main/java/org/apache/logging/log4j/ExportMojo.java b/log4j-maven-changelog-plugin/src/main/java/org/apache/logging/log4j/ExportMojo.java
new file mode 100644
index 0000000..99919a5
--- /dev/null
+++ b/log4j-maven-changelog-plugin/src/main/java/org/apache/logging/log4j/ExportMojo.java
@@ -0,0 +1,68 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.File;
+
+import org.apache.logging.log4j.changelog.exporter.ChangelogExporter;
+import org.apache.logging.log4j.changelog.exporter.ChangelogExporterArgs;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+
+/**
+ * Goal which creates a changelog.
+ */
+@Mojo(name = "export", defaultPhase = LifecyclePhase.PRE_SITE)
+public class ExportMojo extends AbstractMojo {
+    /**
+     * Location of the file.
+     */
+    @Parameter(defaultValue = "${project.build.directory}/generated-sources/site/asciidoc/changelog",
+            property = "outputDir", required = true)
+    private File outputDirectory;
+
+    /**
+     * Location of the file.
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/changelog", property = "changeLogDir", required = true)
+    private File changeLogDirectory;
+
+    public void execute() throws MojoExecutionException {
+        ChangelogExporter.performExport(ChangelogExporterArgs.fromArgs(changeLogDirectory.toPath(),
+                outputDirectory.toPath()));
+    }
+}
diff --git a/log4j-maven-changelog-plugin/src/main/java/org/apache/logging/log4j/ReleaseMojo.java b/log4j-maven-changelog-plugin/src/main/java/org/apache/logging/log4j/ReleaseMojo.java
new file mode 100644
index 0000000..001a692
--- /dev/null
+++ b/log4j-maven-changelog-plugin/src/main/java/org/apache/logging/log4j/ReleaseMojo.java
@@ -0,0 +1,71 @@
+/*
+ * 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.
+ */
+package org.apache.logging.log4j;
+
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+import java.io.File;
+
+import org.apache.logging.log4j.changelog.releaser.ChangelogReleaser;
+import org.apache.logging.log4j.changelog.releaser.ChangelogReleaserArgs;
+
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+
+/**
+ * Goal which creates a changelog.
+ */
+@Mojo(name = "release", defaultPhase = LifecyclePhase.PRE_SITE)
+public class ReleaseMojo extends AbstractMojo {
+    /**
+     * Location of the file.
+     */
+    @Parameter(property = "version", required = true)
+    private String releaseVersion;
+
+    /**
+     * Location of the file.
+     */
+    @Parameter(defaultValue = "${project.basedir}/src/changelog", property = "changeLogDir", required = true)
+    private File changeLogDirectory;
+
+    public void execute() throws MojoExecutionException {
+        try {
+            ChangelogReleaser.performRelease(ChangelogReleaserArgs.fromArgs(changeLogDirectory.toPath(),
+                    releaseVersion));
+        } catch (Exception ex) {
+            throw new MojoExecutionException("Error performing release", ex);
+        }
+    }
+}
diff --git a/pom.xml b/pom.xml
index c7c76fa..5abb06e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,13 +48,13 @@
 
     <!-- Modules here must have a corresponding entry in `dependencyManagement > dependencies` block below! -->
     <module>log4j-changelog</module>
-
+    <module>log4j-maven-changelog-plugin</module>
   </modules>
 
   <properties>
 
     <!-- project version -->
-    <revision>0.1.0-SNAPSHOT</revision>
+    <revision>0.2.0-SNAPSHOT</revision>
 
     <!-- `minimalJavaBuildVersion` is employed by `org.apache:apache`, which is the parent of `org.apache.logging:logging-parent`, which is the parent of us.
          `minimalJavaBuildVersion` is used for enforcing the compiler version.