#!/bin/bash
# check the command line
if [ $# -lt 2 ] ; then
  echo "Missing release options and release message";
  echo "usage: $(basename $0) [-Mmp] \"release message\""
  exit 1
fi

# change working directory
pushd ~/github.com/eyereasoner/lingua

# the following is adapted from https://gist.github.com/codezninja/c227d9c65b09d2be2d99abbfcfa8774a
while getopts "Mmp" Option
do
  case $Option in
    M ) major=true;;
    m ) minor=true;;
    p ) patch=true;;
    * ) exit 1;;
  esac
done

# if a flag is missing, show usage message
if [ $OPTIND -eq 1 ]; then
  echo "No release options were passed: -M for major, -m for minor and -p for patch";
  echo "usage: $(basename $0) [-Mmp] \"release message\""
  exit 1
fi

shift $(($OPTIND - 1))

version=$(cat VERSION)

# build array from version string
a=( ${version//./ } )

# increment version numbers as requested
if [ ! -z $major ]; then
  ((a[0]++))
  a[1]=0
  a[2]=0
fi

if [ ! -z $minor ]; then
  ((a[1]++))
  a[2]=0
fi

if [ ! -z $patch ]; then
  ((a[2]++))
fi

echo "${a[0]}.${a[1]}.${a[2]}" > VERSION

export RELEASE="v$(cat VERSION)"

# update version in lingua.pl
cat lingua.pl | sed -e "s/'lingua.*'/'lingua $RELEASE'/" > lingua.pl.tmp
mv lingua.pl.tmp lingua.pl

# create image
swipl -q -f lingua.pl -g "qsave_program('lingua.pvm', [goal(main)]), halt."

# link lingua command
sudo ln -sf $(realpath ./lingua) /usr/local/bin

# run the examples and test cases
./test

# git commands
git commit -a -m "$1"
git push
git tag -a -m "$1" $RELEASE
git push origin $RELEASE

popd
