#!/usr/bin/env bash

# Set up environment
source ~/bin/philomena-env

read oldrev newrev ref
echo "Updating $oldrev -> $newrev ($ref)"

# Clear variable set to '.' so git commands don't complain
unset GIT_DIR

cd ~/philomena

die() {
    echo "$*" 1>&2
    exit 1
}

if git diff --name-only $oldrev $newrev | grep "^mix.exs"; then
  echo "Fetching deps"
  mix deps.get || die "mix failed to update"
fi

# Run migrations
if git diff --name-only $oldrev $newrev | grep "^priv/repo/migrations"; then
  echo "Running database migrations"
  mix ecto.migrate || die "ecto.migrate failed"
fi

# Compile assets
if git diff --name-only $oldrev $newrev | grep "^assets/"; then
  echo "Compiling assets"
  npm install --prefix ./assets || die "assets install failed"
  npm run deploy --prefix ./assets
  mix phx.digest || die "assets compile failed"
fi

# TODO: fix this when I can figure out how to avoid recompiling
# the entire project when the version changes
#
# # Generate release name to always be the current timestamp so that
# # it will be considered an upgrade
# export PHILOMENA_VERSION="0.1.$(date +%s)"

echo "Building release"
mix distillery.release --quiet || die "failed to generate release"

_build/prod/rel/philomena/bin/philomena reboot || die "failed to upgrade app; log in to the server and restart the app manually"