#!/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 {
    bazel build $* --aspects tools/build/bazel/publish_catalog.bzl%publish_catalog 2>&1 \
        | egrep "^DEBUG: .*/publish_catalog.bzl:" | cut -d\  -f3- >> $CATALOG
}

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

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

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

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

[ $libsOnly = true ] && exit 0

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

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
lib/pom.xml	org/onosproject/onos-dependencies/$VERSION/onos-dependencies-$VERSION.pom
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
