Przeglądaj źródła

build improvements, reproduciable jar/war

Jason Rivard 5 lat temu
rodzic
commit
1d65a83b36

+ 7 - 2
client/pom.xml

@@ -115,7 +115,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <configuration>
                 <configuration>
                     <archive>
                     <archive>
                         <manifestEntries>
                         <manifestEntries>
@@ -124,9 +124,14 @@
                             <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                             <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                             <Implementation-URL>${project.organization.url}</Implementation-URL>
                             <Implementation-URL>${project.organization.url}</Implementation-URL>
                             <Implementation-Build>${build.number}</Implementation-Build>
                             <Implementation-Build>${build.number}</Implementation-Build>
-                            <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
+                            <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                            <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                            <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                            <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                            <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                            <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>
                         </manifestEntries>
                         </manifestEntries>
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>

+ 0 - 1
data-service/pom.xml

@@ -22,7 +22,6 @@
 
 
     <properties>
     <properties>
         <skipTests>false</skipTests>
         <skipTests>false</skipTests>
-        <timestamp.iso>${maven.build.timestamp}</timestamp.iso>
         <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss'Z'</maven.build.timestamp.format>
         <maven.build.timestamp.format>yyyy-MM-dd'T'HH:mm:ss'Z'</maven.build.timestamp.format>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <project.root.basedir>${project.basedir}/..</project.root.basedir>
         <project.root.basedir>${project.basedir}/..</project.root.basedir>

+ 3 - 1
docker/pom.xml

@@ -34,7 +34,7 @@
             <plugin>
             <plugin>
                 <groupId>com.google.cloud.tools</groupId>
                 <groupId>com.google.cloud.tools</groupId>
                 <artifactId>jib-maven-plugin</artifactId>
                 <artifactId>jib-maven-plugin</artifactId>
-                <version>2.0.0</version>
+                <version>2.1.0</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <id>make-docker-image</id>
                         <id>make-docker-image</id>
@@ -54,6 +54,8 @@
                                 <tar>target/pwm-docker-image-${project.version}.tar</tar>
                                 <tar>target/pwm-docker-image-${project.version}.tar</tar>
                             </outputPaths>
                             </outputPaths>
                             <container>
                             <container>
+                                <creationTime>${git.commit.time}</creationTime>
+                                <filesModificationTime>${git.commit.time}</filesModificationTime>
                                 <entrypoint>
                                 <entrypoint>
                                     <arg>/app/startup.sh</arg>
                                     <arg>/app/startup.sh</arg>
                                 </entrypoint>
                                 </entrypoint>

+ 9 - 4
onejar/pom.xml

@@ -17,7 +17,7 @@
 
 
     <properties>
     <properties>
         <project.root.basedir>${project.basedir}/..</project.root.basedir>
         <project.root.basedir>${project.basedir}/..</project.root.basedir>
-        <tomcat.version>9.0.30</tomcat.version>
+        <tomcat.version>9.0.31</tomcat.version>
     </properties>
     </properties>
 
 
     <build>
     <build>
@@ -26,7 +26,7 @@
                 <!-- prevent normal jar from being built -->
                 <!-- prevent normal jar from being built -->
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <id>default-jar</id>
                         <id>default-jar</id>
@@ -41,7 +41,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <artifactId>maven-assembly-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <configuration>
                 <configuration>
                     <appendAssemblyId>false</appendAssemblyId>
                     <appendAssemblyId>false</appendAssemblyId>
                     <descriptors>
                     <descriptors>
@@ -55,9 +55,14 @@
                             <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                             <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                             <Implementation-URL>${project.organization.url}</Implementation-URL>
                             <Implementation-URL>${project.organization.url}</Implementation-URL>
                             <Implementation-Build>${build.number}</Implementation-Build>
                             <Implementation-Build>${build.number}</Implementation-Build>
-                            <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
+                            <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                            <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                            <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                            <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                            <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                            <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>
                         </manifestEntries>
                         </manifestEntries>
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>

+ 50 - 13
pom.xml

@@ -38,6 +38,9 @@
         <maven.javadoc.skip>true</maven.javadoc.skip>
         <maven.javadoc.skip>true</maven.javadoc.skip>
 
 
         <skipTests>false</skipTests>
         <skipTests>false</skipTests>
