onos-buck 2.09 KB
#!/bin/bash
# -----------------------------------------------------------------------------
# Runs the custom version of Buck required by ONOS.
# -----------------------------------------------------------------------------

set -e

BUCK_URL="https://github.com/bocon13/buck/releases/download/v2016.09.13.01/buck"
BUCK_SHA="e72cf2e9ef719fa81fd4e0d1b620f20448c10a9d"
REQUIRED_VERSION="buck version 0b60c3d7f8d54b2e6e6607749b748c0f240a6eb3"

[  "-U" = "$1" ] && shift && FORCE_UPDATE=True

mkdir -p $ONOS_ROOT/bin
pushd $ONOS_ROOT/bin > /dev/null

if [ -n "$FORCE_UPDATE" ] || [ ! -f "buck" ] || [ "$REQUIRED_VERSION" != "$(cat .buck_version)" ]; then
    echo "Downloading Buck..."
    rm -f .buck_version buck
    curl -o ./buck -L $BUCK_URL
    if [ -n "$(which shasum)" ]; then
        SHA=$(shasum ./buck | cut -d' ' -f1)
        [ "$SHA" != "$BUCK_SHA" ] &&
           echo "ERROR: Downloaded SHA ($SHA) does not match expected SHA ($BUCK_SHA)" &&
           exit 1
    else
        echo "SHA cannot be verified"
    fi
    chmod 555 ./buck
    echo $(./buck --version 2>/dev/null) > .buck_version
    chmod 444 .buck_version
    rm -rf ./buck-out
    printf "Successfully downloaded Buck to $ONOS_ROOT/bin/buck\n\n"
    ONOS_BUILD_PLUGIN="true"
fi
popd > /dev/null

BUCK=$ONOS_ROOT/bin/buck
PLUGINS=$ONOS_ROOT/bucklets/plugins
ONOS_PLUGIN=$PLUGINS/onosjar.jar

if [ ! -f "$ONOS_PLUGIN" -o -n "$ONOS_BUILD_PLUGIN" ]; then
    echo "Building ONOS Buck plugins..."

    # Build it first
    pluginJar=$(NO_BUCKD=1 $BUCK build //tools/build/buck-plugin:onosjar --show-output 2>/dev/null | grep onosjar.jar | cut -d\  -f2)

    CHK_NEW=$(cksum $ONOS_ROOT/$pluginJar | cut -d' ' -f1-2)
    CHK_OLD=$(cksum $ONOS_PLUGIN 2>/dev/null | cut -d' ' -f1-2)
    if [ "$CHK_NEW" != "$CHK_OLD" ]; then
        # diff plugins... if different, copy and restart buckd
        # Then install it
        mkdir -p $PLUGINS
        cp $ONOS_ROOT/$pluginJar $PLUGINS
        echo "Updated to the latest plugin."
        $BUCK clean 2>/dev/null
    else
        echo "Plugin was already up to date."
    fi
fi

# Finally, run the Buck command...
$BUCK "$@"