#!/usr/bin/env bash

# Copyright (c) 2019-2022 Woven Planet Holdings. All rights reserved.
#
# This script was inspired by the same name script
# in other pupular porjects (e.g. tensorflow, tvm)
set -euo pipefail

# Add a user/group, whose UID/GID are same as the host.
apt-get update
apt-get install -y git sudo
getent group "${DGP_GID}" || addgroup --gid "${DGP_GID}" "${DGP_GROUP}"
getent passwd "${DGP_UID}" || adduser --gid "${DGP_GID}" --uid "${DGP_UID}" \
	--gecos "${DGP_USER} (generated by with_the_same_user script)" \
	--disabled-password --home "${DGP_HOME}" --quiet "${DGP_USER}"
usermod -a -G sudo "${DGP_USER}"
echo "${DGP_USER} ALL=(ALL) NOPASSWD:ALL" >/etc/sudoers.d/90-nopasswd-sudo

# This line is needed because "${DGP_HOME}" is created before `adduser`
# due to `docker run -v ~/.ssh:$(HOME)/.ssh` in Makefile.
chown "${DGP_UID}":"${DGP_GID}" "${DGP_HOME}"

# Pack environment variables to preserve into an array.
if [[ -n ${CUDA_VISIBLE_DEVICES+x} ]]; then
	preserved_envs=("CUDA_VISIBLE_DEVICES=${CUDA_VISIBLE_DEVICES}")
else
	preserved_envs=()
fi
preserved_envs+=("HOME=${DGP_HOME}")
preserved_envs+=("PATH=${PATH}")
preserved_envs+=("LD_LIBRARY_PATH=${LD_LIBRARY_PATH}")
preserved_envs+=("PYTHONPATH=${PYTHONPATH}")

# Execute a given command as the user, added in the above.
COMMAND=("$@")
sudo -u "#${DGP_UID}" "${preserved_envs[@]}" "${COMMAND[@]}"
