diff --git a/.gitignore b/.gitignore index e283419c70d51..22acbbd1f42db 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ .DS_Store *.iml npm-debug.log +.build.log .metadata/ bin/ diff --git a/.travis.yml b/.travis.yml index b5f2860ca3816..8c153ea2a415b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -15,37 +15,15 @@ cache: before_cache: # remove resolver-status.properties, they change with each run and invalidate the cache - find $HOME/.m2 -name resolver-status.properties -exec rm {} \; - -before_install: - - echo "MAVEN_OPTS='-Xms1g -Xmx2g -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'" > ~/.mavenrc -install: - - | - function prevent_timeout() { - local i=0 - while [ -e /proc/$1 ]; do - # print zero width char every 3 minutes while building - if [ "$i" -eq "180" ]; then printf %b '\u200b'; i=0; else i=$((i+1)); fi - sleep 1 - done - } - function print_reactor_summary() { - sed -ne '/\[INFO\] Reactor Summary:/,$ p' "$1" | sed 's/\[INFO\] //' - } - function mvnp() { - set -o pipefail # exit build with error when pipes fail - local command=(mvn $@) - exec "${command[@]}" 2>&1 | # execute, redirect stderr to stdout - tee .build.log | # write output to log - stdbuf -oL grep -E '^\[INFO\] Building .+ \[.+\]$' | # filter progress - sed -uE 's/^\[INFO\] Building (.*[^ ])[ ]+\[([0-9]+\/[0-9]+)\]$/\2| \1/' | # prefix project name with progress - sed -e :a -e 's/^.\{1,6\}|/ &/;ta' & # right align progress with padding - local pid=$! - prevent_timeout $pid & - wait $pid - } -after_success: - - print_reactor_summary .build.log -after_failure: - - tail -n 2000 .build.log -script: - - mvnp clean install -B -DskipChecks=true -DskipTests=true + +notifications: + webhooks: https://www.travisbuddy.com/ + +travisBuddy: + insertMode: update + successBuildLog: true + +before_install: true +before_script: true +install: true +script: ./buildci.sh diff --git a/buildci.sh b/buildci.sh new file mode 100755 index 0000000000000..85bc65ec1a7ce --- /dev/null +++ b/buildci.sh @@ -0,0 +1,59 @@ +#!/bin/bash + +function prevent_timeout() { + local i=0 + while [ -e /proc/$1 ]; do + # print zero width char every 3 minutes while building + if [ "$i" -eq "180" ]; then printf %b '\u200b'; i=0; else i=$((i+1)); fi + sleep 1 + done +} + +function print_reactor_summary() { + sed -ne '/\[INFO\] Reactor Summary:/,$ p' "$1" | sed 's/\[INFO\] //' +} + +function mvnp() { + set -o pipefail # exit build with error when pipes fail + local command=(mvn $@) + exec "${command[@]}" 2>&1 | # execute, redirect stderr to stdout + stdbuf -o0 grep -vE "Download(ed|ing) from [a-z.]+: https:" | # filter out downloads + tee .build.log | # write output to log + stdbuf -oL grep -E '^\[INFO\] Building .+ \[.+\]$' | # filter progress + stdbuf -o0 sed -uE 's/^\[INFO\] Building (.*[^ ])[ ]+\[([0-9]+\/[0-9]+)\]$/\2| \1/' | # prefix project name with progress + stdbuf -o0 sed -e :a -e 's/^.\{1,6\}|/ &/;ta' & # right align progress with padding + local pid=$! + prevent_timeout $pid & + wait $pid +} + +# Determine if this is a new addon -> Perform tests + integration tests and all SAT checks with increased warning level +CHANGED_DIR=`git diff --diff-filter=A --dirstat=files,0 master...HEAD bundles/ | sed 's/^[ 0-9.]\+% bundles\///g' | grep -o -P "^([^/]*)" | uniq` +CDIR=`pwd` + +if [ ! -z "$CHANGED_DIR" ] && [ -e "bundles/$CHANGED_DIR" ]; then + echo "New addon pull request: Building $CHANGED_DIR" + echo "MAVEN_OPTS='-Xms1g -Xmx2g -Dorg.slf4j.simpleLogger.log.org.openhab.tools.analysis.report.ReportUtility=DEBUG -Dorg.slf4j.simpleLogger.defaultLogLevel=WARN'" > ~/.mavenrc + cd "bundles/$CHANGED_DIR" + mvn clean install -B 2>&1 | + stdbuf -o0 grep -vE "Download(ed|ing) from [a-z.]+: https:" | # Filter out Download(s) + stdbuf -o0 grep -v "target/code-analysis" | # filter out some debug code from reporting utility + tee $CDIR/.build.log + if [ -e "../itests/$CHANGED_DIR" ]; then + echo "New addon pull request: Building itest $CHANGED_DIR" + cd "../itests/$CHANGED_DIR" + mvn clean install -B 2>&1 | + stdbuf -o0 grep -vE "Download(ed|ing) from [a-z.]+: https:" | # Filter out Download(s) + stdbuf -o0 grep -v "target/code-analysis" | # filter out some debug code from reporting utility + tee -a $CDIR/.build.log + fi +else + echo "Build all" + echo "MAVEN_OPTS='-Xms1g -Xmx2g -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn'" > ~/.mavenrc + mvnp clean install -B -DskipChecks=true -DskipTests=true + if [ $? -eq 0 ]; then + print_reactor_summary .build.log + else + tail -n 1000 .build.log + fi +fi diff --git a/travis-buddy-failure-template.md b/travis-buddy-failure-template.md new file mode 100644 index 0000000000000..a5b6c2ce0bf96 --- /dev/null +++ b/travis-buddy-failure-template.md @@ -0,0 +1,22 @@ +## Travis tests have failed +Hey @{{pullRequestAuthor}}, +please read the following log in order to understand the failure reason. There might also be some helpful tips along the way. +It'll be awesome if you fix what's wrong and commit the changes. + +{{#jobs}} +### {{displayName}} +{{#scripts}} +
+ + + Expand here + + + +``` +{{&contents}} +``` +
+
+{{/scripts}} +{{/jobs}} diff --git a/travis-buddy-success-template.md b/travis-buddy-success-template.md new file mode 100644 index 0000000000000..b78a9bfa17c40 --- /dev/null +++ b/travis-buddy-success-template.md @@ -0,0 +1,21 @@ +## Travis tests were successful +Hey @{{pullRequestAuthor}}, +we found no major flaws with your code. Still you might want to look at this logfile, as we usually suggest some optional improvements. + +{{#jobs}} +### {{displayName}} +{{#scripts}} +
+ + + {{command}} + + + +``` +{{&contents}} +``` +
+
+{{/scripts}} +{{/jobs}}