You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2022/12/19 10:21:27 UTC
[logging-log4j2] 21/33: LOG4J2-3628 Switch unreleased directory name to `.unreleased-` pattern.
This is an automated email from the ASF dual-hosted git repository.
vy pushed a commit to branch mvn-site-simplified
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 95dbc6c4f6122dd21d3299d2c05550014ab15f29
Author: Volkan Yazıcı <vo...@yazi.ci>
AuthorDate: Sun Nov 27 22:08:20 2022 +0100
LOG4J2-3628 Switch unreleased directory name to `.unreleased-<releaseVersionMajor>` pattern.
---
...imestamp_to_ProducerRecord_in_KafkaAppender.xml | 0
.../LOG4J2-3628_new_changelog_infra.xml | 0
..._Configurator_setLevel_for_internal_classes.xml | 0
...Fix_level_propagation_in_Log4jBridgeHandler.xml | 0
changelog/README.adoc | 10 ++--
.../logging/log4j/internal/util/PomUtils.java | 55 +++++++++++++++++++
.../internal/util/changelog/ChangelogFiles.java | 31 ++++++++++-
.../util/changelog/exporter/AsciiDocExporter.java | 61 ++++++++++------------
.../changelog/importer/MavenChangesImporter.java | 6 +--
.../util/changelog/releaser/ChangelogReleaser.java | 35 ++++---------
10 files changed, 128 insertions(+), 70 deletions(-)
diff --git a/changelog/.unreleased/LOG4J2-2678_Add_LogEvent_timestamp_to_ProducerRecord_in_KafkaAppender.xml b/changelog/.unreleased-2.x.x/LOG4J2-2678_Add_LogEvent_timestamp_to_ProducerRecord_in_KafkaAppender.xml
similarity index 100%
rename from changelog/.unreleased/LOG4J2-2678_Add_LogEvent_timestamp_to_ProducerRecord_in_KafkaAppender.xml
rename to changelog/.unreleased-2.x.x/LOG4J2-2678_Add_LogEvent_timestamp_to_ProducerRecord_in_KafkaAppender.xml
diff --git a/changelog/.unreleased/LOG4J2-3628_new_changelog_infra.xml b/changelog/.unreleased-2.x.x/LOG4J2-3628_new_changelog_infra.xml
similarity index 100%
rename from changelog/.unreleased/LOG4J2-3628_new_changelog_infra.xml
rename to changelog/.unreleased-2.x.x/LOG4J2-3628_new_changelog_infra.xml
diff --git a/changelog/.unreleased/LOG4J2-3631_Fix_Configurator_setLevel_for_internal_classes.xml b/changelog/.unreleased-2.x.x/LOG4J2-3631_Fix_Configurator_setLevel_for_internal_classes.xml
similarity index 100%
rename from changelog/.unreleased/LOG4J2-3631_Fix_Configurator_setLevel_for_internal_classes.xml
rename to changelog/.unreleased-2.x.x/LOG4J2-3631_Fix_Configurator_setLevel_for_internal_classes.xml
diff --git a/changelog/.unreleased/LOG4J2-3634_Fix_level_propagation_in_Log4jBridgeHandler.xml b/changelog/.unreleased-2.x.x/LOG4J2-3634_Fix_level_propagation_in_Log4jBridgeHandler.xml
similarity index 100%
rename from changelog/.unreleased/LOG4J2-3634_Fix_level_propagation_in_Log4jBridgeHandler.xml
rename to changelog/.unreleased-2.x.x/LOG4J2-3634_Fix_level_propagation_in_Log4jBridgeHandler.xml
diff --git a/changelog/README.adoc b/changelog/README.adoc
index c4a62a466f..ac4c4928d3 100644
--- a/changelog/README.adoc
+++ b/changelog/README.adoc
@@ -40,8 +40,8 @@ Generator will compile these files to emit a single `{generator-target-dir}/<rel
[#unreleased-version-changelog]
== Unreleased version changelog
-Changelogs of the staged changes for the next version is stored in `.unreleased` directory.
-Compared to released version changelog directories (e.g., `20220909-2.10.0`), `.unreleased` directory only consists of changelog entry files (i.e., `[<issueId>_]<shortSummary>.xml`).
+Changelogs of upcoming release versions are stored in `.unreleased-<releaseVersionMajor>.x.x` directories.
+Compared to released version changelog directories (e.g., `20220909-2.10.0`), `.unreleased-<releaseVersionMajor>.x.x` directories only consist of changelog entry files (i.e., `[<issueId>_]<shortSummary>.xml`).
Generator will compile these files to emit a single `{generator-target-dir}/<releaseVersionMajor>.x.x.adoc` file and update `{generator-target-dir}/index.adoc` accordingly, where `releaseVersionMajor` is populated from the root `pom.xml` file.
@@ -106,13 +106,13 @@ For release candidates, you don't need to change, add, commit anything next to w
[#qa-deploy-release]
=== I am about to deploy a new Log4j _release_. Now what?
-. Create the `<releaseDate>-<releaseVersion>` (e.g., `20220909-2.10.0`) directory populated from `.unreleased` directory: `./mvnw -pl log4j-internal-util -P changelog-releaser`
-. Verify that `.unreleased` directory is emptied
+. Create the `<releaseDate>-<releaseVersion>` (e.g., `20220909-2.10.0`) directory populated from `.unreleased-<releaseVersionMajor>.x.x` directory: `./mvnw -pl log4j-internal-util -P changelog-releaser`
+. Verify that `.unreleased-<releaseVersionMajor>.x.x` directory is emptied
. Verify that `<releaseDate>-<releaseVersion>` directory is created, and it contains `.intro.adoc`, `.release.xml`, and changelog entry files
. Edit the created `.intro.adoc`
. Generate AsciiDoc files: `./mvnw -pl log4j-internal-util`
. Verify generated `{generator-target-dir}/<releaseVersion>.adoc` and `{generator-target-dir}/index.adoc` files
-. `git add` the created `<releaseDate>-<releaseVersion>` directory and commit it together with the emptied `.unreleased` directory
+. `git add` the created `<releaseDate>-<releaseVersion>` directory and commit it together with the emptied `.unreleased-<releaseVersionMajor>.x.x` directory
[#qa-deploy-website]
=== I am about to generate the website for the new release. Now what?
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/PomUtils.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/PomUtils.java
new file mode 100644
index 0000000000..c131327e08
--- /dev/null
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/PomUtils.java
@@ -0,0 +1,55 @@
+/*
+ * 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.internal.util;
+
+import org.w3c.dom.Element;
+
+import java.nio.file.Path;
+
+import static org.apache.logging.log4j.internal.util.StringUtils.isBlank;
+import static org.apache.logging.log4j.internal.util.StringUtils.trimNullable;
+
+public final class PomUtils {
+
+ private PomUtils() {}
+
+ public static int readRootPomVersionMajor(final Path projectRootDirectory) {
+ final String version = readRootPomVersion(projectRootDirectory);
+ return versionMajor(version);
+ }
+
+ public static String readRootPomVersion(final Path projectRootDirectory) {
+ final Path rootPomFile = projectRootDirectory.resolve("pom.xml");
+ final Element projectElement = XmlReader.readXmlFileRootElement(rootPomFile, "project");
+ final Element versionElement = XmlReader.requireChildElementMatchingName(projectElement, "version");
+ final String version = trimNullable(versionElement.getTextContent());
+ if (isBlank(version)) {
+ throw XmlReader.failureAtXmlNode(versionElement, "blank `version`");
+ }
+ final String versionPattern = "^\\d+\\.\\d+.\\d+(-SNAPSHOT)?$";
+ if (!version.matches(versionPattern)) {
+ throw XmlReader.failureAtXmlNode(
+ versionElement, "`version` doesnt' match the expected pattern `%s`: `%s`", versionPattern, version);
+ }
+ return version;
+ }
+
+ public static int versionMajor(final String version) {
+ return Integer.parseInt(version.split("\\.", 2)[0]);
+ }
+
+}
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogFiles.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogFiles.java
index 899d252ce0..8578822c54 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogFiles.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/ChangelogFiles.java
@@ -16,7 +16,12 @@
*/
package org.apache.logging.log4j.internal.util.changelog;
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Set;
+import java.util.stream.Collectors;
public final class ChangelogFiles {
@@ -26,8 +31,30 @@ public final class ChangelogFiles {
return projectRootDirectory.resolve("changelog");
}
- public static Path unreleasedDirectory(final Path projectRootDirectory) {
- return changelogDirectory(projectRootDirectory).resolve(".unreleased");
+ public static Path unreleasedDirectory(final Path projectRootDirectory, final int versionMajor) {
+ final String filename = String.format(".unreleased-%d.x.x", versionMajor);
+ return changelogDirectory(projectRootDirectory).resolve(filename);
+ }
+
+ public static Set<Integer> unreleasedDirectoryVersionMajors(final Path projectRootDirectory) {
+ final Path changelogDirectory = changelogDirectory(projectRootDirectory);
+ try {
+ return Files
+ .walk(changelogDirectory, 1)
+ .filter(path -> {
+ return !path.equals(projectRootDirectory) && // Skip the directory itself.
+ path.getFileName().toString().startsWith(".unreleased-"); // Only select `.unreleased-*` directories.
+ })
+ .map(path -> {
+ final String filename = path.getFileName().toString();
+ final String versionMajor = filename.replaceFirst("^\\.unreleased-(\\d+)\\.x\\.x", "$1");
+ return Integer.parseInt(versionMajor);
+ })
+ .collect(Collectors.toSet());
+ } catch (final IOException error) {
+ final String message = String.format("failed walking directory: `%s`", projectRootDirectory);
+ throw new UncheckedIOException(message, error);
+ }
}
public static Path releaseDirectory(
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java
index 0f8492d2b1..d1c90cd9b8 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/exporter/AsciiDocExporter.java
@@ -16,6 +16,11 @@
*/
package org.apache.logging.log4j.internal.util.changelog.exporter;
+import org.apache.logging.log4j.internal.util.AsciiDocUtils;
+import org.apache.logging.log4j.internal.util.changelog.ChangelogEntry;
+import org.apache.logging.log4j.internal.util.changelog.ChangelogFiles;
+import org.apache.logging.log4j.internal.util.changelog.ChangelogRelease;
+
import java.io.IOException;
import java.io.UncheckedIOException;
import java.nio.charset.StandardCharsets;
@@ -28,16 +33,6 @@ import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.apache.logging.log4j.internal.util.AsciiDocUtils;
-import org.apache.logging.log4j.internal.util.XmlReader;
-import org.apache.logging.log4j.internal.util.changelog.ChangelogEntry;
-import org.apache.logging.log4j.internal.util.changelog.ChangelogFiles;
-import org.apache.logging.log4j.internal.util.changelog.ChangelogRelease;
-import org.w3c.dom.Element;
-
-import static org.apache.logging.log4j.internal.util.StringUtils.isBlank;
-import static org.apache.logging.log4j.internal.util.StringUtils.trimNullable;
-
public final class AsciiDocExporter {
private static final String TARGET_RELATIVE_DIRECTORY = "src/site/asciidoc/changelog";
@@ -100,13 +95,20 @@ public final class AsciiDocExporter {
}
// Export unreleased.
- final int releaseVersionMajor = readRootPomVersionMajor(args.projectRootDirectory);
- final String releaseVersion = releaseVersionMajor + ".x.x";
- final ChangelogRelease upcomingRelease = new ChangelogRelease(releaseVersion, null);
- exportUnreleased(args.projectRootDirectory, upcomingRelease);
+ ChangelogFiles
+ .unreleasedDirectoryVersionMajors(args.projectRootDirectory)
+ .stream()
+ .sorted()
+ .forEach(upcomingReleaseVersionMajor -> {
+ final Path upcomingReleaseDirectory =
+ ChangelogFiles.unreleasedDirectory(args.projectRootDirectory, upcomingReleaseVersionMajor);
+ final ChangelogRelease upcomingRelease = upcomingRelease(upcomingReleaseVersionMajor);
+ exportUnreleased(args.projectRootDirectory, upcomingReleaseDirectory, upcomingRelease);
+ System.out.format("exporting upcoming release directory: `%s`%n", upcomingReleaseDirectory);
+ changelogReleases.add(upcomingRelease);
+ });
// Export the release index.
- changelogReleases.add(upcomingRelease);
exportReleaseIndex(args.projectRootDirectory, changelogReleases);
}
@@ -364,25 +366,11 @@ public final class AsciiDocExporter {
}
}
- private static int readRootPomVersionMajor(final Path projectRootDirectory) {
- final Path rootPomFile = projectRootDirectory.resolve("pom.xml");
- final Element projectElement = XmlReader.readXmlFileRootElement(rootPomFile, "project");
- final Element versionElement = XmlReader.requireChildElementMatchingName(projectElement, "version");
- final String version = trimNullable(versionElement.getTextContent());
- if (isBlank(version)) {
- throw XmlReader.failureAtXmlNode(versionElement, "blank `version`");
- }
- final String versionPattern = "^\\d+\\.\\d+.\\d+(-SNAPSHOT)?$";
- if (!version.matches(versionPattern)) {
- throw XmlReader.failureAtXmlNode(
- versionElement, "`version` doesnt' match the expected pattern `%s`: `%s`", versionPattern, version);
- }
- return Integer.parseInt(version.split("\\.", 2)[0]);
- }
-
- private static void exportUnreleased(final Path projectRootDirectory, final ChangelogRelease upcomingRelease) {
- final Path unreleasedDirectory = ChangelogFiles.unreleasedDirectory(projectRootDirectory);
- final List<ChangelogEntry> changelogEntries = readChangelogEntries(unreleasedDirectory);
+ private static void exportUnreleased(
+ final Path projectRootDirectory,
+ final Path upcomingReleaseDirectory,
+ final ChangelogRelease upcomingRelease) {
+ final List<ChangelogEntry> changelogEntries = readChangelogEntries(upcomingReleaseDirectory);
try {
exportRelease(projectRootDirectory, upcomingRelease, null, changelogEntries);
} catch (final IOException error) {
@@ -390,6 +378,11 @@ public final class AsciiDocExporter {
}
}
+ private static ChangelogRelease upcomingRelease(final int versionMajor) {
+ final String releaseVersion = versionMajor + ".x.x";
+ return new ChangelogRelease(releaseVersion, null);
+ }
+
private static void exportReleaseIndex(
final Path projectRootDirectory,
final List<ChangelogRelease> changelogReleases) {
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChangesImporter.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChangesImporter.java
index 7f2c088218..8122b05d2a 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChangesImporter.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/importer/MavenChangesImporter.java
@@ -20,6 +20,7 @@ import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
+import org.apache.logging.log4j.internal.util.PomUtils;
import org.apache.logging.log4j.internal.util.changelog.ChangelogEntry;
import org.apache.logging.log4j.internal.util.changelog.ChangelogFiles;
import org.apache.logging.log4j.internal.util.changelog.ChangelogRelease;
@@ -43,9 +44,8 @@ public final class MavenChangesImporter {
}
private static void writeUnreleased(final Path projectRootDirectory, final MavenChanges.Release release) {
- final Path releaseDirectory = ChangelogFiles
- .changelogDirectory(projectRootDirectory)
- .resolve(".unreleased");
+ final int releaseVersionMajor = PomUtils.readRootPomVersionMajor(projectRootDirectory);
+ final Path releaseDirectory = ChangelogFiles.unreleasedDirectory(projectRootDirectory, releaseVersionMajor);
release.actions.forEach(action -> writeAction(releaseDirectory, action));
}
diff --git a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java
index 6a8f0417f6..d86da41bd5 100644
--- a/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java
+++ b/log4j-internal-util/src/main/java/org/apache/logging/log4j/internal/util/changelog/releaser/ChangelogReleaser.java
@@ -16,20 +16,17 @@
*/
package org.apache.logging.log4j.internal.util.changelog.releaser;
+import org.apache.logging.log4j.internal.util.AsciiDocUtils;
+import org.apache.logging.log4j.internal.util.PomUtils;
+import org.apache.logging.log4j.internal.util.changelog.ChangelogFiles;
+import org.apache.logging.log4j.internal.util.changelog.ChangelogRelease;
+
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.time.LocalDate;
-import org.apache.logging.log4j.internal.util.AsciiDocUtils;
-import org.apache.logging.log4j.internal.util.XmlReader;
-import org.apache.logging.log4j.internal.util.changelog.ChangelogFiles;
-import org.apache.logging.log4j.internal.util.changelog.ChangelogRelease;
-import org.w3c.dom.Element;
-
import static java.time.format.DateTimeFormatter.BASIC_ISO_DATE;
-import static org.apache.logging.log4j.internal.util.StringUtils.isBlank;
-import static org.apache.logging.log4j.internal.util.StringUtils.trimNullable;
import static org.apache.logging.log4j.internal.util.changelog.ChangelogFiles.releaseDirectory;
public final class ChangelogReleaser {
@@ -43,14 +40,16 @@ public final class ChangelogReleaser {
// Read the release date and version.
final String releaseDate = BASIC_ISO_DATE.format(LocalDate.now());
- final String releaseVersion = readReleaseVersion(args.projectRootDirectory);
+ final String releaseVersion = PomUtils.readRootPomVersion(args.projectRootDirectory);
+ final int releaseVersionMajor = PomUtils.versionMajor(releaseVersion);
System.out.format(
"using `%s` and `%s` for release date and version, respectively%n",
releaseDate, releaseVersion);
// Move unreleased directory to a release directory.
final Path releaseDirectory = releaseDirectory(args.projectRootDirectory, releaseDate, releaseVersion);
- final Path unreleasedDirectory = ChangelogFiles.unreleasedDirectory(args.projectRootDirectory);
+ final Path unreleasedDirectory =
+ ChangelogFiles.unreleasedDirectory(args.projectRootDirectory, releaseVersionMajor);
if (!Files.exists(unreleasedDirectory)) {
final String message = String.format(
"`%s` does not exist! A release without any changelogs don't make sense!",
@@ -74,20 +73,4 @@ public final class ChangelogReleaser {
}
- private static String readReleaseVersion(final Path projectRootDirectory) {
-
- // Read the root `project` element.
- final Path rootPomFile = projectRootDirectory.resolve("pom.xml");
- final Element projectElement = XmlReader.readXmlFileRootElement(rootPomFile, "project");
-
- // Read the `version` element.
- final Element versionElement = XmlReader.requireChildElementMatchingName(projectElement, "version");
- final String version = trimNullable(versionElement.getTextContent());
- if (isBlank(version)) {
- throw XmlReader.failureAtXmlNode(versionElement, "blank `version`: %s", version);
- }
- return version;
-
- }
-
}