#!/bin/bash
# CG. 19/09/2017

#
# Useful functions:
#

#
# Check how the echo command behaves
#
set_echoes()
{
  if [ "`echo -n a`" = a ]; then
    # BSD echo
    NNN=-n
    CCC=
  else
    # USG echo
    NNN=
    CCC='\c'
  fi
  readonly NNN CCC
}


#
# A safe way to perform echo without sending a new-line
#
necho()
{
  echo $NNN "$*" $CCC > /dev/tty
}

#
#  Simply get the user to hit the return key
#
ask_return()
{
  necho 'Hit <return> to continue ...'
  read x
}


#
#  Get a yes/no answer from the user; $1 is the prompt, $2 the default
#
ask_yn()
{
  prompt="$1"
  def="${2:-y}"           # yes is the default if not supplied
  while true; do
    necho "$prompt [$def]: "
    read answer
    answer="${answer:-$def}"
    case "$answer" in
      [yY])
        answer=y
        break
        ;;
      [nN])
        answer=n
        break
        ;;
      *)
        error Please enter "'y'" or "'n'".
        ;;
    esac
  done
  [ $answer = y ]
}


# MAIN
# Main, starting here

export PATH=/opt/rh/rh-ruby23/root/usr/local/bin:$PATH
export LD_LIBRARY_PATH=/opt/rh/rh-ruby23/root/usr/lib64:$LD_LIBRARY_PATH

set_echoes 

start_dir=/ftp/pub/elt
cmd=`basename $0`

cd $start_dir 

if [ `whoami` != "eltmgr" ]; then
  echo "Error: You need to be eltmgr to run $cmd"
  echo "Usage: $cmd [-help] DEV|NRI|VCM"
  exit 1
fi

if [ ! -h puppet-elt-latest ]; then 
  echo "Warning: puppet-elt-latest is not a soft link"
else
  latest=`ls -l puppet-elt-latest | gawk -F'> ' '{print $2}'`
  latest_release=`echo $latest | sed 's/puppet-elt-//'`
  patch=`echo $latest_release | gawk -F\. '{print $3}'`
  major_minor=`echo $latest_release | gawk -F\. '{printf "%s.%s\n",$1,$2}'`
  next_patch=`expr $patch + 1`
  next_release="puppet-elt-${major_minor}.${next_patch}"
fi

if [ ! -n "$1" -a -z "$latest" ]; then
  echo "Error: at least one argument is needed, or puppet-elt-latest must be pointing to an existing directory"
  echo "Usage: $cmd [puppet-elt-M.n.p]"
  exit 1
fi

# Ir argument given, use it as next-release
#if [ -n "$1" -a -d "$1" ]; then
if [ -n "$1" ]; then
  next_release=$1
  release=`echo $next_release | sed 's/puppet-elt-//'`
  patch=`echo $release | gawk -F\. '{print $3}'`
  major_minor=`echo $release | gawk -F\. '{printf "%s.%s\n",$1,$2}'`
  if [ -d "$1" ]; then
    level=`ls $1/puppet-elt-$release-* | tail -1 | sed 's/.*-\(.*\)beta\.noarch\.rpm/\1/'`
    echo level=$level
  else
    level="0"
  fi
  next_level=`expr $level + 1`
  echo next_level=$next_level
  #
  (cd /home/eltmgr/puppet/CentOS-8/root/elt/puppet; git pull)
  # Exit here if there are no changes since last RPM
  if [ -d "$1" ]; then
    newfiles=`find ./CentOS-8/root/elt/puppet -type f -newer $1/puppet-elt-${release}-${level}beta.noarch.rpm`
    #echo newfiles=$newfiles
    if [ -z "$newfiles" ]; then
      echo "No changes since last RPM"
      exit 0
    fi
  fi
fi

# The major_minor expresses the OS, thus the repository
#case $major_minor in
#3.0|3.1)
  distr=CentOS-8
#  ;;
#*)
#  echo "Error: major_minor release $major_minor not yet associated to a distribution"
#  echo "If this release is bound to a new distribution, edit this script and add a new entry to the switch case"
#  echo "Exit with no action"
#  exit 1
#  ;;
#esac
 
echo "Preparing $next_release-${next_level}beta with $distr distribution"
if ask_yn "Do you want to continue? "; then
  echo "Proceeding..."
else
  echo "Exiting..."
  exit 1
fi
 
# To prepare $next_release.
# First create a tar.gz file then the RPM:
#  cd /ftp/pub/elt/$distr/root/elt
#  svn update 
  cd /ftp/pub/elt/$distr
#  rm -f ${next_release}.tar.gz
#  rm -rf ${next_release}
# tar czf ${next_release}.tar.gz --exclude=./root/elt/.svn ./root/elt
#  tar czf ${next_release}.tar.gz --exclude=./root/elt/.git ./root/elt

  if [ -z "$level" ]; then level=1; fi
  # Use alien -g --to-rpm ${next_release}.tar.gz to generate the SPEC 
  #echo /usr/local/bin/alien --to-rpm --bump=$level ${next_release}.tar.gz 
  #/usr/local/bin/alien --to-rpm --bump=$level ${next_release}.tar.gz 
  # Use fpm -t rpm -n puppet-elt -v 3.1.7 --iteration 9beta -a noarch --rpm-dist el8  -s dir  ./root/elt
  fpm -t rpm -n puppet-elt -v ${release} --iteration ${next_level}beta -a noarch -x "*/.git" -s dir  ./root/elt

#  rm ${next_release}.tar.gz
  cd /ftp/pub/elt
  if [ ! -d ${next_release} ]; then
    mkdir ${next_release}
    cd ${next_release}
    rm -rf puppet-elt-*
    for file in ../$distr/puppet-RPMS/* ; do  ln $file ; done
  else
    cd ${next_release}
    rm -rf puppet-elt-*
  fi
  mv /ftp/pub/elt/$distr/${next_release}-${next_level}beta.noarch.rpm .
  if ask_yn "Do you want ${next_release} to be the latest release? "; then
    cd /ftp/pub/elt
    echo "Updating soft-link between puppet-elt-latest and ${next_release}"
    rm puppet-elt-latest
    ln -s ${next_release} puppet-elt-latest
    cp /ftp/pub/elt/${next_release}/${next_release}-${next_level}beta.noarch.rpm /ELTREPO/$distr/misc/
  fi
  cp /ftp/pub/elt/${next_release}/${next_release}-${next_level}beta.noarch.rpm /ELTREPO/Beta-CentOS-8/misc/
  createrepo --update /ELTREPO/$distr
  createrepo --update /ELTREPO/Beta-CentOS-8

exit 0
