Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Travis: Build new binding pull requests with tests #5389

Merged
merged 4 commits into from
Jun 28, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we also have a special build for people changing only files in a single module, now it only focuses on either new contributions or it does the complete build.

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}}