#!/usr/bin/env bash

# Copyright 2018 The Fuchsia Authors
#
# Use of this source code is governed by a MIT-style
# license that can be found in the LICENSE file or at
# https://opensource.org/licenses/MIT

set -eo pipefail

declare -r LINUX_GUEST_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
declare -r FUCHSIA_DIR=$(git rev-parse --show-toplevel)
declare -r CIPD="${FUCHSIA_DIR}/.jiri_root/bin/cipd"
declare -r SOURCE_DIR="/tmp/linux_guest"
declare -r LINUX_VERSION="4.18"

case "${1}" in
arm64)
  ARCH=${1};;
x64)
  ARCH=${1};;
*)
  echo "usage: ${0} {arm64, x64}"
  exit 1;;
esac

if [[ -z "$(which cargo)" ]]; then
  if [[ -f "$HOME/.cargo/env" ]]; then
    source "$HOME/.cargo/env"
  else
    echo "you must have rust installed on your host - see https://www.rust-lang.org/tools/install"
    exit 2
  fi
fi

if [[ "$(${CIPD} acl-check fuchsia_internal/ -writer)" == *"doesn't"* ]]; then
  ${CIPD} auth-login
fi

# Clean the existing source checkout.
rm -rf "${SOURCE_DIR}"

# Clean the existing images.
declare -r IMAGE_DIR="${FUCHSIA_DIR}/prebuilt/virtualization/packages/linux_guest/images/${ARCH}"
rm -rf "${IMAGE_DIR}/Image"
rm -rf "${IMAGE_DIR}/tests.img"
rm -rf "${IMAGE_DIR}/disk.img"

${LINUX_GUEST_DIR}/mklinux.sh \
    -b "machina-${LINUX_VERSION}" \
    -d "machina_defconfig" \
    -l "${SOURCE_DIR}/linux" \
    -o "${IMAGE_DIR}/Image" \
    ${ARCH}
LINUX_GIT_HASH="$( cd ${SOURCE_DIR}/linux && git rev-parse --verify HEAD )"

${LINUX_GUEST_DIR}/mktests.sh \
    -d "${SOURCE_DIR}/linux-tests" \
    -o "${IMAGE_DIR}/tests.img" \
    -u \
    ${ARCH}
TESTS_GIT_HASH="$( cd ${SOURCE_DIR}/linux-tests && git rev-parse --verify HEAD )"

${LINUX_GUEST_DIR}/mksysroot.sh \
    -d "${SOURCE_DIR}/toybox-${ARCH}" \
    -s "${SOURCE_DIR}/dash" \
    -o "${IMAGE_DIR}/disk.img" \
    -u \
    ${ARCH}
TOYBOX_GIT_HASH="$( cd ${SOURCE_DIR}/toybox-${ARCH} && git rev-parse --verify HEAD )"
DASH_GIT_HASH="$( cd ${SOURCE_DIR}/dash && git rev-parse --verify HEAD )"

declare -r CIPD_PATH="fuchsia_internal/linux/linux_guest-${LINUX_VERSION}-${ARCH}"

${CIPD} create \
    -in "${IMAGE_DIR}" \
    -name "${CIPD_PATH}" \
    -install-mode copy \
    -tag "kernel_git_revision:${LINUX_GIT_HASH}" \
    -tag "tests_git_revision:${TESTS_GIT_HASH}" \
    -tag "toybox_git_revision:${TOYBOX_GIT_HASH}" \
    -tag "dash_git_revision:${DASH_GIT_HASH}"

INSTANCE_ID=$(${CIPD} describe \
    "${CIPD_PATH}" \
    -version "kernel_git_revision:${LINUX_GIT_HASH}" \
    -version "tests_git_revision:${TESTS_GIT_HASH}" \
    -version "toybox_git_revision:${TOYBOX_GIT_HASH}" \
    -version "dash_git_revision:${DASH_GIT_HASH}" \
    | grep -oP "Instance ID: *\K\w+(?=$)" )

echo "Kernel git revision: ${LINUX GIT HASH}"
echo "Tests git revision: ${TESTS GIT HASH}"
echo "Toybox git revision: ${TOYBOX GIT HASH}"
echo "Dash git revision: ${DASH GIT HASH}"
echo "Instance ID: ${INSTANCE_ID}"
