#!/usr/bin/env bash

set -euxo pipefail

version=${1#"refs/tags/"}
os=$2
target=$3
src=`pwd`
dist=$src/dist
bin=imdl

echo "Packaging $bin $version for $target..."

test -f Cargo.lock || cargo generate-lockfile

echo "Building $bin..."

case $os in
  ubuntu-latest)
    sudo apt install help2man musl-tools
    ;;
  macos-latest)
    brew install help2man
    ;;
  windows-latest)
    ;;
esac

case $os in
  ubuntu-latest | macos-latest)
    cargo rustc --bin $bin --target $target --release -- -C lto
    executable=target/$target/release/$bin
    ;;
  windows-latest)
    cargo rustc --bin $bin --target $target --release -- -C lto -C target-feature="+crt-static"
    executable=target/$target/release/$bin.exe
    ;;
esac

echo "Building completions..."
rm -rf completions
mkdir completions
$executable completions --dir completions

echo "Generating changelog..."
cargo run --package gen changelog

echo "Copying release files..."
mkdir dist
cp -r \
  $executable \
  CHANGELOG.md \
  CONTRIBUTING \
  Cargo.lock \
  Cargo.toml \
  LICENSE \
  README.md \
  completions \
  $dist

if [[ $os != windows-latest ]]; then
  echo "Building man pages..."
  rm -rf man
  mkdir man
  cargo run --package gen man
  cp -r man $dist/man
fi

cd $dist
echo "Creating release archive..."
case $os in
  ubuntu-latest | macos-latest)
    archive=$dist/$bin-$version-$target.tar.gz
    tar czf $archive *
    echo "::set-output name=archive::$archive"
    ;;
  windows-latest)
    archive=$dist/$bin-$version-$target.zip
    7z a $archive *
    echo "::set-output name=archive::`pwd -W`/$bin-$version-$target.zip"
    ;;
esac