提交 d7121220 编写于 作者: oldratlee's avatar oldratlee 🔥

using SDKMAN in Travis CI #163

上级 a85b1050
......@@ -13,9 +13,6 @@ addons:
packages:
- openjdk-6-jdk
jdk:
- oraclejdk8
branches:
except:
- appveyor
......@@ -30,62 +27,20 @@ before_install:
- sudo mv /tmp/hosts /etc/hosts
- cat /etc/hosts # optionally check the content *after*
- source ./scripts/travis-prepare.sh
# output env info
- ls -l /usr/lib/jvm && ls /usr/lib/jvm/* && ls $HOME/.jdk && ls $HOME/.jdk/*
- ls -la
- ls -l /usr/lib/jvm && ls /usr/lib/jvm/*
- echo -e "JAVA_HOME=$JAVA_HOME\nPATH=$PATH\nSHELL=$SHELL"
install:
- pip install --user codecov
script:
# default jdk 11, do build and test
- switch_to_open_jdk11
- ./scripts/run-agent-test.sh # run junit test in run-agent-test.sh
# open jdk 6
- jdk_switcher use openjdk6
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# open jdk 7
- jdk_switcher use openjdk7
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# oracle jdk 8
- jdk_switcher use oraclejdk8
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# open jdk 8
- jdk_switcher use openjdk8
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# oracle jdk 9
- jdk_switcher use oraclejdk9
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# open jdk 9
- switch_to_open_jdk9
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# open jdk 10
- switch_to_open_jdk10
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# open jdk 12
- switch_to_open_jdk12
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
# open jdk 13
- switch_to_open_jdk13
- ./scripts/run-junit.sh skipClean
- ./scripts/run-agent-test.sh skipClean
- ./scripts/integration-test.sh
after_success:
# codecov
- jdk_switcher use oraclejdk8
- ./mvnw clean -V
- ./mvnw cobertura:cobertura
- codecov
- ./scripts/codecov.sh
- git status --ignored
# Caching Dependencies and Directories
......@@ -93,7 +48,7 @@ after_success:
cache:
directories:
- $HOME/.m2
- $HOME/.jdk
- $HOME/.sdkman
- $HOME/.cache/pip
before_cache:
# clear TTL maven self install
......
......@@ -2,11 +2,11 @@
# Java API Compliance Checker (JAPICC),
# a tool for checking backward binary and source-level compatibility of a Java library API.
# https://github.com/lvc/japi-compliance-checker
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
export TTL_CI_TEST_MODE=true
source ./common.sh skipClean
source ./common_build.sh skipClean
set -u
......
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
source ./common_build.sh
export JAVA_HOME="$JDK8_HOME"
runCmd ./mvnw clean -V
runCmd ./mvnw cobertura:cobertura
runCmd codecov
#!/bin/bash
[ -z "${_source_mark_of_common:+dummy}" ] || return 0
_source_mark_of_common=true
set -o pipefail
set -e
set -eEo pipefail
################################################################################
# trap error setting
################################################################################
# https://stackoverflow.com/questions/6928946/mysterious-lineno-in-bash-trap-err
# https://stackoverflow.com/questions/64786/error-handling-in-bash
error() {
local parent_lineno="$1"
local message="$2"
local code="${3:-1}"
if [[ -n "$message" ]] ; then
redEcho "Error on or near line $(caller): ${message}; exiting with status ${code}"
else
redEcho "Error on or near line $(caller); exiting with status ${code}"
fi
exit "${code}"
# https://stackoverflow.com/questions/24398691/how-to-get-the-real-line-number-of-a-failing-bash-command
# https://unix.stackexchange.com/questions/39623/trap-err-and-echoing-the-error-line
# https://unix.stackexchange.com/questions/462156/how-do-i-find-the-line-number-in-bash-when-an-error-occured
# https://unix.stackexchange.com/questions/365113/how-to-avoid-error-message-during-the-execution-of-a-bash-script
# https://shapeshed.com/unix-exit-codes/#how-to-suppress-exit-statuses
# https://stackoverflow.com/questions/30078281/raise-error-in-a-bash-script/50265513#50265513
__error_trapper() {
local parent_lineno="$1"
local code="$2"
local commands="$3"
echo "error exit status $code, at file ${BASH_SOURCE[*]} on or near line $parent_lineno: $commands"
}
trap 'error ${LINENO}' ERR
trap '__error_trapper "${LINENO}/${BASH_LINENO}" "$?" "$BASH_COMMAND"' ERR
################################################################################
# util functions
......@@ -31,7 +40,7 @@ colorEcho() {
shift
# if stdout is console, turn on color output.
[ -t 1 ] && echo "$ec[1;${color}m$@$eend" || echo "$@"
[ -t 1 ] && echo "${ec}[1;${color}m$*${eend}" || echo "$@"
}
redEcho() {
......@@ -46,16 +55,6 @@ blueEcho() {
colorEcho 36 "$@"
}
runCmd() {
blueEcho "Run under work directory $PWD :$nl$@"
time "$@"
}
die() {
redEcho "Error: $@" 1>&2
exit 1
}
headInfo() {
colorEcho "0;34;46" ================================================================================
echo "$@"
......@@ -63,122 +62,12 @@ headInfo() {
echo
}
#################################################################################
# auto adjust pwd to project root dir, and set PROJECT_ROOT_DIR var
#################################################################################
adjustPwdToProjectRootDir() {
while true; do
[ / = "$PWD" ] && die "fail to detect project directory!"
[ -f pom.xml ] && {
readonly PROJECT_ROOT_DIR="$PWD"
yellowEcho "Find project root dir: $PWD"
break
}
cd ..
done
}
adjustPwdToProjectRootDir
#################################################################################
# project common info
#################################################################################
readonly version=`grep '<version>.*</version>' pom.xml | awk -F'</?version>' 'NR==1{print $2}'`
readonly aid=`grep '<artifactId>.*</artifactId>' pom.xml | awk -F'</?artifactId>' 'NR==1{print $2}'`
# set env variable ENABLE_JAVA_RUN_DEBUG to enable java debug mode
readonly -a JAVA_CMD=(
"$JAVA_HOME/bin/java" -Xmx128m -Xms128m -server -ea -Duser.language=en -Duser.country=US
${ENABLE_JAVA_RUN_DEBUG+
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
}
)
readonly -a MVN_CMD=(
./mvnw -V
)
#################################################################################
# maven operation functions
#################################################################################
mvnClean() {
rm -rf target || die "fail to mvn clean!"
}
readonly ttl_jar="target/$aid-$version.jar"
mvnBuildJar() {
if [ ! -e "$ttl_jar" -o "$ttl_jar" -ot src/ ]; then
if [ -n "${TTL_CI_TEST_MODE+YES}" ]; then
# Build jar action should have used package instead of install
# here use install intendedly to check release operations.
#
# De-activate a maven profile from command line
# https://stackoverflow.com/questions/25201430
runCmd "${MVN_CMD[@]}" install -DperformRelease -P '!gen-sign' || die "fail to build jar!"
else
runCmd "${MVN_CMD[@]}" package -Dmaven.test.skip=true || die "fail to build jar!"
fi
fi
}
mvnCompileTest() {
if [ ! -e "target/test-classes/" -o "target/test-classes/" -ot src/ ]; then
runCmd "${MVN_CMD[@]}" test-compile || die "fail to mvn test-compile!" || die "fail to compile test!"
fi
}
readonly dependencies_dir="target/dependency"
mvnCopyDependencies() {
if [ ! -e "$dependencies_dir" ]; then
# https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html
# exclude repackaged and shaded javassist libs
runCmd "${MVN_CMD[@]}" dependency:copy-dependencies -DincludeScope=test -DexcludeArtifactIds=javassist,jsr305,spotbugs-annotations || die "fail to mvn copy-dependencies!"
fi
}
getClasspathOfDependencies() {
mvnCopyDependencies 1>&2
echo "$dependencies_dir"/*.jar | tr ' ' :
}
getClasspathWithoutTtlJar() {
mvnCompileTest 1>&2
echo "target/test-classes:$(getClasspathOfDependencies)"
}
getTtlJarPath() {
mvnBuildJar 1>&2
echo "$ttl_jar"
}
getClasspath() {
echo "$(getTtlJarPath):$(getClasspathWithoutTtlJar)"
runCmd() {
blueEcho "Run under work directory $PWD :$nl$*"
time "$@"
}
getJUnitTestCases() {
(
mvnCompileTest 1>&2
cd target/test-classes &&
find . -iname '*Test.class' | sed '
s%^\./%%
s/\.class$//
s%/%.%g
'
)
die() {
redEcho "Error: $*" 1>&2
exit 1
}
#################################################################################
# maven actions
#################################################################################
if [ "$1" != "skipClean" ]; then
mvnClean
fi
#!/bin/bash
[ -z "${_source_mark_of_common_build:+dummy}" ] || return 0
_source_mark_of_common_build=true
# shellcheck source=common.sh
source "$(dirname "$(readlink -f "$BASH_SOURCE")")/common.sh"
#################################################################################
# auto adjust pwd to project root dir, and set PROJECT_ROOT_DIR var
#################################################################################
adjustPwdToProjectRootDir() {
while true; do
[ / = "$PWD" ] && die "fail to detect project directory!"
[ -f pom.xml ] && {
readonly PROJECT_ROOT_DIR="$PWD"
yellowEcho "Find project root dir: $PWD"
break
}
cd ..
done
}
adjustPwdToProjectRootDir
#################################################################################
# project common info
#################################################################################
readonly version=$(grep '<version>.*</version>' pom.xml | awk -F'</?version>' 'NR==1{print $2}')
readonly aid=$(grep '<artifactId>.*</artifactId>' pom.xml | awk -F'</?artifactId>' 'NR==1{print $2}')
# set env variable ENABLE_JAVA_RUN_DEBUG to enable java debug mode
readonly -a JAVA_CMD=(
"$JAVA_HOME/bin/java" -Xmx128m -Xms128m -server -ea -Duser.language=en -Duser.country=US
${ENABLE_JAVA_RUN_DEBUG+
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5005
}
)
readonly -a MVN_CMD=(
./mvnw -V
)
#################################################################################
# maven operation functions
#################################################################################
mvnClean() {
rm -rf target || die "fail to mvn clean!"
}
readonly ttl_jar="target/$aid-$version.jar"
mvnBuildJar() {
if [ ! -e "$ttl_jar" -o "$ttl_jar" -ot src/ ]; then
if [ -n "${TTL_CI_TEST_MODE+YES}" ]; then
# Build jar action should have used package instead of install
# here use install intendedly to check release operations.
#
# De-activate a maven profile from command line
# https://stackoverflow.com/questions/25201430
runCmd "${MVN_CMD[@]}" install -DperformRelease -P '!gen-sign' || die "fail to build jar!"
else
runCmd "${MVN_CMD[@]}" package -Dmaven.test.skip=true || die "fail to build jar!"
fi
fi
}
mvnCompileTest() {
if [ ! -e "target/test-classes/" -o "target/test-classes/" -ot src/ ]; then
runCmd "${MVN_CMD[@]}" test-compile || die "fail to mvn test-compile!" || die "fail to compile test!"
fi
}
readonly dependencies_dir="target/dependency"
mvnCopyDependencies() {
if [ ! -e "$dependencies_dir" ]; then
# https://maven.apache.org/plugins/maven-dependency-plugin/copy-dependencies-mojo.html
# exclude repackaged and shaded javassist libs
runCmd "${MVN_CMD[@]}" dependency:copy-dependencies -DincludeScope=test -DexcludeArtifactIds=javassist,jsr305,spotbugs-annotations || die "fail to mvn copy-dependencies!"
fi
}
getClasspathOfDependencies() {
mvnCopyDependencies 1>&2
echo "$dependencies_dir"/*.jar | tr ' ' :
}
getClasspathWithoutTtlJar() {
mvnCompileTest 1>&2
echo "target/test-classes:$(getClasspathOfDependencies)"
}
getTtlJarPath() {
mvnBuildJar 1>&2
echo "$ttl_jar"
}
getClasspath() {
echo "$(getTtlJarPath):$(getClasspathWithoutTtlJar)"
}
getJUnitTestCases() {
(
mvnCompileTest 1>&2
cd target/test-classes &&
find . -iname '*Test.class' | sed '
s%^\./%%
s/\.class$//
s%/%.%g
'
)
}
#################################################################################
# maven actions
#################################################################################
if [ "$1" != "skipClean" ]; then
mvnClean
fi
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"/..
sed '
......
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
export TTL_CI_TEST_MODE=true
source ./common.sh "$1"
# Java 11
if [ -n "$JAVA11_HOME" ]; then
export JAVA_HOME="${JAVA11_HOME}"
else
current_java_version=$("${MVN_CMD[@]}" -v | awk -F'[ ,]' '/^Java version/{print $3}')
if [[ default_java_version != 11.* ]]; then
echo "Fail to get java 11 home!"
exit 1
fi
fi
source ./prepare-jdk.sh
source ./common_build.sh "$1"
# default jdk 11, do build and test
switch_to_jdk 11
headInfo "test with Java 11: $JAVA_HOME"
# run junit test in run-agent-test.sh
runCmd ./scripts/run-agent-test.sh "$1"
java_home_var_names=(
JAVA6_HOME
JAVA7_HOME
JAVA8_HOME
JDK6_HOME
JDK7_HOME
JDK8_HOME
JAVA9_HOME
JAVA10_HOME
JDK9_HOME
JDK10_HOME
JAVA12_HOME
JAVA13_HOME
JAVA14_HOME
JAVA15_HOME
JDK12_HOME
JDK13_HOME
JDK14_HOME
JDK15_HOME
)
# test multi-version java home env
......
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
source ../common.sh
source ../common_build.sh
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspathWithoutTtlJar)" \
com.alibaba.perf.memoryleak.NoMemoryLeak_ThreadLocal_NoRemove
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
source ../common.sh
source ../common_build.sh
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspath)" \
com.alibaba.perf.memoryleak.NoMemoryLeak_TransmittableThreadLocal_NoRemove
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
source ../common.sh
source ../common_build.sh
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspathWithoutTtlJar)" \
com.alibaba.perf.tps.CreateThreadLocalInstanceTps
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
source ../common.sh
source ../common_build.sh
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspath)" \
com.alibaba.perf.tps.CreateTransmittableThreadLocalInstanceTps
#!/bin/bash
# SDKMAN! with Travis
# https://objectcomputing.com/news/2019/01/07/sdkman-travis
set -eEo pipefail
[ -z "${_source_mark_of_prepare_jdk:+dummy}" ] || return 0
export _source_mark_of_prepare_jdk=true
# shellcheck source=common.sh
source "$(dirname "$(readlink -f "$BASH_SOURCE")")/common.sh"
if [ ! -f "$HOME/.sdkman/bin/sdkman-init.sh" ]; then
[ -d "$HOME/.sdkman" ] && rm -rf "$HOME/.sdkman"
curl -s get.sdkman.io | bash || exit 2
echo sdkman_auto_answer=true > "$HOME/.sdkman/etc/config"
fi
# shellcheck disable=SC1090
source "$HOME/.sdkman/bin/sdkman-init.sh"
jdks_install_by_sdkman=(
7.0.262-zulu
8.0.252-zulu
9.0.7-zulu
10.0.2-zulu
11.0.7-zulu
12.0.2-open
13.0.3-zulu
14.0.1-zulu
15.ea.20-open
)
export JDK6_HOME="${JDK6_HOME:-/usr/lib/jvm/java-6-openjdk-amd64}"
export JDK7_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[0]}"
export JDK8_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[1]}"
export JDK9_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[2]}"
export JDK10_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[3]}"
export JDK11_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[4]}"
export JDK12_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[5]}"
export JDK13_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[6]}"
export JDK14_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[7]}"
export JDK15_HOME="$SDKMAN_CANDIDATES_DIR/java/${jdks_install_by_sdkman[8]}"
switch_to_jdk() {
local javaHome="JDK${1}_HOME"
export JAVA_HOME=${!javaHome}
[ -n "$JAVA_HOME" ] || return 2
}
for _jdk__ in "${jdks_install_by_sdkman[@]}"; do
if [ ! -d "$SDKMAN_CANDIDATES_DIR/java/$_jdk__" ]; then
runCmd sdk install java "$_jdk__" || exit 2
fi
done
ls -la "$SDKMAN_CANDIDATES_DIR/java/"
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
readonly BASE=`pwd`
. ./common.sh
readonly BASE="$(pwd)"
. ./common_build.sh
update_version=false
deploy_maven=false
......
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
source ./common.sh
source ./common_build.sh
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspathWithoutTtlJar)" \
"-javaagent:$(getTtlJarPath)=ttl.agent.logger:STDOUT" \
......
#!/bin/bash
set -eEo pipefail
[ -z "$1" ] && die "need class name argument!"
readonly run_class_name="$1"
shift 1
cd "$(dirname "$(readlink -f "$0")")"
source ./common.sh
source ./common_build.sh
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspathWithoutTtlJar)" \
"-javaagent:$(getTtlJarPath)=ttl.agent.logger:STDOUT" \
......
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
export TTL_CI_TEST_MODE=true
source ./common.sh
source ./common_build.sh
# do heavy operation first, descrease mvn operation count.
runCmd mvnBuildJar
......
#!/bin/bash
set -eEo pipefail
cd "$(dirname "$(readlink -f "$0")")"
export TTL_CI_TEST_MODE=true
source ./common.sh
source ./common_build.sh
# skip unit test for Javassist on command line, because Javassist is repackaged.
runCmd "${JAVA_CMD[@]}" -cp "$(getClasspath)" \
......
# https://docs.travis-ci.com/user/languages/java/#Using-Java-10-and-later
# https://github.com/sormuras/bach/blob/master/install-jdk.sh
mkdir -p "$HOME/.jdk"
install_jdk_bin="$HOME/.jdk/install-jdk.sh"
if [ ! -f "$install_jdk_bin" ]; then
wget https://github.com/sormuras/bach/raw/master/install-jdk.sh -O "$install_jdk_bin"
chmod +x "$install_jdk_bin"
fi
readonly nl=$'\n' # new line
readonly ec=$'\033' # escape char
readonly eend=$'\033[0m' # escape end
colorEcho() {
local color=$1
shift
# if stdout is console, turn on color output.
[ -t 1 ] && echo "$ec[1;${color}m$@$eend" || echo "$@"
}
blueEcho() {
colorEcho 36 "$@"
}
runCmd() {
blueEcho "Run under work directory $PWD :$nl$@"
time "$@"
}
swith_jdk() {
(($# != 2)) && {
echo "Error: $@, only need version and license"
exit 2
}
local version="$1"
local license="$2"
case "$license" in
GPL)
export JAVA_HOME=$HOME/.jdk/openjdk$version
;;
BCL)
export JAVA_HOME=$HOME/.jdk/oraclejdk$version
;;
*)
echo "Error: $@, wrong license!"
exit 2
;;
esac
if [ ! -d "$JAVA_HOME" ]; then
runCmd "$install_jdk_bin" --feature $version --license $license --target "$JAVA_HOME"
fi
}
switch_to_open_jdk9() {
swith_jdk 9 GPL
}
switch_to_oracle_jdk11() {
swith_jdk 11 BCL
}
switch_to_open_jdk10() {
swith_jdk 10 GPL
}
switch_to_open_jdk11() {
swith_jdk 11 GPL
}
switch_to_open_jdk12() {
swith_jdk 12 GPL
}
switch_to_open_jdk13() {
swith_jdk 13 GPL
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册