Delivering Quino: a roadmap for deployment
Published by marco on
Note: this article was originally published at Encodo.com in July, 2018.
In a recent article, we outlined a roadmap to .NET Standard and .NET Core. We’ve made really good progress on that front: we have a branch of Quino-Standard that targets .NET Standard for class libraries and .NET Core for utilities and tests. So far, we’ve smoke-tested these packages with Quino-WebApi. Our next steps there are to convert Quino-WebApi to .NET Standard and .NET Core as well. We’ll let you know when it’s ready, but progress is steady and promising.
With so much progress on several fronts, we want to address how we get Quino from our servers to our customers and users.
Currently, we provide access to a private fileshare for customers. They download the NuGet packages for the release they want. They copy these to a local folder and bind it as a NuGet source for their installations.
In order to make a build available to customers, we have to publish that build by deploying it and copying the files to our file share. This process has been streamlined considerably so that it really just involves telling our CI server (TeamCity) to deploy a new release (official or pre-). From there, we download the ZIP and copy it to the fileshare.
Encodo developers don’t have to use the fileshare because we can pull packages directly from TeamCity as soon as they’re available. This is a much more comfortable experience and feels much more like working with nuget.org directly.
The debugging story with external code in .NET is much better than it used to be (spoiler: it was almost impossible, even with Microsoft sources), but it’s not as smooth as it should be. This is mostly because NuGet started out as a packaging mechanism for binary dependencies published by vendors with proprietary/commerical products. It’s only in recent year(s) that packages are predominantly open-source.
In fact, debugging with third-party sources—even without NuGet involved—has never been easy with .NET/Visual Studio.
Currently, all Quino developers must download the sources separately (also available from TeamCity or the file-share) in order to use source-level debugging.
Binding these sources to the debugger is relatively straightforward but cumbersome. Binding these sources to ReSharper is even more cumbersome and somewhat unreliable, to boot. I’ve created the issue Add an option to let the user search for external sources explicitly (as with the VS debugger) when navigating in the hopes that this will improve in a future version. JetBrains has already fixed one of my issues in this are (Navigate to interface/enum/non-method symbol in Nuget-package assembly does not use external sources), so I’m hopeful that they’ll appreciate this suggestion, as well.
The use case I cited in the issue above is,
Developers using NuGet packages that include sources or for which sources are available want to set breakpoints in third-party source code. Ideally, a developer would be able to use R# to navigate through these sources (e.g. via F12) to drill down into the code and set a breakpoint that will actually be triggered in the debugger.
As it is, navigation in these sources is so spotty that you often end up in decompiled code and are forced to use the file-explorer in Windows to find the file and then drag/drop it to Visual Studio where you can set a breakpoint that will work.
The gist of the solution I propose is to have R# ask the user where missing sources are before decompiling (as the Visual Studio debugger does).
Nuget Protocol v3 to the rescue?
There is hope on the horizon, though: Nuget is going to address the debugging/symbols/sources workflow in an upcoming release. The overview is at NuGet Package Debugging & Symbols Improvements and the issue is Improve NuGet package debugging and symbols experience.
Once this feature lands, Visual Studio will offer seamless support for debugging packages hosted on nuget.org. Since we’re using TeamCity to host our packages, we need JetBrains to Add support for NuGet Server API v3 in order to benefit from the improved experience. Currently, our customers are out of luck even if JetBrains releases simultaneously (because our TeamCity is not available publicly).
Quino goes public?
I’ve created an issue for Quino, Make Quino Nuget packages available publicly to track our progress in providing Quino packages to our customers in a more convenient way that also benefits from improvements to the debugging workflow with Nuget Packages.
If we published Quino packages to NuGet (or MyGet, which allows private packages), then we would have the benefit of the latest Nuget protocol/improvements for both ourselves and our customers as soon as it’s available. Alternatively, we could also proxy our TeamCity feed publicly. We’re still considering our options there.
As you can see, we’re always thinking about the development experience for both our developers and our customers. We’re fine-tuning on several fronts to make developing and debugging with Quino a seamless experience for all developers on all platforms.
We’ll keep you posted.