diff --git a/.travis.yml b/.travis.yml index 7cd272880c..addd0aa81b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -52,11 +52,17 @@ deploy: after_deploy: bash .travis/release.sh notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/0e6dd310db54b96c2653 + - https://webhooks.gitter.im/e/65efc1ea65175ad23ab6 + on_success: always # options: [always|never|change] default: always + on_failure: always # options: [always|never|change] default: always + on_start: never # options: [always|never|change] default: always email: recipients: - andreas.dangel@adangel.org - - pmd-commits@lists.sourceforge.net - on_success: always + on_success: change on_failure: always cache: directories: diff --git a/.travis/build-coveralls.sh b/.travis/build-coveralls.sh index 674918d9c3..9cdcd3411f 100755 --- a/.travis/build-coveralls.sh +++ b/.travis/build-coveralls.sh @@ -2,9 +2,10 @@ set -e source .travis/common-functions.sh +source .travis/logger.sh VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec | tail -1) -echo "Building PMD Coveralls.io report ${VERSION} on branch ${TRAVIS_BRANCH}" +log_info "Building PMD Coveralls.io report ${VERSION} on branch ${TRAVIS_BRANCH}" if ! travis_isPush; then echo "Not proceeding, since this is not a push!" @@ -16,5 +17,17 @@ fi # coveralls plugin seems to need java.xml.bind module echo "MAVEN_OPTS='-Xms1g -Xmx1g --add-modules java.se.ee'" > ${HOME}/.mavenrc -./mvnw clean install -DskipTests=true -Dmaven.javadoc.skip=true -B -V -./mvnw test jacoco:report coveralls:report -Pcoveralls -B -V +( + # disable fast fail, exit immediately, in this subshell + set +e + + ./mvnw clean install -DskipTests=true -Dmaven.javadoc.skip=true -B -V + ./mvnw test jacoco:report coveralls:report -Pcoveralls -B -V + + if [ $? -ne 0 ]; then + log_error "Error creating coveralls report" + else + log_success "New coveralls result: https://coveralls.io/github/pmd/pmd" + fi + true +) diff --git a/.travis/build-deploy.sh b/.travis/build-deploy.sh index babe7ed903..8027b3ec70 100755 --- a/.travis/build-deploy.sh +++ b/.travis/build-deploy.sh @@ -2,12 +2,13 @@ set -e source .travis/common-functions.sh +source .travis/logger.sh function push_docs() { if git diff --quiet docs; then - echo "No changes in docs..." + log_info "No changes in docs..." else - echo "Found changes in docs..." + log_info "Found changes in docs..." if [ "$TRAVIS_BRANCH" == "master" ]; then git config user.name "Travis CI (pmd-bot)" @@ -15,45 +16,63 @@ function push_docs() { git add -A docs git commit -m "Update documentation" git push git@github.com:pmd/pmd.git HEAD:master + log_success "Successfully pushed docs update" else - echo "Not on master branch, won't commit+push" + log_info "Not on master branch, won't commit+push" fi fi } VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec | tail -1) -echo "Building PMD ${VERSION} on branch ${TRAVIS_BRANCH}" +log_info "Building PMD ${VERSION} on branch ${TRAVIS_BRANCH}" MVN_BUILD_FLAGS="-B -V" if travis_isPullRequest; then - echo "This is a pull-request build" + log_info "This is a pull-request build" ./mvnw verify $MVN_BUILD_FLAGS elif travis_isPush; then if [[ "${VERSION}" != *-SNAPSHOT && "${TRAVIS_TAG}" != "" ]]; then - echo "This is a release build for tag ${TRAVIS_TAG}" + echo -e "\n\n" + log_info "This is a release build for tag ${TRAVIS_TAG}" + echo -e "\n\n" ./mvnw deploy -Possrh,pmd-release $MVN_BUILD_FLAGS elif [[ "${VERSION}" == *-SNAPSHOT ]]; then - echo "This is a snapshot build" + log_info "This is a snapshot build" ./mvnw deploy -Possrh $MVN_BUILD_FLAGS push_docs else # other build. Can happen during release: the commit with a non snapshot version is built, but not from the tag. - echo "This is some other build, probably during release: commit with a non-snapshot version on branch master..." - ./mvnw verify -Possrh $MVN_BUILD_FLAGS + log_info "This is some other build, probably during release: commit with a non-snapshot version on branch master..." + ./mvnw verify $MVN_BUILD_FLAGS # we stop here - no need to execute further steps exit 0 fi - # Uploading pmd distribution to sourceforge - rsync -avh pmd-dist/target/pmd-*-${VERSION}.zip ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ - rsync -avh docs/pages/release_notes.md ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ReadMe.md + ( + # disable fast fail, exit immediately, in this subshell + set +e + + echo -e "\n\n" + log_info "Uploading pmd distribution to sourceforge..." + rsync -avh pmd-dist/target/pmd-*-${VERSION}.zip ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ + if [ $? -ne 0 ]; then + log_error "Error while uploading pmd-*-${VERSION}.zip to sourceforge!" + log_error "Please upload manually: https://sourceforge.net/projects/pmd/files/pmd/" + fi + rsync -avh docs/pages/release_notes.md ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ReadMe.md + if [ $? -ne 0 ]; then + log_error "Error while uploading release_notes.md as ReadMe.md to sourceforge!" + log_error "Please upload manually: https://sourceforge.net/projects/pmd/files/pmd/" + fi + true + ) else - echo "This is neither a pull request nor a push!" + log_info "This is neither a pull request nor a push. Not executing any build." exit 1 fi diff --git a/.travis/build-doc.sh b/.travis/build-doc.sh index 447f7c63fa..961ffe56db 100755 --- a/.travis/build-doc.sh +++ b/.travis/build-doc.sh @@ -2,38 +2,58 @@ set -e source .travis/common-functions.sh +source .travis/logger.sh VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec | tail -1) -echo "Building PMD Documentation ${VERSION} on branch ${TRAVIS_BRANCH}" +log_info "Building PMD Documentation ${VERSION} on branch ${TRAVIS_BRANCH}" if ! travis_isPush; then - echo "Not building site, since this is not a push!" + log_info "Not building site, since this is not a push!" exit 0 fi pushd docs # run jekyll -echo -e "\n\nBuilding documentation using jekyll...\n\n" +echo -e "\n\n" +log_info "Building documentation using jekyll..." bundle install bundle exec jekyll build # create pmd-doc archive -echo -e "\n\nCreating pmd-doc archive...\n\n" +echo -e "\n\n" +log_info "Creating pmd-doc archive..." mv _site pmd-doc-${VERSION} zip -qr pmd-doc-${VERSION}.zip pmd-doc-${VERSION}/ +( + # disable fast fail, exit immediately, in this subshell + set +e -# Uploading pmd doc distribution to sourceforge -if [[ "${TRAVIS_TAG}" != "" || "${VERSION}" == *-SNAPSHOT ]]; then - echo -e "\n\nUploading pmd-doc archive to sourceforge...\n\n" - rsync -avh pmd-doc-${VERSION}.zip ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ -fi + if [[ "${TRAVIS_TAG}" != "" || "${VERSION}" == *-SNAPSHOT ]]; then + echo -e "\n\n" + log_info "Uploading pmd doc distribution to sourceforge..." + rsync -avh pmd-doc-${VERSION}.zip ${PMD_SF_USER}@web.sourceforge.net:/home/frs/project/pmd/pmd/${VERSION}/ + if [ $? -ne 0 ]; then + log_error "Couldn't upload pmd-doc-${VERSION}.zip!" + log_error "Please upload manually: https://sourceforge.net/projects/pmd/files/pmd/" + fi + fi + + # rsync site to pmd.sourceforge.net/snapshot + if [[ "${VERSION}" == *-SNAPSHOT && "${TRAVIS_BRANCH}" == "master" ]]; then + echo -e "\n\n" + log_info "Uploading snapshot site to pmd.sourceforge.net/snapshot..." + travis_wait rsync -ah --stats --delete pmd-doc-${VERSION}/ ${PMD_SF_USER}@web.sourceforge.net:/home/project-web/pmd/htdocs/snapshot/ + if [ $? -ne 0 ]; then + log_error "Couldn't upload the snapshot documentation. It won't be current on http://pmd.sourceforge.net/snapshot/" + else + log_success "Successfully uploaded snapshot documentation: http://pmd.sourceforge.net/snapshot/" + fi + fi + + true +) -# rsync site to pmd.sourceforge.net/snapshot -if [[ "${VERSION}" == *-SNAPSHOT && "${TRAVIS_BRANCH}" == "master" ]]; then - echo -e "\n\nUploading snapshot site...\n\n" - travis_wait rsync -ah --stats --delete pmd-doc-${VERSION}/ ${PMD_SF_USER}@web.sourceforge.net:/home/project-web/pmd/htdocs/snapshot/ -fi popd diff --git a/.travis/build-sonar.sh b/.travis/build-sonar.sh index 8faf4ca260..e385da85af 100755 --- a/.travis/build-sonar.sh +++ b/.travis/build-sonar.sh @@ -2,9 +2,10 @@ set -e source .travis/common-functions.sh +source .travis/logger.sh VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec | tail -1) -echo "Building PMD Sonar ${VERSION} on branch ${TRAVIS_BRANCH}" +log_info "Building PMD Sonar ${VERSION} on branch ${TRAVIS_BRANCH}" if ! travis_isPush; then echo "Not updating sonar, since this is not a push!" @@ -16,5 +17,17 @@ fi # sonar plugin seems to need java.xml.bind module echo "MAVEN_OPTS='-Xms1g -Xmx1g --add-modules java.se.ee'" > ${HOME}/.mavenrc -# Run the build, truncate output due to Travis log limits -./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${SONAR_TOKEN} -B -V +( + # disable fast fail, exit immediately, in this subshell + set +e + + # Run the build + ./mvnw clean org.jacoco:jacoco-maven-plugin:prepare-agent package sonar:sonar -Dsonar.host.url=https://sonarcloud.io -Dsonar.login=${SONAR_TOKEN} -B -V + + if [ $? -ne 0 ]; then + log_error "Error updating sonar..." + else + log_success "New sonar results: https://sonarcloud.io/dashboard?id=net.sourceforge.pmd%3Apmd" + fi + true +) diff --git a/.travis/logger.sh b/.travis/logger.sh new file mode 100644 index 0000000000..1c88df9413 --- /dev/null +++ b/.travis/logger.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +COL_GREEN="\e[32m" +COL_RED="\e[31m" +COL_RESET="\e[0m" +COL_YELLOW="\e[33;1m" + +function log_error() { + echo -e "${COL_RED}[ERROR] $*${COL_RESET}" +} + +function log_info() { + echo -e "${COL_YELLOW}[INFO] $*${COL_RESET}" +} + +function log_success() { + echo -e "${COL_GREEN}[SUCCESS] $*${COL_RESET}" +} diff --git a/.travis/release.sh b/.travis/release.sh index ef99737da7..7e42471976 100755 --- a/.travis/release.sh +++ b/.travis/release.sh @@ -1,6 +1,8 @@ #!/bin/bash set -e +source .travis/logger.sh + echo "BUILD: $BUILD" RELEASE_VERSION=$(./mvnw -q -Dexec.executable="echo" -Dexec.args='${project.version}' --non-recursive org.codehaus.mojo:exec-maven-plugin:1.5.0:exec | tail -1) echo "RELEASE_VERSION: $RELEASE_VERSION" @@ -9,10 +11,22 @@ if [ "${BUILD}" = "deploy" ]; then # Deploy to ossrh has already been done with the usual build. See build-deploy.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 +( + # disable fast fail, exit immediately, in this subshell + set +e + + # 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... + log_info "Selecting pmd-bin-${RELEASE_VERSION} as default on sourceforge.net..." + 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 + if [ $? -ne 0 ]; then + log_error "Couldn't select latest binary as default on sourceforge.net" + else + log_info "pmd-bin-${RELEASE_VERSION} is now the default download option." + fi + true +) # Assumes, the release has already been created by travis github releases provider @@ -29,7 +43,7 @@ cat > release-edit-request.json <UTF-8 UTF-8 - http://pmd.sourceforge.net/snapshot + https://pmd.github.io/pmd -Xmx512m -Dfile.encoding=${project.build.sourceEncoding}