Skip to content

Commit f5fe75e

Browse files
committed
Add few more recipe packages
1 parent fcca0f0 commit f5fe75e

File tree

6 files changed

+75
-8
lines changed

6 files changed

+75
-8
lines changed

.nuke/build.schema.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
"CreateGithubRelease",
3434
"DownloadTestFixtures",
3535
"GenerateRoslynRecipes",
36+
"GithubRelease",
3637
"GradleAssemble",
3738
"GradleAssembleAndTest",
3839
"GradleBuild",
@@ -101,6 +102,7 @@
101102
"PublishServer",
102103
"Restore",
103104
"SetDefaultModule",
105+
"SignalIfTestcaseOutputExists",
104106
"StopServer",
105107
"Test"
106108
]
@@ -184,6 +186,10 @@
184186
"Release"
185187
]
186188
},
189+
"GitHubToken": {
190+
"type": "string",
191+
"description": "GitHub personal access token with access to the repo"
192+
},
187193
"Module": {
188194
"type": "string",
189195
"description": "Target Module"

Rewrite/src/Rewrite.MSBuild/RecipieAssemblyResolver.cs renamed to Rewrite/src/Rewrite.MSBuild/RecipeAssemblyResolver.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
using System.Reflection;
22
using System.Runtime.InteropServices;
33
using System.Runtime.Loader;
4+
using NMica.Utils.IO;
45

56
namespace Rewrite.MSBuild;
67

7-
public class RecipieAssemblyResolver : MetadataAssemblyResolver
8+
public class RecipeAssemblyResolver : MetadataAssemblyResolver
89
{
910
private PathAssemblyResolver _resolver;
10-
public RecipieAssemblyResolver()
11+
public RecipeAssemblyResolver(IEnumerable<AbsolutePath> additionalAssemblies)
1112
{
1213

1314
var runtimeAssemblies = Directory.GetFiles(RuntimeEnvironment.GetRuntimeDirectory(), "*.dll");
1415
var currentDirAssemblies = Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, "*.dll");
15-
var allAssemblies = runtimeAssemblies.Union(currentDirAssemblies);
16+
var allAssemblies = runtimeAssemblies.Union(currentDirAssemblies).Union(additionalAssemblies.Select(x => (string)x));
17+
1618
_resolver = new PathAssemblyResolver(allAssemblies);
1719
}
1820

Rewrite/src/Rewrite.MSBuild/RecipeExecutionContext.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ private List<RecipeDescriptor> FindRecipesInAssemblies()
161161
// var currentDirAssemblies = Directory.EnumerateFiles(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)!, "*.dll");
162162
// var allAssemblies = runtimeAssemblies.Union(currentDirAssemblies);
163163
// var resolver = new PathAssemblyResolver(runtimeAssemblies);
164-
var resolver = new RecipieAssemblyResolver();
164+
var resolver = new RecipeAssemblyResolver(_assemblies.Values);
165165
using var mlc = new MetadataLoadContext(resolver);
166166
var mlcRecipeAttributeAssembly = mlc.LoadFromAssemblyPath(typeof(RecipesAttribute).Assembly.Location);
167167
var mlcRecipeAttributeType = mlcRecipeAttributeAssembly.GetType(typeof(RecipesAttribute).FullName!)!;
@@ -200,10 +200,11 @@ private List<RecipeDescriptor> FindRecipesInAssemblies()
200200

201201

202202
var analyzerRecipes = metadataAssemblies
203-
.SelectMany(x => x.ExportedTypes)
203+
.SelectMany(x => x.DefinedTypes)
204204
.Where(type => type.GetCustomAttributesData().Any(attr => attr.AttributeType == mlcDiagnosticAnalyzerAttributeType))
205205
.Select(x =>
206206
{
207+
207208
var assembly = LoadFromAssemblyPath(x.Assembly.Location);
208209
_recipeAssemblies.Add(assembly);
209210
return assembly.GetType(x.FullName!)!;
@@ -226,7 +227,7 @@ private List<RecipeDescriptor> FindRecipesInAssemblies()
226227

227228

228229
var fixersById = metadataAssemblies
229-
.SelectMany(x => x.ExportedTypes)
230+
.SelectMany(x => x.DefinedTypes)
230231
.Where(type => type.GetCustomAttributesData().Any(attr => attr.AttributeType == mlcCodeFixupAttributeType))
231232
.Select(x =>
232233
{

Rewrite/src/Rewrite.MSBuild/RecipeManager.cs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,18 @@ public async Task<RecipePackageInfo> InstallRecipePackage(
6262
packageSources: packageSources,
6363
cancellationToken: cancellationToken);
6464
}
65-
65+
public async Task<RecipePackageInfo> InstallRecipePackage(
66+
string packageId,
67+
bool includePrerelease = false,
68+
List<PackageSource>? packageSources = null,
69+
CancellationToken cancellationToken = default)
70+
{
71+
return await InstallRecipePackage(
72+
new LibraryRange(packageId),
73+
includePrerelease,
74+
packageSources,
75+
cancellationToken);
76+
}
6677
public async Task<RecipePackageInfo> InstallRecipePackage(
6778
string packageId,
6879
string packageVersion,
@@ -318,7 +329,7 @@ private async Task<LockFile> RestoreProject(PackageSpec packageSpec, CachingSour
318329
if(targetFolder is null)
319330
return [];
320331
var targetFilesRegex = new Regex($"^{targetFolder}.+");
321-
var files = lib.Files.Where(x => targetFilesRegex.IsMatch(x));
332+
var files = lib.Files.Where(x => targetFilesRegex.IsMatch(x) & x.EndsWith(".dll"));
322333

323334
return files.Select(file => (Folder: lib.Path, File: file, PackageIdentity: new PackageIdentity(lib.Name, lib.Version)));
324335
})
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System.Diagnostics.CodeAnalysis;
2+
using NuGet.Configuration;
3+
using Rewrite.Core;
4+
using Serilog;
5+
6+
namespace Rewrite.MSBuild.Tests;
7+
8+
public class ReportingTests : BaseTests
9+
{
10+
[Test]
11+
[Explicit]
12+
public async Task RecipePackageAnalysisReport()
13+
{
14+
Log.Logger = new LoggerConfiguration().CreateLogger();
15+
16+
var recipeManager = CreateObject<RecipeManager>();
17+
string[] feeds =
18+
[
19+
"https://api.nuget.org/v3/index.json"
20+
];
21+
22+
var packageSources = feeds.Select(x => new PackageSource(x)).ToList();
23+
var packages = new []
24+
{
25+
"Microsoft.CodeAnalysis.NetAnalyzers", //https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/categories
26+
"Roslynator.Analyzers", //https://github.com/dotnet/roslynator
27+
"Meziantou.Analyzer", //https://github.com/meziantou/Meziantou.Analyzer
28+
"StyleCop.Analyzers",
29+
// "SonarAnalyzer.CSharp",
30+
// "AsyncFixer",
31+
// "ErrorProne.NET.CoreAnalyzers",
32+
"WpfAnalyzers",
33+
};
34+
var totalRecipes = 0;
35+
foreach (var nugetPackage in packages)
36+
{
37+
var packageInfo = await recipeManager.InstallRecipePackage(nugetPackage, includePrerelease: false);
38+
totalRecipes += packageInfo.Recipes.Count;
39+
Console.WriteLine($"{packageInfo.Package}: {packageInfo.Recipes.Count}");
40+
}
41+
Console.WriteLine($"Total: {totalRecipes}");
42+
43+
}
44+
}

_build/Build.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,8 @@ grep dotnet |
307307
("Microsoft.CodeAnalysis.NetAnalyzers", "9.0.0"), //https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/categories
308308
("Roslynator.Analyzers", "4.13.1"), //https://github.com/dotnet/roslynator
309309
("Meziantou.Analyzer", "2.0.201"), //https://github.com/meziantou/Meziantou.Analyzer
310+
("StyleCop.Analyzers", "1.1.118"), //https://github.com/DotNetAnalyzers/StyleCopAnalyzers/tree/master
311+
("WpfAnalyzers", "4.1.1"),
310312
};
311313

312314
var installablePackages = await Task.WhenAll(packages.Select(x => recipeManager.InstallRecipePackage(x.Package, x.Version, packageSources: packageSources)));
@@ -545,6 +547,7 @@ GradleSettings ApplyCommonGradleSettings(GradleSettings options) => options
545547
Target GithubRelease => _ => _
546548
.Description("Creates a GitHub release (or amends existing)")
547549
.Requires(() => GitHubToken)
550+
.After(Pack, NugetPush, GradlePublish, Test, GradleAssembleAndTest, GradleTest)
548551
.Executes(async () =>
549552
{
550553
await CreateGitHubRelease($"v{Version.SemVer1}");

0 commit comments

Comments
 (0)