diff --git a/.travis.yml b/.travis.yml index f852f644856d..32cc18325a4a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,6 +3,10 @@ language: java jdk: - openjdk8 +# See https://docs.travis-ci.com/user/languages/java/#caching +before_cache: + - rm -f $HOME/.gradle/caches/modules-2/modules-2.lock + - rm -fr $HOME/.gradle/caches/*/plugin-resolution/ cache: directories: - $HOME/.m2 @@ -121,8 +125,9 @@ script: # fail if generators contain tab '\t' - /bin/bash ./bin/utils/detect_tab_in_java_class.sh # run integration tests defined in maven pom.xml - - mvn --quiet --batch-mode clean install - - mvn --quiet --batch-mode verify -Psamples + # WARN: Travis will timeout after 10 minutes of no stdout/stderr activity, which is problematic with mvn --quiet. + - mvn --quiet --batch-mode --show-version clean install + - mvn --quiet --batch-mode --show-version verify -Psamples after_success: # push to maven repo - if [ $SONATYPE_USERNAME ] && [ -z $TRAVIS_TAG ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then @@ -162,3 +167,4 @@ after_success: env: - DOCKER_GENERATOR_IMAGE_NAME=openapitools/openapi-generator-online DOCKER_CODEGEN_CLI_IMAGE_NAME=openapitools/openapi-generator-cli NODE_ENV=test CC=gcc-5 CXX=g++-5 + diff --git a/CI/run-in-docker-settings.xml b/CI/run-in-docker-settings.xml new file mode 100644 index 000000000000..97370a231aff --- /dev/null +++ b/CI/run-in-docker-settings.xml @@ -0,0 +1,7 @@ + + + /var/maven/.m2/repository + \ No newline at end of file diff --git a/run-in-docker.sh b/run-in-docker.sh index 80a0f2b88668..c59a0fda72f6 100755 --- a/run-in-docker.sh +++ b/run-in-docker.sh @@ -7,12 +7,18 @@ maven_cache_repo="${HOME}/.m2/repository" mkdir -p "${maven_cache_repo}" +# !! The -u option below needs to be defined so we don't write to a user's bound ~/.m2/repository as root. +# !! but using this also means we either need to setup a user with the same id, or we execute without a username and home directory. +# !! This means we can't bind the .m2 directory to any user's directory (like /root/.m2). +# !! We _must_ define $MAVEN_CONFIG explicitly as a location that is not /root/.m2; the user executing this may not have access to the container's user's directory. docker run --rm -it \ -w /gen \ -e GEN_DIR=/gen \ -e MAVEN_CONFIG=/var/maven/.m2 \ + -e MAVEN_OPTS="-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=/var/maven/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true" \ -u "$(id -u):$(id -g)" \ -v "${PWD}:/gen" \ - -v "$HOME/.m2":/root/.m2 \ + -v "${PWD}/CI/run-in-docker-settings.xml:/var/maven/.m2/settings.xml" \ + -v "${maven_cache_repo}:/var/maven/.m2/repository" \ --entrypoint /gen/docker-entrypoint.sh \ maven:3-jdk-8 "$@"