Skip to content

Creating a Sleet "virtual" registry #187

@JustinGrote

Description

@JustinGrote

I'm working on a way to speed up the PowerShell gallery, as it currently takes 500ms per individual request as it is basically one giant SQL server.

Initially I built a nuget v2 -> v3 caching bridge (https://github.com/JustinGrote/pwshgallery) but it's becoming more and more clear to me that having a static feed would help immensely in terms of both hosting and caching scale.

What I would like to do is this:

  1. Get all the v2 metadata for 300k packages on the gallery.
  2. Build "virtual" packages that are just the metadata with a content link to the azure CDN for the actual nuget package
  3. Generate the Registrations/PackageIndexes/etc.

What I don't want to do is download all 300K packages to do the push, which seems to be what is currently required, I just want the manifest data but have it point to the existing Azure CDN links for the packages. (that part is plenty fast)

Based on what I read in the code (which I find really well structured, nicely done!), it seems what I effectively would want to do is create a new ISleetFileSystem for both the source and destination.

The source:

  • Would read from my v2 Packages data and produce the package manifest information rather than reading directly from nupkg files.

The destination:

  • Would publish for files but skip the nupkg publish step.

And then do incremental updates from there.

Do I have that about right? Is it feasible or is there a better approach?

End Goal
I can run sleet (either programattic or CLI) that takes a big ol' nugetv2 Packages Feed output, converts the output to nuget v3 manifest format, creates the manifests, and then publishes those either locally or to an azure storage account but doesnt publish the packages, instead all the content URLs point to Azure CDN.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions