This is an automated email from the ASF dual-hosted git repository. rmannibucau pushed a commit to branch MNG-8077 in repository https://gitbox.apache.org/repos/asf/maven-artifact-plugin.git
commit 7f4ba17e0cd16699500ca0da7802df2903d9cfab Author: Romain Manni-Bucau <rmannibu...@gmail.com> AuthorDate: Sat Mar 16 19:44:32 2024 +0100 [MNG-8077] tolerate injected timestamp value --- pgp-keys-map.list | 8 +++ pom.xml | 6 +++ .../artifact/buildinfo/AbstractBuildinfoMojo.java | 15 ++++-- .../buildinfo/AbstractBuildinfoMojoTest.java | 63 ++++++++++++++++++++++ 4 files changed, 89 insertions(+), 3 deletions(-) diff --git a/pgp-keys-map.list b/pgp-keys-map.list index 5e0a25e..845c71a 100644 --- a/pgp-keys-map.list +++ b/pgp-keys-map.list @@ -21,9 +21,17 @@ javax.inject:javax.inject = noSig org.apache.maven.* = 0xB920D295BF0E61CB4CF0896C33CD6733AF5EC452 org.apache.maven:maven-archiver = 0x29BEA2A645F2D6CED7FB12E02B172E3E156466E8 org.apache.maven.shared:maven-shared-utils = 0x84789D24DF77A32433CE1F079EB80E92EB2135B1 +org.apiguardian:apiguardian-api:1.1.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 org.codehaus.plexus:plexus-archiver = 0x29BEA2A645F2D6CED7FB12E02B172E3E156466E8 org.codehaus.plexus:plexus-interpolation = 0x47063E8BA7A6450E4A52E7AE466CAED6E0747D50 org.codehaus.plexus:plexus-io = 0xF254B35617DC255D9344BCFA873A8E86B4372146 org.codehaus.plexus:plexus-utils = 0xEA23DB1360D9029481E7F2EFECDFEA3CB4493B94 org.codehaus.plexus:plexus-xml = 0xFA77DCFEF2EE6EB2DEBEDD2C012579464D01C06A +org.junit.jupiter:junit-jupiter:5.10.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 +org.junit.jupiter:junit-jupiter-api:5.10.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 +org.junit.jupiter:junit-jupiter-engine:5.10.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 +org.junit.jupiter:junit-jupiter-params:5.10.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 +org.junit.platform:junit-platform-commons:1.10.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 +org.junit.platform:junit-platform-engine:1.10.2 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 +org.opentest4j:opentest4j:1.3.0 = 0xFF6E2C001948C5F2F38B0CC385911F425EC61B51 org.slf4j:slf4j-api = 0x475F3B8E59E6E63AA78067482C7B12F2A511E325 diff --git a/pom.xml b/pom.xml index 1637163..6c69006 100644 --- a/pom.xml +++ b/pom.xml @@ -135,6 +135,12 @@ <artifactId>maven-plugin-annotations</artifactId> <scope>provided</scope> </dependency> + <dependency> + <groupId>org.junit.jupiter</groupId> + <artifactId>junit-jupiter</artifactId> + <version>5.10.2</version> + <scope>test</scope> + </dependency> </dependencies> <build> diff --git a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java index 2c0b632..69fa250 100644 --- a/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java +++ b/src/main/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojo.java @@ -166,9 +166,18 @@ public abstract class AbstractBuildinfoMojo extends AbstractMojo { MavenArchiver archiver = new MavenArchiver(); Date timestamp = archiver.parseOutputTimestamp(outputTimestamp); if (timestamp == null) { - log.error("Reproducible Build not activated by project.build.outputTimestamp property: " - + "see https://maven.apache.org/guides/mini/guide-reproducible-builds.html"); - return true; + // try to resolve it at runtime - injected from a property + String injected = project.getProperties().getProperty("project.build.outputTimestamp"); + if (injected != null) { + log.info("project.build.outputTimestamp is injected by the build"); + } else { + log.error("Reproducible Build not activated by project.build.outputTimestamp property: " + + "see https://maven.apache.org/guides/mini/guide-reproducible-builds.html, " + + "ex: <project.build.outputTimestamp>" + + new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(new Date()) + + "</project.build.outputTimestamp>"); + return true; + } } if (log.isDebugEnabled()) { diff --git a/src/test/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojoTest.java b/src/test/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojoTest.java new file mode 100644 index 0000000..349e12e --- /dev/null +++ b/src/test/java/org/apache/maven/plugins/artifact/buildinfo/AbstractBuildinfoMojoTest.java @@ -0,0 +1,63 @@ +/* + * 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.maven.plugins.artifact.buildinfo; + +import java.util.concurrent.atomic.AtomicReference; + +import org.apache.maven.model.Model; +import org.apache.maven.monitor.logging.DefaultLog; +import org.apache.maven.project.MavenProject; +import org.junit.jupiter.api.Test; + +import static java.util.Collections.emptyList; +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AbstractBuildinfoMojoTest { + @Test + void detectInjectedTimestamp() { + final Model model = new Model(); + final MavenProject project = new MavenProject(); + project.setOriginalModel(model); + project.getProperties().setProperty("project.build.outputTimestamp", "set"); + model.setProperties(project.getProperties()); + + final AtomicReference<CharSequence> message = new AtomicReference<>(); + AbstractBuildinfoMojo.hasBadOutputTimestamp( + null, + new DefaultLog(null) { + @Override + public boolean isDebugEnabled() { + return false; + } + + @Override + public void info(final CharSequence content) { + if (message.get() == null) { + message.set(content); + } else { + throw new IllegalStateException(content + " can't be set cause it is unexpected"); + } + } + }, + project, + emptyList()); + + assertEquals("project.build.outputTimestamp is injected by the build", message.get()); + } +}