+
+        <!-- git.commit.time is populated via git-commit-id-plugin and results in a (hopefully) reproducible maven build -->
+        <project.build.outputTimestamp>${git.commit.time}</project.build.outputTimestamp>
     </properties>
     </properties>
 
 
     <modules>
     <modules>
@@ -68,6 +71,32 @@
 
 
     <build>
     <build>
         <plugins>
         <plugins>
+            <plugin>
+                <groupId>pl.project13.maven</groupId>
+                <artifactId>git-commit-id-plugin</artifactId>
+                <version>4.0.0</version>
+                <executions>
+                    <execution>
+                        <id>get-the-git-infos</id>
+                        <goals>
+                            <goal>revision</goal>
+                        </goals>
+                        <phase>initialize</phase>
+                    </execution>
+                </executions>
+                <configuration>
+                    <dateFormat>yyyy-MM-dd'T'HH:mm:ss'Z'</dateFormat>
+                    <dateFormatTimeZone>Zulu</dateFormatTimeZone>
+                    <generateGitPropertiesFile>true</generateGitPropertiesFile>
+                    <generateGitPropertiesFilename>${project.build.outputDirectory}/classes/git.json</generateGitPropertiesFilename>
+                    <format>json</format>
+                    <excludeProperties>
+                        <!-- git.build.time is current timestamp so prevents reproducible build -->
+                        <excludeProperty>git.build.time</excludeProperty>
+                    </excludeProperties>
+                </configuration>
+            </plugin>
+
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-javadoc-plugin</artifactId>
                 <artifactId>maven-javadoc-plugin</artifactId>
@@ -88,10 +117,14 @@
                                     <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                                     <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                                     <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                                     <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                                     <Implementation-Build>${build.number}</Implementation-Build>
                                     <Implementation-Build>${build.number}</Implementation-Build>
-                                    <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                                     <Implementation-Revision>${build.revision}</Implementation-Revision>
                                     <Implementation-Revision>${build.revision}</Implementation-Revision>
                                     <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                                     <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
-                                </manifestEntries>
+                                    <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                                    <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                                    <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                                    <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                                    <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                                    <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>                                </manifestEntries>
                             </archive>
                             </archive>
                             <source>8</source>
                             <source>8</source>
                         </configuration>
                         </configuration>
@@ -101,7 +134,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-source-plugin</artifactId>
                 <artifactId>maven-source-plugin</artifactId>
-                <version>3.0.1</version>
+                <version>3.2.1</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <goals>
                         <goals>
@@ -120,10 +153,14 @@
                                     <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                                     <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                                     <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                                     <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                                     <Implementation-Build>${build.number}</Implementation-Build>
                                     <Implementation-Build>${build.number}</Implementation-Build>
-                                    <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                                     <Implementation-Revision>${build.revision}</Implementation-Revision>
                                     <Implementation-Revision>${build.revision}</Implementation-Revision>
                                     <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                                     <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
-                                </manifestEntries>
+                                    <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                                    <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                                    <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                                    <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                                    <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                                    <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>                                </manifestEntries>
                             </archive>
                             </archive>
                         </configuration>
                         </configuration>
                     </execution>
                     </execution>
@@ -132,7 +169,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-enforcer-plugin</artifactId>
                 <artifactId>maven-enforcer-plugin</artifactId>
-                <version>3.0.0-M2</version>
+                <version>3.0.0-M3</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <id>enforce-maven</id>
                         <id>enforce-maven</id>
@@ -152,7 +189,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-compiler-plugin</artifactId>
                 <artifactId>maven-compiler-plugin</artifactId>
-                <version>3.8.0</version>
+                <version>3.8.1</version>
                 <configuration>
                 <configuration>
                     <source>${maven.compiler.source}</source>
                     <source>${maven.compiler.source}</source>
                     <target>${maven.compiler.target}</target>
                     <target>${maven.compiler.target}</target>
