#!/bin/bash -e
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright (c) 2018 Oracle and/or its affiliates. All rights reserved.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common Development
# and Distribution License("CDDL") (collectively, the "License").  You
# may not use this file except in compliance with the License.  You can
# obtain a copy of the License at
# https://oss.oracle.com/licenses/CDDL+GPL-1.1
# or LICENSE.txt.  See the License for the specific
# language governing permissions and limitations under the License.
#
# When distributing the software, include this License Header Notice in each
# file and include the License file at LICENSE.txt.
#
# GPL Classpath Exception:
# Oracle designates this particular file as subject to the "Classpath"
# exception as provided by Oracle in the GPL Version 2 section of the License
# file that accompanied this code.
#
# Modifications:
# If applicable, add the following below the License Header, with the fields
# enclosed by brackets [] replaced by your own identifying information:
# "Portions Copyright [year] [name of copyright owner]"
#
# Contributor(s):
# If you wish your version of this file to be governed by only the CDDL or
# only the GPL Version 2, indicate your decision by adding "[Contributor]
# elects to include this software in this distribution under the [CDDL or GPL
# Version 2] license."  If you don't indicate a single choice of license, a
# recipient has the option to distribute your version of this file under
# either the CDDL, the GPL Version 2 or to extend the choice of license to
# its licensees as provided above.  However, if you add GPL Version 2 code
# and therefore, elected the GPL Version 2 license, then the option applies
# only if the new code is made subject to such option by the copyright
# holder.
#

merge_junits(){
  local test_id="build-unit-tests"
  rm -rf ${WORKSPACE}/test-results && \
  mkdir -p ${WORKSPACE}/test-results/${test_id}/results/junitreports
  local jud="${WORKSPACE}/test-results/${test_id}/results/junitreports/test_results_junit.xml"
  echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > ${jud}
  echo "<testsuites>" >> ${jud}
  for i in `find . -type d -name "surefire-reports"`
  do
    ls -d -1 ${i}/*.xml | xargs cat | sed 's/<?xml version=\"1.0\" encoding=\"UTF-8\" *?>//g' >> ${jud}
  done
  echo "</testsuites>" >> ${jud}
  sed -i 's/\([a-zA-Z-]\w*\)\./\1-/g' ${jud}
  sed -i "s/\bclassname=\"/classname=\"${test_id}./g" ${jud}
}

bundles(){
  archive_bundles
}

archive_bundles(){
  mkdir -p ${WORKSPACE}/bundles
  cp appserver/distributions/glassfish/target/*.zip ${WORKSPACE}/bundles
  cp appserver/distributions/web/target/*.zip ${WORKSPACE}/bundles
  cp nucleus/distributions/nucleus/target/*.zip ${WORKSPACE}/bundles
}

dev_build(){
  mvn -U clean install -Pstaging,fastest -T2C ${MVN_EXTRA}
}

build_re_dev(){
  dev_build
  archive_bundles
  merge_junits
}

if [ -z "${WORKSPACE}" ] ; then
  export WORKSPACE=`dirname ${0}`
fi

"$@"

if [ ! -z "${JENKINS_HOME}" ] ; then
  tar -c --exclude='*.zip' --exclude='*/main/tests/tck/*' --exclude='*/main/distributions/*' --exclude='*/main/extras/*' --exclude='*/main/admingui/*' --newer-mtime '1 day ago' -C ${HOME}/.m2/repository org/glassfish/main | gzip --fast > ${WORKSPACE}/bundles/maven-repo.tar.gz
fi
