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