3 # @todo support getting the 2 vars as cli options as well as via env vars?
9 # Valid values: 'default', 5.6, 7.0 .. 7.4, 8.0 .. 8.1
10 export PHP_VERSION=${PHP_VERSION:-default}
11 # Valid values: precise (12), trusty (14), xenial (16), bionic (18), focal (20)
12 export UBUNTU_VERSION=${UBUNTU_VERSION:-bionic}
15 CONTAINER_BUILD_DIR="/home/${CONTAINER_USER}/build"
16 ROOT_DIR="$(dirname -- "$(dirname -- "$(dirname -- "$(readlink -f "$0")")")")"
17 IMAGE_NAME=phpxmlrpc:${UBUNTU_VERSION}-${PHP_VERSION}
18 CONTAINER_NAME=phpxmlrpc_${UBUNTU_VERSION}_${PHP_VERSION}
20 cd "$(dirname -- "$(readlink -f "$0")")"
23 printf "Usage: vm.sh [OPTIONS] ACTION [OPTARGS]
25 Manages the Test Environment Docker Stack
28 build build or rebuild the containers and set up the test env
29 cleanup removes the docker containers and their images
30 enter enter the test container
34 runtests [\$suite] execute the test suite using the test container (or a single test scenario eg. tests/1ParsingBugsTest.php)
35 runcoverage execute the test suite and generate a code coverage report (in build/coverage)
36 start start the containers
43 Environment variables: to be set before the 'build' action
44 PHP_VERSION default value: 'default', ie. the stock php version from the Ubuntu version in use. Other possible values: 5.6, 7.0 .. 8.1
45 UBUNTU_VERSION default value: bionic. Other possible values: xenial, focal
51 docker build --build-arg PHP_VERSION --build-arg UBUNTU_VERSION -t "${IMAGE_NAME}" .
52 if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
53 docker rm "${CONTAINER_NAME}"
56 -p 80:80 -p 443:443 -p 8080:8080 \
57 --name "${CONTAINER_NAME}" \
58 --env CONTAINER_USER_UID=$(id -u) --env CONTAINER_USER_GID=$(id -g) \
59 --env TESTS_ROOT_DIR=${CONTAINER_BUILD_DIR} \
60 --env HTTPSERVER=localhost \
61 --env HTTPURI=/demo/server/server.php \
62 --env HTTPSSERVER=localhost \
63 --env HTTPSURI=/demo/server/server.php \
64 --env PROXYSERVER=localhost:8080 \
65 --env HTTPSVERIFYHOST=0 \
66 --env HTTPSIGNOREPEER=1 \
69 -v "${ROOT_DIR}":"${CONTAINER_BUILD_DIR}" \
74 if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
75 docker start "${CONTAINER_NAME}"
82 if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
83 docker stop "${CONTAINER_NAME}"
95 docker rm "${CONTAINER_NAME}"
96 docker rmi "${IMAGE_NAME}"
100 # @todo allow login as root
101 docker exec -it "${CONTAINER_NAME}" su "${CONTAINER_USER}"
114 # @todo clean up /tmp/phpxmlrpc and .phpunit.result.cache
115 if [ ! -d build ]; then mkdir build; fi
116 docker exec -t "${CONTAINER_NAME}" /home/${CONTAINER_USER}/build/tests/ci/setup/setup_code_coverage.sh enable
117 docker exec -it "${CONTAINER_NAME}" su "${CONTAINER_USER}" -c "./vendor/bin/phpunit --coverage-html build/coverage -v tests"
118 docker exec -t "${CONTAINER_NAME}" /home/${CONTAINER_USER}/build/tests/ci/setup/setup_code_coverage.sh disable
122 docker exec -it "${CONTAINER_NAME}" su "${CONTAINER_USER}" -c "./vendor/bin/phpunit -v tests"
138 docker ps --filter "name=${CONTAINER_NAME}"
141 diff | inspect | kill | logs | pause | port | stats | top | unpause)
142 docker container "${ACTION}" "${CONTAINER_NAME}"
146 printf "\n\e[31mERROR:\e[0m unknown action '${ACTION}'\n\n" >&2