From 509dd6111a6ba93df5819d9d05f184c2901c6435 Mon Sep 17 00:00:00 2001
From: Eike Cochu <eike@cochu.com>
Date: Sat, 4 Jun 2016 15:38:58 +0200
Subject: [PATCH] added build version support

---
 .gitignore                                    |  3 +-
 build.sh                                      |  7 +++++
 vipra-backend/pom.xml                         | 19 ++++++++++++
 .../de/vipra/rest/resource/InfoResource.java  |  1 +
 .../src/main/resources/buildNumber.properties |  2 ++
 vipra-cmd/pom.xml                             | 27 +++++++++++++++++
 .../java/de/vipra/cmd/CommandLineOptions.java |  7 ++++-
 .../src/main/java/de/vipra/cmd/Main.java      |  4 +++
 .../de/vipra/cmd/option/VersionCommand.java   | 29 +++++++++++++++++++
 .../src/main/resources/buildNumber.properties |  2 ++
 vipra-ui/app/html/about.html                  |  6 +++-
 vipra-util/pom.xml                            | 27 +++++++++++++++++
 .../main/java/de/vipra/util/BuildInfo.java    |  6 ++++
 .../main/java/de/vipra/util/Constants.java    |  1 +
 .../src/main/resources/buildNumber.properties |  2 ++
 15 files changed, 140 insertions(+), 3 deletions(-)
 create mode 100644 vipra-cmd/src/main/java/de/vipra/cmd/option/VersionCommand.java

diff --git a/.gitignore b/.gitignore
index a73255af..808c842a 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,4 +5,5 @@
 *.sublime-workspace
 .vagrant/
 .release/
