Skip to content

Commit

Permalink
GitHub Actions workflow improvements (openhab#11507)
Browse files Browse the repository at this point in the history
* Checkout merged branches for pull requests
* Add support for incremental add-on builds to speed up PR builds
* Echo the mvn command used for builds

Signed-off-by: Wouter Born <github@maindrain.net>
  • Loading branch information
wborn authored and Nemer_Daud committed Jan 28, 2022
1 parent 2753824 commit 927ebca
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 16 deletions.
92 changes: 76 additions & 16 deletions .github/scripts/maven-build
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
#!/bin/bash

BUILD_LOG=build.log
DEFAULT_ARGUMENTS="clean verify -B -T 1.5C -U"

ARGUMENTS="clean verify -B -T 1.5C -U"
if [ $# -ge 1 ]; then
ARGUMENTS=$@
fi

function print_reactor_summary() {
local start_end=$(grep -anE "\[INFO\] \\-{70,}" "$BUILD_LOG" | tail -n4 | cut -f1 -d: | sed -e 1b -e '$!d' | xargs)
Expand All @@ -22,22 +26,78 @@ function mvnp() {
stdbuf -o0 sed -e :a -e "s/^.\{1,${padding}\}|/ &/;ta" # right align progress with padding
}

mvn -v
echo
function build_all() {
echo
echo "Building all projects"
echo
echo "+ mvn $ARGUMENTS"
echo

if [ $# -ge 1 ]; then
mvnp $@
else
mvnp $DEFAULT_ARGUMENTS
fi
mvnp $ARGUMENTS

status=$?
echo
status=$?
echo

if [ $status -eq 0 ]; then
print_reactor_summary
else
tail -n 2000 "$BUILD_LOG"
fi
if [ $status -eq 0 ]; then
print_reactor_summary
else
tail -n 2000 "$BUILD_LOG"
fi

exit $status
}

function changed_files() {
sed 's#,#\n#g' <<< $CHANGED_FILES
}

function addon_unrelated_changed_files() {
local addon="$1"
changed_files | \
grep -Ev "^(bundles/|itests/)$addon([/.].*)?$" | \
grep -Ev "^(CODEOWNERS|bom/openhab-addons/pom.xml|bundles/pom.xml|itests/pom.xml)$"
}

function changed_addons() {
changed_files | grep -E '(bundles/|itests/)org\.openhab\.' | sed -E 's#.+/(org\.openhab\.[a-z0-9]+\.[a-z0-9]+).*#\1#g' | sort -u
}

function addon_projects() {
local addon="$1"

# include add-on projects
local projects=":$(find . -mindepth 2 -maxdepth 2 -type d -regextype egrep -regex "./(bundles|itests)/$addon(\..*)?$" | grep -Ev 'org.openhab.binding.mqtt.homeassistant.tests|org.openhab.binding.mqtt.homie.tests' | sort | sed -E 's#./(bundles|itests)/##g' | xargs | sed 's# #,:#g')"

# include BOMs
projects="$projects,:org.openhab.addons.bom.openhab-core-index,:org.openhab.addons.bom.runtime-index,:org.openhab.addons.bom.test-index"

# exclude features
projects="$projects,-:org.openhab.addons.reactor.features.karaf,-:org.openhab.addons.features.karaf.openhab-addons,-:org.openhab.addons.features.karaf.openhab-addons-external"

echo $projects
}

exit $status
function build_addon() {
local addon="$1"
local mvn_command="mvn $ARGUMENTS -am -amd -pl $(addon_projects $addon)"

echo
echo "Building add-on: $addon"
echo
echo "+ $mvn_command"
echo

$mvn_command 2>&1 | tee "$BUILD_LOG"
}

function build_based_on_changes() {
local changed_addon=$(changed_addons | xargs)
if [ $(echo $changed_addon | wc -w) -eq 1 ] && [ $(addon_unrelated_changed_files $changed_addon | wc -l) -eq 0 ]; then
build_addon $changed_addon
else
build_all
fi
}

mvn -v
build_based_on_changes
14 changes: 14 additions & 0 deletions .github/workflows/ci-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,15 @@ jobs:
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
if: github.head_ref == ''
uses: actions/checkout@v2

- name: Checkout merge
if: github.head_ref != ''
uses: actions/checkout@v2
with:
ref: refs/pull/${{github.event.pull_request.number}}/merge

- name: Set up Cache
uses: actions/cache@v2
with:
Expand All @@ -47,10 +54,17 @@ jobs:
with:
maven-version: ${{ matrix.maven }}

- name: Get Changed Files
id: files
uses: Ana06/get-changed-files@v2.0.0
with:
format: 'csv'

- name: Build
id: build
run: './.github/scripts/maven-build'
env:
CHANGED_FILES: ${{ steps.files.outputs.all }}
MAVEN_OPTS: >-
-Xmx2g
-Dmaven.wagon.http.retryHandler.count=5
Expand Down

0 comments on commit 927ebca

Please sign in to comment.