Skip to content

Commit 9737668

Browse files
committed
(#387) Added support for Central Package Mangagement
1 parent f4e34a0 commit 9737668

16 files changed

+281
-51
lines changed

src/Directory.Build.props

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<Project>
2+
<PropertyGroup>
3+
<LangVersion>latest</LangVersion>
4+
</PropertyGroup>
5+
</Project>

src/Generators/Generators.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net9.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
</PropertyGroup>

src/Guidelines/build/CakeInternalReferences.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
ProjectType="$(CakeContribGuidelinesProjectType)"
1717
CakeVersion="$(CakeContribGuidelinesOverrideTargetFrameworkCakeVersion)"
1818
References="@(PackageReference)"
19+
PackageVersions="@(PackageVersion)"
1920
NoWarn="$(NoWarn)"
2021
WarningsAsErrors="$(WarningsAsErrors)"
2122
/>

src/Guidelines/build/RecommendedCakeVersion.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
ProjectFile="$(MSBuildProjectFullPath)"
2323
RecommendedVersion="$(RecommendedCakeVersion)"
2424
References="@(PackageReference)"
25+
PackageVersions="@(PackageVersion)"
2526
Omitted="@(CakeContribGuidelinesOmitRecommendedCakeVersion)"
2627
ReferencesToCheck="@(CakeReferenceToCheck)"
2728
ProjectType="$(CakeContribGuidelinesProjectType)"

src/Guidelines/build/TargetFrameworkVersions.targets

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
<TargetFrameworkVersions
1717
ProjectFile="$(MSBuildProjectFullPath)"
1818
References="@(PackageReference)"
19+
PackageVersions="@(PackageVersion)"
1920
TargetFramework="$(TargetFramework)"
2021
TargetFrameworks="$(TargetFrameworks)"
2122
Omitted="@(CakeContribGuidelinesOmitTargetFramework)"

src/Tasks.IntegrationTests/E2eTests.cs

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ public void Referencing_Cake_Core_with_PrivateAssets_results_in_no_error()
121121
{
122122
// given
123123
fixture.WithoutDefaultCakeReference();
124-
fixture.WithPackageReference("Cake.Core", "0.38.5", "all");
124+
fixture.WithPackageReference("Cake.Core", fixture.DefaultCakeVersion, "all");
125125

126126
// when
127127
var result = fixture.Run();
@@ -136,7 +136,7 @@ public void Referencing_Cake_Core_without_PrivateAssets_results_in_CCG0004_error
136136
{
137137
// given
138138
fixture.WithoutDefaultCakeReference();
139-
fixture.WithPackageReference("Cake.Core", "0.38.5");
139+
fixture.WithPackageReference("Cake.Core", fixture.DefaultCakeVersion);
140140

141141
// when
142142
var result = fixture.Run();
@@ -221,22 +221,27 @@ public void Missing_Required_Target_results_in_CCG0007_error()
221221
// then
222222
result.IsErrorExitCode.ShouldBeTrue();
223223
result.ErrorLines.ShouldContain(l => l.IndexOf("CCG0007", StringComparison.Ordinal) > -1);
224-
result.ErrorLines.ShouldContain(l => l.IndexOf("netstandard2.0", StringComparison.Ordinal) > -1);
224+
result.ErrorLines.ShouldContain(l => l.IndexOf(fixture.DefaultTargetFrameworkForModules, StringComparison.Ordinal) > -1);
225225
}
226226

227227
[Fact]
228228
public void Missing_Suggested_Target_results_in_CCG0007_warning()
229229
{
230+
var missingTfm = fixture.DefaultTargetFrameworksForAddins
231+
.Split(";", StringSplitOptions.RemoveEmptyEntries)
232+
.First();
233+
var allTfmButMissing = fixture.DefaultTargetFrameworksForAddins.Replace(missingTfm, string.Empty);
234+
230235
// given
231-
fixture.WithTargetFrameworks("netstandard2.0");
236+
fixture.WithTargetFrameworks(allTfmButMissing);
232237

233238
// when
234239
var result = fixture.Run();
235240

236241
// then
237-
result.IsErrorExitCode.ShouldBeFalse();
238-
result.WarningLines.ShouldContain(l => l.IndexOf("CCG0007", StringComparison.Ordinal) > -1);
239-
result.WarningLines.ShouldContain(l => l.IndexOf("net461", StringComparison.Ordinal) > -1);
242+
result.IsErrorExitCode.ShouldBeTrue();
243+
result.ErrorLines.ShouldContain(l => l.IndexOf("CCG0007", StringComparison.Ordinal) > -1);
244+
result.ErrorLines.ShouldContain(l => l.IndexOf(missingTfm, StringComparison.Ordinal) > -1);
240245
}
241246

242247
[Fact]
@@ -246,6 +251,7 @@ public void Missing_Suggested_Target_net5_for_Cake_v100_results_in_CCG0007_warni
246251
fixture.WithoutDefaultCakeReference();
247252
fixture.WithPackageReference("Cake.Core", "1.0.0", "all");
248253
fixture.WithTargetFrameworks("netstandard2.0;net461");
254+
fixture.OmitRecommendedCakeVersion();
249255

250256
// when
251257
var result = fixture.Run();
@@ -351,7 +357,7 @@ public void ProjectType_When_Assembly_Is_Module_Is_Module()
351357
{
352358
// given
353359
fixture.WithAssemblyName("Cake.Buildsystems.Module");
354-
fixture.WithTargetFrameworks("netstandard2.0");
360+
fixture.WithTargetFrameworks(fixture.DefaultTargetFrameworkForModules);
355361
fixture.WithCustomContent(@"
356362
<Target Name=""ForTest""
357363
AfterTargets=""BeforeBuild""
@@ -376,7 +382,7 @@ public void ProjectType_When_Assembly_Is_Module_Is_Module()
376382
public void ProjectType_When_PackageId_Is_Module_Is_Module()
377383
{
378384
// given
379-
fixture.WithTargetFrameworks("netstandard2.0");
385+
fixture.WithTargetFrameworks(fixture.DefaultTargetFrameworkForModules);
380386
fixture.WithCustomContent(@"
381387
<PropertyGroup>
382388
<PackageId>Cake.Buildsystems.Module</PackageId>
@@ -498,7 +504,7 @@ public void Packaging_Different_Types_Should_Add_The_Correct_Icon(string assembl
498504
fixture.WithAssemblyName(assemblyName);
499505
if (isModule)
500506
{
501-
fixture.WithTargetFrameworks("netstandard2.0");
507+
fixture.WithTargetFrameworks(fixture.DefaultTargetFrameworkForModules);
502508
}
503509
fixture.WithCustomContent(@"
504510
<PropertyGroup>
@@ -537,7 +543,7 @@ public void Packaging_Different_Types_Should_Add_The_Correct_IconUrl_To_Properti
537543
fixture.WithAssemblyName(assemblyName);
538544
if (isModule)
539545
{
540-
fixture.WithTargetFrameworks("netstandard2.0");
546+
fixture.WithTargetFrameworks(fixture.DefaultTargetFrameworkForModules);
541547
}
542548
fixture.WithCustomContent(@"
543549
<PropertyGroup>
@@ -589,7 +595,7 @@ public void Missing_Module_Tag_Should_Raise_CCG0008_For_Modules()
589595
<PackageId>Cake.Buildsystems.Module</PackageId>
590596
</PropertyGroup>");
591597
fixture.WithTags("cake build cake-build script");
592-
fixture.WithTargetFrameworks("netstandard2.0");
598+
fixture.WithTargetFrameworks(fixture.DefaultTargetFrameworkForModules);
593599

594600
// when
595601
var result = fixture.Run();
@@ -651,6 +657,7 @@ public void Incorrect_Cake_Reference_Should_Raise_CCG0009()
651657
// given
652658
fixture.WithoutDefaultCakeReference();
653659
fixture.WithPackageReference("cake.core", "0.38.5", "All");
660+
fixture.WithTargetFrameworks("netstandard2.0;net461;net5.0");
654661

655662
// when
656663
var result = fixture.Run();
@@ -667,6 +674,7 @@ public void Incorrect_But_Omitted_Cake_Reference_Should_Not_Raise_CCG0009()
667674
// given
668675
fixture.WithoutDefaultCakeReference();
669676
fixture.WithPackageReference("cake.core", "0.38.5", "All");
677+
fixture.WithTargetFrameworks("netstandard2.0;net461;net5.0");
670678
fixture.WithCustomContent(@"
671679
<ItemGroup>
672680
<CakeContribGuidelinesOmitRecommendedCakeVersion Include=""Cake.Core"" />
@@ -680,29 +688,11 @@ public void Incorrect_But_Omitted_Cake_Reference_Should_Not_Raise_CCG0009()
680688
result.WarningLines.ShouldBeEmpty();
681689
}
682690

683-
[Fact]
684-
public void Missing_Suggested_Target_results_not_in_CCG0007_warning_if_NoWarn_is_set()
685-
{
686-
// given
687-
fixture.WithTargetFrameworks("netstandard2.0");
688-
fixture.WithCustomContent(@"
689-
<PropertyGroup>
690-
<NoWarn>1701;1702;ccg0007</NoWarn>
691-
</PropertyGroup>");
692-
693-
// when
694-
var result = fixture.Run();
695-
696-
// then
697-
result.IsErrorExitCode.ShouldBeFalse();
698-
result.WarningLines.ShouldNotContain(l => l.IndexOf("CCG0007", StringComparison.Ordinal) > -1);
699-
}
700-
701691
[Fact]
702692
public void Missing_Suggested_Target_results_in_CCG0007_error_if_WarningsAsErrors_is_set()
703693
{
704694
// given
705-
fixture.WithTargetFrameworks("netstandard2.0");
695+
fixture.WithTargetFrameworks(fixture.DefaultTargetFrameworkForModules);
706696
fixture.WithCustomContent(@"
707697
<PropertyGroup>
708698
<WarningsAsErrors>NU1605;ccg0007</WarningsAsErrors >
@@ -738,5 +728,21 @@ public void Missing_Required_Target_results_in_CCG0007_error_if_Cake_Version_Is_
738728
err.ShouldNotBeNull();
739729
err.ShouldContain("netstandard2.0");
740730
}
731+
732+
[Fact]
733+
public void Central_Package_Management_Correct_Cake_Reference_Should_Not_Raise_CCG0009()
734+
{
735+
// given
736+
fixture.WithoutDefaultCakeReference();
737+
fixture.WithPackageReference("cake.core", privateAssets: "All");
738+
fixture.WithCpmPackageVersion("Cake.Core", fixture.DefaultCakeVersion);
739+
740+
// when
741+
var result = fixture.Run();
742+
743+
// then
744+
result.IsErrorExitCode.ShouldBeFalse();
745+
result.WarningLines.ShouldBeEmpty();
746+
}
741747
}
742748
}

src/Tasks.IntegrationTests/Fixtures/E2eTestFixture.cs

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,16 @@ public class E2eTestFixture : IDisposable
2222
private bool hasEditorConfig = true;
2323
private bool omitRecommendedCakeVersion = false;
2424
private bool hasDefaultCakeReference = true;
25-
private readonly List<string> customContent = new List<string>();
26-
private string targetFrameworks = "netstandard2.0;net461;net5.0";
27-
private readonly List<string> references = new List<string>();
25+
private readonly List<string> customContent = new();
26+
private string targetFrameworks = "net8.0;net9.0";
27+
private readonly List<string> references = new();
28+
private readonly Dictionary<string, string> cpmPackageVersions = new();
2829
private string tags = "cake;cake-build;build;script;addin;cake-addin;module;cake-module;recipe;cake-recipe";
2930

31+
public string DefaultCakeVersion => "5.0.0";
32+
public string DefaultTargetFrameworkForModules => "net8.0";
33+
public string DefaultTargetFrameworksForAddins => "net8.0;net9.0";
34+
3035
public E2eTestFixture(string tempFolder, ITestOutputHelper logger)
3136
{
3237
this.tempFolder = tempFolder;
@@ -78,6 +83,7 @@ private string WriteProject()
7883
{
7984
properties.Add($"<PackageTags>{tags}</PackageTags>");
8085
}
86+
8187
if (hasStylecopJson)
8288
{
8389
var stylecopJson = Path.Combine(tempFolder, "stylecop.json");
@@ -95,16 +101,22 @@ private string WriteProject()
95101
}
96102
if (hasStylecopReference)
97103
{
98-
items.Add(@"
99-
<PackageReference Include=""StyleCop.Analyzers"" Version=""1.1.118"">
104+
var version = "Version=\"1.1.118\"";
105+
if (cpmPackageVersions.Any())
106+
{
107+
version = string.Empty;
108+
}
109+
110+
items.Add($@"
111+
<PackageReference Include=""StyleCop.Analyzers"" {version}>
100112
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
101113
<PrivateAssets>all</PrivateAssets>
102114
</PackageReference>");
103115
}
104116

105117
if (hasDefaultCakeReference)
106118
{
107-
WithPackageReference("cake.core","1.0.0", "all");
119+
WithPackageReference("cake.core", DefaultCakeVersion, "all");
108120
}
109121

110122
if (omitRecommendedCakeVersion)
@@ -116,6 +128,32 @@ private string WriteProject()
116128
</ItemGroup>");
117129
}
118130

131+
if (cpmPackageVersions.Any())
132+
{
133+
if (hasStylecopReference)
134+
{
135+
cpmPackageVersions.Add("StyleCop.Analyzers", "1.1.118");
136+
}
137+
138+
var cpmFile = Path.Combine(tempFolder, "Directory.Packages.props");
139+
File.WriteAllText(cpmFile,
140+
$"""
141+
<Project>
142+
<PropertyGroup>
143+
<ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>
144+
</PropertyGroup>
145+
<ItemGroup>
146+
{
147+
string.Join(
148+
Environment.NewLine,
149+
cpmPackageVersions.Select(kvp => $"<PackageVersion Include=\"{kvp.Key}\" Version=\"{kvp.Value}\" />").ToArray()
150+
)
151+
}
152+
</ItemGroup>
153+
</Project>
154+
""");
155+
}
156+
119157
items.AddRange(references);
120158

121159
File.WriteAllText(csproj, string.Format(template,
@@ -157,12 +195,18 @@ internal void OmitRecommendedCakeVersion()
157195

158196
internal void WithPackageReference(
159197
string packageName,
160-
string version,
198+
string version = null,
161199
string privateAssets = null,
162200
params Tuple<string, string>[] additionalAttributes)
163201
{
164202
var reference = new StringBuilder();
165-
reference.Append($@"<PackageReference Include=""{packageName}"" Version=""{version}""");
203+
reference.Append($@"<PackageReference Include=""{packageName}""");
204+
205+
if (version != null)
206+
{
207+
reference.Append($@" Version=""{version}""");
208+
}
209+
166210
if (privateAssets != null)
167211
{
168212
reference.Append($@" PrivateAssets=""{privateAssets}""");
@@ -177,6 +221,13 @@ internal void WithPackageReference(
177221
references.Add(reference.ToString());
178222
}
179223

224+
internal void WithCpmPackageVersion(
225+
string packageName,
226+
string version)
227+
{
228+
this.cpmPackageVersions.Add(packageName, version);
229+
}
230+
180231
internal void WithoutStylecopReference()
181232
{
182233
hasStylecopReference = false;

src/Tasks.IntegrationTests/Tasks.IntegrationTests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
4-
<TargetFrameworks>net6.0;net7.0;</TargetFrameworks>
4+
<TargetFrameworks>net8.0;net9.0;</TargetFrameworks>
55
<TargetFrameworks Condition="'$(OS)'!='Unix'">$(TargetFrameworks);net472</TargetFrameworks>
66
<AssemblyName>CakeContrib.Guidelines.Tasks.IntegrationTests</AssemblyName>
77
<RootNamespace>CakeContrib.Guidelines.Tasks.IntegrationTests</RootNamespace>

0 commit comments

Comments
 (0)