source-sdk-2013/src/sdk_container
2025-02-18 18:51:37 +00:00

44 lines
1.4 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
function run_in_sniper() {
script_file=$(basename -- "$script")
check_env=$(sha256sum -- "$script" | cut -d " " -f 1)
if [[ ! -f /run/.containerenv ]]; then
# Check if podman exists
if ! command -v podman &> /dev/null; then
echo "Error: podman is not installed. Exiting..."
exit 1
fi
# Let's say we run as /home/misyl/my_mod/src/myscript
# We want to mount /home/misyl/my_mod, and then launch
# src/myscript inside of that.
#
# The below achieves that.
mod_src_dir=$(pwd)
mod_src_dir_name=$(basename -- "$mod_src_dir")
mod_base_dir=$(dirname -- "$mod_src_dir")
image="registry.gitlab.steamos.cloud/steamrt/sniper/sdk:latest"
echo "Running script inside $image"
exec podman run \
--env "$check_env=$script_file" \
--env "CCACHE_DIR=${CCACHE_DIR:-$HOME/.ccache}" \
--userns=keep-id \
--rm -it \
--mount type=bind,\"source="${CCACHE_DIR:-$HOME/.ccache}"\",\"target="${CCACHE_DIR:-$HOME/.ccache}"\" \
--mount type=bind,\"source="$mod_base_dir"\",target=/my_mod/ \
"$image" \
/my_mod/"$mod_src_dir_name"/"$script_file" \
"$@"
fi
if [[ $(printenv -- "$check_env") != "$script_file" ]]; then
echo "Can't run in a nested container setup. Sorry! :("
exit 1
fi
}