onos-build-selective 1.71 KB
#!/bin/bash
# ----------------------------------------------------------------------------
# Selectively builds only those projects that contained modified Java files.
# ----------------------------------------------------------------------------

cd $ONOS_ROOT

projects=$(find $ONOS_ROOT -type f -path '*/src/*' \
    -exec $ONOS_ROOT/tools/dev/bin/onos-build-selective-hook {} \; | \
        grep -v -f $ONOS_ROOT/tools/dev/bin/onos-build-selective.exclude | \
        sort -u | sed "s:$ONOS_ROOT::g" | tr '\n' ',' | \
        sed 's:/,:,:g;s:,/:,:g;s:^/::g;s:,$::g')

if [ -n "$projects" ]; then
    # Ascertain artifact IDs of the projects to be rebuilt
    modulesERE=""
    for pd in ${projects//,/ }; do
        artifactId=$(grep -E "^    <artifactId>.*</artifactId>$" ${pd}/pom.xml | \
                        sed 's/.[^>]*>//;s/<.*//')
        modulesERE="$modulesERE|$artifactId"
    done
    modulesERE=${modulesERE#|*}

    # Search through staged app.xml files for any apps that require one or
    # more of the modified artifacts.
    appProjects=$(find $ONOS_ROOT -type f -path '*/target/oar/app.xml' | \
            xargs grep '<artifact>' | grep -E "/($modulesERE)/" | \
            cut -d: -f1 | sed 's:/target/oar/.*::g' | \
            sort -u | sed "s:$ONOS_ROOT::g" | tr '\n' ',' | \
            sed 's:/,:,:g;s:,/:,:g;s:^/::g;s:,$::g')

    # If we found any, append those app projects to the list of projects to
    # be built.
    [ -n "$appProjects" ] && projects=$projects,$appProjects

    echo Building projects $projects
    cd $ONOS_ROOT && mvn --projects $projects ${@:-clean install}
    status=$?

    [ -n "$appProjects" ] && echo "App staging required for projects $appProjects"
    exit $status
else
    exit 0
fi