#!/bin/sh
# ====================================================================
# Copyright (c) 2021 Obeo
# This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0
#
# Contributors:
#    Obeo - initial API and implementation
# ====================================================================

# Exit on error
set -e

# The SSH account to use
export SSH_ACCOUNT="genie.emfcompare@projects-storage.eclipse.org"

NIGHTLIES_FOLDER="/home/data/httpd/download.eclipse.org/modeling/emf/compare/updates/nightly"
MILESTONES_FOLDER="/home/data/httpd/download.eclipse.org/modeling/emf/compare/updates/milestones"
DROPS_FOLDER="/home/data/httpd/download.eclipse.org/modeling/emf/compare/downloads/drops"
ZIP_PREFIX="emf-compare-update-"
GROUP="modeling.emfcompare"

if [[ ! ${QUALIFIER} =~ ^[0-9]\.[0-9]\.[0-9]+\.[0-9]{12}$ ]]
then
  echo "$QUALIFIER doesn't match the expect format x.x.x.yyyyMMddhhmm"
  exit 1
fi

if ssh ${SSH_ACCOUNT} "[ ! -d ${NIGHTLIES_FOLDER}/${QUALIFIER} ]"
then
  echo "couldn't find build with qualifier $QUALIFIER in the promoted nightlies"
  exit 1
fi

echo "promoting build $QUALIFIER as milestone $ALIAS"

IFS=. read MAJOR MINOR MICRO TIMESTAMP <<<"${QUALIFIER}"

VERSION_SHORT=${MAJOR}.${MINOR}
VERSION=${MAJOR}.${MINOR}.${MICRO}

UPDATE_ROOT_COMPOSITE=false
if ssh ${SSH_ACCOUNT} "[ ! -d ${MILESTONES_FOLDER}/${VERSION_SHORT} ]"
then
  UPDATE_ROOT_COMPOSITE=true
fi

ssh ${SSH_ACCOUNT} << EOSSH
  if ${UPDATE_ROOT_COMPOSITE}
  then
    mkdir -p ${MILESTONES_FOLDER}/${VERSION_SHORT}
    chgrp ${GROUP} ${MILESTONES_FOLDER}/${VERSION_SHORT}
  fi
  
  ## copy the nightly to its "milestones" location
  cp -r ${NIGHTLIES_FOLDER}/${QUALIFIER} ${MILESTONES_FOLDER}/${VERSION_SHORT}/S${TIMESTAMP}
  chgrp -R ${GROUP} ${MILESTONES_FOLDER}/${VERSION_SHORT}/S${TIMESTAMP}

  ## Create a compressed archive of this repository and place it in the drops folder
  if [ ! -d ${DROPS_FOLDER}/${VERSION} ]
  then
    mkdir -p ${DROPS_FOLDER}/${VERSION}
    chgrp ${GROUP} ${DROPS_FOLDER}/${VERSION}
  fi

  mkdir -p ${DROPS_FOLDER}/${VERSION}/S${TIMESTAMP}
  pushd ${MILESTONES_FOLDER}/${VERSION_SHORT}/S${TIMESTAMP}
    zip -2 -r ${DROPS_FOLDER}/${VERSION}/S${TIMESTAMP}/${ZIP_PREFIX}${ALIAS}.zip *
  popd
  md5sum ${DROPS_FOLDER}/${VERSION}/S${TIMESTAMP}/${ZIP_PREFIX}${ALIAS}.zip > ${DROPS_FOLDER}/${VERSION}/S${TIMESTAMP}/${ZIP_PREFIX}${ALIAS}.zip.md5
  chgrp -R ${GROUP} ${DROPS_FOLDER}/${VERSION}/S${TIMESTAMP}

  ## Create the p2.index file for this milestone
cat <<EOF >${MILESTONES_FOLDER}/${VERSION_SHORT}/S${TIMESTAMP}/p2.index
version = 1
metadata.repository.factory.order = compositeContent.xml,\!
artifact.repository.factory.order = compositeArtifacts.xml,\!
EOF
  chgrp -R ${GROUP} ${MILESTONES_FOLDER}/${VERSION_SHORT}/S${TIMESTAMP}/p2.index
EOSSH

## Update the composite update site with this new child

#cd ${MILESTONES_FOLDER}/${VERSION_SHORT}
#/shared/common/apache-ant-latest/bin/ant -f /shared/modeling/tools/promotion/manage-composite.xml add -Dchild.repository=S${TIMESTAMP}

#if [ "$UPDATE_ROOT_COMPOSITE" = true ]
#then
#  cd ${MILESTONES_FOLDER}
#  /shared/common/apache-ant-latest/bin/ant -f /shared/modeling/tools/promotion/manage-composite.xml add -Dchild.repository=${VERSION_SHORT}
#fi