#!/usr/bin/env bash

# WARNING: FIREBASE_TOKEN should NOT be printed.
set +x -eu -o pipefail


readonly deployEnv=$1

case $deployEnv in
  staging)
    readonly buildEnv=stage
    readonly projectId=aio-staging
    readonly deployedUrl=https://$projectId.firebaseapp.com/
    readonly firebaseToken=$FIREBASE_TOKEN
    ;;
  production)
    readonly buildEnv=prod
    readonly projectId=angular-io
    readonly deployedUrl=https://angular.io/
    readonly firebaseToken=$FIREBASE_TOKEN
    ;;
  *)
    echo "Unknown deployment environment ('$deployEnv'). Expected 'staging' or 'production'."
    exit 1
    ;;
esac

# Do not deploy if the current commit is not the latest on its branch.
readonly LATEST_COMMIT=$(git ls-remote origin $TRAVIS_BRANCH | cut -c1-40)
if [ $TRAVIS_COMMIT != $LATEST_COMMIT ]; then
  echo "Skipping deploy because $TRAVIS_COMMIT is not the latest commit ($LATEST_COMMIT)."
  exit 0
fi

# Deploy
(
  cd "`dirname $0`/.."

  # Build the app
  yarn build -- --env=$buildEnv

  # Check payload size
  yarn payload-size

  # Deploy to Firebase
  firebase use "$projectId" --token "$firebaseToken"
  firebase deploy --message "Commit: $TRAVIS_COMMIT" --non-interactive --token "$firebaseToken"

  # Run PWA-score tests
  yarn test-pwa-score -- "$deployedUrl" "$MIN_PWA_SCORE"
)