#!/bin/bash
set -eu

if [[ -z ${PACKAGECLOUD_TOKEN:-} ]] ; then
  echo "PACKAGECLOUD_TOKEN isn't set"
  exit 1
fi

run_in_container() {
  docker-compose run --rm terminal "$@"
}

# Creates packages based on the given gzipped terminal-to-html release file
# Usage: build_package [gzip source] [version] [arch] [package type] [final package path]
build_package() {
  local gzip_source="$1"
  local version="$2"
  local arch="$3"
  local package_type="$4"
  local final_package_path="$5"

  package_tmp_dir="packages-dist"

  echo "--- Unarchiving $gzip_source to $package_tmp_dir/usr/bin"

  [ -d "$package_tmp_dir" ] && rm -r "$package_tmp_dir"; mkdir -p "$package_tmp_dir/usr/bin"

  gunzip "$1" -c > "$package_tmp_dir/usr/bin/terminal-to-html"
  chmod a+x "$package_tmp_dir"/usr/bin/*

  echo "--- Creating package for $gzip_source into $final_package_path"

  run_in_container fpm -s dir \
      -C "$package_tmp_dir" \
      -v "$version" \
      -a "$arch" \
      -t "$package_type" \
      -p "$final_package_path" \
      --license MIT \
      --vendor Buildkite \
      --provides terminal-to-html \
      --description "Converts arbitrary shell output (with ANSI) into beautifully rendered HTML" \
      --url "http://buildkite.github.io/terminal-to-html/" \
      -n terminal-to-html \
      usr/bin
}

version=$(make version)

echo "+++ :package: Downloading dist artifacts"

[ -d dist ] && rm -r dist; mkdir dist

buildkite-agent artifact download "dist/*" dist

echo "+++ :package: Packaging ${version}"

[ -d packages ] && rm -r packages; mkdir packages

for arch in amd64 i386 armel; do
  arch_dist_file="dist/terminal-to-html-$version-linux-$arch.gz"

  echo "+++ :package: Building deb for $arch"

  deb_package_path="packages/terminal-to-html-$version-linux-$arch.deb"
  build_package "$arch_dist_file" "$version" "$arch" "deb" "$deb_package_path"

  for deb_os in ubuntu/trusty; do
    echo "+++ :packagecloud: Pushing deb for $deb_os"
    run_in_container package_cloud push "buildkite/terminal-to-html/$deb_os" "$deb_package_path"
  done

  echo "+++ :package: Building rpm for $arch"

  rpm_package_path="packages/terminal-to-html-$version-linux-$arch.rpm"
  build_package "$arch_dist_file" "$version" "$arch" "rpm" "$rpm_package_path"

  for rpm_os in el/7; do
    echo "+++ :packagecloud: Pushing rpm for $rpm_os"
    run_in_container package_cloud push "buildkite/terminal-to-html/$rpm_os" "$rpm_package_path"
  done
done
