118 lines
2.6 KiB
Bash
Executable File
118 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Bring in the variables from SOLUTION file, supporting
|
|
# nested substitution
|
|
. SOLUTION
|
|
|
|
VARS=($(sed -nE "s,(^[^#][^=]*).*$,\1,pg" SOLUTION))
|
|
for var in ${VARS[@]}; do
|
|
export ${var}
|
|
done
|
|
|
|
RELEASE_INFO=${RELEASE_INFO:-N/A}
|
|
[[ "${RELEASE_INFO}" == "N/A" ]] && {
|
|
TAG=${TAG:-test-build-${OS_DISTRO}-${PACKAGE_STREAM}-$(date +%Y%m%d)}
|
|
} || {
|
|
TAG=${TAG:-test-${OS_DISTRO}-${PACKAGE_STREAM}-${RELEASE_INFO}}
|
|
}
|
|
|
|
function fail {
|
|
>&2 echo "$*"
|
|
exit -1
|
|
}
|
|
|
|
VIDEO=$(getent group video | sed -E 's,^video:[^:]*:([^:]*):.*$,\1,')
|
|
RENDER=$(getent group render | sed -E 's,^render:[^:]*:([^:]*):.*$,\1,')
|
|
|
|
function usage {
|
|
cat << EOF
|
|
usage: scripts/test-image.sh [OPTIONS]
|
|
Options:
|
|
|
|
-l Use the local image (vs. from ${REGISTRY})
|
|
-r REPO Switch image to use REPO
|
|
-s STREAM Switch image to use STREAM
|
|
|
|
EOF
|
|
}
|
|
|
|
LOCAL=0
|
|
REPO=
|
|
while getopts lr:s: opt; do
|
|
case "${opt}" in
|
|
l)
|
|
LOCAL=1
|
|
;;
|
|
r)
|
|
REPO=${OPTARG}
|
|
;;
|
|
s)
|
|
STREAM=${OPTARG}
|
|
;;
|
|
[?])
|
|
>&2 echo -e "\nInvalid parameter: ${opt}\n"
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
shift $(( OPTIND-1 ))
|
|
|
|
|
|
(( ! LOCAL )) && {
|
|
IMAGE=${REGISTRY_URL}/${CONTAINER}:${TAG}
|
|
docker pull ${IMAGE} || fail "Unable to pull ${IMAGE}"
|
|
} || {
|
|
IMAGE=${CONTAINER}:${TAG}
|
|
}
|
|
|
|
# Take entry-point from command line arguments, or set to 'test'
|
|
# if nothing provided
|
|
ENTRY="${*}"
|
|
if [[ "${REPO}" != "" ]]; then
|
|
ENTRY="-r ${REPO} ${ENTRY}"
|
|
fi
|
|
if [[ "${STREAM}" != "" ]]; then
|
|
ENTRY="-s ${STREAM} ${ENTRY}"
|
|
fi
|
|
[[ "${ENTRY}" == "" ]] && {
|
|
DOCKER_ARGS=""
|
|
ENTRY="test"
|
|
} || {
|
|
DOCKER_ARGS=" -it --rm \
|
|
"
|
|
}
|
|
|
|
[[ "${VIDEO}" != "" ]] || fail "No video group found."
|
|
|
|
ADD_GROUPS="--group-add ${VIDEO}"
|
|
[[ "${RENDER}" != "" ]] && ADD_GROUPS+=" --group-add ${RENDER}"
|
|
|
|
[[ -e data/ ]] || mkdir data || fail "Unable to make data volume directory"
|
|
chown :${VIDEO} data || {
|
|
>&2 echo "Unable to chown data volume to video:${VIDEO}"
|
|
fail "Make sure you are in the 'video' group (usermod -a -G video \$(whoami))"
|
|
}
|
|
chmod g+rwX data || fail "Unable to chmod data volume to g+rwX"
|
|
|
|
CMD="docker run \
|
|
${ADD_GROUPS} ${DOCKER_ARGS} \
|
|
--rm \
|
|
--device=/dev/dri \
|
|
-v $(pwd)/data:/data \
|
|
${IMAGE}"
|
|
|
|
cat << EOF
|
|
-------------------------------------------------------------------------------
|
|
Running test with:
|
|
video group GID: ${VIDEO}
|
|
$( [[ "${RENDER}" != "" ]] && echo -e " render group GID: ${RENDER}\n" )
|
|
Running container via:
|
|
$( echo " ${CMD} ${ENTRY}" | sed -e "s, , \\\\\n ,g")
|
|
-------------------------------------------------------------------------------
|
|
|
|
EOF
|
|
|
|
${CMD} info || fail "Unable to execute 'test' on ${IMAGE}."
|
|
${CMD} ${ENTRY} || fail "Unable to execute 'test' on ${IMAGE}."
|