This includes: - Building a Docker image for Postgres as well as SQLite - Fuller instructions for usage of the package, including the Postgres builds. A few related things changed here: - `.env` is not used anymore -- the defaults in the Dockerfiles are sufficient - The Rust version in the Dockerfiles is increased to match the MSRV, and with it the Alpine version bumped to one built with that Rust version. - Cargo dependencies on native-tls and openssl updated to include only the `vendored` feature, so as not to require a system openssl installation. - Two GitHub jobs are set up, to build the two different Docker images - The documentation incorrectly suggested using `DELETE .. CASCADE` to delete clients. This syntax does not exist, as the cascading delete is configured in the schema.
1.3 KiB
Introduction
Taskchampion-sync-server is an implementation of the TaskChampion sync protocol server. It supports synchronizing Taskwarrior tasks between multiple systems.
The project provides both pre-built images for common use-cases (see usage) and Rust libraries that can be used to build more sophisticated applications (integration).
It also serves as a reference implementation: where the specification is ambiguous, this implementation's interpretation is favored in resolving the ambiguity. Other implementations of the protocol should interoperate with this implementation.
Sync Overview
The server identifies each user with a client ID. For example, when syncing Taskwarrior tasks between a desktop computer and a laptop, both systems would use the same client ID to indicate that they share the same user's task data.
Task data is encrypted, and the server does not have access to the encryption secret. The server sees only encrypted data and cannot read or modify tasks in any way.
To perform a sync, a replica first downloads and decrypts any changes that have been sent to the server since its last sync. It then gathers any local changes, encrypts them, and uploads them to the server.