WIP add a Docker-based test env
[plcapi.git] / tests / ci / setup / setup_php.sh
1 #!/bin/sh
2
3 set -e
4
5 configure_php_ini() {
6     # @todo make this idempotent so that it can be run multiple times in a row
7     echo "cgi.fix_pathinfo = 1" >> "${1}"
8     echo "always_populate_raw_post_data = -1" >> "${1}"
9
10     XDEBUG_INI=$(php -i | grep xdebug.ini | grep -v '=>' | head -1)
11     if [ "$XDEBUG_INI" != "" ]; then
12         #XDEBUG_INI=${XDEBUG_INI/,/}
13         mv "$XDEBUG_INI" "$XDEBUG_INI.bak";
14     fi
15 }
16
17 if ! which php >/dev/null; then
18
19     # install php
20     PHP_VERSION=$1
21     DEBIAN_VERSION=$(lsb_release -s -c)
22
23     if [ "${PHP_VERSION}" = default ]; then
24         if [ "${DEBIAN_VERSION}" = jessie -o "${DEBIAN_VERSION}" = precise -o "${DEBIAN_VERSION}" = trusty ]; then
25             PHPSUFFIX=5
26         else
27             PHPSUFFIX=
28         fi
29         # @todo check for mbstring presence in php5 (jessie) packages
30         DEBIAN_FRONTEND=noninteractive apt-get install -y \
31             php${PHPSUFFIX} \
32             php${PHPSUFFIX}-cli \
33             php${PHPSUFFIX}-dom \
34             php${PHPSUFFIX}-curl \
35             php${PHPSUFFIX}-fpm \
36             php${PHPSUFFIX}-mbstring \
37             php${PHPSUFFIX}-xdebug
38     else
39         #DEBIAN_FRONTEND=noninteractive apt-get install -y \
40         #    gnupg2 ca-certificates lsb-release apt-transport-https
41         #wget https://packages.sury.org/php/apt.gpg
42         #apt-key add apt.gpg
43         #echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list
44
45         DEBIAN_FRONTEND=noninteractive apt-get install -y language-pack-en-base software-properties-common
46         LC_ALL=en_US.UTF-8 add-apt-repository ppa:ondrej/php
47         apt-get update
48
49         DEBIAN_FRONTEND=noninteractive apt-get install -y \
50             php${PHP_VERSION} \
51             php${PHP_VERSION}-cli \
52             php${PHP_VERSION}-dom \
53             php${PHP_VERSION}-curl \
54             php${PHP_VERSION}-fpm \
55             php${PHP_VERSION}-mbstring \
56             php${PHP_VERSION}-xdebug
57
58         update-alternatives --set php /usr/bin/php${PHP_VERSION}
59     fi
60
61     PHPVER=$(php -r 'echo implode(".",array_slice(explode(".",PHP_VERSION),0,2));' 2>/dev/null)
62
63     configure_php_ini /etc/php/${PHPVER}/fpm/php.ini
64
65     # use a nice name for the php-fpm service, so that it does not depend on php version running
66     service "php${PHPVER}-fpm" stop
67     ln -s "/etc/init.d/php${PHPVER}-fpm" /etc/init.d/php-fpm
68
69     # @todo shall we configure php-fpm?
70
71     service php-fpm start
72
73     # configure apache
74     a2enconf php${PHPVER}-fpm
75     service apache2 restart
76 fi
77
78 if [ -n "$TRAVIS" ]; then
79
80     # php is already installed, via phpenv
81
82     PHPVER=$(phpenv version-name)
83
84     configure_php_ini ~/.phpenv/versions/${PHPVER}/etc/php.ini
85
86     # configure php-fpm
87     cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.conf
88
89     # work around travis issue #3385
90     if [ -d ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d ]; then
91         if [ "$TRAVIS_PHP_VERSION" = "7.0" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
92           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
93         fi
94         if [ "$TRAVIS_PHP_VERSION" = "7.1" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
95           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
96         fi
97         if [ "$TRAVIS_PHP_VERSION" = "7.2" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
98           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
99         fi
100         if [ "$TRAVIS_PHP_VERSION" = "7.3" -a -n "$(ls -A ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d)" ]; then
101           cp ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf.default ~/.phpenv/versions/${PHPVER}/etc/php-fpm.d/www.conf
102         fi
103     fi
104
105     ~/.phpenv/versions/${PHPVER}/sbin/php-fpm
106
107     # @todo configure apache for php-fpm via mod_proxy_fcgi
108 fi