#!/bin/bash

# Copyright 2020 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Populates a directory with everything necessary to build a remote test driver
# container.

# BuildAndCopyTastItems builds and copies all Tast related executables
# and data to targets.
BuildAndCopyTastItems() {
    # Emerge tast related executables.
    sudo emerge tast-cmd
    sudo emerge tast-remote-tests-cros
    local tast_dir="$1/tast"
    local tast_bin_dir="${tast_dir}/bin"
    # Copy tast related items.
    mkdir -p "${tast_bin_dir}"
    cp /usr/bin/tast "${tast_bin_dir}"
    cp /usr/bin/tast_rtd "${tast_bin_dir}"
    cp /usr/bin/remote_test_runner "${tast_bin_dir}"
    cp -pdr /usr/libexec/tast/bundles "${tast_dir}"
    cp -pdr /usr/share/tast/data "${tast_dir}"
    cp -pdr /etc/tast/vars "${tast_dir}"
    cp -pdr /home/"${USER}"/trunk/chromite/ssh_keys "${tast_dir}"
}

readonly script_dir="$(dirname "$(realpath -e "${BASH_SOURCE[0]}")")"
. "${script_dir}/common.sh" || exit 1

# Script must run inside the chroot
assert_inside_chroot "$@"

# Do not run as root
assert_not_root_user

DEFINE_string output_dir "" "Dir in which to put Dockerfile and dependencies"

# Parse command line flags
FLAGS "$@" || exit 1
eval set -- "${FLAGS_ARGV}"

# Only now can we die on error.  shflags functions leak non-zero error codes,
# so will die prematurely if 'switch_to_strict_mode' is specified before now.
switch_to_strict_mode

output_dir="${FLAGS_output_dir}"
if [[ -z "${FLAGS_output_dir}" ]]; then
  info "No --output_dir provided. Using temp dir instead"
  output_dir=$(mktemp -d)
fi

if [[ ! -d "${output_dir}" ]]; then
  error "output_dir ${output_dir} must exist as a directory"
  exit 1
fi

if [[ -n "$(ls -A "${output_dir}")" ]]; then
  error "output_dir ${output_dir} must be empty"
  exit 1
fi

# Write out a simple Dockerfile.
cat > "${output_dir}/Dockerfile" <<- EOF
FROM ubuntu:bionic
WORKDIR /usr/src/rtd/
COPY rtd/ .
EOF

# Create the remote test driver folder and copy test content into it.
rtd_dir="${output_dir}/rtd"
mkdir "${rtd_dir}"
# Build and copy the tnull (fake) RTD.
sudo emerge tnull
cp /usr/bin/tnull "${rtd_dir}/"

# tast and tauto entries will eventually go here.
BuildAndCopyTastItems "${rtd_dir}"

command_completed
info "Done. Wrote output to ${output_dir}"
