mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-01-27 00:33:34 +00:00
This also involves changing scripts to be run at the time they're mentioned, not accruing them to run at the end.
285 lines
7.3 KiB
Bash
Executable File
285 lines
7.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Configure the virtual environment that Gitlab provides for our CI jobs.
|
|
#
|
|
# This supports being used for either AWL or DAViCal. To test AWL we run
|
|
# the DAViCal regression tests as that is the best thing we have to exercise
|
|
# AWL currently.
|
|
|
|
set -e
|
|
set -x
|
|
|
|
davical_repo_path=$CI_PROJECT_DIR
|
|
|
|
mode=${1:-$CI_JOB_NAME}
|
|
|
|
ldap=0
|
|
memcache=0
|
|
interop=0
|
|
|
|
if [[ $mode =~ "ldap" ]]; then
|
|
ldap=1
|
|
memcache=1
|
|
elif [[ $mode =~ "memcache" ]]; then
|
|
memcache=1
|
|
elif [[ $mode =~ "interop" ]]; then
|
|
interop=1
|
|
fi
|
|
|
|
# The images don't have man page directories?
|
|
mkdir -p /usr/share/man/man{0..10}
|
|
|
|
# When we install the davical deb, ignore libawl-php version dependency, as
|
|
# we also install the libawl-php .deb built by the AWL CI.
|
|
dpkg_ignore_depends="libawl-php"
|
|
|
|
# Images have no package info, load it.
|
|
apt-get -y update
|
|
|
|
###
|
|
### Pre-configure the locale so it is ready before other packages are
|
|
### installed.
|
|
###
|
|
|
|
apt-get -y install locales
|
|
echo "en_NZ.UTF-8 UTF-8" >> /etc/locale.gen
|
|
locale-gen
|
|
echo "LANG=en_NZ.UTF-8" > /etc/default/locale
|
|
|
|
###
|
|
### Install packages required for testing
|
|
###
|
|
|
|
packages="libdbd-pg-perl libyaml-perl postgresql-client postgresql
|
|
curl xmlstarlet netcat-openbsd libtest-www-mechanize-perl
|
|
libfile-pushd-perl"
|
|
|
|
if [[ $mode =~ "latestphp" ]]; then
|
|
# PHP pgsql package is built from source, needs libpq-dev.
|
|
packages="$packages libpq-dev"
|
|
else
|
|
# The latestphp images already have some of these available, and others
|
|
# need to installed in another method.
|
|
packages="$packages libapache2-mod-php php php-cli php-pgsql php-xml
|
|
php-curl"
|
|
fi
|
|
|
|
if [ $memcache == 1 ]; then
|
|
packages="$packages php-memcached memcached"
|
|
fi
|
|
|
|
if [ $ldap == 1 ]; then
|
|
packages="$packages php-ldap libnet-ldap-server-test-perl"
|
|
fi
|
|
|
|
if [ $interop == 1 ]; then
|
|
packages="$packages composer phpunit"
|
|
fi
|
|
|
|
apt-get -y install $packages
|
|
|
|
###
|
|
### Setup PHP if we're using latestphp...
|
|
###
|
|
|
|
if [[ $mode =~ "latestphp" ]]; then
|
|
# The image doesn't install PHP from debs, so ignore the dependencies.
|
|
dpkg_ignore_depends="$dpkg_ignore_depends,php,php-pgsql,php-xml,php-cli"
|
|
|
|
docker-php-ext-install -j$(nproc) pgsql
|
|
docker-php-ext-install -j$(nproc) pdo_pgsql
|
|
docker-php-ext-install -j$(nproc) calendar
|
|
|
|
# The PHP 8.2 container has deflate enabled in Apache2, disable it.
|
|
# This causes a test to fail because we're being sent a gzip compressed
|
|
# result. My reading of the curl manpage says that it should be
|
|
# decompressed by curl, but it isn't. Let's just disable the deflate
|
|
# module.
|
|
a2dismod -f deflate
|
|
fi
|
|
|
|
###
|
|
### Setup memcache if we're using it.
|
|
###
|
|
|
|
if [ $memcache == 1 ]; then
|
|
phpenmod memcached
|
|
/etc/init.d/memcached start
|
|
|
|
conf_filter_memcache="| sed 's.//memcache ..g'"
|
|
fi
|
|
|
|
###
|
|
### Prepare PHP for LDAP if we're using it.
|
|
###
|
|
|
|
if [ $ldap == 1 ]; then
|
|
phpenmod ldap
|
|
|
|
conf_filter_ldap="| sed 's.//ldap ..g'"
|
|
fi
|
|
|
|
###
|
|
### If testing DAViCal, grab the git repo of AWL so we're using the latest
|
|
### code.
|
|
###
|
|
|
|
if [ -f davical.spec.in ]; then
|
|
curl https://gitlab.com/davical-project/awl/-/archive/master/awl-master.tar.gz \
|
|
| tar zxf -
|
|
mv awl-master /usr/share/awl/
|
|
chown -R www-data /usr/share/awl/
|
|
fi
|
|
|
|
###
|
|
### If testing AWL, grab the git repo of DAViCal for the tests we'll use.
|
|
###
|
|
|
|
if [ -f php-awl.spec.in ]; then
|
|
curl https://gitlab.com/davical-project/davical/-/archive/master/davical-master.tar.gz \
|
|
| tar zxf -
|
|
ln -s . awl
|
|
|
|
davical_repo_path="$CI_PROJECT_DIR/davical-master"
|
|
|
|
ln -s /usr/share/davical $davical_repo_path
|
|
fi
|
|
|
|
|
|
###
|
|
### If testing DAViCal install the davical and libawl-php packages to test
|
|
###
|
|
|
|
if [ -f davical.spec.in ]; then
|
|
dpkg --ignore-depends=$dpkg_ignore_depends -i *.deb
|
|
fi
|
|
|
|
mkdir -p /usr/share/davical/testing/
|
|
cp $davical_repo_path/testing/*.php /usr/share/davical/testing/
|
|
mkdir -p /var/log/davical
|
|
chown www-data /var/log/davical
|
|
|
|
# Allow the testrunner user to write and read /var/log/davical .
|
|
# - Write for saving the output of some tests if they fail
|
|
chgrp adm /var/log/davical
|
|
chmod 775 /var/log/davical
|
|
|
|
###
|
|
### Setup DAViCal config files
|
|
###
|
|
|
|
# When testing DAViCal, the file already exists, when testing AWL the
|
|
# directory is missing.
|
|
rm -f /etc/davical/config.php
|
|
mkdir -p /etc/davical
|
|
eval cat $davical_repo_path/testing/regression-conf.php.example \
|
|
\| sed 's.//\$c-\>dbg.\$c-\>dbg.' \
|
|
$conf_filter_memcache \
|
|
$conf_filter_ldap \
|
|
> /etc/davical/regression-conf.php
|
|
|
|
for site in mycaldav mycaldav_ldap myempty; do
|
|
ln -s /etc/davical/regression-conf.php /etc/davical/$site-conf.php
|
|
done
|
|
|
|
###
|
|
### Setup PostgreSQL
|
|
###
|
|
|
|
pg_ver=$(ls /etc/postgresql)
|
|
sed -i '/peer/d' /etc/postgresql/$pg_ver/main/pg_hba.conf
|
|
echo 'local all all trust' >> /etc/postgresql/$pg_ver/main/pg_hba.conf
|
|
pg_ctlcluster $pg_ver main start
|
|
su postgres -c 'createuser davical_dba --createdb --createrole --superuser'
|
|
su postgres -c 'createuser davical_app --superuser'
|
|
su postgres -c 'createuser testrunner --superuser'
|
|
# Why? You don't need to restart PG after creating users.
|
|
#pg_ctlcluster $pg_ver main restart
|
|
|
|
###
|
|
### Setup testrunner user
|
|
###
|
|
|
|
useradd testrunner
|
|
# testrunner needs to be able to read /var/log/apache2/regression-error.log
|
|
# for the memcache tests.
|
|
adduser testrunner adm
|
|
|
|
chown -R testrunner $davical_repo_path/testing
|
|
|
|
###
|
|
### Configure Apache2
|
|
###
|
|
|
|
echo '127.0.1.1 regression mycaldav mycaldav_ldap myempty' >> /etc/hosts
|
|
|
|
rm /etc/apache2/ports.conf /etc/apache2/sites-enabled/000-default.conf \
|
|
&& touch /etc/apache2/ports.conf
|
|
|
|
cp $davical_repo_path/testing/apache-site.conf.example \
|
|
/etc/apache2/sites-enabled/davical-regression.conf
|
|
|
|
if [ -f php-awl.spec.in ]; then
|
|
sed -i "s,/path/to/awl,$CI_PROJECT_DIR,;
|
|
s,/path/to/davical,$davical_repo_path," \
|
|
/etc/apache2/sites-enabled/davical-regression.conf
|
|
else
|
|
sed -i 's/\/path\/to/\/usr\/share/g' \
|
|
/etc/apache2/sites-enabled/davical-regression.conf
|
|
fi
|
|
|
|
a2enmod rewrite
|
|
a2enmod headers
|
|
apache2ctl start
|
|
|
|
# Ensure that the jobs that need to drop in static files for Apache to serve
|
|
# up can do so.
|
|
mkdir -p /usr/share/davical/htdocs/testfiles
|
|
chown testrunner /usr/share/davical/htdocs/testfiles
|
|
ln -s /usr/share/davical/htdocs/testfiles $davical_repo_path/htdocs
|
|
|
|
###
|
|
### Set up for carddavclientinterop
|
|
###
|
|
|
|
if [ $interop == 1 ]; then
|
|
cd $davical_repo_path
|
|
curl https://codeload.github.com/mstilkerich/carddavclient/tar.gz/master | tar zxf -
|
|
|
|
cd carddavclient-master
|
|
composer install
|
|
|
|
cat <<EOF > tests/Interop/AccountData.php
|
|
<?php
|
|
|
|
declare(strict_types=1);
|
|
namespace MStilkerich\Tests\CardDavClient\Interop;
|
|
use MStilkerich\CardDavClient\Account;
|
|
use MStilkerich\CardDavClient\AddressbookCollection;
|
|
use MStilkerich\CardDavClient\Config;
|
|
|
|
final class AccountData {
|
|
public const ACCOUNTS = [
|
|
"Davical" => [
|
|
"username" => "user3",
|
|
"password" => "user3",
|
|
"discoveryUri" => "http://regression",
|
|
"featureSet" => TestInfrastructureSrv::SRVFEATS_DAVICAL,
|
|
"syncAllowExtraChanges" => false,
|
|
],
|
|
];
|
|
|
|
public const ADDRESSBOOKS = [
|
|
"Davical_0" => [
|
|
"account" => "Davical",
|
|
"url" => "http://regression/caldav.php/user3/addresses/",
|
|
"displayname" => "user3 addresses",
|
|
"description" => null,
|
|
],
|
|
];
|
|
}
|
|
EOF
|
|
|
|
mkdir -p testreports/interop
|
|
fi
|