-/*.tar.gz
\ No newline at end of file
+/*.tar.gz
+/build.properties
\ No newline at end of file
diff --git a/build.sh b/build.sh
index 6a7362e2..da90e6e8 100755
--- a/build.sh
+++ b/build.sh
@@ -34,6 +34,8 @@ DEPLOY_FRONTEND_TO_VAGRANT=0
 #######################################################################################
 
 DIR="$(dirname "$(readlink -f "$0")")"
+VERSION=$(git describe)
+VERSION_LONG=$(git describe --long)
 
 WAR_FILE="vipra.war"
 VIPRA_BACKEND="$DIR/vipra-backend"
@@ -110,6 +112,11 @@ if [ $BUILD_VIPRA_UI -eq 1 ]; then
         GULP=$(command -v gulp 2>/dev/null) || { echo >&2 "gulp not found"; exit 1; }
 fi
 
+# insert build number
+
+echo "git.tag=$VERSION" > $DIR/build.properties
+echo "git.longtag=$VERSION_LONG" >> $DIR/build.properties
+
 # build dtm
 
 if [ $BUILD_DTM -eq 1 ]; then
diff --git a/vipra-backend/pom.xml b/vipra-backend/pom.xml
index f20a4930..51a00dd1 100644
--- a/vipra-backend/pom.xml
+++ b/vipra-backend/pom.xml
@@ -156,6 +156,25 @@
 					</execution>
 				</executions>
 			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>properties-maven-plugin</artifactId>
+				<version>1.0.0</version>
+				<executions>
+					<execution>
+						<phase>initialize</phase>
+						<goals>
+							<goal>read-project-properties</goal>
+						</goals>
+						<configuration>
+							<files>
+								<file>../build.properties</file>
+							</files>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 
 		<resources>
diff --git a/vipra-backend/src/main/java/de/vipra/rest/resource/InfoResource.java b/vipra-backend/src/main/java/de/vipra/rest/resource/InfoResource.java
index 7048ced4..a856ff01 100644
--- a/vipra-backend/src/main/java/de/vipra/rest/resource/InfoResource.java
+++ b/vipra-backend/src/main/java/de/vipra/rest/resource/InfoResource.java
@@ -53,6 +53,7 @@ public class InfoResource {
 			info.put("host.os.version", System.getProperty("os.version"));
 
 			// app info
+			info.put("app.gittag", buildInfo.getGitTag());
 			info.put("app.gitsha1", buildInfo.getGitSHA1());
 			info.put("app.version", buildInfo.getVersion());
 			info.put("app.builddate", buildInfo.getBuildDate());
diff --git a/vipra-backend/src/main/resources/buildNumber.properties b/vipra-backend/src/main/resources/buildNumber.properties
index e340aab1..36d4472c 100644
--- a/vipra-backend/src/main/resources/buildNumber.properties
+++ b/vipra-backend/src/main/resources/buildNumber.properties
@@ -1,3 +1,5 @@
+git-tag=${git.tag}
+git-longtag=${git.longtag}
 git-sha-1=${buildNumber}
 version=${project.version}
 builddate=${buildDate}
\ No newline at end of file
diff --git a/vipra-cmd/pom.xml b/vipra-cmd/pom.xml
index 0569678a..193991c3 100644
--- a/vipra-cmd/pom.xml
+++ b/vipra-cmd/pom.xml
@@ -81,6 +81,14 @@
 
 	<build>
 		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+			
 			<plugin>
 				<groupId>org.apache.maven.plugins</groupId>
 				<artifactId>maven-dependency-plugin</artifactId>
@@ -131,6 +139,25 @@
 					</execution>
 				</executions>
 			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>properties-maven-plugin</artifactId>
+				<version>1.0.0</version>
+				<executions>
+					<execution>
+						<phase>initialize</phase>
+						<goals>
+							<goal>read-project-properties</goal>
+						</goals>
+						<configuration>
+							<files>
+								<file>../build.properties</file>
+							</files>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 
 		<resources>
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java b/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java
index 9df57f19..bdbf072d 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/CommandLineOptions.java
@@ -19,6 +19,7 @@ public class CommandLineOptions {
 	public static final Option SILENT = Option.builder("s").longOpt("silent").desc("suppress all output").build();
 	public static final Option TEST = Option.builder("t").longOpt("test").desc("test database connections").build();
 	public static final Option ALL = Option.builder("A").longOpt("all").desc("select all models (-S all)").build();
+	public static final Option VERSION = Option.builder("v").longOpt("version").desc("print the version number").build();
 
 	public static final Option INDEX = Option.builder("i").longOpt("index").desc("create index for models").hasArgs().argName("[models...]")
 			.optionalArg(true).build();
@@ -47,7 +48,7 @@ public class CommandLineOptions {
 
 	public CommandLineOptions() {
 		final Option[] optionsArray = { CLEAR, DEBUG, HELP, INDEX, LIST, REREAD, SILENT, TEST, ALL, CREATE, DELETE, EDIT, PRINT, IMPORT, MODEL,
-				SELECT, MESSAGE, BACKUP, RESTORE };
+				SELECT, MESSAGE, BACKUP, RESTORE, VERSION };
 		options = new Options();
 		for (final Option option : optionsArray)
 			options.addOption(option);
@@ -244,4 +245,8 @@ public class CommandLineOptions {
 		return getOptionValue(RESTORE);
 	}
 
+	public boolean isVersion() {
+		return hasOption(VERSION);
+	}
+
 }
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java
index 565276c1..f7475b82 100644
--- a/vipra-cmd/src/main/java/de/vipra/cmd/Main.java
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/Main.java
@@ -21,6 +21,7 @@ import de.vipra.cmd.option.ModelingCommand;
 import de.vipra.cmd.option.PrintModelCommand;
 import de.vipra.cmd.option.RestoreCommand;
 import de.vipra.cmd.option.TestCommand;
+import de.vipra.cmd.option.VersionCommand;
 import de.vipra.util.ConsoleUtils;
 import de.vipra.util.LockFile;
 import de.vipra.util.ex.LockFileException;
@@ -79,6 +80,9 @@ public class Main {
 
 		final List<Command> commands = new ArrayList<>();
 
+		if (opts.isVersion())
+			commands.add(new VersionCommand());
+
 		if (opts.isTest())
 			commands.add(new TestCommand());
 
diff --git a/vipra-cmd/src/main/java/de/vipra/cmd/option/VersionCommand.java b/vipra-cmd/src/main/java/de/vipra/cmd/option/VersionCommand.java
new file mode 100644
index 00000000..b3211f54
--- /dev/null
+++ b/vipra-cmd/src/main/java/de/vipra/cmd/option/VersionCommand.java
@@ -0,0 +1,29 @@
+package de.vipra.cmd.option;
+
+import java.io.InputStream;
+import java.util.Properties;
+
+import de.vipra.util.ConsoleUtils;
+import de.vipra.util.Constants;
+import de.vipra.util.FileUtils;
+
+public class VersionCommand implements Command {
+
+	@Override
+	public void run() throws Exception {
+		InputStream in = FileUtils.getResource(Constants.BUILDNUMBER_FILE);
+		Properties props = new Properties();
+		props.load(in);
+
+		ConsoleUtils.info("VIPRA CMD tool");
+		ConsoleUtils.info("Version: " + props.getProperty("git-tag"));
+		ConsoleUtils.info("Commit : " + props.getProperty("git-sha-1"));
+		ConsoleUtils.info("From   : " + props.getProperty("builddate"));
+	}
+
+	@Override
+	public boolean requiresLock() {
+		return false;
+	}
+
+}
diff --git a/vipra-cmd/src/main/resources/buildNumber.properties b/vipra-cmd/src/main/resources/buildNumber.properties
index e340aab1..36d4472c 100644
--- a/vipra-cmd/src/main/resources/buildNumber.properties
+++ b/vipra-cmd/src/main/resources/buildNumber.properties
@@ -1,3 +1,5 @@
+git-tag=${git.tag}
+git-longtag=${git.longtag}
 git-sha-1=${buildNumber}
 version=${project.version}
 builddate=${buildDate}
\ No newline at end of file
diff --git a/vipra-ui/app/html/about.html b/vipra-ui/app/html/about.html
index cd457011..33c1c7c7 100644
--- a/vipra-ui/app/html/about.html
+++ b/vipra-ui/app/html/about.html
@@ -20,7 +20,11 @@
       <table class="table table-bordered table-fixed">
         <tbody>
           <tr>
-            <th style="width:33%">Git Version</th>
+            <th style="width:33%">Git Tag</th>
+            <td ng-bind="::info.app.gittag"></td>
+          </tr>
+          <tr>
+            <th>Git SHA1</th>
             <td ng-bind="::info.app.gitsha1"></td>
           </tr>
           <tr>
diff --git a/vipra-util/pom.xml b/vipra-util/pom.xml
index 4793ef1c..97d531f2 100644
--- a/vipra-util/pom.xml
+++ b/vipra-util/pom.xml
@@ -76,6 +76,14 @@
 
 	<build>
 		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-surefire-plugin</artifactId>
+				<configuration>
+					<skipTests>true</skipTests>
+				</configuration>
+			</plugin>
+			
 			<plugin>
 				<groupId>org.codehaus.mojo</groupId>
 				<artifactId>buildnumber-maven-plugin</artifactId>
@@ -89,6 +97,25 @@
 					</execution>
 				</executions>
 			</plugin>
+
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>properties-maven-plugin</artifactId>
+				<version>1.0.0</version>
+				<executions>
+					<execution>
+						<phase>initialize</phase>
+						<goals>
+							<goal>read-project-properties</goal>
+						</goals>
+						<configuration>
+							<files>
+								<file>../build.properties</file>
+							</files>
+						</configuration>
+					</execution>
+				</executions>
+			</plugin>
 		</plugins>
 
 		<resources>
diff --git a/vipra-util/src/main/java/de/vipra/util/BuildInfo.java b/vipra-util/src/main/java/de/vipra/util/BuildInfo.java
index c997d61d..0f41f484 100644
--- a/vipra-util/src/main/java/de/vipra/util/BuildInfo.java
+++ b/vipra-util/src/main/java/de/vipra/util/BuildInfo.java
@@ -30,17 +30,23 @@ public class BuildInfo {
 		return properties;
 	}
 
+	private final String gitTag;
 	private final String gitSHA1;
 	private final String version;
 	private final String buildDate;
 
 	public BuildInfo() {
 		final Properties props = getProperties();
+		gitTag = props.getProperty("git-tag");
 		gitSHA1 = props.getProperty("git-sha-1");
 		version = props.getProperty("version");
 		buildDate = props.getProperty("builddate");
 	}
 
+	public String getGitTag() {
+		return gitTag;
+	}
+
 	public String getGitSHA1() {
 		return gitSHA1;
 	}
diff --git a/vipra-util/src/main/java/de/vipra/util/Constants.java b/vipra-util/src/main/java/de/vipra/util/Constants.java
index dbee71c2..442ef0bf 100644
--- a/vipra-util/src/main/java/de/vipra/util/Constants.java
+++ b/vipra-util/src/main/java/de/vipra/util/Constants.java
@@ -30,6 +30,7 @@ public class Constants {
 	 */
 
 	public static final String CONFIG_FILE = "config.json";
+	public static final String BUILDNUMBER_FILE = "buildNumber.properties";
 
 	/*
 	 * DATABASE
diff --git a/vipra-util/src/main/resources/buildNumber.properties b/vipra-util/src/main/resources/buildNumber.properties
index e340aab1..36d4472c 100644
--- a/vipra-util/src/main/resources/buildNumber.properties
+++ b/vipra-util/src/main/resources/buildNumber.properties
@@ -1,3 +1,5 @@
+git-tag=${git.tag}
+git-longtag=${git.longtag}
 git-sha-1=${buildNumber}
 version=${project.version}
 builddate=${buildDate}
\ No newline at end of file
-- 
GitLab