-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdev-env.sh
More file actions
executable file
·80 lines (65 loc) · 1.67 KB
/
Copy pathdev-env.sh
File metadata and controls
executable file
·80 lines (65 loc) · 1.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash
HOSTNAME=dev-env
TAG=latest
DOCKER=docker
WORKDIR=$1
SESSIONID=$(cat /dev/urandom | head -c 256 | md5sum | head -c 8)
FLAGS=""
MOUNTFLAGS=""
if [ -z "$IMAGE" ]; then
IMAGE_NAME=kwketh/dev-env
IMAGE=$IMAGE_NAME:$TAG
fi
if [ -z "$NETWORK" ]; then
NETWORK='bridge'
fi
if [ ! -z "$GITCONFIG" ]; then
FLAGS="$FLAGS -v \"$GITCONFIG:/root/.gitconfig\""
fi
if [ ! -z "$BASHPROFILE" ]; then
FLAGS="$FLAGS -v \"$BASHPROFILE:/root/.bash_profile\""
fi
# Set default flags
readonly='false'
mutable='false'
# Parse flags
while getopts 'rnm' flag; do
case "${flag}" in
r) readonly='true'; WORKDIR=$2 ;;
n) network='none'; WORKDIR=$2 ;;
m) if [ "$readonly" = "true" ]; then
mutable=true
else
echo "error: mutable option can only be used in read-only mode."
exit
fi
;;
esac
done
# Convert work directory to full absolute path
if [ -z "$WORKDIR" ]; then
WORKDIR=$(pwd)
else
WORKDIR=$(realpath $WORKDIR)
fi
DIRNAME=$(basename $WORKDIR)
if [ "$readonly" = "true" ]; then
echo "dev-env: running in read-only mode."
MOUNTFLAGS=":ro"
fi
if [ "$NETWORK" = "none" ]; then
echo "dev-env: running in no network mode."
fi
if [ "$mutable" = "true" ]; then
SESSIONDIR="$HOME/.tmp_$SESSIONID"
echo " (files are mutable but will be discarded)"
rsync -a $WORKDIR/ $SESSIONDIR
WORKDIR="$SESSIONDIR"
MOUNTFLAGS=""
fi
COMMAND="docker run -h $HOSTNAME --rm -it -w \"/workspace/$DIRNAME\" -v \"$WORKDIR:/workspace/$DIRNAME$MOUNTFLAGS\" $FLAGS --network $NETWORK $IMAGE"
eval $COMMAND
if [ "$mutable" = "true" ]; then
echo "discarding temporary files."
rm -rf "$SESSIONDIR"
fi