#!/usr/bin/env bash

set -euxo pipefail

version=${1#"refs/tags/"}
os=$2
target=$3
src=`pwd`
dist=$src/target/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..."
cargo run --package gen -- --bin $executable completion-scripts

echo "Generating changelog..."
cargo run --package gen -- --bin $executable changelog

echo "Generating readme..."
cargo run --package gen -- --bin $executable readme

echo "Copying static files..."
mkdir $dist
cp -r \
  $executable \
  CONTRIBUTING \
  Cargo.lock \
  Cargo.toml \
  LICENSE \
  $dist

echo "Copying generated files..."
cp -r \
  target/gen/README.md \
  target/gen/CHANGELOG.md \
  target/gen/completions \
  $dist

if [[ $os != windows-latest ]]; then
  echo "Building man pages..."
  cargo run --package gen -- --bin $executable man
  cp -r target/gen/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