9075c2ff43a868ec21ff40f24914b4f3b7a42f58
[plcapi.git] / tests / ci / vm.sh
1 #!/bin/sh
2
3 # @todo support getting the 2 vars as cli args as well as via env vars?
4
5 set -e
6
7 ACTION="${1}"
8
9 # Valid values: 'default', 5.6, 7.0 .. 7.4, 8.0
10 export PHP_VERSION=${PHP_VERSION:-default}
11 # Valid values: precise (12), trusty (14), xenial (16), bionic (18), focal (20)
12 # We default to the same version we use on Travis
13 export UBUNTU_VERSION=${UBUNTU_VERSION:-xenial}
14
15 IMAGE_NAME=phpxmlrpc:${UBUNTU_VERSION}-${PHP_VERSION}
16 CONTAINER_NAME=phpxmlrpc_${UBUNTU_VERSION}_${PHP_VERSION}
17 ROOT_DIR="$(dirname -- "$(dirname -- "$(dirname -- "$(readlink -f "$0")")")")"
18
19 cd "$(dirname -- "$(readlink -f "$0")")"
20
21 help() {
22 printf "Usage: vm.sh [OPTIONS] ACTION [OPTARGS]
23
24 Manages the Test Environment Docker Stack
25
26 Commands:
27     build             build or rebuild the containers and set up the test env
28     enter             enter the test container
29     #exec \$cmd         execute a single shell command in the test container
30     #runtests [\$suite] execute the test suite using the test container (or a single test scenario eg. Tests/1ParsingBugsTest.php)
31     start             start the containers
32     #status
33     stop              stop containers
34
35 Options:
36     -h                print help
37 "
38 }
39
40 build() {
41     stop
42     docker build --build-arg PHP_VERSION --build-arg UBUNTU_VERSION -t "${IMAGE_NAME}" .
43     if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
44         docker rm "${CONTAINER_NAME}"
45     fi
46     docker run -d \
47         -p 80:80 -p 443:443 -p 8080:8080 \
48         --name "${CONTAINER_NAME}" \
49         --env CONTAINER_USER_UID=$(id -u) --env CONTAINER_USER_GID=$(id -g) --env TESTS_ROOT_DIR=/home/test \
50         --env HTTPSERVER=localhost \
51         --env HTTPURI=/demo/server/server.php \
52         --env HTTPSSERVER=localhost \
53         --env HTTPSURI=/demo/server/server.php \
54         --env PROXYSERVER=localhost:8080 \
55         --env HTTPSVERIFYHOST=0 \
56         --env HTTPSIGNOREPEER=1 \
57         --env SSLVERSION=0 \
58         --env DEBUG=0 \
59         -v "${ROOT_DIR}":/home/test "${IMAGE_NAME}"
60 }
61
62 start() {
63     if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
64         docker start "${CONTAINER_NAME}"
65     else
66         build
67     fi
68 }
69
70 stop() {
71     if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
72         docker stop "${CONTAINER_NAME}"
73     fi
74 }
75
76 case "${ACTION}" in
77
78     build)
79         build
80         stop
81         ;;
82
83     cleanup)
84         docker rm "${CONTAINER_NAME}"
85         docker rmi "${IMAGE_NAME}"
86         ;;
87
88     enter | shell | cli)
89         docker exec -it "${CONTAINER_NAME}" su test
90         ;;
91
92     #exec)
93     #    ;;
94
95     restart)
96         stop
97         start
98         ;;
99
100     #runtests)
101     #    ;;
102
103     start)
104         start
105         ;;
106
107     #status)
108     #    :
109     #    ;;
110
111     stop)
112         stop
113         ;;
114
115     ps)
116         docker ps --filter "name=${CONTAINER_NAME}"
117         ;;
118
119     diff | inspect | kill | logs | pause | port | stats | top | unpause)
120         docker container "${ACTION}" "${CONTAINER_NAME}"
121         ;;
122
123     *)
124         printf "\n\e[31mERROR:\e[0m unknown action '${ACTION}'\n\n" >&2
125         help
126         exit 1
127         ;;
128 esac