-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.docker-envrc
149 lines (142 loc) · 4.79 KB
/
.docker-envrc
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# docker-env-functions
## Build
docker-env-build() {
env_name=$1
# Check if environment name is sent as argument
if [ -z "$env_name" ];
then
# Try to get environment name for repository name
echo "No env specified, trying to get from repository name."
env_name=`git rev-parse --show-toplevel|xargs basename`
fi
# Check if environment name was set
if [ -z "$env_name" ];
then
echo "No env specified, doing nothing."
else
# Create new environment folder under .docker-env/env/
# with given environment name
mkdir -p $HOME/.docker-env/env/$env_name
if test -f "requirements.txt"; then
# Copy requirements file to the new folder
cp requirements.txt $HOME/.docker-env/env/$env_name
else
# A requirements.txt file is required when building an environment
echo "Could not find requirements.txt, doing nothing"
return 1
fi
# Create overrides
if test -f ".docker-env-overrides"; then
xargs -I{} echo "{}() { docker run -ti -v $(pwd):/code docker-env-$env_name {} \$*; }" > $HOME/.docker-env/env/$env_name/overrides <.docker-env-overrides
fi
# Build image with given environment name, the environment name
# is also passed as build argument and is used in the Dockerfile
workdir=$PWD
# Navigate to the .docker-env directory before build
cd $HOME/.docker-env
docker build -t docker-env-$env_name . --build-arg ENV_NAME=$env_name
# Make sure that we return to the working directory
cd $workdir
# Set the environment
export DOCKER_ENV=env_name
# TODO: Source the overrides
fi
}
## Delete
docker-env-delete() {
# Delete the specified environment
if [ -z "$1" ];
then
echo "No env specified, doing nothing."
else
rm -rf $HOME/.docker-env/env/$1
fi
}
## Main
docker-env() {
# Run any command with arguments on available on the environment container
# (not only overriden commands)
# Examples:
# docker-env ls -lah
# docker-env python
if [ -z "$DOCKER_ENV" ];
then
echo "No env set, doing nothing. Activate an env with command: docker-env-set"
else
docker run -ti -v $(pwd):/code docker-env-$DOCKER_ENV $*
fi
}
docker-env-set() {
# Set the docker environment to use
env_name=$1
# Check if environment name is given as argument
if [ -z "$env_name" ];
then
# Check if possible to get environment name from repository name
echo "No env specified, trying to get from repository name."
repo_name=`git rev-parse --show-toplevel|xargs basename`
if [ -n "$repo_name" ];
then
# Set environment
export DOCKER_ENV=$repo_name
# Source the command overrides
source $HOME/.docker-env/env/$repo_name/overrides
echo "Environment set to: $DOCKER_ENV"
else
# Could not set environment from argument or repository name
echo "Could not set environment from repository name, doing nothing."
fi
else
# Set environment
export DOCKER_ENV=$env_name
# Source the command overrides
source $HOME/.docker-env/env/$env_name/overrides
echo "Environment set to: $DOCKER_ENV"
fi
}
docker-env-add() {
requirement=$1
# Only try to add if requirement is provided as argument
if [ -n "$requirement" ];
then
# Check if requirement already is defined
grep -q $requirement requirements.txt
new_requirement="$?"
echo $new_requirement
if [ $new_requirement = "1" ];
then
# Add new requirement to requirements.txt
echo $requirement >> requirements.txt
else
echo "Requirement already defined."
fi
# Add override if second argument is provided
# TODO: use option instead of dumb argument
if [ -n "$2" ];
then
# Check if override is already defined
grep -q $requirement requirements.txt
new_override="$?"
if [ $new_override = 1];
then
# Add override
echo $requirement >> .docker-env-overrides
else
echo "Override already defined."
fi
fi
# Automatically build environment
if [ -n "$DOCKER_ENV" ];
then
docker-env-build $DOCKER_ENV
else
echo "Can't build as no environment is active"
fi
else
echo "No requirement provided, doing nothing."
fi
}
# HELPER FUNCTIONS
# TODO: Write helper function that sources overrides
# source_overrides()
# Source overrides if environment is set and overrides exist