@@ -55,6 +55,7 @@ func (release PyPiRelease) Version() *semver.Version {
5555}
5656
5757func getAllVersionsForInstaller (installer string ) retrieve.GetAllVersionsFunc {
58+ fmt .Printf ("Handling: %s\n " , installer )
5859 if installer == "miniconda3" {
5960 return getAllMinicondaVersions
6061 }
@@ -63,6 +64,10 @@ func getAllVersionsForInstaller(installer string) retrieve.GetAllVersionsFunc {
6364 return getAllUvVersions
6465 }
6566
67+ if installer == "pixi" {
68+ return getAllPixiVersions
69+ }
70+
6671 return func () (versionology.VersionFetcherArray , error ) {
6772
6873 var pypiMetadata PyPiProductMetadataRaw
@@ -349,7 +354,7 @@ func generateMinicondaMetadata(versionFetcher versionology.VersionFetcher) ([]ve
349354 }}, nil
350355}
351356
352- type UvRelease struct {
357+ type GitHubRelease struct {
353358 version * semver.Version
354359 Arch string
355360 SourceURL string
@@ -359,15 +364,15 @@ type UvRelease struct {
359364 BinarySHA256 string
360365}
361366
362- func (release UvRelease ) Version () * semver.Version {
367+ func (release GitHubRelease ) Version () * semver.Version {
363368 return release .version
364369}
365370
366- func getAllUvVersions ( ) (versionology.VersionFetcherArray , error ) {
371+ func getGitHubVersions ( org string , project string , archAsset string ) (versionology.VersionFetcherArray , error ) {
367372 client := github .NewClient (nil )
368373
369- opt := & github.ListOptions {Page : 1 , PerPage : 2 }
370- releases , _ , err := client .Repositories .ListReleases (context .Background (), "astral-sh" , "uv" , opt )
374+ opt := & github.ListOptions {Page : 1 , PerPage : 4 }
375+ releases , _ , err := client .Repositories .ListReleases (context .Background (), org , project , opt )
371376
372377 if err != nil {
373378 return nil , err
@@ -376,7 +381,7 @@ func getAllUvVersions() (versionology.VersionFetcherArray, error) {
376381 var result versionology.VersionFetcherArray
377382
378383 for _ , release := range releases {
379- version , err := semver .NewVersion (* release .Name )
384+ version , err := semver .NewVersion (* release .TagName )
380385 if err != nil {
381386 return nil , err
382387 }
@@ -394,14 +399,12 @@ func getAllUvVersions() (versionology.VersionFetcherArray, error) {
394399 return nil , errors .New ("Failed to find source asset" )
395400 }
396401
397- archAsset := "uv-%s-unknown-linux-gnu.tar.gz"
398-
399402 for inArch , outArch := range ArchMap {
400403 assetName := fmt .Sprintf (archAsset , inArch )
401404 for _ , asset := range release .Assets {
402405 if * asset .Name == assetName {
403406 result = append (result ,
404- UvRelease {
407+ GitHubRelease {
405408 version : version ,
406409 Arch : outArch ,
407410 BinaryURL : * asset .BrowserDownloadURL ,
@@ -419,11 +422,15 @@ func getAllUvVersions() (versionology.VersionFetcherArray, error) {
419422 return result , nil
420423}
421424
425+ func getAllUvVersions () (versionology.VersionFetcherArray , error ) {
426+ return getGitHubVersions ("astral-sh" , "uv" , "uv-%s-unknown-linux-gnu.tar.gz" )
427+ }
428+
422429func generateUvMetadata (versionFetcher versionology.VersionFetcher ) ([]versionology.Dependency , error ) {
423430 version := versionFetcher .Version ().String ()
424- uvRelease , ok := versionFetcher .(UvRelease )
431+ uvRelease , ok := versionFetcher .(GitHubRelease )
425432 if ! ok {
426- return nil , errors .New ("expected a UvRelease " )
433+ return nil , errors .New ("expected a GitHubRelease " )
427434 }
428435
429436 var licenseIDsAsInterface []interface {}
@@ -450,6 +457,43 @@ func generateUvMetadata(versionFetcher versionology.VersionFetcher) ([]versionol
450457 }}, nil
451458}
452459
460+ func getAllPixiVersions () (versionology.VersionFetcherArray , error ) {
461+ return getGitHubVersions ("prefix-dev" , "pixi" , "pixi-%s-unknown-linux-musl.tar.gz" )
462+ }
463+
464+ func generatePixiMetadata (versionFetcher versionology.VersionFetcher ) ([]versionology.Dependency , error ) {
465+ version := versionFetcher .Version ().String ()
466+ pixiRelease , ok := versionFetcher .(GitHubRelease )
467+ if ! ok {
468+ return nil , errors .New ("expected a GitHubRelease" )
469+ }
470+
471+ fmt .Printf ("version: %s\n " , version )
472+
473+ var licenseIDsAsInterface []interface {}
474+ licenseIDsAsInterface = append (licenseIDsAsInterface , "BSD-3-Clause" )
475+ configMetadataDependency := cargo.ConfigMetadataDependency {
476+ CPE : fmt .Sprintf ("cpe:2.3:a:pixi:pixi:%s:*:*:*:*:python:*:*" , version ),
477+ Checksum : pixiRelease .BinarySHA256 ,
478+ ID : "pixi" ,
479+ Licenses : licenseIDsAsInterface ,
480+ Name : "pixi" ,
481+ OS : "linux" ,
482+ Arch : pixiRelease .Arch ,
483+ PURL : retrieve .GeneratePURL ("pixi" , version , pixiRelease .SourceSHA256 , pixiRelease .SourceURL ),
484+ Source : pixiRelease .SourceURL ,
485+ SourceChecksum : pixiRelease .SourceSHA256 ,
486+ Stacks : []string {"*" },
487+ URI : pixiRelease .BinaryURL ,
488+ Version : version ,
489+ }
490+
491+ return []versionology.Dependency {{
492+ ConfigMetadataDependency : configMetadataDependency ,
493+ SemverVersion : versionFetcher .Version (),
494+ }}, nil
495+ }
496+
453497// Taken from libdependency.retrieve.retrieval
454498// https://github.com/joshuatcasey/libdependency/blob/main/retrieve/retrieval.go
455499func toWorkflowJson (item any ) (string , error ) {
@@ -492,6 +536,7 @@ func main() {
492536 "poetry" : generatePoetryMetadata ,
493537 "miniconda3" : generateMinicondaMetadata ,
494538 "uv" : generateUvMetadata ,
539+ "pixi" : generatePixiMetadata ,
495540 }
496541
497542 var dependencies []versionology.Dependency
0 commit comments