RFC: Changes in Paket Global Tool
Nobody has claimed this yet.
- Dominant language
- F#
- Stars
- 2.1k
- Forks
- 528
- Avg merge
- 1d 12m
- Merged PRs (30d)
- 54
Description
Problem
At the moment we can install Paket as a global .Net Core tool with dotnet tool install paket -g. It's really nice delivery strategy consistent with the direction in which whole .Net world is moving and consistent with the tool distribution strategies in many other ecosystems.
However it currently installs particular version of Paket which means
- You can't pin version of Paket in the repo - it's not respecting Paket version pinning in
paket.dependeciesfile - You don't get updates if you don't pin Paket - getting updates often was thing in Paket since I started using it - either by old school build scripts calling
paket.bootstrapper.exeback in the days, or by using Bootstrapper in magic mode nowadays.
This is hugely problematic because it's different from the "normal" Paket behavior.
Proposed Solution
My proposal would be distributing Paket.Bootstrapper (in magic mode, called paket) instead of Paket as a global tool.
This would solve per-repo versioning problem we have right now - Bootstrapper in magic mode is either respecting pinning in paket.dependencies files or getting latest version. In such case updates of the Paket .Net Tool (dotnet tool update paket -g) would be necessary only when we have Bootstrapper update (which is not as often as Paket update)
Work plan
- Update Bootstrapper to .Net Core, pack as tool (Partially already done - https://github.com/fsprojects/Paket/blob/master/src/Paket.Bootstrapper.preview3/Paket.Bootstrapper.csproj)
- Distribute Bootstrapper on Core as a Global Tool called
paket(due to behavior of the Bootstrapper Magic Mode this shouldn't be a breaking change for users) - Update documentation to make Bootstrapper on Core as Global Tool suggested way to use Paket - I personally think it's step forward from current state, will ensure that Paket is working "as expected" in modern .Net ecosystem. Pushing global tools seems to be working well for FAKE too.
- Make some developer advocacy effort (blog post, talks on the conferences, etc) to promote this new way of distributing Paket. As shown by some recent twitter conversations people don't even know about Magic Mode and it's been introduced years ago.
CC: @forki @isaacabraham @baronfel @vbfox @enricosada
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with src/Paket.Bootstrapper.preview3/Paket.Bootstrapper.csproj and the existing Bootstrapper magic-mode behavior described in the issue. Review how paket.dependencies pinning and latest-version lookup work, then assess the global tool packaging and documentation changes in the work plan. Done means the Bootstrapper is distributed as the paket global tool without breaking the stated versioning behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- fsharp
- Domain
- cli, devtools
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 25/100