Last active
August 15, 2018 22:55
-
-
Save bochsdbg/475895a07142772b872037d07677efd0 to your computer and use it in GitHub Desktop.
aicups test Dockerfile
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
ACTION="" | |
DOCKER_TAG="aicups-test" | |
DOCKER_FLAGS="-u9999 --cpuset-cpus=0 --network none --ulimit nproc=50" | |
TMPDIR="/tmp/aicups-test" | |
ZIPPED="" | |
ARGS=() | |
CONTAINER_ID="" | |
function display_help { | |
echo "Usage: $0 <command> [args]" | |
echo "" | |
echo "Commands: b(uild), c(ompile), r(un), s(top)" | |
echo "build [dockerfile_path]" | |
echo " default: dockerfile_path = ." | |
echo "compile <path_to_sources>" | |
echo "run" | |
echo "stop" | |
echo "" | |
echo "Example session (Dockerfile at current directory, sources at 'example/main.cpp'):" | |
echo "./aicups b" | |
echo "./aicups c example/main.cpp" | |
echo "./aicups r" | |
exit 1 | |
} | |
while [ "$#" -gt 0 ]; do | |
case "$1" in | |
-t | --tag) | |
DOCKER_TAG="$2" | |
shift 2 | |
;; | |
-d | --temp-dir) | |
TMPDIR="$2" | |
shift 2 | |
;; | |
-h | --help) | |
display_help | |
;; | |
-z | --zipped) | |
ZIPPED=1 | |
shift | |
;; | |
-*) | |
echo "Unknown option: $1" >&2 | |
exit 1 | |
;; | |
*) | |
ARGS+=("$1") | |
shift | |
;; | |
esac | |
done | |
case "${ARGS[0]}" in | |
b | build) | |
ACTION="build" | |
DOCKERFILE_PATH="${ARGS[1]}" | |
if [ -z "$DOCKERFILE_PATH" ]; then | |
DOCKERFILE_PATH="." | |
fi | |
docker build -t "$DOCKER_TAG" "$DOCKERFILE_PATH" | |
CONTAINER_ID=$(docker run -d -i --rm "$DOCKER_TAG") | |
docker exec -i "$CONTAINER_ID" /bin/bash -c 'mkdir -p /opt/client && chmod 777 -R /opt/client' | |
docker commit "$CONTAINER_ID" "$DOCKER_TAG" | |
docker stop "$CONTAINER_ID" >/dev/null | |
;; | |
c | compile) | |
ACTION="compile" | |
mkdir -p "$TMPDIR" | |
SOURCES_PATH="${ARGS[1]}" | |
if [ -z "$SOURCES_PATH" ]; then | |
display_help | |
fi | |
MOUNT_POINT="" | |
CONTAINER_ID=$(docker run $DOCKER_FLAGS -d -i --rm "$DOCKER_TAG") | |
if [ $? -eq 0 ]; then | |
SOLUTION_CODE_ENTRYPOINT=$(docker exec "$CONTAINER_ID" printenv SOLUTION_CODE_ENTRYPOINT) && \ | |
SOLUTION_CODE_PATH=$(docker exec "$CONTAINER_ID" printenv SOLUTION_CODE_PATH) && \ | |
if [ -f "$SOURCES_PATH" ]; then | |
docker cp "$SOURCES_PATH" "$CONTAINER_ID:$SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT" | |
MOUNT_POINT="$SOLUTION_CODE_PATH/$SOLUTION_CODE_ENTRYPOINT" | |
elif [ -d "$SOURCES_PATH" ]; then | |
docker cp -r "$SOURCES_PATH/." "$CONTAINER_ID:$SOLUTION_CODE_PATH/" | |
MOUNT_POINT="$SOLUTION_CODE_PATH" | |
else | |
echo "Cannot find source path: '$SOURCE_PATH'" | |
false | |
fi && \ | |
docker exec -i "$CONTAINER_ID" /bin/bash -c "MOUNT_POINT='$MOUNT_POINT' eval \$COMPILATION_COMMAND" && \ | |
COMPILED_FILE_PATH=$(docker exec "$CONTAINER_ID" printenv COMPILED_FILE_PATH) && \ | |
COMPILED_FILE_BASENAME=$(basename "$COMPILED_FILE_PATH") && \ | |
docker cp "$CONTAINER_ID:$COMPILED_FILE_PATH" "$TMPDIR/$COMPILED_FILE_BASENAME" && \ | |
RUN_CONTAINER_ID=$(docker run $DOCKER_FLAGS -d -i --rm "$DOCKER_TAG") && \ | |
docker cp "$TMPDIR/$COMPILED_FILE_BASENAME" "$RUN_CONTAINER_ID:/opt/client/$COMPILED_FILE_BASENAME" && \ | |
docker exec "$RUN_CONTAINER_ID" bash -c "echo '/opt/client/$COMPILED_FILE_BASENAME' > /opt/client/__mountpoint__ " | |
docker stop "$CONTAINER_ID" >/dev/null | |
fi | |
;; | |
r | run) | |
ACTION="run" | |
CONTAINER_ID=$(docker ps -f "ancestor=$DOCKER_TAG" -q) | |
if [ -z "$CONTAINER_ID" ]; then | |
echo "No image with tag '$DOCKER_TAG' found" | |
exit 1 | |
fi | |
docker exec -i "$CONTAINER_ID" bash -c "MOUNT_POINT=\$(cat /opt/client/__mountpoint__) eval \$RUN_COMMAND" | |
;; | |
s | stop) | |
ACTION="stop" | |
CONTAINER_ID=$(docker ps -f "ancestor=$DOCKER_TAG" -q) | |
if [ -n "$CONTAINER_ID" ]; then | |
docker stop "$CONTAINER_ID" >/dev/null | |
fi | |
;; | |
*) | |
display_help | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment