#!/bin/bash
# -----------------------------------------------------------------------------
# Drives the ONOS release process.
# -----------------------------------------------------------------------------

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

set -e

export NEW_VERSION=${1:-$ONOS_VERSION}
DRY_RUN=${2:-""}
dryRun=0
if [ "${DRY_RUN}" == "--dry-run" ]; then
    dryRun=1
fi

[ -z "$NEW_VERSION" ] && echo "New ONOS version not specified" && exit 1

export NEW_VERSION_SHORT=${NEW_VERSION%-SNAPSHOT}
[ "$NEW_VERSION" != "$NEW_VERSION_SHORT" ] && echo "Version is a SNAPSHOT" && exit 1;

cd $ONOS_ROOT

# TODO: Create a new branch for this activity?

# Change the version
onos-change-version $NEW_VERSION
export ONOS_VERSION=$NEW_VERSION

# Validate integrity of the versioning
onos-validate-change-version

# Build ONOS & deploy to staging repo using the release profile.
onos-buck build onos

if [ $dryRun -eq 0 ]; then
    time onos-buck-publish
else
    time onos-buck-publish-local
fi

# Build ONOS docs
onos-buck build //docs:internal //docs:external

# Package test tar.gz
onos-buck build //:onos-test

# Build ONOS archetypes & deploy to staging repo using the release profile.
# Note that release of the staging repository is a separate manual step.
export MVN_CLI_OPTS=-Pstaging
pushd tools/package/archetypes/
mvn -Pstaging clean install && onos-archetypes-test && mvn -Pstaging -Prelease clean deploy
popd
unset MVN_CLI_OPTS

# Commit newly versioned artifacts and issue a tag.
git commit -a -m"Tagging $NEW_VERSION"
git tag -sm"Tagging $NEW_VERSION" $NEW_VERSION #signed tag

# TODO: push?