@@ -161,12 +198,12 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
                 <artifactId>maven-checkstyle-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.1.1</version>
                 <dependencies>
                 <dependencies>
                     <dependency>
                     <dependency>
                         <groupId>com.puppycrawl.tools</groupId>
                         <groupId>com.puppycrawl.tools</groupId>
                         <artifactId>checkstyle</artifactId>
                         <artifactId>checkstyle</artifactId>
-                        <version>8.29</version>
+                        <version>8.30</version>
                     </dependency>
                     </dependency>
                 </dependencies>
                 </dependencies>
                 <executions>
                 <executions>
@@ -250,7 +287,7 @@
                     <dependency>
                     <dependency>
                         <groupId>com.github.spotbugs</groupId>
                         <groupId>com.github.spotbugs</groupId>
                         <artifactId>spotbugs</artifactId>
                         <artifactId>spotbugs</artifactId>
-                        <version>4.0.0-RC3</version>
+                        <version>4.0.0</version>
                     </dependency>
                     </dependency>
                 </dependencies>
                 </dependencies>
                 <configuration>
                 <configuration>
@@ -294,7 +331,7 @@
         <dependency>
         <dependency>
             <groupId>com.github.spotbugs</groupId>
             <groupId>com.github.spotbugs</groupId>
             <artifactId>spotbugs-annotations</artifactId>
             <artifactId>spotbugs-annotations</artifactId>
-            <version>4.0.0-RC3</version>
+            <version>4.0.0</version>
             <scope>provided</scope>
             <scope>provided</scope>
         </dependency>
         </dependency>
 
 
@@ -308,7 +345,7 @@
         <dependency>
         <dependency>
             <groupId>org.mockito</groupId>
             <groupId>org.mockito</groupId>
             <artifactId>mockito-core</artifactId>
             <artifactId>mockito-core</artifactId>
-            <version>3.2.4</version>
+            <version>3.3.0</version>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
@@ -320,7 +357,7 @@
         <dependency>
         <dependency>
             <groupId>com.github.tomakehurst</groupId>
             <groupId>com.github.tomakehurst</groupId>
             <artifactId>wiremock</artifactId>
             <artifactId>wiremock</artifactId>
-            <version>2.26.0</version>
+            <version>2.26.1</version>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
         <dependency>
         <dependency>

+ 7 - 2
pwm-cr/pom.xml

@@ -64,7 +64,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <configuration>
                 <configuration>
                     <archive>
                     <archive>
                         <manifestEntries>
                         <manifestEntries>
@@ -76,9 +76,14 @@
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build>${build.number}</Implementation-Build>
                             <Implementation-Build>${build.number}</Implementation-Build>
-                            <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
+                            <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                            <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                            <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                            <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                            <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                            <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>
                         </manifestEntries>
                         </manifestEntries>
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>

+ 7 - 2
rest-test-service/pom.xml

@@ -32,7 +32,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-war-plugin</artifactId>
                 <artifactId>maven-war-plugin</artifactId>
-                <version>3.2.2</version>
+                <version>3.2.3</version>
                 <configuration>
                 <configuration>
                     <archiveClasses>true</archiveClasses>
                     <archiveClasses>true</archiveClasses>
                     <packagingExcludes>WEB-INF/classes</packagingExcludes>
                     <packagingExcludes>WEB-INF/classes</packagingExcludes>
@@ -46,9 +46,14 @@
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build>${build.number}</Implementation-Build>
                             <Implementation-Build>${build.number}</Implementation-Build>
-                            <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
+                            <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                            <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                            <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                            <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                            <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                            <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>
                         </manifestEntries>
                         </manifestEntries>
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>

+ 12 - 7
server/pom.xml

@@ -43,7 +43,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-surefire-plugin</artifactId>
                 <artifactId>maven-surefire-plugin</artifactId>
-                <version>3.0.0-M3</version>
+                <version>3.0.0-M4</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <id>default-test</id>
                         <id>default-test</id>
@@ -94,7 +94,6 @@
                                     <filtering>true</filtering>
                                     <filtering>true</filtering>
                                     <directory>src/main/resources</directory>
                                     <directory>src/main/resources</directory>
                                     <includes>
                                     <includes>
