From 1378b45f023214d7074418a8ae93e50b70d0dbcc Mon Sep 17 00:00:00 2001 From: Sophia Guo Date: Wed, 29 Nov 2023 12:21:06 -0500 Subject: [PATCH 1/5] Add reproducible as functional tests Signed-off-by: Sophia Guo --- test/functional/reproducibleCompare/build.xml | 45 ++++++ .../linux_repro_build_compare.sh | 152 ++++++++++++++++++ .../reproducibleCompare/playlist.xml | 37 +++++ test/functional/reproducibleCompare/test.sh | 18 +++ 4 files changed, 252 insertions(+) create mode 100644 test/functional/reproducibleCompare/build.xml create mode 100755 test/functional/reproducibleCompare/linux_repro_build_compare.sh create mode 100644 test/functional/reproducibleCompare/playlist.xml create mode 100755 test/functional/reproducibleCompare/test.sh diff --git a/test/functional/reproducibleCompare/build.xml b/test/functional/reproducibleCompare/build.xml new file mode 100644 index 000000000..723c048db --- /dev/null +++ b/test/functional/reproducibleCompare/build.xml @@ -0,0 +1,45 @@ + + + + + + + + Temurin Reproducible Comparison tests + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/test/functional/reproducibleCompare/linux_repro_build_compare.sh b/test/functional/reproducibleCompare/linux_repro_build_compare.sh new file mode 100755 index 000000000..9b16ea561 --- /dev/null +++ b/test/functional/reproducibleCompare/linux_repro_build_compare.sh @@ -0,0 +1,152 @@ +#!/bin/sh +# 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 +# +# https://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. +################################################################################ + +# This script examines the given SBOM metadata file, and then builds the exact same binary +# and then compares with the Temurin JDK for the same build version, or the optionally supplied TARBALL_URL. + +installPrereqs() { + if test -r /etc/redhat-release; then + yum install -y gcc gcc-c++ make autoconf unzip zip alsa-lib-devel cups-devel libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel + yum install -y file fontconfig fontconfig-devel systemtap-sdt-devel # Not included above ... + yum install -y git bzip2 xz openssl pigz which jq # pigz/which not strictly needed but help in final compression + if grep -i release.6 /etc/redhat-release; then + if [ ! -r /usr/local/bin/autoconf ]; then + curl https://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz | tar xpfz - || exit 1 + (cd autoconf-2.69 && ./configure --prefix=/usr/local && make install) + fi + fi + fi +} + +# ant required for --create-sbom +downloadAnt() { + if [ ! -r /usr/local/apache-ant-${ANT_VERSION}/bin/ant ]; then + echo Downloading ant for SBOM creation: + curl https://archive.apache.org/dist/ant/binaries/apache-ant-${ANT_VERSION}-bin.zip > /tmp/apache-ant-${ANT_VERSION}-bin.zip + (cd /usr/local && unzip -qn /tmp/apache-ant-${ANT_VERSION}-bin.zip) + rm /tmp/apache-ant-${ANT_VERSION}-bin.zip + echo Downloading ant-contrib-${ANT_CONTRIB_VERSION}: + curl -L https://sourceforge.net/projects/ant-contrib/files/ant-contrib/${ANT_CONTRIB_VERSION}/ant-contrib-${ANT_CONTRIB_VERSION}-bin.zip > /tmp/ant-contrib-${ANT_CONTRIB_VERSION}-bin.zip + (unzip -qnj /tmp/ant-contrib-${ANT_CONTRIB_VERSION}-bin.zip ant-contrib/ant-contrib-${ANT_CONTRIB_VERSION}.jar -d /usr/local/apache-ant-${ANT_VERSION}/lib) + rm /tmp/ant-contrib-${ANT_CONTRIB_VERSION}-bin.zip + fi +} + +setEnvironment() { + export CC="${LOCALGCCDIR}/bin/gcc-${GCCVERSION}" + export CXX="${LOCALGCCDIR}/bin/g++-${GCCVERSION}" + export LD_LIBRARY_PATH="${LOCALGCCDIR}/lib64" + # /usr/local/bin required to pick up the new autoconf if required + export PATH="${LOCALGCCDIR}/bin:/usr/local/bin:/usr/bin:$PATH:/usr/local/apache-ant-${ANT_VERSION}/bin" + ls -ld "$CC" "$CXX" "/usr/lib/jvm/jdk-${BOOTJDK_VERSION}/bin/javac" || exit 1 +} + +cleanBuildInfo() { + # BUILD_INFO name of OS level build was built on will likely differ + sed -i '/^BUILD_INFO=.*$/d' "${originalJDKDir}/release" + sed -i '/^BUILD_INFO=.*$/d' "compare.$$/jdk-${TEMURIN_VERSION}/release" +} + +downloadTooling() { + if [ ! -r "/usr/lib/jvm/jdk-${BOOTJDK_VERSION}/bin/javac" ]; then + echo "Retrieving boot JDK $BOOTJDK_VERSION" && mkdir -p /usr/lib/jvm && curl -L "https://api.adoptium.net/v3/binary/version/jdk-${BOOTJDK_VERSION}/linux/${NATIVE_API_ARCH}/jdk/hotspot/normal/eclipse?project=jdk" | (cd /usr/lib/jvm && tar xpzf -) + fi + if [ ! -r "${LOCALGCCDIR}/bin/g++-${GCCVERSION}" ]; then + echo "Retrieving gcc $GCCVERSION" && curl "https://ci.adoptium.net/userContent/gcc/gcc$(echo "$GCCVERSION" | tr -d .).$(uname -m).tar.xz" | (cd /usr/local && tar xJpf -) || exit 1 + fi + if [ ! -r temurin-build ]; then + git clone https://github.com/adoptium/temurin-build || exit 1 + fi + (cd temurin-build && git checkout "$TEMURIN_BUILD_SHA") +} + +checkAllVariablesSet() { + if [ -z "$SBOM" ] || [ -z "${BOOTJDK_VERSION}" ] || [ -z "${TEMURIN_BUILD_SHA}" ] || [ -z "${TEMURIN_BUILD_ARGS}" ] || [ -z "${TEMURIN_VERSION}" ]; then + echo "Could not determine one of the variables - run with sh -x to diagnose" && sleep 10 && exit 1 + fi +} + +originalJDKDir="" +testDir="$PWD" +ls /home/jenkins/jdkbinary +if [ $# -lt 1 ]; then + if [ -d "/home/jenkins/jdkbinary" ]; then + find /home/jenkins/jdkbinary -type f -name '*sbom*.json' -exec cp {} "${testDir}" \; + SBOM=$(find /home/jenkins/jdkbinary -type f -name '*sbom*.json' -exec basename {} \;) + echo "SBOM is ${SBOM}" + else + echo "Usage: $0 SBOM_URL TARBALL_URL" && exit 1 + fi +else + SBOM_URL=$1 + TARBALL_URL=$2 + echo "Retrieving and parsing SBOM from $SBOM_URL" + curl -LO "$SBOM_URL" + SBOM=$(basename "$SBOM_URL") +fi + +ANT_VERSION=1.10.5 +ANT_CONTRIB_VERSION=1.0b3 +installPrereqs +downloadAnt +ls +BOOTJDK_VERSION=$(jq -r '.metadata.tools[] | select(.name == "BOOTJDK") | .version' "$SBOM") +GCCVERSION=$(jq -r '.metadata.tools[] | select(.name == "GCC") | .version' "$SBOM" | sed 's/.0$//') +LOCALGCCDIR=/usr/local/gcc$(echo "$GCCVERSION" | cut -d. -f1) +TEMURIN_BUILD_SHA=$(jq -r '.components[] | .properties[] | select (.name == "Temurin Build Ref") | .value' "$SBOM" | awk -F/ '{print $NF}') +TEMURIN_BUILD_ARGS=$(jq -r '.components[] | .properties[] | select (.name == "makejdk_any_platform_args") | .value' "$SBOM" | cut -d\" -f4 | sed -e "s/--disable-warnings-as-errors --enable-dtrace --without-version-pre --without-version-opt/'--disable-warnings-as-errors --enable-dtrace --without-version-pre --without-version-opt'/" -e "s/ --disable-warnings-as-errors --enable-dtrace/ '--disable-warnings-as-errors --enable-dtrace'/" -e 's/\\n//g' -e "s,--jdk-boot-dir [^ ]*,--jdk-boot-dir /usr/lib/jvm/jdk-$BOOTJDK_VERSION,g") +TEMURIN_VERSION=$(jq -r '.metadata.component.version' "$SBOM" | sed 's/-beta//' | cut -f1 -d"-") + +NATIVE_API_ARCH=$(uname -m) +if [ "${NATIVE_API_ARCH}" = "x86_64" ]; then NATIVE_API_ARCH=x64; fi +if [ "${NATIVE_API_ARCH}" = "armv7l" ]; then NATIVE_API_ARCH=arm; fi + +checkAllVariablesSet + +downloadTooling +setEnvironment + +if [ $# -lt 1 ]; then + javacPath=$(find /home/jenkins/jdkbinary -name javac | egrep 'bin/javac$') + if [ "$javacPath" != "" ]; then + originalJDKDir=$(dirname ${javacPath})/../ + fi +fi + +if [ ! -n originalJDKDir ] && [ ! -d "jdk-${TEMURIN_VERSION}" ]; then + if [ -z "$TARBALL_URL" ]; then + TARBALL_URL="https://api.adoptium.net/v3/binary/version/jdk-${TEMURIN_VERSION}/linux/${NATIVE_API_ARCH}/jdk/hotspot/normal/eclipse?project=jdk" + fi + echo Retrieving original tarball from adoptium.net && curl -L "$TARBALL_URL" | tar xpfz - && ls -lart "$PWD/jdk-${TEMURIN_VERSION}" || exit 1 + originalJDKDir="$PWD/jdk-${TEMURIN_VERSION}" +fi + +echo " cd temurin-build && ./makejdk-any-platform.sh $TEMURIN_BUILD_ARGS 2>&1 | tee build.$$.log" | sh + +echo Comparing ... +mkdir compare.$$ +tar xpfz temurin-build/workspace/target/OpenJDK*-jdk_*tar.gz -C compare.$$ +ls -l compare.$$/jdk-$TEMURIN_VERSION/NOTICE +cleanBuildInfo + +# shellcheck disable=SC2069 +if diff -r "${originalJDKDir}" "compare.$$/jdk-$TEMURIN_VERSION" 2>&1 > "reprotest.$(uname).$TEMURIN_VERSION.diff"; then + echo "Compare identical !" + exit 0 +else + cat "reprotest.$(uname).$TEMURIN_VERSION.diff" + echo "Differences found..., logged in: reprotest.$(uname).$TEMURIN_VERSION.diff" + exit 1 +fi + diff --git a/test/functional/reproducibleCompare/playlist.xml b/test/functional/reproducibleCompare/playlist.xml new file mode 100644 index 000000000..ca5f58fb2 --- /dev/null +++ b/test/functional/reproducibleCompare/playlist.xml @@ -0,0 +1,37 @@ + + + + + + Reproducible_Comparison + docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash TEST_JDK_HOME.sh; \ + $(TEST_STATUS); \ + docker cp reproducibleCompare:/home/jenkins/reprotest*.diff "${REPORTDIR}" \; + + + extended + + + functional + + + eclipse + + + 21+ + + os.linux + + \ No newline at end of file diff --git a/test/functional/reproducibleCompare/test.sh b/test/functional/reproducibleCompare/test.sh new file mode 100755 index 000000000..d48212b55 --- /dev/null +++ b/test/functional/reproducibleCompare/test.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# 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 +# +# https://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. +################################################################################ + +# This script examines the given SBOM metadata file, and then builds the exact same binary +# and then compares with the Temurin JDK for the same build version, or the optionally supplied TARBALL_URL. + +echo "hello" > reprotest.1.diff From 1832403b5e61f487a9b056507b154597162ff57a Mon Sep 17 00:00:00 2001 From: Sophia Guo Date: Tue, 5 Dec 2023 13:08:09 -0500 Subject: [PATCH 2/5] Add reproducible as functional tests Signed-off-by: Sophia Guo --- test/functional/reproducibleCompare/playlist.xml | 4 ++-- test/functional/reproducibleCompare/test.sh | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/test/functional/reproducibleCompare/playlist.xml b/test/functional/reproducibleCompare/playlist.xml index ca5f58fb2..fefa943c9 100644 --- a/test/functional/reproducibleCompare/playlist.xml +++ b/test/functional/reproducibleCompare/playlist.xml @@ -16,9 +16,9 @@ Reproducible_Comparison - docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash TEST_JDK_HOME.sh; \ + docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/test" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash test.sh; \ $(TEST_STATUS); \ - docker cp reproducibleCompare:/home/jenkins/reprotest*.diff "${REPORTDIR}" \; + docker cp reproducibleCompare:/home/jenkins/test/reprotest*.diff ./ extended diff --git a/test/functional/reproducibleCompare/test.sh b/test/functional/reproducibleCompare/test.sh index d48212b55..ab2cb88f7 100755 --- a/test/functional/reproducibleCompare/test.sh +++ b/test/functional/reproducibleCompare/test.sh @@ -16,3 +16,4 @@ # and then compares with the Temurin JDK for the same build version, or the optionally supplied TARBALL_URL. echo "hello" > reprotest.1.diff +ls -l \ No newline at end of file From fb22bbb7b4710eddb165988c211b55b78ed3b6f0 Mon Sep 17 00:00:00 2001 From: Sophia Guo Date: Wed, 6 Dec 2023 14:16:26 -0500 Subject: [PATCH 3/5] Signed-off-by: Sophia Guo --- test/functional/reproducibleCompare/playlist.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test/functional/reproducibleCompare/playlist.xml b/test/functional/reproducibleCompare/playlist.xml index fefa943c9..98d418862 100644 --- a/test/functional/reproducibleCompare/playlist.xml +++ b/test/functional/reproducibleCompare/playlist.xml @@ -18,7 +18,8 @@ Reproducible_Comparison docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/test" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash test.sh; \ $(TEST_STATUS); \ - docker cp reproducibleCompare:/home/jenkins/test/reprotest*.diff ./ + docker cp reproducibleCompare:/home/jenkins/test/reprotest.1.diff ./; + ls -l extended From e915f7c0e9d8581720bb6cba198706f166b3f9fb Mon Sep 17 00:00:00 2001 From: Sophia Guo Date: Wed, 6 Dec 2023 14:21:17 -0500 Subject: [PATCH 4/5] test Signed-off-by: Sophia Guo --- .../linux_repro_build_compare.sh | 29 ++++++++++--------- .../reproducibleCompare/playlist.xml | 8 ++--- test/functional/reproducibleCompare/test.sh | 19 ------------ 3 files changed, 19 insertions(+), 37 deletions(-) delete mode 100755 test/functional/reproducibleCompare/test.sh diff --git a/test/functional/reproducibleCompare/linux_repro_build_compare.sh b/test/functional/reproducibleCompare/linux_repro_build_compare.sh index 9b16ea561..f6dca6e9b 100755 --- a/test/functional/reproducibleCompare/linux_repro_build_compare.sh +++ b/test/functional/reproducibleCompare/linux_repro_build_compare.sh @@ -78,11 +78,11 @@ checkAllVariablesSet() { } originalJDKDir="" -testDir="$PWD" -ls /home/jenkins/jdkbinary +workDir="$PWD" + if [ $# -lt 1 ]; then if [ -d "/home/jenkins/jdkbinary" ]; then - find /home/jenkins/jdkbinary -type f -name '*sbom*.json' -exec cp {} "${testDir}" \; + find /home/jenkins/jdkbinary -type f -name '*sbom*.json' -exec cp {} "${workDir}" \; SBOM=$(find /home/jenkins/jdkbinary -type f -name '*sbom*.json' -exec basename {} \;) echo "SBOM is ${SBOM}" else @@ -107,7 +107,6 @@ LOCALGCCDIR=/usr/local/gcc$(echo "$GCCVERSION" | cut -d. -f1) TEMURIN_BUILD_SHA=$(jq -r '.components[] | .properties[] | select (.name == "Temurin Build Ref") | .value' "$SBOM" | awk -F/ '{print $NF}') TEMURIN_BUILD_ARGS=$(jq -r '.components[] | .properties[] | select (.name == "makejdk_any_platform_args") | .value' "$SBOM" | cut -d\" -f4 | sed -e "s/--disable-warnings-as-errors --enable-dtrace --without-version-pre --without-version-opt/'--disable-warnings-as-errors --enable-dtrace --without-version-pre --without-version-opt'/" -e "s/ --disable-warnings-as-errors --enable-dtrace/ '--disable-warnings-as-errors --enable-dtrace'/" -e 's/\\n//g' -e "s,--jdk-boot-dir [^ ]*,--jdk-boot-dir /usr/lib/jvm/jdk-$BOOTJDK_VERSION,g") TEMURIN_VERSION=$(jq -r '.metadata.component.version' "$SBOM" | sed 's/-beta//' | cut -f1 -d"-") - NATIVE_API_ARCH=$(uname -m) if [ "${NATIVE_API_ARCH}" = "x86_64" ]; then NATIVE_API_ARCH=x64; fi if [ "${NATIVE_API_ARCH}" = "armv7l" ]; then NATIVE_API_ARCH=arm; fi @@ -118,13 +117,13 @@ downloadTooling setEnvironment if [ $# -lt 1 ]; then - javacPath=$(find /home/jenkins/jdkbinary -name javac | egrep 'bin/javac$') + javacPath=$(find /home/jenkins/jdkbinary -name javac | grep -E 'bin/javac$') if [ "$javacPath" != "" ]; then - originalJDKDir=$(dirname ${javacPath})/../ + originalJDKDir=$(dirname "${javacPath}")/../ fi fi -if [ ! -n originalJDKDir ] && [ ! -d "jdk-${TEMURIN_VERSION}" ]; then +if [ -z "${originalJDKDir}" ] && [ ! -d "jdk-${TEMURIN_VERSION}" ]; then if [ -z "$TARBALL_URL" ]; then TARBALL_URL="https://api.adoptium.net/v3/binary/version/jdk-${TEMURIN_VERSION}/linux/${NATIVE_API_ARCH}/jdk/hotspot/normal/eclipse?project=jdk" fi @@ -137,16 +136,18 @@ echo " cd temurin-build && ./makejdk-any-platform.sh $TEMURIN_BUILD_ARGS 2>&1 | echo Comparing ... mkdir compare.$$ tar xpfz temurin-build/workspace/target/OpenJDK*-jdk_*tar.gz -C compare.$$ -ls -l compare.$$/jdk-$TEMURIN_VERSION/NOTICE cleanBuildInfo +rc=0 # shellcheck disable=SC2069 -if diff -r "${originalJDKDir}" "compare.$$/jdk-$TEMURIN_VERSION" 2>&1 > "reprotest.$(uname).$TEMURIN_VERSION.diff"; then - echo "Compare identical !" - exit 0 +diff -r "${originalJDKDir}" "compare.$$/jdk-$TEMURIN_VERSION" 2>&1 > "reprotest.$(uname).$TEMURIN_VERSION.diff" || rc=$? + +if [ $rc != 0 ]; then + cat "reprotest.$(uname).$TEMURIN_VERSION.diff" + echo "Differences found..., logged in: reprotest.$(uname).$TEMURIN_VERSION.diff" else - cat "reprotest.$(uname).$TEMURIN_VERSION.diff" - echo "Differences found..., logged in: reprotest.$(uname).$TEMURIN_VERSION.diff" - exit 1 + echo "Compare identical !" fi +cp reprotest."$(uname)"."${TEMURIN_VERSION}".diff reprotest.diff +exit $rc \ No newline at end of file diff --git a/test/functional/reproducibleCompare/playlist.xml b/test/functional/reproducibleCompare/playlist.xml index 98d418862..2874c31b8 100644 --- a/test/functional/reproducibleCompare/playlist.xml +++ b/test/functional/reproducibleCompare/playlist.xml @@ -16,13 +16,13 @@ Reproducible_Comparison - docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/test" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash test.sh; \ + docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash /home/jenkins/test/linux_repro_build_compare.sh; \ $(TEST_STATUS); \ - docker cp reproducibleCompare:/home/jenkins/test/reprotest.1.diff ./; - ls -l + docker cp reproducibleCompare:/home/jenkins/reprotest.diff ./; \ + docker container rm reproducibleCompare - extended + dev functional diff --git a/test/functional/reproducibleCompare/test.sh b/test/functional/reproducibleCompare/test.sh deleted file mode 100755 index ab2cb88f7..000000000 --- a/test/functional/reproducibleCompare/test.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# 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 -# -# https://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. -################################################################################ - -# This script examines the given SBOM metadata file, and then builds the exact same binary -# and then compares with the Temurin JDK for the same build version, or the optionally supplied TARBALL_URL. - -echo "hello" > reprotest.1.diff -ls -l \ No newline at end of file From 1ab27a1e238d294d27611977c08af91c1968f5da Mon Sep 17 00:00:00 2001 From: Sophia Guo Date: Mon, 11 Dec 2023 14:19:18 -0500 Subject: [PATCH 5/5] Rename test name Signed-off-by: Sophia Guo --- test/functional/reproducibleCompare/playlist.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/functional/reproducibleCompare/playlist.xml b/test/functional/reproducibleCompare/playlist.xml index 2874c31b8..30e92fc97 100644 --- a/test/functional/reproducibleCompare/playlist.xml +++ b/test/functional/reproducibleCompare/playlist.xml @@ -15,7 +15,7 @@ - Reproducible_Comparison + Rebuild_Same_JDK_Reproducibility_Test docker run -v "$(TEST_RESROOT):/home/jenkins/test" -v "$(TEST_JDK_HOME)/..:/home/jenkins/jdkbinary" -w "/home/jenkins/" --name reproducibleCompare adoptopenjdk/centos7_build_image /bin/bash /home/jenkins/test/linux_repro_build_compare.sh; \ $(TEST_STATUS); \ docker cp reproducibleCompare:/home/jenkins/reprotest.diff ./; \