Skip to content

Instantly share code, notes, and snippets.

@bochsdbg
Last active August 15, 2018 22:55
Show Gist options
  • Save bochsdbg/475895a07142772b872037d07677efd0 to your computer and use it in GitHub Desktop.
Save bochsdbg/475895a07142772b872037d07677efd0 to your computer and use it in GitHub Desktop.
aicups test Dockerfile
#!/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