-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
Guide folks to WinGet by default for Windows installations in README #11456
Comments
@zanieb wanted to bring the conversation here since the PR is closed. How can I help the team maintain an official |
Thanks for switching to the issue — seems better to chat here and I'm happy to talk about it. A couple functional concerns (other team members may have more):
Do you have thoughts about those? Regarding maintaining an official It looks like in, e.g., microsoft/winget-pkgs#226972, it can take some iterative work to get a release out? I would be disappointed if our recommended installation method on Windows took significantly longer to get new versions than other channels. |
Sorry if this is a naive question (coming from someone only occasionally developing on windows), but how universally available is winget compared to our requirements for a powershell installation? Are there cases where a user would have to install winget manually first, for example for a server or containers? Are there any other differences, for example related to PATH precedence or permissions we have to consider with a winget installation? |
I'll tag in @crutkas here as the PM driving the Windows developer story (which includes I fully agree that changing installers would be super jarring. I suspect that if one would use In terms of package maintenance, I don't want to overly trivialize it, but it's essentially a manifest that needs to define the artifacts that you already provide through your releases. There is tooling available that simplifies the process. To @konstin's question, I'll let the |
Maybe. I know, for example, that the A related question: are there people on your team that would invest into making this work well enough for us to recommend it as the default? If so, that would be helpful for prioritization. I basically agree with the premise that it'd be great to avoid bypassing system policies for the installer to work consistently. I also worry a little about installing to a different path. Installing to a consistent location across platforms is generally a better experience for our users. But, more importantly, |
Adding context: the prebuilt "trampoline" binaries we ship on Windows currently rely on a being able to set the utf8 codepage in manifests, which is apparently already making us require win10 1903 which I consider acceptable. |
Related: I think it is worth considering IMO,
|
In this case, Example configs: |
It doesn't, but our updater relies on metadata about the installation that the installer writes.
This is.. interesting. I'm not necessarily opposed to that, but it'd be a significant shift in how we're distributing uv (and Ruff) and I'm not sure we have the resources to work on that right now. |
Ah okay, this makes a lot more sense... thanks for correcting my assumption!
That's completely understandable. Overall, I love the portability of uv. An MSI or EXE installer seems like it would be overkill. |
WinGet packages actually are not real packages. They are yaml manifests created according to schema with meta information including Installer URL. And there is no repository with binary files, only tons of yamls on GitHub. To add the program or a new version in WinGet, someone (developer, bot or user) has to just create a PR with the correct meta. A lot of software isn't represented in WinGet, a lot of updated with bots like uv that just parse software sites or regular users that use tools like Komac and a few are updated by developers like vim or yazi with winget-releaser GitHub action. WinGet allows consistently upgrade all software with just one command I propose at least to publish a new version in WinGet using winget-releaser by adding it in uv CI. |
Currently, the manifest over at winget-pkgs specifies that the application is a portable application inside of a zip file. What this means is that WinGet handles the "installation" of the package by extracting the contents of the zip file, adding the executable to PATH, and (most importantly) creates the registry entries to make it appear in Control Panel / Add and Remove Programs. The registry entries are the most important part for users of WinGet, as they are what WinGet uses to determine the installed version of an application. It would be possible to change the manifest at winget-pkgs to call
Regarding releasing new versions to / through WinGet, it is fairly straightforward as others have mentioned. The most reliable way is to have a GitHub action triggered on release that uses winget-create (Microsoft's own tool) to push a PR up to the winget-pkgs repository. This really only requires
This creates the mmanifest (i.e metadata files) and raises them as a PR into winget-pkgs. Once a PR is created at winget-pkgs, the pipelines there will run a series of validations using the new manifest to ensure the application installs successfully. This is where the iterations @zanieb mentioned come in. First, the installers must pass a SmartScreen check - if the URLs to download the application don’t have enough reputation on SmartScreen, the install fails (but, retrying every 12 hours or so means it usually succeeds eventually, once the URLs have gone through SmartScreen's process). After that, the application is installed and a number of malware checks are performed. Finally, the installed application is launched to be sure that it was installed and runs without issue, then a final system scan is performed. If any of the validations fail, the PR is prevented from merging and the new version would not be available. If the validations succeed, a moderator must review the PR to ensure the quality of the metadata in the manifest. After passing the pipeline and being approved by a moderator, the manifest enters the publishing queue and is generally published within the next hour. |
Summary
Currently, the
README
is guiding folks to run a PowerShell script, bypassing the local execution policy. This is generally considered a bad practice because it conditions users to run arbitrary code without controls. Recommend switching towinget
as the default for Windows, especially since this is already covered in the documentation.Happy to open a PR for this as well - should be an easy fix.
This is also related to #11021, but is just not covered in the README
Example
No response
The text was updated successfully, but these errors were encountered: