From 5896f97475b6e0052e8ee3ba87da68a4027d126f Mon Sep 17 00:00:00 2001 From: Eric GELOEN Date: Wed, 8 Feb 2017 23:16:36 +0100 Subject: [PATCH] [Docker] Add HHVM container (#198) --- .env.dist | 7 ++++++ .gitattributes | 1 + .travis.yml | 28 ++++++------------------ Resources/doc/docker.md | 6 +++++ docker-compose.yml | 13 ++++++----- docker/config/xdebug.ini | 3 --- docker/hhvm/Dockerfile | 28 ++++++++++++++++++++++++ docker/hhvm/config/xdebug.ini | 4 ++++ docker/hhvm/entrypoint.sh | 26 ++++++++++++++++++++++ docker/{ => php}/Dockerfile | 12 ++++++---- docker/php/config/xdebug.ini | 2 ++ docker/{ => php}/entrypoint.sh | 6 ++--- phpunit.xml.dist | 5 ----- travis/install.sh | 40 ++++++++++++++++++++++++++++++++++ travis/script.sh | 15 +++++++++++++ travis/success.sh | 10 +++++++++ 16 files changed, 164 insertions(+), 42 deletions(-) delete mode 100644 docker/config/xdebug.ini create mode 100644 docker/hhvm/Dockerfile create mode 100644 docker/hhvm/config/xdebug.ini create mode 100755 docker/hhvm/entrypoint.sh rename docker/{ => php}/Dockerfile (83%) create mode 100644 docker/php/config/xdebug.ini rename docker/{ => php}/entrypoint.sh (64%) create mode 100755 travis/install.sh create mode 100755 travis/script.sh create mode 100755 travis/success.sh diff --git a/.env.dist b/.env.dist index c0df85e9..a7b70851 100644 --- a/.env.dist +++ b/.env.dist @@ -1,7 +1,14 @@ +# IDE IDE_SERVER_NAME=ivory-google-map-bundle + +# Permissions GROUP_ID=1000 USER_ID=1000 + +# Symfony deprecations SYMFONY_DEPRECATIONS_HELPER=strict + +# XDebug XDEBUG=0 XDEBUG_HOST=192.168.0.1 XDEBUG_PORT=9000 diff --git a/.gitattributes b/.gitattributes index 710261dd..4ddbb0c6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,5 @@ /docker export-ignore +/travis export-ignore /Tests export-ignore .env.dist export-ignore .gitattributes export-ignore diff --git a/.travis.yml b/.travis.yml index fc278e18..45c76143 100644 --- a/.travis.yml +++ b/.travis.yml @@ -12,33 +12,19 @@ branches: env: global: - COMPOSER_PREFER_LOWEST=false + - DOCKER_BUILD=false - SYMFONY_DEPRECATIONS_HELPER=weak - SYMFONY_VERSION=2.3.* -before_script: - - export DISPLAY=:99 - - /sbin/start-stop-daemon -Sbmq -p /tmp/xvfb_99.pid -x /usr/bin/Xvfb -- ${DISPLAY} -ac -screen 0, 1600x1200x24 - - curl http://selenium-release.storage.googleapis.com/2.48/selenium-server-standalone-2.48.0.jar > selenium.jar - - curl http://chromedriver.storage.googleapis.com/2.12/chromedriver_linux64.zip > chromedriver.zip - - unzip chromedriver.zip - - java -jar selenium.jar -Dwebdriver.chrome.driver=./chromedriver > /dev/null 2>&1 & - - composer self-update - - composer require --no-update symfony/framework-bundle:${SYMFONY_VERSION} - - composer require --no-update --dev symfony/form:${SYMFONY_VERSION} - - composer require --no-update --dev symfony/templating:${SYMFONY_VERSION} - - composer require --no-update --dev symfony/yaml:${SYMFONY_VERSION} - - composer remove --no-update --dev friendsofphp/php-cs-fixer - - if [[ "$SYMFONY_VERSION" = *dev* ]]; then sed -i "s/\"MIT\"/\"MIT\",\"minimum-stability\":\"dev\"/g" composer.json; fi - - composer update --prefer-source `if [[ $COMPOSER_PREFER_LOWEST = true ]]; then echo "--prefer-lowest --prefer-stable"; fi` - -script: vendor/bin/phpunit --configuration phpunit.travis.xml --coverage-clover build/clover.xml - -after_success: - - wget https://scrutinizer-ci.com/ocular.phar - - php ocular.phar code-coverage:upload --format=php-clover build/clover.xml +install: travis/install.sh +script: travis/script.sh +after_success: travis/success.sh matrix: include: + - php: 5.6 + services: [docker] + env: DOCKER_BUILD=true - php: 5.6 env: SYMFONY_VERSION=2.3.* COMPOSER_PREFER_LOWEST=true - php: 5.6 diff --git a/Resources/doc/docker.md b/Resources/doc/docker.md index aaa788ed..5259693e 100644 --- a/Resources/doc/docker.md +++ b/Resources/doc/docker.md @@ -38,6 +38,12 @@ To run the test suite, you can use: $ docker-compose run --rm php vendor/bin/phpunit ``` +If you want to run the test suite against [HHVM](http://hhvm.com/), you can use: + +``` bash +$ docker-compose run --rm hhvm vendor/bin/phpunit +``` + Some tests requires a [Selenium Server](http://www.seleniumhq.org/), you can start it with: ``` bash diff --git a/docker-compose.yml b/docker-compose.yml index 6f24a582..5c8d19e8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,19 +1,20 @@ version: '2' services: - php: - build: docker + php: &php + build: docker/php + env_file: + - .env environment: - GROUP_ID: ${GROUP_ID} - USER_ID: ${USER_ID} - SYMFONY_DEPRECATIONS_HELPER: ${SYMFONY_DEPRECATIONS_HELPER} - XDEBUG: ${XDEBUG} XDEBUG_CONFIG: remote_host=${XDEBUG_HOST} remote_port=${XDEBUG_PORT} idekey=${XDEBUG_IDEKEY} PHP_IDE_CONFIG: serverName=${IDE_SERVER_NAME} volumes: - ~/.composer:/var/www/.composer - .:/var/www/html - tmp:/tmp + hhvm: + <<: *php + build: docker/hhvm selenium: image: selenium/standalone-chrome:latest volumes: diff --git a/docker/config/xdebug.ini b/docker/config/xdebug.ini deleted file mode 100644 index 507430a1..00000000 --- a/docker/config/xdebug.ini +++ /dev/null @@ -1,3 +0,0 @@ -zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so" -xdebug.cli_color=1 -xdebug.remote_enable=1 diff --git a/docker/hhvm/Dockerfile b/docker/hhvm/Dockerfile new file mode 100644 index 00000000..5b7f7d04 --- /dev/null +++ b/docker/hhvm/Dockerfile @@ -0,0 +1,28 @@ +FROM hhvm/hhvm:latest + +# APT packages +RUN apt-get update && apt-get install -y \ + curl \ + && rm -rf /var/lib/apt/lists/* + +# HHVM configuration +RUN echo "hhvm.libxml.ext_entity_whitelist=file,http" >> /etc/hhvm/php.ini + +# XDebug configuration +COPY config/xdebug.ini /var/www/xdebug.ini + +# Composer +RUN curl -sS https://getcomposer.org/installer | php -- --filename=composer --install-dir=/usr/local/bin + +# Bash +RUN chsh -s /bin/bash www-data + +# Permissions +RUN chown www-data:www-data /var/www + +# Workdir +WORKDIR /var/www/html + +# Entrypoint +COPY entrypoint.sh /usr/local/bin/entrypoint.sh +ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] diff --git a/docker/hhvm/config/xdebug.ini b/docker/hhvm/config/xdebug.ini new file mode 100644 index 00000000..6f76587a --- /dev/null +++ b/docker/hhvm/config/xdebug.ini @@ -0,0 +1,4 @@ +xdebug.cli_color=1 +xdebug.enable=1 +xdebug.remote_autostart=1 +xdebug.remote_enable=1 diff --git a/docker/hhvm/entrypoint.sh b/docker/hhvm/entrypoint.sh new file mode 100755 index 00000000..00a0cc50 --- /dev/null +++ b/docker/hhvm/entrypoint.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +set -e + +GROUP_ID=${GROUP_ID-1000} +USER_ID=${USER_ID-1000} +XDEBUG=${XDEBUG-0} + +# Enable XDebug +if [ "$XDEBUG" = 1 ]; then + cat /var/www/xdebug.ini >> /etc/hhvm/php.ini +fi + +# Remove XDebug temporary configuration +rm -f /var/www/xdebug.ini + +# Permissions +groupmod -g ${GROUP_ID} www-data +usermod -u ${USER_ID} www-data + +# Start bash or forward command +if [ "$1" = "bash" ]; then + su www-data +else + su www-data -c "$*" +fi diff --git a/docker/Dockerfile b/docker/php/Dockerfile similarity index 83% rename from docker/Dockerfile rename to docker/php/Dockerfile index 6a07e64a..39cc8c6a 100644 --- a/docker/Dockerfile +++ b/docker/php/Dockerfile @@ -10,15 +10,19 @@ RUN apt-get update && apt-get install -y \ RUN docker-php-ext-install zip # XDebug extensions -RUN pecl install xdebug && rm -rf /tmp/pear -COPY config/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini +RUN pecl install xdebug \ + && docker-php-ext-enable xdebug \ + && rm -rf /tmp/pear -# Bash -RUN chsh -s /bin/bash www-data +# XDebug configuration +COPY config/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini # Composer RUN curl -sS https://getcomposer.org/installer | php -- --filename=composer --install-dir=/usr/local/bin +# Bash +RUN chsh -s /bin/bash www-data + # Workdir WORKDIR /var/www/html diff --git a/docker/php/config/xdebug.ini b/docker/php/config/xdebug.ini new file mode 100644 index 00000000..1f238535 --- /dev/null +++ b/docker/php/config/xdebug.ini @@ -0,0 +1,2 @@ +xdebug.cli_color=1 +xdebug.remote_enable=1 diff --git a/docker/entrypoint.sh b/docker/php/entrypoint.sh similarity index 64% rename from docker/entrypoint.sh rename to docker/php/entrypoint.sh index 47185e01..bdce58ad 100755 --- a/docker/entrypoint.sh +++ b/docker/php/entrypoint.sh @@ -7,8 +7,8 @@ USER_ID=${USER_ID-1000} XDEBUG=${XDEBUG-0} # Disable XDebug -if [ ! ${XDEBUG} = 1 ]; then - rm -f /usr/local/etc/php/conf.d/xdebug.ini +if [ ! "$XDEBUG" = 1 ]; then + rm -f /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini fi # Permissions @@ -16,7 +16,7 @@ groupmod -g ${GROUP_ID} www-data usermod -u ${USER_ID} www-data # Start bash or forward command -if [ $1 = "bash" ]; then +if [ "$1" = "bash" ]; then su www-data else su www-data -c "$*" diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 72861d65..fb3d519e 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -10,11 +10,6 @@ - - - functional - - ./ diff --git a/travis/install.sh b/travis/install.sh new file mode 100755 index 00000000..e0faf927 --- /dev/null +++ b/travis/install.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -e + +COMPOSER_PREFER_LOWEST=${COMPOSER_PREFER_LOWEST-false} +DOCKER_BUILD=${DOCKER_BUILD-false} +SYMFONY_VERSION=${SYMFONY_VERSION-2.3.*} + +if [ "$DOCKER_BUILD" = true ]; then + cp .env.dist .env + + docker-compose build + docker-compose run --rm php composer update --prefer-source + + exit +fi + +export DISPLAY=:99 +/sbin/start-stop-daemon -Sbmq -p /tmp/xvfb_99.pid -x /usr/bin/Xvfb -- ${DISPLAY} -ac -screen 0, 1600x1200x24 + +curl http://selenium-release.storage.googleapis.com/2.48/selenium-server-standalone-2.48.0.jar > selenium.jar +curl http://chromedriver.storage.googleapis.com/2.12/chromedriver_linux64.zip > chromedriver.zip +unzip chromedriver.zip + +java -jar selenium.jar -Dwebdriver.chrome.driver=./chromedriver > /dev/null 2>&1 & + +composer self-update + +composer require --no-update symfony/framework-bundle:${SYMFONY_VERSION} +composer require --no-update --dev symfony/form:${SYMFONY_VERSION} +composer require --no-update --dev symfony/templating:${SYMFONY_VERSION} +composer require --no-update --dev symfony/yaml:${SYMFONY_VERSION} + +composer remove --no-update --dev friendsofphp/php-cs-fixer + +if [[ "$SYMFONY_VERSION" = *dev* ]]; then + composer config minimum-stability dev +fi + +composer update --prefer-source `if [ "$COMPOSER_PREFER_LOWEST" = true ]; then echo "--prefer-lowest --prefer-stable"; fi` diff --git a/travis/script.sh b/travis/script.sh new file mode 100755 index 00000000..5a4bf5b4 --- /dev/null +++ b/travis/script.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +set -e + +DOCKER_BUILD=${DOCKER_BUILD-false} + +if [ "$DOCKER_BUILD" = false ]; then + vendor/bin/phpunit --configuration phpunit.travis.xml --coverage-clover build/clover.xml +fi + +if [ "$DOCKER_BUILD" = true ]; then + docker-compose up -d + docker-compose run --rm php vendor/bin/phpunit + docker-compose run --rm hhvm vendor/bin/phpunit +fi diff --git a/travis/success.sh b/travis/success.sh new file mode 100755 index 00000000..eca3c0f5 --- /dev/null +++ b/travis/success.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +set -e + +DOCKER_BUILD=${DOCKER_BUILD-false} + +if [ "$DOCKER_BUILD" = false ]; then + wget https://scrutinizer-ci.com/ocular.phar + php ocular.phar code-coverage:upload --format=php-clover build/clover.xml +fi