Created
April 7, 2023 17:32
-
-
Save ImaginaryDevelopment/803880edf23786a11182f63635c57e36 to your computer and use it in GitHub Desktop.
turn paket into nuget proj for dependabot
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// target a paket.lock and generate a nuget packages.config | |
// may have to mate paket.lock with specific project files(paket.references), or generate a dummy project file | |
// consider paket.dependencies ? | |
// #r Paket.Core 7.2.1 | |
let targetSlnRoot = @"C:\projects\safe" | |
// let lockFile = Path.Combine(targetSlnRoot, "paket.lock") | |
let depFile = Path.Combine(targetSlnRoot, "paket.dependencies") | |
let getPackageInfo (dep:Paket.Dependencies) = | |
let lfData = dep.GetLockFile() | |
lfData.InstalledPackages | |
//|> List.truncate 20 | |
let _getPackageInfoByProject (dep:Paket.Dependencies) = | |
getPackageInfo dep | |
|> List.map(fun (gn, pn, semVer) -> | |
gn, pn, semVer, dep.FindReferencesFor(gn.Name, pn.Name) | |
) | |
|> List.groupBy(fun (_,_,_,projs) -> | |
projs | |
) | |
|> List.map(fun (g,x) -> | |
g, x |> List.map(fun (gn,pn,semVer,_) -> gn,pn,semVer) | |
) | |
let generateItemGroupItems indent (packages:(Paket.Domain.PackageName*Paket.SemVerInfo) list) = | |
packages | |
|> List.map(fun (pn,svi) -> | |
$"""{indent}<PackageReference Include="{pn.Name}" Version="{svi.AsString}" />""" | |
) | |
//let generateItemGroups (pi:Map<Paket.Domain.GroupName,Paket.Domain.PackageName*Paket.SemVerInfo>) = | |
() | |
let dep = Paket.Dependencies(depFile) | |
//dep.GetGroups() | |
// has Groups, and installed packages props | |
let generateProjFileText (sdk:string) (dep:Paket.Dependencies) = | |
let igi = | |
getPackageInfo dep | |
|> List.groupBy(fun (gn,_,_) -> | |
gn | |
) | |
|> List.map(fun (g,items) -> | |
g, items |> List.map(fun (_,pi,semVer) -> | |
pi,semVer | |
) |> generateItemGroupItems " " | |
) | |
let sb = StringBuilder() | |
let addLine (x:string) = sb.AppendLine x |> ignore<StringBuilder> | |
addLine """<?xml version="1.0" encoding="utf-8"?>""" | |
addLine $"""<Project Sdk="%s{sdk}">""" | |
igi | |
|> List.iter(fun (g,items) -> | |
addLine $""" <ItemGroup><!-- Group: {g.Name} -->""" | |
items | |
|> List.iter(fun x -> | |
addLine x | |
) | |
addLine " </ItemGroup>" | |
) | |
addLine "</Project>" | |
sb.ToString() | |
generateProjFileText "Microsoft.Net.Sdk" dep | |
|> Dump | |
|> ignore | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment