question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

RFC: Changes in Paket Global Tool

See original GitHub issue

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

  1. You can’t pin version of Paket in the repo - it’s not respecting Paket version pinning in paket.dependecies file
  2. 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.exe back 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

Issue Analytics

  • State:open
  • Created 4 years ago
  • Comments:8 (7 by maintainers)

github_iconTop GitHub Comments

1reaction
forkicommented, Sep 8, 2019

Ok let’s do this!

0reactions
matthidcommented, Nov 9, 2019

As far as I know they don’t provide always update (‘*’ version) mode that bootstrapper does when used without pinning

Users should get into the habbit of pinning the version anyway. We cannot keep telling people to use a lockfile and then use a floating version in paket.

They’re not using pinning from paket.dependencies file which is obviously better than some random json file created by MSFT… and is breaking change for many users

It isn’t breaking, we’d just change the recommendation at this point. The rest is not really an argument. Can you say “why” having a ‘common’/standardized way to add dotnet based tools to your repository is a bad thing? Or “why” we should continue investing time building our own?

Having the version in the deps file was imho always a “hacky” way of doing things, as long as you have to manage the paket version by hand it wasn’t really “that” useful (you could have used a bootstrapper argument just as well in build.sh for example). Now you can use dotnet sdk just like lots of other tools.

Read more comments on GitHub >

github_iconTop Results From Across the Web

RFC 1160: Internet Activities Board
The successful implementation of packet radio and packet satellite ... ranging from the Human Genome and Global Change programs to educational applications.
Read more >
RFC 3550 - RTP: A Transport Protocol for Real-Time ...
Most of the text in this memorandum is identical to RFC 1889 which it obsoletes. There are no changes in the packet formats...
Read more >
HTTP - Wikipedia
Development of early HTTP Requests for Comments (RFCs) started a few years later in a coordinated effort by the Internet Engineering Task Force...
Read more >
Description of Windows TCP features - Windows Server
Summary. This article describes the following TCP features in Windows: TCP window size; TCP options now supported; Windows scaling - RFC 1323 ...
Read more >
RADIUS Change of Authorization [Support]
RADIUS Change of Authorization. The RADIUS Change of Authorization (CoA) feature provides a mechanism to change the attributes of an ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found