#!/bin/bash
# -----------------------------------------------------------------------------
# Generates a catalog for publishing ONOS artifacts to a Maven repository.
# -----------------------------------------------------------------------------

libsOnly=false

# Process any usage options
while getopts lh? o; do
    case "$o" in
        l) libsOnly=true;;
        *) echo "usage: $(basename $0) [-l]" >&2; exit 1;;
    esac
done
let OPC=$OPTIND-1
shift $OPC

set -e -o pipefail

CATALOG=${1:-/tmp/onos.catalog}

rm -f $CATALOG

# Required to avoid having Bazel re-build stuff unnecessarily
export SHLVL=1

function writeCatalog {
    if ! bazel build $* --aspects tools/build/bazel/publish_catalog.bzl%publish_catalog >/tmp/onos.catalog.bazel.out 2>&1; then
        echo Bazel build of catalog failed
        cat /tmp/onos.catalog.bazel.out
        exit 1
    fi

    egrep "^DEBUG: .*/publish_catalog.bzl:" /tmp/onos.catalog.bazel.out | cut -d\  -f3- >> $CATALOG
}

function jars {
    egrep -v '(\#|build/conf)' tools/build/publish-target-list
}

function testJars {
    egrep -v '(\#|build/conf)' tools/build/publish-test-target-list
}

echo "Cataloging jar files..."
writeCatalog $(jars)

echo "Cataloging test jars..."
writeCatalog $(testJars)

echo "Cataloging pom files..."
writeCatalog $(jars | sed 's/$/-pom/')

[ $libsOnly = true ] && exit 0

echo "Cataloging source jars..."
writeCatalog $(jars | sed 's/$/-sources/')
echo "Cataloging javadoc jars..."
writeCatalog $(jars | sed 's/$/-javadoc/')

echo "Cataloging oar files..."
writeCatalog $(bazel query 'kind("_onos_oar rule", //...)')

# Extract the version from the Bazel variables file
VERSION=$(egrep ONOS_VERSION tools/build/bazel/variables.bzl | cut -d\" -f2)

# Inject the onos-dependencies pom, ONOS tar, admin tar and test tar.
echo "Cataloging tar files..."
cat >> $CATALOG <<EOF
bazel-bin/onos.tar.gz	org/onosproject/onos-releases/$VERSION/onos-$VERSION.tar.gz
bazel-bin/onos-admin.tar.gz	org/onosproject/onos-releases/$VERSION/onos-admin-$VERSION.tar.gz
bazel-bin/onos-test.tar.gz	org/onosproject/onos-releases/$VERSION/onos-test-$VERSION.tar.gz
bazel-bin/tools/build/conf/libonos-build-conf.jar	org/onosproject/onos-build-conf/$VERSION/onos-build-conf-$VERSION.jar
EOF
