-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathalpha
executable file
·197 lines (168 loc) · 4.83 KB
/
alpha
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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#!/bin/bash
DOCKER=`command -v docker`
CONFIG_DIR=.alphadrive
CONFIG=$HOME/$CONFIG_DIR
SUDO_REQUIRED=false
#trap 'kill $(jobs -p)' EXIT
safe_type() {
type $1 > /dev/null 2>&1
}
check_curl() {
if ! safe_type curl ; then
echo "The 'curl' utility is a required dependency. Please install with your package manager."
exit 100
fi
}
check_curl
BROWSER_WARNING=
get_browser() {
URL=$1
if [ -z "$BROWSER" ]; then
if safe_type xdg-open ; then
BROWSER=xdg-open
elif safe_type gnome-open ; then
BROWSER=gnome-open
elif safe_type open ; then
BROWSER=open
fi
fi
if [ ! -z "$BROWSER" ]; then
echo $BROWSER
fi
}
BASE_URL=http://localhost:9999
browser_warning_message() {
MESSAGE=${1:-continue}
echo "[WARNING] Unable to determine browser.
Please visit urls in your browser when prompted below for $MESSAGE."
}
start_url_open() {
BROWSER_LAUNCH=$1
URI=$2
while sleep 1; do
if curl -s $BASE_URL > /dev/null ; then
$BROWSER_LAUNCH $BASE_URL/$URI $MESSAGE
break;
fi
done
}
docker_check () {
if [ -z "$DOCKER" ]; then
echo "Docker doesn't seem to be installed!
AlphaDrive requires a local docker installation. Please
visit https://help.alphadrive.ai for more info."
exit 100
fi
if docker ps 2>&1 | grep -q "permission denied" ; then
echo "[WARNING] Your docker appears to require root access. We will use sudo to execute your agent."
echo "See: https://docs.docker.com/install/linux/linux-postinstall/ "
echo
SUDO_REQUIRED=true
fi
}
config_check() {
if [ ! -d "$CONFIG" ]; then
echo "[INFO] Initializing alphadrive config in $CONFIG"
mkdir $CONFIG
fi
}
config_check
wait_on_cid () {
CID_FILE=$1
INTERVAL=$2
ACTION=$3
while sleep $INTERVAL ; do
if [ -f "$CID_FILE" ]; then
$ACTION $(cat $CID_FILE)
break
fi
done
}
xhost_for_container () {
CID=$1
NET=$(docker inspect --format "{{ .NetworkSettings.IPAddress }}" $CID 2>/dev/null)
xhost +localhost 2>&1 > /dev/null
xhost +$NET 2>&1 > /dev/null
}
docker_check
SUDO_PREFIX=
if [ "$SUDO_REQUIRED" = true ];then
SUDO_PREFIX=sudo
fi
DOCKER_NAME="alphadrive_docker.$$"
CID_FILE=/tmp/cid-$DOCKER_NAME
trap "docker kill $DOCKER_NAME 2>/dev/null" TERM INT
if [ "$1" == "--" ]; then
shift
ENTRYPOINT="--entrypoint $1"
shift
fi
if [ -d "$ALPHADRIVE_CLI_SRC" ]; then
DEV_MOUNTS="-v $ALPHADRIVE_CLI_SRC:/home/carla/cli"
if [ -z "$ENTRYPOINT" ]; then
ENTRYPOINT="--entrypoint /home/carla/cli/bin/run"
fi
fi
ENV_SETTINGS=" -e LC_ALL=C "
NET=""
if [ ! -z "$DISPLAY" ]; then
if [ "$(uname)" = "Linux" ]; then
NET="--net=host"
ENV_SETTINGS="$ENV_SETTINGS -e DISPLAY=$DISPLAY "
elif [ "$(uname)" = "Darwin" ]; then
ENV_SETTINGS="$ENV_SETTINGS -e DISPLAY=host.docker.internal:${DISPLAY##:}"
wait_on_cid $CID_FILE 3 xhost_for_container &
fi
fi
if [ ! -z "$ALPHA_API_HOST" ]; then
ENV_SETTINGS="$ENV_SETTINGS -e ALPHA_API_HOST=$ALPHA_API_HOST "
fi
if [ ! -z "$ALPHADRIVE_UI" ]; then
ENV_SETTINGS="$ENV_SETTINGS -e ALPHADRIVE_UI=$ALPHADRIVE_UI "
fi
BROWSER_LAUNCH=$(get_browser)
IMAGE=${IMAGE:-alphadrive/cli:0.7.1}
if [ "$1" = "login" ]; then
if [ "$(uname)" = "Darwin" ]; then
NET=" -p 9999:9999 "
fi
if [ -z "$BROWSER_LAUNCH" ]; then
browser_warning_message authentication
else
start_url_open $BROWSER_LAUNCH login &
fi
elif [ "$1" = "init" ]; then
T_NAME=$2
if [ "$T_NAME" = "demo" ]; then
TEMPLATE=alphadrive-samples
elif [ "$T_NAME" = "scenarios" ]; then
TEMPLATE=scenario_runner
fi
if [ ! -z "$TEMPLATE" ]; then
if [ -d "$T_NAME" ]; then
echo "A folder named $T_NAME already exists in this directory. Exiting..." >&2
exit
fi
mkdir $T_NAME &&
curl -s --location -o - https://github.com/Alpha-Drive/$TEMPLATE/archive/master.tar.gz |
(cd $T_NAME && tar -xzf - --strip 1) &&
echo "A sample project has been created in the folder named $T_NAME."
exit
else
echo "alpha init: missing project template argument" >&2
echo "Usage: alpha init <TEMPLATE>"
echo
echo "TEMPLATE options are: demo, scenarios " >&2
exit
fi
fi
if [ "$(uname)" = "Linux" ]; then
ENV_SETTINGS="--init -u $(id -u):$(id -g) -e HOME=/home/carla $ENV_SETTINGS"
fi
DOCKER_CMD="docker run $NET --cidfile $CID_FILE --name $DOCKER_NAME --rm $ENV_SETTINGS "
MOUNTS=""
$SUDO_PREFIX $DOCKER_CMD -it \
$DEV_MOUNTS \
$X_MOUNTS \
-v "$PWD":/home/carla/user-agent -v $CONFIG:/home/carla/$CONFIG_DIR \
$ENTRYPOINT $IMAGE "$@"