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
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}
16 CONTAINER_BUILD_DIR="/home/${CONTAINER_USER}/build"
17 ROOT_DIR="$(dirname -- "$(dirname -- "$(dirname -- "$(readlink -f "$0")")")")"
18 IMAGE_NAME=phpxmlrpc:${UBUNTU_VERSION}-${PHP_VERSION}
19 CONTAINER_NAME=phpxmlrpc_${UBUNTU_VERSION}_${PHP_VERSION}
21 cd "$(dirname -- "$(readlink -f "$0")")"
24 printf "Usage: vm.sh [OPTIONS] ACTION [OPTARGS]
26 Manages the Test Environment Docker Stack
29 build build or rebuild the containers and set up the test env
30 cleanup removes the docker containers and their images
31 enter enter the test container
35 runtests [\$suite] execute the test suite using the test container (or a single test scenario eg. tests/1ParsingBugsTest.php)
36 runcoverage execute the test suite and generate a code coverage report (in build/coverage)
37 start start the containers
44 Environment variables: to be set before the 'build' action
45 PHP_VERSION default value: 'default', ie. the stock php version from the Ubuntu version in use. Other possible values: 7.0 .. 8.0
46 UBUNTU_VERSION default value: xenial. Other possible values: bionic, focal
52 docker build --build-arg PHP_VERSION --build-arg UBUNTU_VERSION -t "${IMAGE_NAME}" .
53 if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
54 docker rm "${CONTAINER_NAME}"
57 -p 80:80 -p 443:443 -p 8080:8080 \
58 --name "${CONTAINER_NAME}" \
59 --env CONTAINER_USER_UID=$(id -u) --env CONTAINER_USER_GID=$(id -g) \
60 --env TESTS_ROOT_DIR=${CONTAINER_BUILD_DIR} \
61 --env HTTPSERVER=localhost \
62 --env HTTPURI=/demo/server/server.php \
63 --env HTTPSSERVER=localhost \
64 --env HTTPSURI=/demo/server/server.php \
65 --env PROXYSERVER=localhost:8080 \
66 --env HTTPSVERIFYHOST=0 \
67 --env HTTPSIGNOREPEER=1 \
70 -v "${ROOT_DIR}":"${CONTAINER_BUILD_DIR}" \
75 if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
76 docker start "${CONTAINER_NAME}"
83 if docker inspect "${CONTAINER_NAME}" >/dev/null 2>/dev/null; then
84 docker stop "${CONTAINER_NAME}"
96 docker rm "${CONTAINER_NAME}"
97 docker rmi "${IMAGE_NAME}"
101 # @todo allow login as root
102 docker exec -it "${CONTAINER_NAME}" su "${CONTAINER_USER}"
115 # @todo clean up /tmp/phpxmlrpc and .phpunit.result.cache
116 if [ ! -d build ]; then mkdir build; fi
117 docker exec -t "${CONTAINER_NAME}" /home/${CONTAINER_USER}/build/tests/ci/setup/setup_code_coverage.sh enable
118 docker exec -it "${CONTAINER_NAME}" su "${CONTAINER_USER}" -c "./vendor/bin/phpunit --coverage-html build/coverage -v tests"
119 docker exec -t "${CONTAINER_NAME}" /home/${CONTAINER_USER}/build/tests/ci/setup/setup_code_coverage.sh disable
123 docker exec -it "${CONTAINER_NAME}" su "${CONTAINER_USER}" -c "./vendor/bin/phpunit -v tests"
139 docker ps --filter "name=${CONTAINER_NAME}"
142 diff | inspect | kill | logs | pause | port | stats | top | unpause)
143 docker container "${ACTION}" "${CONTAINER_NAME}"
147 printf "\n\e[31mERROR:\e[0m unknown action '${ACTION}'\n\n" >&2