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

View file

@ -15,6 +15,7 @@ Version 0.16.0
- Strip ``METHOD:PUBLISH`` added by some calendar providers. - Strip ``METHOD:PUBLISH`` added by some calendar providers.
- Fix crash of Google storages when saving token file. - Fix crash of Google storages when saving token file.
- Make DAV discovery more RFC-conformant, see :ghpr:`585`. - Make DAV discovery more RFC-conformant, see :ghpr:`585`.
- Vdirsyncer is now tested against Xandikos, see :ghpr:`601`.
Version 0.15.0 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 implement the CalDAV and CardDAV standards completely, which might lead to
issues even with very well-written clients. Apart from its non-conformity with 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 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 That said, vdirsyncer is continuously tested against the git version and the
latest PyPI release of Radicale. latest PyPI release of Radicale.
@ -252,3 +252,26 @@ tested frequently. You can use :storage:`google_contacts` and
:storage:`google_calendar`. :storage:`google_calendar`.
For more information see :gh:`202` and :gh:`8`. 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, for python, requirements in itertools.product(python_versions,
("devel", "release", "minimal")): ("devel", "release", "minimal")):
dav_servers = ("radicale",)
rs_servers = ()
if python == latest_python and requirements == "release": if python == latest_python and requirements == "release":
dav_servers = ("skip", "radicale", "owncloud", "nextcloud", "baikal", dav_servers += ("owncloud", "nextcloud", "baikal", "davical", "icloud",
"davical", "icloud", "fastmail") "fastmail")
rs_servers = () elif requirements == "devel":
else: dav_servers += ("xandikos",)
dav_servers = ("radicale",)
rs_servers = ()
for server_type, server in itertools.chain( for server_type, server in itertools.chain(
(("REMOTESTORAGE", x) for x in rs_servers), (("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