diff --git a/.travis.yml b/.travis.yml
index 6562a4a20c..6214b852c7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,20 +1,50 @@
+sudo: false
+addons:
+ apt:
+ packages:
+ - oracle-java8-installer
+ ssh_known_hosts:
+ - web.sourceforge.net
language: java
jdk: oraclejdk8
before_install:
- - echo "MAVEN_OPTS='-Xms1g -Xmx1g'" > "$HOME/.mavenrc"
- - mkdir -p "$HOME/.m2"
- - cp .travis-toolchains.xml "$HOME/.m2/toolchains.xml"
-before_script:
- - SHOULD_DEPLOY=no
- - '[ "${TRAVIS_SECURE_ENV_VARS}" = "true" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ] && SHOULD_DEPLOY=yes || ( [ "${SHOULD_DEPLOY}" != "yes" ] && echo "Skipping Deploy" )'
- - export SHOULD_DEPLOY
+ - bash .travis/install-configure-maven.sh
+ - export M2_HOME=$HOME/apache-maven-3.3.9
+ - export PATH=$HOME/apache-maven-3.3.9/bin:${PATH}
+ - openssl aes-256-cbc -K $encrypted_5630fbebf057_key -iv $encrypted_5630fbebf057_iv -in .travis/secrets.tar.enc -out .travis/secrets.tar -d
+ - pushd .travis && tar xfv secrets.tar && popd
+ - mkdir -p "$HOME/.ssh"
+ - chmod 700 "$HOME/.ssh"
+ - mv .travis/id_rsa "$HOME/.ssh/id_rsa"
+ - chmod 600 "$HOME/.ssh/id_rsa"
+ - mkdir -p "$HOME/.gpg"
+ - gpg --batch --import .travis/release-signing-key-82DE7BE82166E84E.gpg
+ - rm .travis/secrets.tar
+ - rm .travis/release-signing-key-82DE7BE82166E84E.gpg
+install: mvn install -DskipTests=true -Dmaven.javadoc.skip=true -B -V
+before_script: true
script:
- - '[ "${SHOULD_DEPLOY}" = "yes" ] && mvn test deploy --settings .travis-settings.xml || ( [ "${SHOULD_DEPLOY}" != "yes" ] && echo "Skipping Deploy" )'
- - '[ "${SHOULD_DEPLOY}" = "yes" ] || mvn test'
- - '[ "${SHOULD_DEPLOY}" = "yes" ] && mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.host.url=https://sonarqube.com -Dsonar.login=${SONAR_TOKEN} || ( [ "${SHOULD_DEPLOY}" != "yes" ] && echo "Skipping Sonar" )'
-branches:
- except:
- - /^pmd_releases\/\d/
+ - 'if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then bash .travis/build-pull-request.sh; fi'
+ - 'if [ "$TRAVIS_PULL_REQUEST" = "false" ] && [ "${TRAVIS_SECURE_ENV_VARS}" = "true" ]; then bash .travis/build-push.sh; fi'
+after_success: true
+
+
+before_deploy: true
+deploy:
+ provider: releases
+ api_key: ${GITHUB_OAUTH_TOKEN}
+ file_glob: true
+ file:
+ - pmd-dist/target/pmd-*.zip
+ - target/pmd-doc-*.zip
+ # TODO : This won't copy the changelog to GitHub
+ skip_cleanup: true
+ on:
+ tags: true
+ repo: pmd/pmd
+ condition: "${TRAVIS_SECURE_ENV_VARS} = true"
+after_deploy: bash .travis/release.sh
+
notifications:
email:
recipients:
@@ -29,4 +59,33 @@ env:
- secure: KBEuB6U1p5RQXSYe157AwydFr/zpXQPA0IChVCgZV+X1mMyy9ZtrjH1J1AXuviseDDXDbaT25sRnsvpl82rfRw2xOkMGXHy4N95/ylTSr8DjHxTao71BhXsvFycNobFva5y2EGNWqDvpS8I2oSZo7Qk4la3yep3rcJQvcy6RDbbhpDTbL1QMFyadunIBm0WtqbunrMqtjSqaoPsXz8TiQuxHvX4vEXzVbaxV1QQt79Vi+daa6wAV3mRQAugnx+UffsC8JqMxgm06usWeJgCJzxgm8E7clZCLmf53B2TL8dK6bIYbqyvOY3uFxitsTG0d8Z0GOJwXBgZNgbniTRO8ZJSty5eZP8LBybbjVLSL25DNTWtCjADUL/uySnXIEidlMt2N/3QmH7zrGAfAk/tIwKpdRca2GLLydeXf6PSkiahnPEkIY/QupcsOLELhdifpdOjb8QW1OenA+vUbNM9dccLwKnX6Fj9cu4VQG601AcYDr2eyhq8WYkr3wYdw/6KdUa3hmplowTBs+qguppP+eOSgGuEsy38KLtqnvm6WlHy6tcLmcVYKG3DmR1b7TWXsOXC6/VMH8BHBkvsF1QdRg9+Cgx07vX3Hw7roPiYzmaO9Ajs20ATsUfRskMuWCTeTSK5pN8X27veRCZlhFjeKQMDdmfVwzpAfRgKsl3TEn1I=
- secure: U1DfAv6acUUWe+dao/ZSDUX64JRadNJY16rITsdrM4ZNAJSuXpEY3p/LWcYjN7D49YmyutbXH9+L3KKQUQGrGXj9QTarfYvd8ZsKt4FK8yv7AFy+RQNIbAjNEHBzHx15p+srMheTaetl7aLwY0qhF+D/RtGapxHKyY4dBHrb0lp8VGyiCiL7Aop8GGskosi1mtirPBp/BStPZ2bEyxG0QzU5SsVWkJWwV9aWLPVAR/n7Xgx/6Gjl6Fed2c/WSrWi4vchm3Ny8pfTweOax3PGYYjBVxIfuX0mqmwuJsY7gNfXCfN3dPiPKGJPFy1pC+LGyGkklO5ReKFLd4O1ME6fU0dlIGfD6n+Q4H6/w9FHXegcKTfWIJm/MFa6vA/tJM5R6zJQuiTQJboHm/UmS/iQj76z0p6sK15Xp5vFId+/dHKqa8xY+Bt6HiXy6z401HOc8QcYBAf7TqhqUt/ZE7HN4be46uR90KmzIrWz6wEoDW7HfwQ9ZMbs55zoOXrvekyE9/gXskypO0p2JT3Y0vlvO27KQvIrSwI480kOVOrlyrYA+LZqlcKaayOuCuZh4lITQUYinUoZZict5joYthH+Cyh2zovoBpxsntDJdMnaZNLtSC7hlhpbMBYaT2y1O6vZH5Yix0mxuDvs/x6ogP5CNBeUYlXhaL+g4GnwKyr0ZA0=
- secure: "ElWjttpoMwqezP2zyHkx7CiPON/mRLUW7SsSlEqdlTUYRIaSaL7sShUORJUzj58U/Nnfi/eY4Rweo0CtVu20sG16s9B4adnmPS44LAitztybPR/co93gN9qb8jiIl41nVcOJq+Rut2Z4nr8AGRhVCG9Drg4+DreCqQ4DE5ZD6J99GN0IFGrREt59HQUlBlT9jD0AndK/1GQ6kWAenuSREE2P5ih59rf6FrrfddQO5iqyFFoaHek3JiOmpaLK+z7i4EvMKsAJEooFNuGhHVuyaJJRRZHAncGiQ+uW/yL7G5rY51G6YSNJczzEtfrRg+YrIUbokUPmifSIbnXO/AIZRAq1dMhA8exRc5n+75RB1X164qm4a+yggdybFBh0L59xu606PJQJAuWy+x10nled7FAVXiotxbB0r2bhlVmWFEN+FWPqXg2rVkHvw6+5PM67rG5g1LCgjKzb9I6JWPiVI+EMn8Pw8gryL2Sdqtl08Da0Ypbl2ZK/afU4CEPEKnrDc9ecXKjacehTYwGS48V213XvArcmoEpsyZDRSMTrvK3/e29GEaxoK/ZzWJylpeOtsICEEFYEBEiDsiIW4C50MIUPT2xHV6MaPQzhkuwrbQ6QFYzHzihBaiQuMmXUQ4DMb3fOPkNZAQHQo8CgJ78IcbCABAoGv9mu/fo2KoLo11U="
+ - secure: "otZkFNhApMofp2Jl2baZdpNEPcTa79Xc9wyOw1gl1+ubCLtOGr32FDUSr0HQWKrGXcYZR4bc0A80hx0/ykZ/twJaRAabcNYtjwRMDKKrp3plvp8RTZlB1QW85nsdmk3qmHACzc94wKnmcaDohM5FPxnWspZG5Y4ejYX4HEK6r1fwL4FjMPSLd5QW8yCaAc7dpBSm2UyIXuuDjkekXblJFe8ydbf9aF97WKJMCwqIs9Zo5oJa2pnWCw47ixwjVdkaH5x5727I+YmFqn5rjdEideUFEAlggqMaxuOtfYhuG/8k5W3Q/+WX+G7rEPTcemjmaosbbpoOUE0YUHV3Wi3R5D66NuWIpQwX6kw4rTwL0YIh//0aNb8jv4Z8KwkiTMrYuj0we5tXzARp3yYn56P0JBAm6BihNhfEBv06655Tg5LUsWqUTZCl3KJhwtO1N+OuOkE5qoZm59knq6DeZOsYWAVb3MpzklP06kXGYTjb44PVMUc6ynuuZjgPJDv/0906feA3REHBJVxd3PvJp1c8VvQSeW3ndghEz0akJHY/jxV1rJZAZC1ZeshYUpBNmh0sFDty/UE43IvIB4EInypQHyTtQvMc6LuLjTeu2E5ZMsA3udj66EMrYm4Y2eheJycSfttDqzhsKXIVJ4LmA/xtDR01cp1jsqbbZBhVI67rA40="
+ - secure: "mmHRnK/8CHfgtwaTN3MgjFD1R8EVQhIb/a0Aag3gPaHWW52Ex6xWG7GsF4kRcdzHdIdrQxHZTiDa2oVMWbnQ16CAu4dZJadwTxhBW4JmE1tsi2C6i+uwMBPvnKBXHwt+QOAqNB0L/ByYwWLkucSLoyRs6qU0i7sJ3ZC/EPCuLI8VfBlFUVegSbp2WmclmFnxOi5MKr15Zwd8BGgyWUsvd1OHxhvO3Xr/ZPO4R+1kIgyojloTMu6oGM/shYgsrUXgmI/WvZRTq+25SRCjUmATJtuDXXgVeJtYabi/+Zju5Z7K06oaKvFYM+BgZWPmGQkVCxKVjSlug0rx6+qgRKIf/B/cPxmQDS0ZZVDmDcbxeibBL9JhRqIDwDb0XS9t1qBXvIJ5E4ZmdX/XuvLCnC4xJptu/vHyKl1wbRM3dcXEBk8J0knJc4JvY2yupF3LS32sfEHftLwzr63U3/0dOQvsCSJRBy5zgI8ieABUZAeZmmaQ6RCGOTEYrGO2G4CCF2uVq4YdrCOsfmrb0DzH8llNMkXKzXlITRvmkuBlTRRKxGnPzS3vf0iicdAkmTiU5u7lArFFc7IKcW4ypO+RKDTUpq74K+UZBI9eBjV7Po368EO8epJ5aIx32a2kyS/hYWkS/dZh7I0fNZa2qBUceZO/KZGRjH4dQFW9t0J9Q7LLXJY="
+ - secure: "geOU/7VR83KYTOCR5XkgFqnHJEnXeB6hNDE7UFcN4ZsL9uVLhxlDVWV3ujJ87nyBzggG1KfSnUx11UwOQrbBl0K6sEXo/B2q5ytOsWoSLi7+0qm/uhhw/DTBOq57p8TIDKFM7rDhO7uajSn7Y86LeZkh9wIs5265Fh1yhCkiPbczDUMsX4P0GGg2qgkIKSBw4DZf6sPDc4xjJq/4/cLnjXo/K0ZYAIoSLqDfe1gmkzMtQlad+1t8Lwv/gOJ4BNRF4a5aEvGF6kbFovFoeFWCQTKlkn6VJtY+BETGKW2RH9efGeMs7JbBbNm+nnpoNsbJ0gdmGlhSbWT8enIm72/P0ThTBJWVcLJ30tUd0UeYD9C49wbJ3RHSxsoUKP9YhHJ+XKNx+8irkJ8LPCkNMQEFE153gEVvU7tCgah9Uq6laYZv9cQE0dWzNt3//Ymls8BzY38Ha4PbrIIJqEuWwnAX6ZgTgzVtXx1AJjkDFG9KFKPhN7NfNMbh7rn5C84a1h5zrIydm+6RcIBC+xTLDEiN7djiquf3PcNtyGLcO8dNN4Uv8iU0Jw8ch3+w0PJO53v5py+IS1V8pwwYaYF2iVPOoziS0tP8MsgYVGwpTZhvz3v8x0ge8r6KJE4zdvoPtCRNr2Oo3sJGYqkt86Hu6agKFiljP5AgJNx7iQD5GQn6J3w="
+ - secure: "gqyPF3d75JuwZptnQQQKO6rGUILXGO09y9dZhShdX8qq5Mexa2ISk77Y/b0yyAdhJMgEglls5cWlbHkwCAB0i4yL25RE5CtQUe4er+CIKwBIs0M56ghbcOwWAFB/cXeyyWmXDHBVnVUeKm7IJ34txsEclnMzQSR/DInSzsCFMUQok8HEaWZNssMjyRgo6goKGdG5vNWGfLLY7mKGMe/6PpYJD0G8k+Na08aX06ZWph38He8O3imUAngoQrxiSp0UYmnHDkigbV7S2LdZOsj7kMxkiyigzK/P1eygHVbFAhohLroaqS9B4CBK7QeOyup2vxVKqJVzFwOCylD0786CImvaG2ZYMtvJkapvaEE0mdMlyYpHgdIkmHZu28aMW7hXEhxHyBAxKuPcj5eGCGziO+ztCvfYIA9CGs1uA4KLrED7SahvB0oXnt3KTFdRc857cWcpp2NmRKihLzVdgHlmT8zcYaec3zP1VdMoa2bmLHoaZtAwvMTcAG56FcET1p7f9v+uiU88ZeptEjTJfpAWlq34tpwZXNyIQi5IROocSHM+PKTgLAsAMP5klGascr8E0sEzREl7tg8hqEwXKym/sVKyT+HMptA3UZcrZZhm07/cmQ0pUVvbV9QDb0MzU3O2wF7vT3U7R7Fb1u0LxMjblPyEazTp8ldabVRJREwlsDc="
+ - secure: "hFcdJSNyKL32geeIW+EbevwyPh4EK/KpaBIB780G4OPGjPUAe2y1VlvdPmljZM7HMb28l5Xf58LLdZdodtXAQbIvWYuP3A+EBxmIlPibb1D6AZqVYzY4ZB9sJGMDcTwzfIYrNZOBI9v34t8qZxHMfUm3XweHGsDwmyc18PmHAgG8m/0rwlIjtVlmEm+fFrvVHRXP1Jz3aX0RmTvrhc9/koZvpqztylIsqy9rlSX2OxoksDx825QfkE+YfbqS/OmAgqtw55r4H385cQJS97Yzc3X2dA8BKfPus7ng+lRxL9sYxwqjvDJzOeBqhf62BircPeymlWc+Hc53gNirW2MG4vHY/zASvZDjg9Hr2sEUODY8u8i7EvfYfX+hNPXZNtWo8fHO5UviCbc16IMrADN497Y54cKvAtyD/2H3aFWg8ei96GpxOaL6W+l5gtlgNC1b9wPE3+pDloLc4TMbvvlSDPKGWgSgqv4haRJ81oIJK+KEvWhbX5Sn3l5QTM33/rn4KUEFqhGNpUxGrvCQOn5sO7A2wnk8JMlrcRZKBpk+wfEzeTEAqZ6Vt7pmceEpcs/NdJCsRjAOmlCdjLVHtrF9zGpBelAMzbIeKLMsTtR3PbpediWHkNwLaMCAEZPIPKeML6TXoPy/nlBpkK20rTbHRHhumFKACB3F3HCWm8v/SIU="
+
+
+# Secure Keys, that need to be set for snapshot builds
+#
+# CI_DEPLOY_USERNAME - the user which can upload net.sourceforge.pmd:* to https://oss.sonatype.org/
+# CI_DEPLOY_PASSWORD
+#
+# SONAR_TOKEN - the token used to update https://sonarqube.com/dashboard/?id=393826
+#
+# PMD_SF_USER - the sourceforge user, which is used to upload created binaries to sf files section. Note: an ssh key is
+# required. See "before_install".
+#
+#
+# Secure Keys, that need to be set for releases:
+#
+# PMD_SF_APIKEY - used to make the new release the default file in the files section. See https://sourceforge.net/auth/preferences/
+# under "Release API Key"
+#
+# CI_SIGN_KEYNAME
+# CI_SIGN_PASSPHRASE
+# add the encrypted GPG keyring file to repo (https://docs.travis-ci.com/user/encrypting-files/#Automated-Encryption), decrypt it and install it at the beginning of .travis-deploy.sh
+#
+# GITHUB_OAUTH_TOKEN - the token used to upload the binaries to github releases
+#
diff --git a/.travis/build-pull-request.sh b/.travis/build-pull-request.sh
new file mode 100644
index 0000000000..55b66511dd
--- /dev/null
+++ b/.travis/build-pull-request.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+set -ev
+mvn verify -B -V
diff --git a/.travis/build-push.sh b/.travis/build-push.sh
new file mode 100644
index 0000000000..0971fa542a
--- /dev/null
+++ b/.travis/build-push.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+set -ev
+
+VERSION=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec)
+echo "Building PMD ${VERSION} on branch ${TRAVIS_BRANCH}"
+
+if [[ "$VERSION" != *-SNAPSHOT && "$TRAVIS_TAG" != "" ]]; then
+ mvn deploy -Possrh,pmd-release -B -V
+else
+ mvn deploy -Possrh -B -V
+fi
+
+bash .travis/build-site.sh
+
+# create pmd-doc archive
+(
+ cd target
+ mv staging pmd-doc-${VERSION}
+ zip -qr pmd-doc-${VERSION}.zip pmd-doc-${VERSION}/
+)
+
+# Uploading pmd distribution to sourceforge
+if [ "$TRAVIS_TAG" = "" ]; then
+ rsync -avh pmd-dist/target/pmd-*-${VERSION}.zip target/pmd-doc-${VERSION}.zip ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/
+ rsync -avh src/site/markdown/overview/changelog.md ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ReadMe.md
+fi
+
+if [[ "$VERSION" == *-SNAPSHOT && "$TRAVIS_BRANCH" == "master" ]]; then
+ # Uploading snapshot site...
+ rsync -ah --stats --delete target/pmd-doc-${VERSION}/ ${PMD_SF_USER}@web.sourceforge.net:/home/project-web/pmd/htdocs/snapshot/
+fi
+
+
+if [[ "$VERSION" == *-SNAPSHOT && "$TRAVIS_BRANCH" == "master" ]]; then
+ # only do a clean build for sonar, if we are executing a snapshot build, otherwise we can't reuse the build from above for the release
+ mvn clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.host.url=https://sonarqube.com -Dsonar.login=${SONAR_TOKEN} -B -V
+fi
+
diff --git a/.travis/build-site.sh b/.travis/build-site.sh
new file mode 100644
index 0000000000..0d2ff744d5
--- /dev/null
+++ b/.travis/build-site.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+set -ev
+
+# Do not log the output, to avoid the travis log length limit of 4MB
+# Solution from http://stackoverflow.com/questions/26082444/how-to-work-around-travis-cis-4mb-output-limit/26082445#26082445
+
+
+
+export PING_SLEEP=30s
+export BUILD_OUTPUT=/tmp/build-site.out
+export PING_PID_FILE=/tmp/build-site-ping.pid
+
+touch $BUILD_OUTPUT
+
+dump_output() {
+ echo Tailing the last 500 lines of output:
+ tail -500 $BUILD_OUTPUT
+}
+kill_ping() {
+ if [ -e $PING_PID_FILE ]; then
+ PING_LOOP_PID=$(cat $PING_PID_FILE)
+ kill $PING_LOOP_PID
+ rm $PING_PID_FILE
+ fi
+}
+error_handler() {
+ kill_ping
+ echo ERROR: An error was encountered with the build.
+ dump_output
+ exit 1
+}
+# If an error occurs, run our error handler to output a tail of the build
+trap 'error_handler' ERR
+
+# Set up a repeating loop to send some output to Travis.
+bash -c "while true; do echo \$(date) - building ...; sleep $PING_SLEEP; done" &
+PING_LOOP_PID=$!
+echo "$PING_LOOP_PID" > $PING_PID_FILE
+
+# Run the build, redirect output into the file
+mvn site site:stage -Psite -B -V >> $BUILD_OUTPUT 2>&1
+
+# The build finished without returning an error so dump a tail of the output
+dump_output
+
+# nicely terminate the ping output loop
+kill_ping
+
diff --git a/.travis/id_rsa.pub b/.travis/id_rsa.pub
new file mode 100644
index 0000000000..7e1b51e198
--- /dev/null
+++ b/.travis/id_rsa.pub
@@ -0,0 +1 @@
+ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQC8yHVLHYDsKui8tYg/sFvkDqcs97pEZz0BzK9HtBF4O+/It1drRYRdUAFfjoImfprpKSxkJCTglHixGRp24eNaZ6woWVJ4/bmiMkEqEZAjr1NZ3qw7zIruMJMSkCV+YTtmL4cYcZlvMRPzzOZOnFbV05oi79oy41MUFHYjolK9QxMFNsVNN5iyzFxM3HqSFozz+ylKbFBtDk6ZHZQNRL/Xl2V9DJ69fVzjG4OZfcWNGmmKHHARmsnJyUOMeeKpLjDOe1M6ZdI8HkXWac8yCr9JTETNZZwemZAcS/RKoKCDqfIUOzkZfIPmyaznfVetTGsMi7yQrJhAyjznuNGF4+3lfgTcmRF8wz5FCeUkdYTmy2wNSFi5HiLPfC5OgRtjKzC6yb8rbRjDx6XQ2ph15PKOaXwzk49TaMc0xJvoiGDMZaTU0iTm3Y1/QUtfLvo3/jGMbtUdV3soWpuBAV2JUI4aB5xdLX9iNmcrVzoUe3y9DWuuTX46eoCvpUNXv/DXKhQw1D7xd7J67db5qUck/Akiqi0JR+e0SoBJvZFtYwVNLGC2bIJ/s8SR8X5Zp+1+ypf3WYjIylxQTkO1r4NfI0Cd9qXg7nmUrHAU7Z6xtJmUK8ZWzSST4wul8WkRJURtODLxt5firtlKhyZ93t9Mjuk6mATIPxr/b3x20T+IH463kw== ssh key for pmd. used for travis accessing sourceforge and github.
diff --git a/.travis/install-configure-maven.sh b/.travis/install-configure-maven.sh
new file mode 100644
index 0000000000..efaccdc668
--- /dev/null
+++ b/.travis/install-configure-maven.sh
@@ -0,0 +1,15 @@
+#!/bin/bash
+set -ev
+
+# remember the current directory
+SOURCE_HOME=$PWD
+
+cd $HOME
+wget -q http://www-us.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
+tar zxf apache-maven-3.3.9-bin.tar.gz
+chmod +x apache-maven-3.3.9/bin/mvn
+
+echo "MAVEN_OPTS='-Xms1g -Xmx1g'" > .mavenrc
+mkdir -p .m2
+cp $SOURCE_HOME/.travis/travis-toolchains.xml .m2/toolchains.xml
+cp $SOURCE_HOME/.travis/travis-settings.xml .m2/settings.xml
diff --git a/.travis/release.sh b/.travis/release.sh
new file mode 100644
index 0000000000..4aee9a7cb8
--- /dev/null
+++ b/.travis/release.sh
@@ -0,0 +1,54 @@
+#!/bin/bash
+set -ev
+
+RELEASE_VERSION=$(mvn -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec)
+
+# Deploy to ossrh has already been done with the usual build. See build-push.sh
+
+# The site has been built before, the files have already been uploaded to sourceforge.
+# Since this is a release, making the binary the new default file...
+curl -H "Accept: application/json" -X PUT -d "default=windows&default=mac&default=linux&default=bsd&default=solaris&default=others" \
+ -d "api_key=${PMD_SF_APIKEY}" https://sourceforge.net/projects/pmd/files/pmd/${RELEASE_VERSION}/pmd-bin-${RELEASE_VERSION}.zip
+
+
+# Assumes, the release has already been created by travis github releases provider
+RELEASE_ID=$(curl -s -H "Authorization: token ${GITHUB_OAUTH_TOKEN}" https://api.github.com/repos/pmd/pmd/releases/tags/pmd_releases/${RELEASE_VERSION}|jq ".id")
+RELEASE_NAME="PMD ${RELEASE_VERSION} ($(date -u +%d-%B-%Y))"
+RELEASE_BODY=$(cat src/site/markdown/overview/changelog.md)
+RELEASE_BODY="${RELEASE_BODY//$'\\'/\\\\}"
+RELEASE_BODY="${RELEASE_BODY//$'\r'/}"
+RELEASE_BODY="${RELEASE_BODY//$'\n'/\\r\\n}"
+RELEASE_BODY="${RELEASE_BODY//$'"'/\\$'"'}"
+cat > release-edit-request.json <
- sonatype-nexus-snapshots
+ ossrh
${env.CI_DEPLOY_USERNAME}
${env.CI_DEPLOY_PASSWORD}
-
+
+
+ ossrh
+
+ ${env.CI_SIGN_KEYNAME}
+ ${env.CI_SIGN_PASSPHRASE}
+
+
+
-
\ No newline at end of file
+
diff --git a/.travis/travis-toolchains.xml b/.travis/travis-toolchains.xml
new file mode 100644
index 0000000000..caba9380c7
--- /dev/null
+++ b/.travis/travis-toolchains.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+ jdk
+
+ 1.6
+
+
+ /usr/lib/jvm/java-6-openjdk-amd64
+
+
+
+ jdk
+
+ 1.7
+
+
+ /usr/lib/jvm/java-7-openjdk-amd64
+
+
+
+ jdk
+
+ 1.8
+
+
+ /usr/lib/jvm/java-8-oracle
+
+
+
\ No newline at end of file
diff --git a/do-release.sh b/do-release.sh
index ccc776a3d7..a7ffdcfa1d 100755
--- a/do-release.sh
+++ b/do-release.sh
@@ -1,63 +1,5 @@
#!/bin/bash
-# work around a maven-scm bug with git while releasing
-# this might also be necessary: git config --add status.displayCommentPrefix true
-# see https://jira.codehaus.org/browse/SCM-740
-export LANG=C
-
-export MAVEN_OPTS="-XX:MaxPermSize=1g"
-
-
-# check setup
-if [ "" = "$PMD_SF_USER" ]; then
- echo "No env variable PMD_SF_USER specified. This is the sourceforge account name needed"
- echo "during the release process to upload files via ssh/scp/rsync."
- echo
- echo "Please set the variable, e.g. in your ~/.bashrc:"
- echo
- echo "PMD_SF_USER=sfuser"
- echo "export PMD_SF_USER"
- echo
- exit 1
-fi
-if [ "" = "$PMD_SF_APIKEY" ]; then
- echo "No env variable PMD_SF_APIKEY specified. This is the release api key,"
- echo "needed to set the default download file. You can create an api key in"
- echo "your user preferences on sourceforge.net"
- echo
- echo "Please set the variable, e.g. in your ~/.bashrc:"
- echo
- echo "PMD_SF_APIKEY=abcd-efgh-xxxx"
- echo "export PMD_SF_APIKEY"
- echo
- exit 1
-fi
-
-if [ "" = "$PMD_GPG_PROFILE" ]; then
- echo "No env variable PMD_GPG_PROFILE specified. This is your maven profile, which configures"
- echo "the properties gpg.keyname and gpg.passphrase used"
- echo "to sign the created release artifacts before uploading to maven central."
- echo
- echo "Please set the variable, e.g. in your ~/.bashrc:"
- echo
- echo "PMD_GPG_PROFILE=pmd-gpg"
- echo "export PMD_GPG_PROFILE"
- echo
- echo "And in your ~/.m2/settings.xml file:"
- echo
- echo " "
- echo " "
- echo " pmd-gpg"
- echo " "
- echo " AB123CDE"
- echo " "
- echo " "
- echo " "
- echo " "
-echo " Close and Release the staging repository"
-echo " Check here: "
+echo "Tag has been pushed.... now check travis build: "
echo
-echo "Press enter to continue..."
-read
-
-echo
-echo "Creating the pmd-doc-${RELEASE_VERSION}.zip archive..."
-(
- cd target
- mv staging pmd-doc-${RELEASE_VERSION}
- zip -r pmd-doc-${RELEASE_VERSION}.zip pmd-doc-${RELEASE_VERSION}/
-)
-
-echo
-echo "Adding the site to pmd.github.io..."
-rsync -avhP target/pmd-doc-${RELEASE_VERSION}/ ../../../pmd.github.io/pmd-${RELEASE_VERSION}/
-(
- cd ../../../pmd.github.io
- git add pmd-${RELEASE_VERSION}
- git commit -m "Added pmd-${RELEASE_VERSION}"
-)
-
-echo
-echo "Uploading the zip files..."
-rsync -avhP pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip $PMD_SF_USER@web.sourceforge.net:/home/frs/project/pmd/pmd/${RELEASE_VERSION}/
-rsync -avhP src/site/markdown/overview/changelog.md $PMD_SF_USER@web.sourceforge.net:/home/frs/project/pmd/pmd/${RELEASE_VERSION}/ReadMe.md
-echo
-
-if [ ! "" = "$PMD_LOCAL_BINARIES" -a -d $PMD_LOCAL_BINARIES ]; then
- echo "Copying the files to local storage directory $PMD_LOCAL_BINARIES..."
- cp -av pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip $PMD_LOCAL_BINARIES
- echo
-fi
-
-echo "Making the binary the new default file..."
-curl -H "Accept: application/json" -X PUT -d "default=windows&default=mac&default=linux&default=bsd&default=solaris&default=others" \
- -d "api_key=${PMD_SF_APIKEY}" https://sourceforge.net/projects/pmd/files/pmd/${RELEASE_VERSION}/pmd-bin-${RELEASE_VERSION}.zip
-echo
-
-echo
-echo "Verify the md5sums: "
-md5sum pmd-dist/target/pmd-*-${RELEASE_VERSION}.zip target/pmd-doc-${RELEASE_VERSION}.zip
-
-echo
-echo "Press enter to continue..."
-read
-)
-
echo
echo "Submit news to SF on page. You can use"
echo "the following template:"
@@ -248,71 +95,56 @@ echo "Press enter to continue..."
read
echo
-echo "Close the milestone on sourceforge and create a new one..."
+echo "Check the milestone on sourceforge:"
echo ""
echo
-echo "Press enter to continue..."
-read
-
-echo "Last step - next development version:"
+echo
+echo
+echo "Prepare Next development version:"
echo "* Move version/release info from **src/site/markdown/overview/changelog.md** to **src/site/markdown/overview/changelog-old.md**."
echo "* Update version/release info in **src/site/markdown/overview/changelog.md**."
-echo "* Update pmd-{java8,ui}/pom.xml - the version is probably wrong - set it to the parent's=next development version: ${DEVELOPMENT_VERSION}."
echo
cat <"
echo
-echo " * Set the title: PMD ${RELEASE_VERSION} ($(date -u +%d-%B-%Y))"
-echo " * copy/paste the changelog.md"
-echo " * Upload the binary zip file"
-echo " * Upload the doc zip file"
-echo " * Upload the src zip file"
echo
-echo "Press enter to continue..."
-read
-
-
+echo "Verify the new release on github: "
+echo
+echo
+echo "Send out an announcement mail to the mailing list:
+echo "To: PMD Developers List
+echo "Subject: [ANNOUNCE] PMD ${RELEASE_VERSION} Released"
+echo "Body: !!Copy Changelog!!"
+echo
echo
echo "------------------------------------------"
echo "Done."
@@ -320,3 +152,4 @@ echo "------------------------------------------"
echo
+
diff --git a/pmd-core/src/test/java/net/sourceforge/pmd/util/database/DBTypeTest.java b/pmd-core/src/test/java/net/sourceforge/pmd/util/database/DBTypeTest.java
index f5951f0d0f..7f1037b959 100644
--- a/pmd-core/src/test/java/net/sourceforge/pmd/util/database/DBTypeTest.java
+++ b/pmd-core/src/test/java/net/sourceforge/pmd/util/database/DBTypeTest.java
@@ -55,6 +55,7 @@ public class DBTypeTest {
@After
public void tearDown() throws Exception {
testProperties = null;
+ absoluteFile.delete();
}
/**
diff --git a/pmd-dist/src/main/assembly/src.xml b/pmd-dist/src/main/assembly/src.xml
index 2a4cbcd10a..e69362fffc 100644
--- a/pmd-dist/src/main/assembly/src.xml
+++ b/pmd-dist/src/main/assembly/src.xml
@@ -24,6 +24,9 @@
**/.pmd
**/.ruleset
**/.git
+ **/.travis/secrets.tar
+ **/.travis/id_rsa
+ **/.travis/*.gpg
0755
0644
diff --git a/pmd-jsp/src/test/java/net/sourceforge/pmd/lang/jsp/ast/JspDocStyleTest.java b/pmd-jsp/src/test/java/net/sourceforge/pmd/lang/jsp/ast/JspDocStyleTest.java
index 52ce5d61f3..957da6ebf7 100644
--- a/pmd-jsp/src/test/java/net/sourceforge/pmd/lang/jsp/ast/JspDocStyleTest.java
+++ b/pmd-jsp/src/test/java/net/sourceforge/pmd/lang/jsp/ast/JspDocStyleTest.java
@@ -156,7 +156,7 @@ public class JspDocStyleTest extends AbstractJspNodesTst {
}
/**
- * Test parsing of HTML