mirror of
https://github.com/openhab/openhab-addons.git
synced 2025-01-10 23:22:02 +01:00
85 lines
3.7 KiB
Bash
85 lines
3.7 KiB
Bash
|
#!/bin/bash
|
||
|
|
||
|
set -o pipefail # exit build with error when pipes fail
|
||
|
|
||
|
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() {
|
||
|
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 -aE '^\[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}
|
||
|
}
|
||
|
|
||
|
COMMITS=${1:-"master...HEAD"}
|
||
|
|
||
|
# Determine if this is a single changed addon -> Perform build with tests + integration tests and all SAT checks
|
||
|
CHANGED_BUNDLE_DIR=`git diff --dirstat=files,0 ${COMMITS} bundles/ | sed 's/^[ 0-9.]\+% bundles\///g' | grep -o -P "^([^/]*)" | uniq`
|
||
|
# Determine if this is a single changed itest -> Perform build with tests + integration tests and all SAT checks
|
||
|
# for this we have to remove '.tests' from the folder name.
|
||
|
CHANGED_ITEST_DIR=`git diff --dirstat=files,0 ${COMMITS} itests/ | sed 's/^[ 0-9.]\+% itests\///g' | sed 's/\.tests\///g' | uniq`
|
||
|
CDIR=`pwd`
|
||
|
|
||
|
# if a bundle and (optionally the linked itests) where changed build the module and its tests
|
||
|
if [[ ! -z "$CHANGED_BUNDLE_DIR" && -e "bundles/$CHANGED_BUNDLE_DIR" && ( "$CHANGED_BUNDLE_DIR" == "$CHANGED_ITEST_DIR" || -z "$CHANGED_ITEST_DIR" ) ]]; then
|
||
|
CHANGED_DIR="$CHANGED_BUNDLE_DIR"
|
||
|
fi
|
||
|
|
||
|
# if no bundle was changed but only itests
|
||
|
if [[ -z "$CHANGED_BUNDLE_DIR" ]] && [[ -e "bundles/$CHANGED_ITEST_DIR" ]]; then
|
||
|
CHANGED_DIR="$CHANGED_ITEST_DIR"
|
||
|
fi
|
||
|
|
||
|
if [[ ! -z "$CHANGED_DIR" ]] && [[ -e "bundles/$CHANGED_DIR" ]]; then
|
||
|
echo "Single 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
|
||
|
ARTIFACT_ID=$(mvn -f bundles/${CHANGED_DIR}/pom.xml help:evaluate -Dexpression=project.artifactId -q -DforceStdout)
|
||
|
mvn clean install -B -am -pl ":$ARTIFACT_ID" 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 [[ $? -ne 0 ]]; then
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# add the postfix to make sure we actually find the correct itest
|
||
|
if [[ -e "itests/$CHANGED_DIR.tests" ]]; then
|
||
|
echo "Single addon pull request: Building itest $CHANGED_DIR"
|
||
|
cd "itests/$CHANGED_DIR.tests"
|
||
|
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
|
||
|
if [[ $? -ne 0 ]]; then
|
||
|
exit 1
|
||
|
fi
|
||
|
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
|
||
|
if [[ $? -eq 0 ]]; then
|
||
|
print_reactor_summary .build.log
|
||
|
else
|
||
|
tail -n 1000 .build.log
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|