Add xandikos to CI (#601)

* Add xandikos to CI

* wip

* Work around missing dependency spec

* Add xandikos to travis

* Remove auth

* Test release and devel

* Refactor xandikos setup

* Fix syntax error

* Only test xandikos-git

* Add section to supported.rst

* changelog
This commit is contained in:
Markus Unterwaditzer 2017-03-22 14:40:41 +01:00 committed by GitHub
parent bb4a9a1e6c
commit 28f204162b
6 changed files with 96 additions and 8 deletions

View file

@ -25,6 +25,10 @@
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.3"
},
{
"env": "BUILD=test DAV_SERVER=xandikos REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.3"
},
{
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=release BUILD_PRS=true ",
"python": "3.3"
@ -37,6 +41,10 @@
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.4"
},
{
"env": "BUILD=test DAV_SERVER=xandikos REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.4"
},
{
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=release BUILD_PRS=true ",
"python": "3.4"
@ -49,6 +57,10 @@
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.5"
},
{
"env": "BUILD=test DAV_SERVER=xandikos REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.5"
},
{
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=release BUILD_PRS=true ",
"python": "3.5"
@ -62,7 +74,7 @@
"python": "3.6"
},
{
"env": "BUILD=test DAV_SERVER=skip REQUIREMENTS=release BUILD_PRS=true ",
"env": "BUILD=test DAV_SERVER=xandikos REQUIREMENTS=devel BUILD_PRS=true ",
"python": "3.6"
},
{
@ -101,6 +113,10 @@
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=devel BUILD_PRS=true ",
"python": "pypy3"
},
{
"env": "BUILD=test DAV_SERVER=xandikos REQUIREMENTS=devel BUILD_PRS=true ",
"python": "pypy3"
},
{
"env": "BUILD=test DAV_SERVER=radicale REQUIREMENTS=release BUILD_PRS=true ",
"python": "pypy3"

View file

@ -15,6 +15,7 @@ Version 0.16.0
- Strip ``METHOD:PUBLISH`` added by some calendar providers.
- Fix crash of Google storages when saving token file.
- Make DAV discovery more RFC-conformant, see :ghpr:`585`.
- Vdirsyncer is now tested against Xandikos, see :ghpr:`601`.
Version 0.15.0
==============

View file

@ -69,7 +69,7 @@ Radicale_ is a very lightweight server, however, it intentionally doesn't
implement the CalDAV and CardDAV standards completely, which might lead to
issues even with very well-written clients. Apart from its non-conformity with
standards, there are multiple other problems with its code quality and the way
it is maintained.
it is maintained. Consider using e.g. Xandikos_ instead.
That said, vdirsyncer is continuously tested against the git version and the
latest PyPI release of Radicale.
@ -252,3 +252,26 @@ tested frequently. You can use :storage:`google_contacts` and
:storage:`google_calendar`.
For more information see :gh:`202` and :gh:`8`.
Xandikos
--------
Xandikos_ is a lightweight, yet complete CalDAV and CardDAV server, backed by
git. Vdirsyncer is continuously tested against its latest version.
After running ``./bin/xandikos --defaults -d $HOME/dav``, you should be able to
point vdirsyncer against the root of Xandikos like this::
[storage cal]
type = "caldav"
url = "https://xandikos.example.com/"
username = ...
password = ...
[storage card]
type = "carddav"
url = "https://xandikos.example.com/"
username = ...
password = ...
.. _Xandikos: https://github.com/jelmer/xandikos

View file

@ -45,13 +45,13 @@ matrix.append({
for python, requirements in itertools.product(python_versions,
("devel", "release", "minimal")):
dav_servers = ("radicale",)
rs_servers = ()
if python == latest_python and requirements == "release":
dav_servers = ("skip", "radicale", "owncloud", "nextcloud", "baikal",
"davical", "icloud", "fastmail")
rs_servers = ()
else:
dav_servers = ("radicale",)
rs_servers = ()
dav_servers += ("owncloud", "nextcloud", "baikal", "davical", "icloud",
"fastmail")
elif requirements == "devel":
dav_servers += ("xandikos",)
for server_type, server in itertools.chain(
(("REMOTESTORAGE", x) for x in rs_servers),

View file

@ -0,0 +1,35 @@
import pytest
from xandikos.web import XandikosApp, XandikosBackend, WellknownRedirector
import wsgi_intercept
import wsgi_intercept.requests_intercept
class ServerMixin(object):
@pytest.fixture
def get_storage_args(self, request, tmpdir, slow_create_collection):
tmpdir.mkdir('xandikos')
backend = XandikosBackend(path=str(tmpdir))
cup = '/user/'
backend.create_principal(cup, create_defaults=True)
app = XandikosApp(backend, cup)
app = WellknownRedirector(app, '/')
wsgi_intercept.requests_intercept.install()
wsgi_intercept.add_wsgi_intercept('127.0.0.1', 8080, lambda: app)
def teardown():
wsgi_intercept.remove_wsgi_intercept('127.0.0.1', 8080)
wsgi_intercept.requests_intercept.uninstall()
request.addfinalizer(teardown)
def inner(collection='test'):
url = 'http://127.0.0.1:8080/'
args = {'url': url, 'collection': collection}
if collection is not None:
args = self.storage_class.create_collection(**args)
return args
return inner

View file

@ -0,0 +1,13 @@
#!/bin/sh
set -e
pip install wsgi_intercept
if [ "$REQUIREMENTS" = "release" ] || [ "$REQUIREMENTS" = "minimal" ]; then
pip install -U xandikos
elif [ "$REQUIREMENTS" = "devel" ]; then
pip install -U git+https://jelmer.uk/code/xandikos/
else
echo "Invalid REQUIREMENTS value"
false
fi