From 28b5c476d1bb7adb5d35aa6c4805aa704aafa868 Mon Sep 17 00:00:00 2001 From: BarDweller Date: Wed, 11 Sep 2019 10:03:46 -0400 Subject: [PATCH 1/4] Add version range --- .../image/Dockerfile-stack | 3 ++ .../image/project/Dockerfile | 2 + .../image/project/pom.xml | 2 +- .../project/util/RangeIncludesVersion.java | 17 +++++++ .../image/project/util/check_version | 48 +++++++++++++++++++ .../image/project/validate.sh | 42 +++++++++++++--- .../java-spring-boot2-liberty/stack.yaml | 2 +- .../templates/default/pom.xml | 5 +- 8 files changed, 110 insertions(+), 11 deletions(-) create mode 100644 experimental/java-spring-boot2-liberty/image/project/util/RangeIncludesVersion.java create mode 100644 experimental/java-spring-boot2-liberty/image/project/util/check_version diff --git a/experimental/java-spring-boot2-liberty/image/Dockerfile-stack b/experimental/java-spring-boot2-liberty/image/Dockerfile-stack index 00315e403..b83b5b622 100644 --- a/experimental/java-spring-boot2-liberty/image/Dockerfile-stack +++ b/experimental/java-spring-boot2-liberty/image/Dockerfile-stack @@ -10,6 +10,9 @@ RUN apt-get -qq update \ COPY ./LICENSE /licenses/ COPY ./project /project COPY ./config /config + +RUN /project/util/check_version build + WORKDIR /project/ RUN mkdir -p /mvn/repository diff --git a/experimental/java-spring-boot2-liberty/image/project/Dockerfile b/experimental/java-spring-boot2-liberty/image/project/Dockerfile index 244ee14db..9973de503 100644 --- a/experimental/java-spring-boot2-liberty/image/project/Dockerfile +++ b/experimental/java-spring-boot2-liberty/image/project/Dockerfile @@ -5,6 +5,8 @@ RUN apt-get update && \ COPY . /project +RUN /project/util/check_version build + WORKDIR /project/user-app RUN mvn -B install -DskipTests diff --git a/experimental/java-spring-boot2-liberty/image/project/pom.xml b/experimental/java-spring-boot2-liberty/image/project/pom.xml index 463eac182..14e7c0480 100644 --- a/experimental/java-spring-boot2-liberty/image/project/pom.xml +++ b/experimental/java-spring-boot2-liberty/image/project/pom.xml @@ -26,7 +26,7 @@ dev.appsody java-spring-boot2-liberty - 0.1.7 + 0.1.8 pom diff --git a/experimental/java-spring-boot2-liberty/image/project/util/RangeIncludesVersion.java b/experimental/java-spring-boot2-liberty/image/project/util/RangeIncludesVersion.java new file mode 100644 index 000000000..139489940 --- /dev/null +++ b/experimental/java-spring-boot2-liberty/image/project/util/RangeIncludesVersion.java @@ -0,0 +1,17 @@ +import org.osgi.framework.VersionRange; +import org.osgi.framework.Version; + +public class RangeIncludesVersion { + + public static void main(String[] args) { + if ( args.length < 2 ) { + System.out.println("Must specify range and version"); + System.exit(1); + } + String range = args[0]; + String version = args[1]; + + boolean result = VersionRange.valueOf(range).includes(Version.valueOf(version)); + System.exit( result ? 0 : 1 ); + } +} diff --git a/experimental/java-spring-boot2-liberty/image/project/util/check_version b/experimental/java-spring-boot2-liberty/image/project/util/check_version new file mode 100644 index 000000000..c4daba8dc --- /dev/null +++ b/experimental/java-spring-boot2-liberty/image/project/util/check_version @@ -0,0 +1,48 @@ +#!/bin/bash +# This is a small utility script that uses OSGi VersionRange and Version +# classes to verify whether or not a specified version matches is contained +# within a specified range. +# +cd "$( dirname "${BASH_SOURCE[0]}" )" + +if [ $# -lt 1 ]; then + ACTION=range +else + ACTION=$1 + shift +fi + +range_check() { + java -cp .:org.osgi.core-6.0.0.jar RangeIncludesVersion "$1" "$2" + return $? +} + +sniff() { + range_check "$1" "$2" + if [ $? -ne $3 ]; then + echo "Test |'$1' contains '$2'| should return $3. Got $?" + exit 1 + fi +} + +case "$ACTION" in + build) + wget -q https://repo1.maven.org/maven2/org/osgi/org.osgi.core/6.0.0/org.osgi.core-6.0.0.jar + javac -cp org.osgi.core-6.0.0.jar *.java + + sniff "[0.3,0.4)" "0.3.7" 0 + sniff "[0.3,0.4)" "0.4" 1 + sniff "[0.3,0.4)" "0.2" 1 + exit 0 + ;; + contains) + if [ $# -lt 2 ]; then + echo "Specify version information: check_version contains " + exit 1 + fi + + range_check "$1" "$2" + exit $? + ;; +esac + diff --git a/experimental/java-spring-boot2-liberty/image/project/validate.sh b/experimental/java-spring-boot2-liberty/image/project/validate.sh index a0cd54ec7..72097edfc 100755 --- a/experimental/java-spring-boot2-liberty/image/project/validate.sh +++ b/experimental/java-spring-boot2-liberty/image/project/validate.sh @@ -21,15 +21,43 @@ eval $(mvn -q -Dexec.executable=echo -Dexec.args="${args}" --non-recursive -f .. echo "Installing parent ${PARENT_GROUP_ID}:${PARENT_ARTIFACT_ID}:${PARENT_VERSION}" mvn install -Dmaven.repo.local=/mvn/repository -Denforcer.skip=true -f ../pom.xml +# Get parent pom information +a_groupId=$(xmlstarlet sel -T -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:groupId" /project/pom.xml) +a_artifactId=$(xmlstarlet sel -T -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:artifactId" /project/pom.xml) +a_version=$(xmlstarlet sel -T -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:version" /project/pom.xml) +p_groupId=$(xmlstarlet sel -T -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:parent/x:groupId" pom.xml) +p_artifactId=$(xmlstarlet sel -T -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:parent/x:artifactId" pom.xml) +p_version_range=$(xmlstarlet sel -T -N x="http://maven.apache.org/POM/4.0.0" -t -v "/x:project/x:parent/x:version" pom.xml) + # Check child pom for required parent project -if ! grep -Gz ".*${PARENT_GROUP_ID}.*" pom.xml | grep -Gz ".*${PARENT_ARTIFACT_ID}.*" | grep -Gzq ".*${PARENT_VERSION}.*" -then - echo "Project is missing required parent: +if [ "${p_groupId}" != "${a_groupId}" ] || [ "${p_artifactId}" != "${a_artifactId}" ]; then + error "Project pom.xml is missing the required parent: + - ${PARENT_GROUP_ID} - ${PARENT_ARTIFACT_ID} - ${PARENT_VERSION} - " + ${a_groupId} + ${a_artifactId} + ${a_range} + + + " + exit 1 +fi + +# Check parent version +if ! /project/util/check_version contains "$p_version_range" "$a_version"; then + echo "Version mismatch + +The version of the appsody stack '${a_version}' does not match the +parent version specified in pom.xml '${p_version_range}'. Please update +the parent version in pom.xml, and test your changes. + + + ${a_groupId} + ${a_artifactId} + ${a_range} + + + " exit 1 fi diff --git a/experimental/java-spring-boot2-liberty/stack.yaml b/experimental/java-spring-boot2-liberty/stack.yaml index 1a420ae60..6c70725ec 100644 --- a/experimental/java-spring-boot2-liberty/stack.yaml +++ b/experimental/java-spring-boot2-liberty/stack.yaml @@ -1,5 +1,5 @@ name: Spring Boot® on Open Liberty -version: 0.1.7 +version: 0.1.8 description: Spring Boot on Open Liberty & OpenJ9 using Maven license: Apache-2.0 language: java diff --git a/experimental/java-spring-boot2-liberty/templates/default/pom.xml b/experimental/java-spring-boot2-liberty/templates/default/pom.xml index ecbfee9d2..2624fec7a 100755 --- a/experimental/java-spring-boot2-liberty/templates/default/pom.xml +++ b/experimental/java-spring-boot2-liberty/templates/default/pom.xml @@ -5,10 +5,11 @@ 4.0.0 - + dev.appsody java-spring-boot2-liberty - 0.1.7 + [0.1, 0.2) + dev.appsody.starter.java-spring-boot2-liberty From 8e8d3fc674cd3df33721a4f55f676e95f48a6933 Mon Sep 17 00:00:00 2001 From: BarDweller Date: Wed, 11 Sep 2019 10:09:25 -0400 Subject: [PATCH 2/4] add missing xmlstarlet --- experimental/java-spring-boot2-liberty/image/Dockerfile-stack | 2 +- experimental/java-spring-boot2-liberty/image/project/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/experimental/java-spring-boot2-liberty/image/Dockerfile-stack b/experimental/java-spring-boot2-liberty/image/Dockerfile-stack index b83b5b622..a7f62d2b3 100644 --- a/experimental/java-spring-boot2-liberty/image/Dockerfile-stack +++ b/experimental/java-spring-boot2-liberty/image/Dockerfile-stack @@ -2,7 +2,7 @@ FROM adoptopenjdk/openjdk8-openj9 USER root RUN apt-get -qq update \ - && apt-get -qq install -y curl maven wget unzip\ + && apt-get -qq install -y curl maven wget unzip xmlstarlet \ && DEBIAN_FRONTEND=noninteractive apt-get -qq upgrade -y \ && apt-get -qq clean \ && rm -rf /tmp/* /var/lib/apt/lists/* diff --git a/experimental/java-spring-boot2-liberty/image/project/Dockerfile b/experimental/java-spring-boot2-liberty/image/project/Dockerfile index 9973de503..fe516bfae 100644 --- a/experimental/java-spring-boot2-liberty/image/project/Dockerfile +++ b/experimental/java-spring-boot2-liberty/image/project/Dockerfile @@ -1,7 +1,7 @@ FROM adoptopenjdk/openjdk8-openj9 RUN apt-get update && \ - apt-get install -y maven unzip wget + apt-get install -y maven unzip wget xmlstarlet COPY . /project From b369ad200d96c17e56b3e796c196f0d4dfc120d9 Mon Sep 17 00:00:00 2001 From: BarDweller Date: Wed, 11 Sep 2019 15:09:44 -0400 Subject: [PATCH 3/4] Make check_version executable --- .../java-spring-boot2-liberty/image/project/util/check_version | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 experimental/java-spring-boot2-liberty/image/project/util/check_version diff --git a/experimental/java-spring-boot2-liberty/image/project/util/check_version b/experimental/java-spring-boot2-liberty/image/project/util/check_version old mode 100644 new mode 100755 From 85bcabb7e0680f0349434e9d810c3383ba4b7049 Mon Sep 17 00:00:00 2001 From: BarDweller Date: Wed, 11 Sep 2019 16:58:35 -0400 Subject: [PATCH 4/4] add mvn install to docker build --- .../java-spring-boot2-liberty/image/project/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/experimental/java-spring-boot2-liberty/image/project/Dockerfile b/experimental/java-spring-boot2-liberty/image/project/Dockerfile index fe516bfae..99f9f1f2a 100644 --- a/experimental/java-spring-boot2-liberty/image/project/Dockerfile +++ b/experimental/java-spring-boot2-liberty/image/project/Dockerfile @@ -7,6 +7,8 @@ COPY . /project RUN /project/util/check_version build +RUN cd /project && mvn -B install dependency:go-offline -DskipTests + WORKDIR /project/user-app RUN mvn -B install -DskipTests @@ -23,4 +25,4 @@ COPY --chown=1001:0 --from=0 /config/ /config/ COPY --chown=1001:0 --from=0 /lib.index.cache/ /lib.index.cache/ EXPOSE 9080 -EXPOSE 9443 \ No newline at end of file +EXPOSE 9443