aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/tools/dev/bin/onos-build-selective
blob: 351c53ac319551d716f327e5749e9c65d9a75d0b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#!/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
        if [ -f ${pd}/pom.xml ]; then
            artifactId=$(grep -E "^    <artifactId>.*</artifactId>$" ${pd}/pom.xml | \
                            sed 's/.[^>]*>//;s/<.*//')
            modulesERE="$modulesERE|$artifactId"
        fi
    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