-
Notifications
You must be signed in to change notification settings - Fork 0
/
prime
executable file
·129 lines (117 loc) · 3.8 KB
/
prime
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
#!/usr/bin/env sh
# Copyright 2021 Shay Gordon
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
####
# See the help text below for a sense of what this script can do. There are
# plenty of ways it can break, but when it works it's very handy.
##
# go to script home directory
self=$(basename $0)
home=$(dirname $0)
cd ${home}
# build and run everything if no subcommands given
if [ $# -eq 0 ]; then
make
exit $?
fi
for cmd in $@
do
shift
# help subcommand
case ${cmd} in
help)
echo
echo "Script to simplify building and running Primes project algorithms."
echo
echo "Basic command examples:"
echo " % prime # [build and] run all impls locally"
echo " % prime java # [build and] run java impls only"
echo
echo "Docker command examples:"
echo " % prime build # build all docker images"
echo " % prime up # start all docker containers"
echo " % prime ubuntu # [build and] run all impls in ubuntu container"
echo " % prime fedora bash # open bash shell in fedora container"
echo
echo "Docker commands can be chained together, for example, the following command"
echo "stops all docker containers, rebuilds docker images, restarts containers and"
echo "opens a bash shell in the alpine container:"
echo
echo " % prime down build up alpine bash"
echo
continue
esac
# make subcommands
case ${cmd} in
make) make ; continue ;;
clean) make clean ; continue ;;
all) make all ; continue ;;
c|go|js)
cd ${home}/src/main/${cmd}; make $@ ; continue ;;
cpp|python)
make install
cd ${home}/src/main/${cmd}; make $@ ; continue ;;
java)
mvn -q compile 2> /dev/null
cd ${home}/src/main/${cmd}; make $@ ; continue ;;
esac
# skip docker commands if we're already running in a container
if [ -f /.dockerenv ]; then
echo "${cmd}: error: already running in a docker container"
continue
fi
# docker subcommands
case ${cmd} in
up) docker compose up -d ;;
down) docker compose down ;;
ps) docker ps -a ;;
top) docker compose top ;;
prune) docker system prune -af ;;
build) docker compose build ;;
bounce)
docker compose down &&
docker compose build &&
docker compose up -d
;;
nuke)
docker compose down &&
docker system prune -af &&
make clean &&
docker compose build &&
docker compose up -d
;;
alpine|alpinec|alpinego|fedora|ubuntu)
if [ ! -z $@ ]; then
arg=$@
# if shell not installed, use default shell for distro
case ${cmd} in
alpine|alpinec|alpinego)
if [ ${arg} == "bash" ]; then arg=ash; fi ;;
fedora) if [ ${arg} == "ash" ]; then arg=bash; fi ;;
ubuntu) if [ ${arg} == "ash" ]; then arg=bash; fi ;;
esac
case ${arg} in
clean|all) docker compose exec ${cmd} ./${self} ${arg} ;;
*) docker compose exec ${cmd} ${arg} ;;
esac
else
docker compose exec ${cmd} make
fi
exit $?
;;
*)
echo unknown command: \"${cmd}\"
;;
esac
done