Skip to content

Instantly share code, notes, and snippets.

@bochsdbg
Created August 15, 2018 18:38
Show Gist options
  • Save bochsdbg/94ffbce70d4b113d47809cd8b4d0d7b9 to your computer and use it in GitHub Desktop.
Save bochsdbg/94ffbce70d4b113d47809cd8b4d0d7b9 to your computer and use it in GitHub Desktop.
aicups
#!/bin/bash
if [ -z "$(find . -maxdepth 1 -name '*.csproj' -printf 1 -quit)" ]; then
cp ../default/solution.csproj .
fi && \
HOME=/tmp DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 dotnet build -c Release --no-incremental -v:q -nologo -clp:"NoSummary;ErrorsOnly" 2>&1 && \
cp bin/Release/netcoreapp2.1/solution.dll "$COMPILED_FILE_PATH"
#!/bin/bash
dotnet "$MOUNT_POINT"
#!/bin/bash
ACTION=""
DOCKER_TAG="aicups-test"
DOCKER_FLAGS="-u9999 --cpuset-cpus=0 --ulimit nproc=50"
TMPDIR="/tmp/aicups-test"
CLIENT_ID="test-client"
ZIPPED=""
ARGS=()
CONTAINER_ID=""
function display_help {
echo "Usage: $0 <command> [args]"
echo "Commands: b(uild), c(ompile), r(un)"
echo "build [dockerfile_path]"
echo " default: dockerfile_path = ."
echo "compile <client-id> <path_to_sources>"
echo "run"
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 "$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"
SOURCES_PATH="${ARGS[1]}"
if [ -z "$SOURCES_PATH" ]; then
display_help
fi
CLIENT_ID="${ARGS[2]:-$CLIENT_ID}"
MOUNT_POINT=""
CONTAINER_ID=$(docker run $DOCKER_FLAGS -d -i "$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) && \
COMPILED_FILE_PATH=$(docker exec "$CONTAINER_ID" printenv COMPILED_FILE_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" && \
RUN_CONTAINER_ID=$(docker run $DOCKER_FLAGS -d -i "$DOCKER_TAG") && \
docker cp "$CONTAINER_ID:$COMPILED_FILE_PATH" "$RUN_CONTAINER_ID:/opt/client/$(basename '$COMPILED_FILE_PATH')"
docker stop "$CONTAINER_ID" >/dev/null
fi
;;
r | run)
ACTION="run"
DOCKER_CID=$(docker run $DOCKER_FLAGS "$DOCKER_TAG" -d -it /bin/bash)
docker stop "$DOCKER_CID"
;;
s | stop)
ACTION="stop"
;;
*)
display_help
;;
esac
FROM ubuntu:16.04
MAINTAINER Sergey Samokhvalov <onlyforthesky@gmail.com>
ENV DEBIAN_FRONTEND=noninteractive
ENV LC_ALL=C.UTF-8
ENV LANG=C.UTF-8
ENV SOLUTION_CODE_ENTRYPOINT=solution.cs
ENV SOLUTION_CODE_PATH=/opt/client/solution/
RUN apt-get update && \
apt-get install -y apt-transport-https apt-utils wget
RUN wget -q https://packages.microsoft.com/config/ubuntu/16.04/packages-microsoft-prod.deb && \
dpkg -i packages-microsoft-prod.deb && \
apt-get update && \
apt-get install -y dotnet-sdk-2.1 && \
mkdir -p /opt/client/solution && \
rm -rf packages-microsoft-prod.deb /var/lib/apt/lists/* /tmp/*
ENV COMPILED_FILE_PATH=/opt/client/out.dll
ENV COMPILATION_COMMAND='cd /opt/client/solution/ && if [ -f __build__.sh ]; then . __build__.sh; else . ../default/__build__.sh; fi'
ENV RUN_COMMAND='cd /opt/client/solution/ && if [ -f __run__.sh ]; then . __run__.sh; else . ../default/__run__.sh; fi'
COPY Newtonsoft.Json.dll /opt/client/libs/Newtonsoft.Json.dll
COPY solution.csproj /opt/client/default/solution.csproj
COPY __build__.sh /opt/client/default/__build__.sh
COPY __run__.sh /opt/client/default/__run__.sh
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json">
<HintPath>/opt/client/libs/Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment