#!/usr/bin/env zsh
#
# Create a release zip file ready for pushing to esoui

function log() {echo "release: $*"; }
function die() { log "$@" >&2;  exit 1; }

# check we have the tools we need
[[ -x =git-chglog ]] || die "the (golang) git-chglog tool is missing"
[[ -x =md2bbcode ]] || die "the md2bbcode script is missing"

# check we are at the head of the current branch?
if [[ $(git rev-parse master) != $(git rev-parse HEAD) ]]; then
  die "not currently at the head of branch 'master'"
fi

tag=($(git tag --list --points-at master))
tag=(${(@n)tag})                # sort tags
case ${#tag} in
  0) die "current 'master' is not tagged"; ;;
  1) ;;  # success, this is what we want!
  *) die "current 'master' has more than one tag: ${tag}"; ;;
esac

if [[ ! ( $tag =~ ^[0-9]+$ ) ]]; then
  die "current 'master' is tagged '${tag}', but must be tagged with an integer"
fi

# figure out the addon name, and build directory
root=${PWD?}
addon=${${(s:/:)PWD?}[-1]}
manifest=${addon}.txt
distdir=${HOME}/Documents/esoui-release
zipfile=${addon}-${tag}.zip

# logic for building the version we package for esoui
log "building the release version of ${addon}"
build=${PWD?}/build/${addon}
[[ -d ${build} ]] && rm -rf ${build}
mkdir -p ${build}

release=${PWD?}/release
mkdir -p ${release}

function ship() {
  for file in $@; do
    log "shipping '${file}'"
    cp --parents ${file} ${build}
  done
}

# ship the manifest
# update the version tags in the files
log "writing manifest with AddOnVersion ${tag}"
filter=
perl -p -e 'BEGIN { $v=shift; } s/^## (AddOn)?Version:.*$/## \1Version: $v/' \
     -- ${tag} < ${manifest} > ${build}/${manifest}

# parse the files out of the manifest, and ship
< ${manifest} while read file; do
  file=${file%%#*}
  file=${file//[[:cntrl:]]/}
  if [[ -n $file && -f $file ]]; then
    ship ${file}
  fi
done

# generate the changelog and description files
if [[ -f README.md ]]; then
  ship README.md

  log "generating readme.bbcode"
  md2bbcode README.md > README.bbcode
fi

log "shipped changelog and generating changelog.bbcode"
git chglog | tee ${build}/changelog.md | md2bbcode > CHANGELOG.bbcode

log "creating the ESOUI distribution package ${zipfile}"
(cd ${build}/.. && test -d ${addon} && zip -9TXr ${release}/${zipfile} ${addon})

log "fully build, adding to distdir"
cp ${release}/${zipfile} ${distdir}

log "now upload your addon..."