Skip to content

Commit

Permalink
Travis: Build new binding pull requests with tests (openhab#5389)
Browse files Browse the repository at this point in the history
* Travis: Build new binding pull requests with tests
* Move shell script into own file and keep the yaml file for the configuration part. Use daily snapshot updates
* Overwrite travis default behaviour

Signed-off-by: David Graeff <david.graeff@web.de>

* Some finetuning to filter out download progress and include all warnings from the reporting utility

Signed-of-by: Martin van Wingerden <martin@martinvw.nl>
Signed-off-by: Maximilian Hess <mail@ne0h.de>
  • Loading branch information
davidgraeff authored and ne0h committed Sep 15, 2019
1 parent 8ff3729 commit d0bc3e9
Show file tree
Hide file tree
Showing 5 changed files with 115 additions and 34 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
.DS_Store
*.iml
npm-debug.log
.build.log

.metadata/
bin/
Expand Down
46 changes: 12 additions & 34 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
59 changes: 59 additions & 0 deletions buildci.sh
Original file line number Diff line number Diff line change
@@ -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
22 changes: 22 additions & 0 deletions travis-buddy-failure-template.md
Original file line number Diff line number Diff line change
@@ -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}}
<details>
<summary>
<strong>
Expand here
</strong>
</summary>

```
{{&contents}}
```
</details>
<br />
{{/scripts}}
{{/jobs}}
21 changes: 21 additions & 0 deletions travis-buddy-success-template.md
Original file line number Diff line number Diff line change
@@ -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}}
<details>
<summary>
<strong>
{{command}}
</strong>
</summary>

```
{{&contents}}
```
</details>
<br />
{{/scripts}}
{{/jobs}}

0 comments on commit d0bc3e9

Please sign in to comment.