-                                        <include>password/pwm/BuildInformation.properties</include>
                                         <include>password/pwm/PwmConstants.properties</include>
                                         <include>password/pwm/PwmConstants.properties</include>
                                     </includes>
                                     </includes>
                                 </resource>
                                 </resource>
@@ -106,11 +105,12 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-jar-plugin</artifactId>
                 <artifactId>maven-jar-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <configuration>
                 <configuration>
                     <archive>
                     <archive>
                         <manifestEntries>
                         <manifestEntries>
-                            <Implementation-Archive-Nonce>F84576985F0A176014F751736F7C79B6D9BED842FC48377404FE24A36BF6C2AA</Implementation-Archive-Nonce>
+                            <Archive-Type>jar</Archive-Type>
+                            <Archive-UID>F84576985F0A176014F751736F7C79B6D9BED842FC48377404FE24A36BF6C2AA</Archive-UID>
                             <Implementation-Title>${project.name}</Implementation-Title>
                             <Implementation-Title>${project.name}</Implementation-Title>
                             <Implementation-Version>${project.version}</Implementation-Version>
                             <Implementation-Version>${project.version}</Implementation-Version>
                             <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
                             <Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
@@ -118,9 +118,14 @@
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build>${build.number}</Implementation-Build>
                             <Implementation-Build>${build.number}</Implementation-Build>
-                            <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
+                            <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                            <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                            <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                            <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                            <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                            <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>
                         </manifestEntries>
                         </manifestEntries>
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>
@@ -128,7 +133,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-deploy-plugin</artifactId>
                 <artifactId>maven-deploy-plugin</artifactId>
-                <version>2.8.2</version>
+                <version>3.0.0-M1</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <phase>deploy</phase>
                         <phase>deploy</phase>
@@ -314,7 +319,7 @@
         <dependency>
         <dependency>
             <groupId>org.webjars</groupId>
             <groupId>org.webjars</groupId>
             <artifactId>webjars-locator-core</artifactId>
             <artifactId>webjars-locator-core</artifactId>
-            <version>0.43</version>
+            <version>0.44</version>
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>com.github.ben-manes.caffeine</groupId>
             <groupId>com.github.ben-manes.caffeine</groupId>

+ 24 - 20
server/src/main/java/password/pwm/PwmConstants.java

@@ -20,6 +20,7 @@
 
 
 package password.pwm;
 package password.pwm;
 
 
+import com.novell.ldapchai.ChaiConstant;
 import org.apache.commons.csv.CSVFormat;
 import org.apache.commons.csv.CSVFormat;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.JsonUtil;
 import password.pwm.util.java.StringUtil;
 import password.pwm.util.java.StringUtil;
@@ -34,8 +35,10 @@ import java.util.Collections;
 import java.util.Enumeration;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.List;
 import java.util.Locale;
 import java.util.Locale;
+import java.util.Map;
 import java.util.ResourceBundle;
 import java.util.ResourceBundle;
 import java.util.TimeZone;
 import java.util.TimeZone;
+import java.util.TreeMap;
 import java.util.jar.Attributes;
 import java.util.jar.Attributes;
 import java.util.jar.Manifest;
 import java.util.jar.Manifest;
 
 
