-
-
Notifications
You must be signed in to change notification settings - Fork 309
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
Move taskchampion to its own project and depend on it in Taskwarrior #3209
Comments
I think we can release Taskwarrior 3.0 before doing this, but I think it's important that this occur. |
mentioning #3187 for relevance's sake |
I strongly support the split of taskwarrior and taskchampion, but maybe a clearer list of what has to be done and what has to change would make things clearer.
I am not yet very familiar with the code base, and probably not the right person to be suggesting this but I feel that further clarification on the split would be helpful. |
As you've seen, there are five crates within the Taskchampion workspace.
My plan was to initially just move all of this back to a single repository -- https://github.com/taskchampion/taskchampion is where it all came from, in fact. That's guided by the idea that generally managing multiple repos gets complicated, and most engineering organizations work from a monorepo these days. LLVM, Chromium, Firefox, Linux -- all monorepos. Having N repositories means that the space of things to test has dimension N; for example, if we have a There are a few other questions to think about:
The thing that is blocking the work is: I think we should get Taskwarrior 3.0 out the door first. Where the code is stored should be largely invisible to the If you're interested in working on this, and especially if you have or can find some useful guidance on the more vague bits above, that would be fantastic! Examples of other Rust libraries designed to be embedded in other languages would be really useful -- most of the examples of FFI I can find are either embedding other things in Rust (e.g., openssl-sys), or embedding an existing Rust library in a very specific context (e.g., using Rust image decoders in Chromium). |
Oh, I didn't mean to imply we would definitely move back to the |
I think the cleanest way would be to have taskchampion as a submodule, a separate shared object seems unnecessarily complex. Or more precisely: I don't see the benefit of going that route ! For the documentation part, it looks a bit trickier, I will look further into it. One idea could be to have independent documentation, and a shared part for the interoperability/integration part etc. |
Also checked some Rust embedding into Cpp: Corrosion + CMake
Rustc + Meson |
Good point regarding the submodule. That would also allow embedders to update at their own rate, rather than having to maintain API compatibility on a shared object. The links to nextpnr and dolphin-rom-thumbnailer are really helpful! I suspect #3272/#3273 (Corrosion) and #3426 (cxx) will be prerequisites to splitting the repo, as they will result in a much simpler means of embedding Taskchampion. Meson sounds cool. but I think we should stick to CMake, just to limit the breadth of the change here. I think another embedder could just as easily use Meson as CMake, even using the CXX configuration provided by Taskchampion. Thanks for your comments on #3273. Hopefully we can get that landed soon. The release of 3.0 is sort of stalled waiting for a Taskwarrior maintainer to take some steps, so we can continue to work forward on this stuff independently. If we finish it before 3.0, that's OK! |
GothenburgBitFactory/taskchampion-sync-server#2 mentions splitting sync-server into its own repo, which would allow it to develop at its own pace separately from the Taskwarrior/Taskchampion repos. Let's do that sooner rather than later? |
2a92b2a bulk-imported sync-server from |
That new repo is https://github.com/GothenburgBitFactory/taskchampion-sync-server by the way. |
This crate has been moved to https://github.com/GothenburgBitFactory/taskchampion-sync-server. The integration-tests repo used the sync server to test integration between taskchampion and the sync-server. We should do that again, but after taskchampion moves to its own repo (GothenburgBitFactory#3209). In the interim, the cross-sync integration test can simply test syncing between local servers, but the snapshot test is no longer useful as the local server does not support snapshots.
This crate has been moved to https://github.com/GothenburgBitFactory/taskchampion-sync-server. The integration-tests repo used the sync server to test integration between taskchampion and the sync-server. We should do that again, but after taskchampion moves to its own repo (#3209). In the interim, the cross-sync integration test can simply test syncing between local servers, but the snapshot test is no longer useful as the local server does not support snapshots.
WIP at https://github.com/GothenburgBitFactory/taskchampion. Still to do:
|
Update: I deleted that repo (which was a fork of taskchampion/taskchampion) and instead transferred taskchampion/taskchampion to GothenburgBitFactory/taskchampion. It looks like I've lost permission there, but have pinged someone to see if I can get permission back, at which time I will un-archive it, push the latest changes, and continue with the work above. |
The idea here is to make Taskwarrior rely on Taskchampion as a dependency, rather than integrating the two into a single codebase.
This comes from #2887 and a few other issues with trying to intermingle Rust and C++ projects. The meaning of "project" is still vague -- is that another repo? Submodules, like with libshared?
We want to optimize for:
cargo
What I mean by that last point is that any change to Taskchampion's public API should be reviewed on its own merits, and not just added "because this Taskwarrior functionality needs it." For example, a
Task::get_ff4_string()
that returned the encoding of a task in FF4 format (the format used in the text-based.task
files) wouldn't make sense, since nothing except Taskwarrior uses that format.The text was updated successfully, but these errors were encountered: