mirror of
https://gitlab.com/davical-project/davical.git
synced 2026-03-03 06:23:35 +00:00
Merge branch 'ci' into 'master'
Add Gitlab CI See merge request davical-project/davical!56
This commit is contained in:
commit
5effad3e80
1
.gitignore
vendored
1
.gitignore
vendored
@ -25,6 +25,7 @@ random_crap
|
||||
testing/tests/x-*
|
||||
testing/tests/local
|
||||
testing/timing.stats*
|
||||
testing/report.xml
|
||||
.sync-cache
|
||||
.buildpath
|
||||
.cvsignore
|
||||
|
||||
71
.gitlab-ci.yml
Normal file
71
.gitlab-ci.yml
Normal file
@ -0,0 +1,71 @@
|
||||
image: php:apache-stretch
|
||||
|
||||
build:
|
||||
stage: build
|
||||
script:
|
||||
- apt-get -y update
|
||||
- bash -c 'mkdir -p /usr/share/man/man{0..10}'
|
||||
- apt-get -y install build-essential devscripts fakeroot dh-exec jdupes rst2pdf doxygen # todo build-dep instead, change this task's image to plain debian
|
||||
- mv debian/changelog debian/changelog.old
|
||||
- >
|
||||
cat
|
||||
<(echo "davical ($(cat VERSION)~git$(date +"%Y%m%d")-$(git rev-parse --short $CI_COMMIT_SHA)) unstable; urgency=medium")
|
||||
<(echo "")
|
||||
<(echo " * Build on CI")
|
||||
<(echo "")
|
||||
<(echo " -- ${GITLAB_USER_NAME} <${GITLAB_USER_EMAIL}> $(date -R)")
|
||||
<(echo "")
|
||||
debian/changelog.old
|
||||
>debian/changelog
|
||||
- rm debian/changelog.old
|
||||
- debuild -us -uc -b -d
|
||||
- 'mv ../davical_*_all.deb ./davical.deb'
|
||||
artifacts:
|
||||
paths:
|
||||
- '*.deb'
|
||||
|
||||
test:
|
||||
stage: test
|
||||
artifacts:
|
||||
paths:
|
||||
- testing/report.xml
|
||||
reports:
|
||||
junit: testing/report.xml
|
||||
when:
|
||||
always
|
||||
script:
|
||||
- apt-get -y update
|
||||
- bash -c 'mkdir -p /usr/share/man/man{0..10}'
|
||||
- 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
|
||||
- apt-get -y install libdbd-pg-perl libyaml-perl perl postgresql postgresql-client libpq-dev xmlstarlet
|
||||
- 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/
|
||||
- dpkg --ignore-depends=php,php-pgsql,php-xml,libawl-php,php-cli -i *.deb
|
||||
- docker-php-ext-install -j$(nproc) pgsql
|
||||
- docker-php-ext-install -j$(nproc) pdo_pgsql
|
||||
- docker-php-ext-install -j$(nproc) calendar
|
||||
- echo '127.0.1.1 regression mycaldav myempty' >> /etc/hosts
|
||||
- cp testing/apache-site.conf.example /etc/apache2/sites-enabled/davical-regression.conf
|
||||
- sed -i 's/\/path\/to/\/usr\/share/g' /etc/apache2/sites-enabled/davical-regression.conf
|
||||
- mkdir /usr/share/davical/testing/
|
||||
- cp testing/*.php /usr/share/davical/testing/
|
||||
- rm /etc/davical/config.php
|
||||
- cp testing/regression-conf.php.example /etc/davical/regression-conf.php
|
||||
- ln -s /etc/davical/regression-conf.php /etc/davical/mycaldav-conf.php
|
||||
- ln -s /etc/davical/regression-conf.php /etc/davical/myempty-conf.php
|
||||
- sed -i '/peer/d' /etc/postgresql/9.6/main/pg_hba.conf
|
||||
- echo 'local all all trust' >> /etc/postgresql/9.6/main/pg_hba.conf
|
||||
- pg_ctlcluster 9.6 main start
|
||||
- su postgres -c 'createuser davical_dba --createdb --createrole --superuser'
|
||||
- su postgres -c 'createuser davical_app --superuser'
|
||||
- su postgres -c 'createuser testrunner --superuser'
|
||||
- pg_ctlcluster 9.6 main restart
|
||||
- a2enmod rewrite
|
||||
- apache2ctl start
|
||||
- useradd testrunner
|
||||
- cd testing && su testrunner -c 'IS_CI=yes ALLSUITES="regression-suite binding carddav" ./run_regressions.sh all x'
|
||||
|
||||
@ -1534,7 +1534,7 @@ EOQRY;
|
||||
*/
|
||||
function DAV_AllProperties() {
|
||||
if ( !isset($this->dead_properties) ) $this->FetchDeadProperties();
|
||||
$allprop = array_merge( (isset($this->dead_properties)?$this->dead_properties:array()),
|
||||
$allprop = array_merge( (isset($this->dead_properties)?array_keys($this->dead_properties):array()),
|
||||
(isset($include_properties)?$include_properties:array()),
|
||||
array(
|
||||
'DAV::getcontenttype', 'DAV::resourcetype', 'DAV::getcontentlength', 'DAV::displayname', 'DAV::getlastmodified',
|
||||
|
||||
28
testing/apache-site.conf.example
Normal file
28
testing/apache-site.conf.example
Normal file
@ -0,0 +1,28 @@
|
||||
Listen 127.0.1.1:80
|
||||
<VirtualHost 127.0.1.1:80>
|
||||
ServerName regression
|
||||
ServerAlias myempty mycaldav
|
||||
DocumentRoot /path/to/davical/htdocs
|
||||
CustomLog ${APACHE_LOG_DIR}/regression-access.log combined
|
||||
ErrorLog ${APACHE_LOG_DIR}/regression-error.log
|
||||
|
||||
Alias /davical /path/to/davical/htdocs
|
||||
<Directory /path/to/davical/htdocs>
|
||||
Require all granted
|
||||
DirectoryIndex index.php index.html
|
||||
php_value include_path /path/to/awl/inc:/path/to/davical/testing
|
||||
</Directory>
|
||||
|
||||
RewriteEngine On
|
||||
# Redirect /.well-known URLs
|
||||
RewriteRule ^/\.well-known/(.*)$ /caldav.php/.well-known/$1 [NC,L]
|
||||
# and other special URLs
|
||||
RewriteRule ^/principals/users/(.*)$ /caldav.php/$1 [NC,L]
|
||||
RewriteRule ^/principals/resources/(.*)$ /caldav.php/$1 [NC,L]
|
||||
RewriteRule ^/calendars/__uids__/(.*)$ /caldav.php/$1 [NC,L]
|
||||
RewriteRule ^/addressbooks/__uids__/(.*)$ /caldav.php/$1 [NC,L]
|
||||
# let caldav.php handle "anything else"
|
||||
RewriteCond %{REQUEST_URI} !^/$
|
||||
RewriteCond %{REQUEST_URI} !\.(php|css|png|gif|js|jpg|ico)
|
||||
RewriteRule ^(.*)$ /caldav.php$1 [NC,L]
|
||||
</VirtualHost>
|
||||
22
testing/regression-conf.php.example
Normal file
22
testing/regression-conf.php.example
Normal file
@ -0,0 +1,22 @@
|
||||
<?php
|
||||
$c->pg_connect[] = 'dbname=regression user=davical_app';
|
||||
|
||||
// use strict result ordering for regression testing only
|
||||
$c->strict_result_ordering = true;
|
||||
// PUT: 405 Method Not Allowed
|
||||
$c->readonly_webdav_collections = false;
|
||||
// fix ETag differences (CRLF) in 0218-Moz-REPORT and later
|
||||
$c->hide_alarm = true;
|
||||
// some freebusy queries will be 404 otherwise
|
||||
$c->public_freebusy_url = true;
|
||||
// helps with 1035-GET-mashup
|
||||
$c->get_includes_subcollections = true;
|
||||
// helps with 1036-REPORT-sync-initial-bound
|
||||
$c->hide_TODO = false;
|
||||
|
||||
// for ischedule suite; also needs DKIM set up?
|
||||
$c->enable_scheduling = true;
|
||||
|
||||
// enable for debugging, as needed
|
||||
//$c->dbg['ALL'] = 1;
|
||||
?>
|
||||
75
testing/regression_reporting.sh
Normal file
75
testing/regression_reporting.sh
Normal file
@ -0,0 +1,75 @@
|
||||
setup_report() {
|
||||
if [ ! -z "$IS_CI" ]; then
|
||||
cat > "$REPORTFILE" <<EOHEADER
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<testsuites>
|
||||
</testsuites>
|
||||
EOHEADER
|
||||
fi
|
||||
}
|
||||
|
||||
report_test_success() {
|
||||
if [ ! -z "$IS_CI" ]; then
|
||||
SUITEPATH="/testsuites/testsuite[@name=\"$SUITE\"]"
|
||||
xmlstarlet ed -L \
|
||||
-s "$SUITEPATH" -t elem -n testcase \
|
||||
-i "$SUITEPATH/testcase[not(@name)]" -t attr -n wip -v "1" \
|
||||
-i "$SUITEPATH/testcase[@wip]" -t attr -n name -v "$TEST" \
|
||||
-i "$SUITEPATH/testcase[@wip]" -t attr -n classname -v "$TEST" \
|
||||
-i "$SUITEPATH/testcase[@wip]" -t attr -n timestamp -v "0" \
|
||||
-d "$SUITEPATH/testcase[@wip]/@wip" \
|
||||
"$REPORTFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
report_test_failure() {
|
||||
if [ ! -z "$IS_CI" ]; then
|
||||
SUITEPATH="/testsuites/testsuite[@name=\"$SUITE\"]"
|
||||
xmlstarlet ed -L \
|
||||
-s "$SUITEPATH" -t elem -n testcase \
|
||||
-i "$SUITEPATH/testcase[not(@name)]" -t attr -n wip -v "1" \
|
||||
-i "$SUITEPATH/testcase[@wip]" -t attr -n name -v "$SUITE: $TEST" \
|
||||
-i "$SUITEPATH/testcase[@wip]" -t attr -n classname -v "$TEST" \
|
||||
-i "$SUITEPATH/testcase[@wip]" -t attr -n timestamp -v "0" \
|
||||
-s "$SUITEPATH/testcase[@wip]" -t elem -n failure -v "xxxPERL_REPLACE_THIS_WITH_THE_ESCAPED_DIFFxxx" \
|
||||
-i "$SUITEPATH/testcase[@wip]/failure" -t attr -n message -v "test failure" \
|
||||
-d "$SUITEPATH/testcase[@wip]/@wip" \
|
||||
"$REPORTFILE"
|
||||
|
||||
# I encountered a bug in xmlstarlet where small sections of large files are not properly escaped if inserted directly :/
|
||||
perl -pi -e 'BEGIN {$diff = `xmlstarlet esc < "'"${REGRESSION}/diffs/${TEST}"'"`} s/xxxPERL_REPLACE_THIS_WITH_THE_ESCAPED_DIFFxxx/$diff/g' "$REPORTFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
report_suite_setup() {
|
||||
if [ ! -z "$IS_CI" ]; then
|
||||
xmlstarlet ed -L \
|
||||
-s '/testsuites' -t elem -n testsuite \
|
||||
-i '/testsuites/testsuite[not(@name)]' -t attr -n name -v "$SUITE" \
|
||||
-i '/testsuites/testsuite[not(@time)]' -t attr -n time -v "0" \
|
||||
-i '/testsuites/testsuite[not(@errors)]' -t attr -n errors -v "0" \
|
||||
-i '/testsuites/testsuite[not(@timestamp)]' -t attr -n timestamp -v "$(date -u +'%FT%TZ')" \
|
||||
"$REPORTFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
report_suite_counts() {
|
||||
if [ ! -z "$IS_CI" ]; then
|
||||
xmlstarlet ed -L \
|
||||
-i "/testsuites/testsuite[@name=\"$SUITE\"]" -t attr -n tests -v "$(xmlstarlet sel -t -v "count(/testsuites/testsuite[@name=\"$SUITE\"]/testcase)" "$REPORTFILE")" \
|
||||
-i "/testsuites/testsuite[@name=\"$SUITE\"]" -t attr -n failures -v "$(xmlstarlet sel -t -v "count(/testsuites/testsuite[@name=\"$SUITE\"]/testcase/failure)" "$REPORTFILE")" \
|
||||
"$REPORTFILE"
|
||||
fi
|
||||
}
|
||||
|
||||
exit_based_on_reported_failures() {
|
||||
if [ ! -z "$IS_CI" ]; then
|
||||
FAILCOUNT="$(xmlstarlet sel -t -v "count(//failure)" "$REPORTFILE")"
|
||||
if [ "$FAILCOUNT" -gt 0 ]; then
|
||||
exit 2
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
exit 0
|
||||
}
|
||||
@ -12,6 +12,7 @@
|
||||
DBNAME=regression
|
||||
PGPOOL=inactive
|
||||
HOSTNAME=mycaldav
|
||||
REPORTFILE=report.xml
|
||||
|
||||
# We need to run the regression tests in the timezone they were written for.
|
||||
export PGTZ=Pacific/Auckland
|
||||
@ -49,6 +50,7 @@ ACCEPT_ALL=${2:-""}
|
||||
|
||||
# psql ${PSQLOPTS} -l
|
||||
|
||||
. ./regression_reporting.sh
|
||||
|
||||
check_result() {
|
||||
TEST="$1"
|
||||
@ -59,6 +61,7 @@ check_result() {
|
||||
diff --text -u "${REGRESSION}/${TEST}.result" "${RESULTS}/${TEST}" >"${REGRESSION}/diffs/${TEST}"
|
||||
|
||||
if [ -s "${REGRESSION}/diffs/${TEST}" ] ; then
|
||||
report_test_failure
|
||||
if [ -z "$SKIPDIFF" ]; then
|
||||
echo "======================================="
|
||||
echo "Displaying diff for test ${TEST}"
|
||||
@ -75,7 +78,7 @@ check_result() {
|
||||
cp "${RESULTS}/${TEST}" "${REGRESSION}/${TEST}.result"
|
||||
elif [ "${ACCEPT}" = "x" ]; then
|
||||
echo "./dav_test --dsn '${DSN}' ${WEBHOST} ${ALTHOST} --suite '${SUITE}' --case '${TEST}' --debug"
|
||||
exit
|
||||
if [ -z "$IS_CI" ]; then exit 2; fi
|
||||
elif [ "${ACCEPT}" = "v" ]; then
|
||||
echo "Showing test $REGRESSION/${TEST}.test"
|
||||
cat "$REGRESSION/${TEST}.test"
|
||||
@ -107,6 +110,7 @@ check_result() {
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
report_test_success
|
||||
echo "Test ${TEST} passed OK!"
|
||||
fi
|
||||
return 0
|
||||
@ -184,6 +188,8 @@ run_regression_suite() {
|
||||
mkdir -p "${RESULTS}"
|
||||
mkdir -p "${REGRESSION}/diffs"
|
||||
|
||||
report_suite_setup
|
||||
|
||||
if [ -f "${REGRESSION}/initial.dbdump" ]; then
|
||||
restore_database
|
||||
else
|
||||
@ -217,6 +223,8 @@ run_regression_suite() {
|
||||
|
||||
TCOUNT="$(( ${TCOUNT} + 1 ))"
|
||||
done
|
||||
|
||||
report_suite_counts
|
||||
}
|
||||
|
||||
|
||||
@ -224,6 +232,8 @@ run_regression_suite() {
|
||||
TSTART="`date +%s`"
|
||||
TCOUNT=0
|
||||
|
||||
setup_report
|
||||
|
||||
if [ "${SUITE}" = "all" ]; then
|
||||
for SUITE in ${ALLSUITES} ; do
|
||||
echo "Running $SUITE"
|
||||
@ -241,3 +251,5 @@ fi
|
||||
TFINISH="`date +%s`"
|
||||
|
||||
echo "Regression test run took $(( ${TFINISH} - ${TSTART} )) seconds for ${TCOUNT} tests."
|
||||
|
||||
exit_based_on_reported_failures
|
||||
|
||||
@ -1,9 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<multistatus xmlns="DAV:" xmlns:A="http://apple.com/ns/ical/" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:D="urn:org:davical">
|
||||
<response>
|
||||
<href>/caldav.php/user1/home/</href>
|
||||
<propstat>
|
||||
<prop>
|
||||
<A:calendar-color>#0252D4FF</A:calendar-color>
|
||||
<A:calendar-order>1</A:calendar-order>
|
||||
<C:schedule-default-calendar-URL>
|
||||
<href>/caldav.php/user1/home/</href>
|
||||
</C:schedule-default-calendar-URL>
|
||||
<D:outer>
|
||||
<D:middle>
|
||||
<D:inner>inside</D:inner>
|
||||
<D:inner>inside2</D:inner>
|
||||
</D:middle>
|
||||
</D:outer>
|
||||
<getcontenttype>httpd/unix-directory</getcontenttype>
|
||||
<resourcetype>
|
||||
<collection/>
|
||||
|
||||
@ -1,9 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<multistatus xmlns="DAV:" xmlns:C="urn:ietf:params:xml:ns:caldav">
|
||||
<multistatus xmlns="DAV:" xmlns:A="http://apple.com/ns/ical/" xmlns:C="urn:ietf:params:xml:ns:caldav" xmlns:D="urn:org:davical">
|
||||
<response>
|
||||
<href>/caldav.php/user1/home/</href>
|
||||
<propstat>
|
||||
<prop>
|
||||
<A:calendar-color>#0252D4FF</A:calendar-color>
|
||||
<A:calendar-order>1</A:calendar-order>
|
||||
<C:schedule-default-calendar-URL>
|
||||
<href>/caldav.php/user1/home/</href>
|
||||
</C:schedule-default-calendar-URL>
|
||||
<D:outer>
|
||||
<D:middle>
|
||||
<D:inner>inside</D:inner>
|
||||
<D:inner>inside2</D:inner>
|
||||
</D:middle>
|
||||
</D:outer>
|
||||
<getcontenttype>httpd/unix-directory</getcontenttype>
|
||||
<resourcetype>
|
||||
<collection/>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user