@@ -46,13 +49,14 @@ import java.util.jar.Manifest;
  */
  */
 public abstract class PwmConstants
 public abstract class PwmConstants
 {
 {
+    public static final Map<String, String> BUILD_MANIFEST = readBuildManifest();
 
 
-    public static final String BUILD_TIME = readBuildInfoBundle( "Implementation-Build-Timestamp", "n/a" );
-    public static final String BUILD_NUMBER = readBuildInfoBundle( "Implementation-Build", "0" );
-    public static final String BUILD_REVISION = readBuildInfoBundle( "Implementation-Revision", "0" );
-    public static final String BUILD_JAVA_VENDOR = readBuildInfoBundle( "Implementation-Build-Java-Vendor" );
-    public static final String BUILD_JAVA_VERSION = readBuildInfoBundle( "Implementation-Build-Java-Version" );
-    public static final String BUILD_VERSION = readBuildInfoBundle( "Implementation-Version", "" );
+    public static final String BUILD_TIME = BUILD_MANIFEST.getOrDefault( "Implementation-Build-Timestamp", "n/a" );
+    public static final String BUILD_NUMBER = BUILD_MANIFEST.getOrDefault( "Implementation-Build", "0" );
+    public static final String BUILD_REVISION = BUILD_MANIFEST.getOrDefault( "Implementation-Revision", "0" );
+    public static final String BUILD_JAVA_VENDOR = BUILD_MANIFEST.getOrDefault( "Implementation-Build-Java-Vendor", "0" );
+    public static final String BUILD_JAVA_VERSION = BUILD_MANIFEST.getOrDefault( "Implementation-Build-Java-Version", "0" );
+    public static final String BUILD_VERSION = BUILD_MANIFEST.getOrDefault( "Implementation-Version", "0" );
 
 
     private static final String MISSING_VERSION_STRING = readPwmConstantsBundle( "missingVersionString" );
     private static final String MISSING_VERSION_STRING = readPwmConstantsBundle( "missingVersionString" );
     public static final String SERVLET_VERSION;
     public static final String SERVLET_VERSION;
@@ -238,35 +242,35 @@ public abstract class PwmConstants
         return ResourceBundle.getBundle( PwmConstants.class.getName() ).getString( key );
         return ResourceBundle.getBundle( PwmConstants.class.getName() ).getString( key );
     }
     }
 
 
-    private static String readBuildInfoBundle( final String key )
-    {
-        return readBuildInfoBundle( key, null );
-    }
-
-    private static String readBuildInfoBundle( final String key, final String defaultValue )
+    private static Map<String, String> readBuildManifest( )
     {
     {
         final String interestedArchiveNonce = "F84576985F0A176014F751736F7C79B6D9BED842FC48377404FE24A36BF6C2AA";
         final String interestedArchiveNonce = "F84576985F0A176014F751736F7C79B6D9BED842FC48377404FE24A36BF6C2AA";
-        final String manifestKeyName = "Implementation-Archive-Nonce";
+        final String manifestKeyName = "Archive-UID";
         final String manifestFileName = "META-INF/MANIFEST.MF";
         final String manifestFileName = "META-INF/MANIFEST.MF";
 
 
+        final Map<String, String> returnMap = new TreeMap<>();
         try
         try
         {
         {
-            final Enumeration<URL> resources = PwmConstants.class.getClassLoader().getResources( manifestFileName );
+            final Enumeration<URL> resources = ChaiConstant.class.getClassLoader().getResources( manifestFileName );
             while ( resources.hasMoreElements() )
             while ( resources.hasMoreElements() )
             {
             {
                 try ( InputStream inputStream = resources.nextElement().openStream() )
                 try ( InputStream inputStream = resources.nextElement().openStream() )
                 {
                 {
                     final Manifest manifest = new Manifest( inputStream );
                     final Manifest manifest = new Manifest( inputStream );
                     final Attributes attributes = manifest.getMainAttributes();
                     final Attributes attributes = manifest.getMainAttributes();
-                    final String archiveNonve = attributes.getValue( manifestKeyName );
+                    final String archiveNonce = attributes.getValue( manifestKeyName );
                     try
                     try
                     {
                     {
-                        if ( interestedArchiveNonce.equals( archiveNonve ) )
+                        if ( interestedArchiveNonce.equals( archiveNonce ) )
                         {
                         {
-                            final String value = attributes.getValue( key );
-                            if ( !StringUtil.isEmpty( value ) )
+                            for ( final Map.Entry<Object, Object> entry : attributes.entrySet() )
                             {
                             {
-                                return value;
+                                final Object keyObject = entry.getKey();
+                                final Object valueObject = entry.getValue();
+                                if ( keyObject != null && valueObject != null )
+                                {
+                                    returnMap.put( keyObject.toString(), valueObject.toString() );
+                                }
                             }
                             }
                         }
                         }
                     }
                     }
@@ -282,7 +286,7 @@ public abstract class PwmConstants
             System.out.println( t );
             System.out.println( t );
         }
         }
 
 
-        return defaultValue;
+        return Collections.unmodifiableMap( returnMap );
     }
     }
 
 
     public enum AcceptValue
     public enum AcceptValue

+ 19 - 1
server/src/main/java/password/pwm/http/servlet/configmanager/DebugItemGenerator.java

@@ -122,7 +122,8 @@ public class DebugItemGenerator
             RootFileSystemDebugItemGenerator.class,
             RootFileSystemDebugItemGenerator.class,
             LdapConnectionsDebugItemGenerator.class,
             LdapConnectionsDebugItemGenerator.class,
             StatisticsDataDebugItemGenerator.class,
             StatisticsDataDebugItemGenerator.class,
-            StatisticsEpsDataDebugItemGenerator.class
+            StatisticsEpsDataDebugItemGenerator.class,
+            BuildInformationDebugItemGenerator.class
     ) );
     ) );
 
 
     private final PwmApplication pwmApplication;
     private final PwmApplication pwmApplication;
