Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Vdirsyncer-2.0.0-alpha0 release notes #23

Merged
merged 2 commits into from
May 27, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions assets/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ h1,
h2,
h3,
h4,
.footnotes,
.highlight,
.blog-post {
max-width: 760px;
margin-left: auto;
Expand Down Expand Up @@ -84,3 +86,14 @@ article {
margin-left: 1rem;
}
}

.post-details {
color: gray;
margin-top: -1rem;
}

.highlight {
pre {
padding: 0.5rem;
}
}
111 changes: 111 additions & 0 deletions content/blog/2024-05-22-vdirsyncer-2.0.0-alpha0.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
layout: post
title: Vdirsyncer 2.0.0-alpha0 release notes
date: 2024-05-22
categories: blog
params:
author: WhyNotHugo
---

I've just tagged a first alpha version of the vdirsyncer rewrite. This is an
EXPERIMENTAL VERSION, and has several missing features. It likely has bugs too,
so I appreciate anyone willing to test this and report bugs.

Keep in mind that as an early version, this MAY have bugs that result in data
loss. Ensure that you keep frequent backups. If you are unwilling to help report
bugs, please wait for a stable release.

Compared to the previous series, there are a few exciting changes.

## Continuing on errors

When synchronising a collection, if a single items fails, synchronisation will
continue and other items will be processed properly. This has an impact when a
server rejects a single calendar event, but I want the other 500 events in my
calendar to synchronise properly.

## Daemon

A new `daemon` command has been implemented. This keeps vdirsyncer running and
performing new synchronisations every five minutes[^minutes]. In future
releases, I intend to implement storage monitoring, so instead of having a fixed
timeout, synchronisations will be triggered only when a storage reports that
changes have occurred.

[^minutes]: This period is actually configurable.

I have been running `vdirsyncer daemon` in the background for the last few weeks
and am quite happy with the results.

## Collection creation and deletion

When a collection is created or deleted on one side, this change will
immediately replicate to the other side (assuming that the affected collections
match the current configuration).

This means that I can create a new calendar on one device, and it automatically
shows up on another.

If this behaviour is problematic for some use case, please do reach out so we
can find a solution.

## No more `discover`

The `discover` command is gone and no longer necessary; discovery of collections
is handled automatically.

## Conflict resolution

Conflict resolution is not executed during normal synchronisations. This is
mostly because there commands are usually interactive and would interrupt the
automated flow or regular synchronisations.

Use `vdirsyncer resolve-conflicts` to manually resolve any conflicts.

## Testing

Testers are welcome. Using a custom CA certificate and specifying TLS
certificate fingerprints has had minimal testing, so I would appreciate
real-world testing of this.

When migrating from the previous vdirsyncer implementation, ensure that your
collections are already in sync. A new, separate status file is used, so any
changes on either side will result in conflicts.

It is not trivial to migrate back to the previous version either: you will have
to ensure that both sides of your collection are in sync before doing so too.

# Installation

The current version needs to be built from source. The result is a single
binary, that can be copied onto other hosts without any additional support files
(note that binaries will only work across hosts of the same distribution and CPU
architecture).

```sh
curl -LO https://git.sr.ht/~whynothugo/vdirsyncer-rs/archive/vdirsyncer/v2.0.0-alpha0.tar.gz
tar xf v2.0.0-alpha0.tar.gz
cd vdirsyncer-rs-vdirsyncer/v2.0.0-alpha0
cargo build --release -p vdirsyncer
cp target/release/vdirsyncer /usr/local/bin/
```

Replace `/usr/local/bin/` with any other directory in `$PATH`.

Compilation will take a long time (several minutes, at least). I hope to improve
this in future releases, although Rust doesn't make this easy. Fortunately, this
cost pays off with vdirsyncer itself being quite lightweight at runtime.

# Feedback

See the [migration guide] for details on how to update a configuration file.
There is currently no documentation on setting up a new configuration from
scratch (this will be addressed at some point on a later release).

Please [join us on IRC][contact] if you have feedback or questions.

Issues are tracked in [a separate issue tracker][issues], to avoid any confusion
with existing issues from the previous implementation.

[contact]: /contact/
[issues]: https://todo.sr.ht/~whynothugo/vdirsyncer-rs
8 changes: 8 additions & 0 deletions layouts/_default/single.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
{{ define "main" }}
<h1>{{ .Title }}</h1>
{{ if and .Date .Params.Author }}
<p class="post-details">
Written by {{ .Params.Author }} on
<time datetime="{{.Date.Format "2006-01-02"}}">
{{ .Date.Format "2006-01-02" }}
</time>
</p>
{{ end}}

<article>
{{ .Content }}
Expand Down
7 changes: 2 additions & 5 deletions layouts/blog/section.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,13 @@
<section class="article-list">
{{ range (where .Site.RegularPages "Section" "blog") }}
<div class="blog-post">
<h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
<div>
<h1><a href="{{ .Permalink }}">{{ .Title }}</a></h1>
<div class="post-details">
Written by {{ .Params.Author }} on
<time datetime="{{.Date.Format "2006-01-02"}}">
{{ .Date.Format "2006-01-02" }}
</time>
</div>

{{ .Content }}

</div>
{{ end }}
</section>
Expand Down
Loading