@@ -871,6 +872,23 @@ public class DebugItemGenerator
         }
         }
     }
     }
 
 
+    static class BuildInformationDebugItemGenerator implements Generator
+    {
+        @Override
+        public String getFilename( )
+        {
+            return "build.properties";
+        }
+
+        @Override
+        public void outputItem( final DebugItemInput debugItemInput, final OutputStream outputStream ) throws Exception
+        {
+            final Properties outputProps = new JavaHelper.SortedProperties();
+            outputProps.putAll( PwmConstants.BUILD_MANIFEST );
+            outputProps.store( outputStream, JavaHelper.toIsoDate( Instant.now() ) );
+        }
+    }
+
     static class RootFileSystemDebugItemGenerator implements Generator
     static class RootFileSystemDebugItemGenerator implements Generator
     {
     {
         @Override
         @Override

+ 0 - 30
server/src/main/resources/password/pwm/BuildInformation.properties

@@ -1,30 +0,0 @@
-#
-# Password Management Servlets (PWM)
-# http://www.pwm-project.org
-#
-# Copyright (c) 2006-2009 Novell, Inc.
-# Copyright (c) 2009-2019 The PWM Project
-#
-# 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.
-#
-
-
-#Build Number for ANT. Do not edit!
-#Mon Nov 25 19:53:33 EST 2013
-build.version=${project.version}
-build.number=${build.number}
-build.time=${timestamp.iso}
-build.user=${user.name}
-build.java.vendor=${java.vendor}
-build.java.version=${java.version}
-build.revision=${build.revision}

+ 3 - 1
server/src/test/java/password/pwm/svc/event/CEFAuditFormatterTest.java

@@ -45,7 +45,9 @@ public class CEFAuditFormatterTest
         final UserAuditRecord auditRecord = JsonUtil.deserialize( jsonInput, UserAuditRecord.class );
         final UserAuditRecord auditRecord = JsonUtil.deserialize( jsonInput, UserAuditRecord.class );
 
 
         final String appName = PwmConstants.PWM_APP_NAME;
         final String appName = PwmConstants.PWM_APP_NAME;
-        final String expectedOutput = "CEF:0|" + appName + "|" + appName + "|v b0 r0|ACTIVATE_USER|Activate Account|Medium| type=USER eventCode=ACTIVATE_USER timestamp="
+        final String versionData = PwmConstants.SERVLET_VERSION;
+        final String expectedOutput = "CEF:0|" + appName + "|" + appName + "|" + versionData
+                + "|ACTIVATE_USER|Activate Account|Medium| type=USER eventCode=ACTIVATE_USER timestamp="
                 + "2000-01-01T00:00:00Z"
                 + "2000-01-01T00:00:00Z"
                 + " message=message pipe\\|Escape, slash\\\\Escape, equal\\=Escape, \\nsecondLine"
                 + " message=message pipe\\|Escape, slash\\\\Escape, equal\\=Escape, \\nsecondLine"
                 + " perpetratorID=per\\|son perpetratorDN=cn\\=per\\|son,o\\=org sourceAddress=2001:DB8:D:B8:35cc::/64 sourceHost=ws31222";
                 + " perpetratorID=per\\|son perpetratorDN=cn\\=per\\|son,o\\=org sourceAddress=2001:DB8:D:B8:35cc::/64 sourceHost=ws31222";

+ 26 - 4
webapp/pom.xml

@@ -33,7 +33,7 @@
                     <plugin>
                     <plugin>
                         <groupId>org.apache.maven.plugins</groupId>
                         <groupId>org.apache.maven.plugins</groupId>
                         <artifactId>maven-assembly-plugin</artifactId>
                         <artifactId>maven-assembly-plugin</artifactId>
-                        <version>3.1.0</version>
+                        <version>3.2.0</version>
                         <configuration>
                         <configuration>
                             <descriptors>
                             <descriptors>
                                 <descriptor>src/build/assembly/release-bundle.xml</descriptor>
                                 <descriptor>src/build/assembly/release-bundle.xml</descriptor>
@@ -60,7 +60,7 @@
             <plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
                 <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-assembly-plugin</artifactId>
                 <artifactId>maven-assembly-plugin</artifactId>
-                <version>3.1.0</version>
+                <version>3.2.0</version>
                 <executions>
                 <executions>
                     <execution>
                     <execution>
                         <id>make-ldif-schema-zip</id>
                         <id>make-ldif-schema-zip</id>
@@ -97,7 +97,7 @@
                 <artifactId>maven-war-plugin</artifactId>
                 <artifactId>maven-war-plugin</artifactId>
                 <version>3.2.2</version>
                 <version>3.2.2</version>
                 <configuration>
                 <configuration>
-                    <archiveClasses>true</archiveClasses>
+                    <archiveClasses>false</archiveClasses>
                     <packagingExcludes>**/*.jsp</packagingExcludes>
                     <packagingExcludes>**/*.jsp</packagingExcludes>
                     <!-- remove/comment the next line to prevent pre-compiled JSPs from being used in the output WAR -->
                     <!-- remove/comment the next line to prevent pre-compiled JSPs from being used in the output WAR -->
                     <webXml>${project.build.directory}/web.xml</webXml>
                     <webXml>${project.build.directory}/web.xml</webXml>
@@ -111,9 +111,14 @@
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Vendor>${java.vendor}</Implementation-Build-Java-Vendor>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build-Java-Version>${java.version}</Implementation-Build-Java-Version>
                             <Implementation-Build>${build.number}</Implementation-Build>
                             <Implementation-Build>${build.number}</Implementation-Build>
-                            <Implementation-Build-Timestamp>${timestamp.iso}</Implementation-Build-Timestamp>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Revision>${build.revision}</Implementation-Revision>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
                             <Implementation-Version-Display>v${project.version} b${build.number} r${build.revision}</Implementation-Version-Display>
+                            <SCM-Git-Branch>${git.branch}</SCM-Git-Branch>
+                            <SCM-Git-Commit-ID>${git.commit.id}</SCM-Git-Commit-ID>
+                            <SCM-Git-Commit-ID-Abbrev>${git.commit.id.abbrev}</SCM-Git-Commit-ID-Abbrev>
+                            <SCM-Git-Commit-ID-Description>${git.commit.id.describe}</SCM-Git-Commit-ID-Description>
+                            <SCM-Git-Commit-Timestamp>${git.commit.time}</SCM-Git-Commit-Timestamp>
+                            <SCM-Git-Commit-Dirty>${git.dirty}</SCM-Git-Commit-Dirty>
                         </manifestEntries>
                         </manifestEntries>
                     </archive>
                     </archive>
                 </configuration>
                 </configuration>
@@ -248,6 +253,23 @@
                     </dependencyOverrides>
                     </dependencyOverrides>
                 </configuration>
                 </configuration>
             </plugin>
             </plugin>
+            <plugin>
+                <groupId>io.github.zlika</groupId>
+                <artifactId>reproducible-build-maven-plugin</artifactId>
+                <version>0.11</version>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>strip-jar</goal>
+                        </goals>
+                        <phase>package</phase>
+                        <configuration>
+                            <zipDateTime>${git.commit.time}</zipDateTime>
+                            <zipDateTimeFormatPattern>yyyy-MM-dd'T'HH:mm:ss'Z'</zipDateTimeFormatPattern>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
         </plugins>
         </plugins>
     </build>
     </build>