Skip to content

Commit 04276d4

Browse files
authored
Merge pull request #292 from nils-a/feature/GH-290
(#290) Update Guidelines to include Cake 4.0.0
2 parents 0766743 + 0a6938e commit 04276d4

File tree

7 files changed

+163
-7
lines changed

7 files changed

+163
-7
lines changed

docs/input/guidelines/CakeInternalReferences.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ Title: Target Frameworks
1313
- [Cake v3.0.0](#cake-v300)
1414
- [Related rules](#related-rules)
1515
- [Usage](#usage)
16+
- [Settings](#settings)
17+
- [Cake Version](#cake-version)
1618

1719
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
1820

@@ -89,6 +91,27 @@ Also, the reference of the package in the addin/module should be set as private
8991
| System.Reflection.Metadata | 7.0.0 |
9092
| xunit | 2.4.2 |
9193

94+
#### Cake v4.0
95+
96+
| Reference | Version |
97+
| ---------------------------------------- | ------------- |
98+
| Autofac | 7.1.0 |
99+
| Microsoft.CodeAnalysis.CSharp.Scripting | 4.8.0-3.final |
100+
| Microsoft.CSharp | 4.7.0 |
101+
| Microsoft.Extensions.DependencyInjection | 8.0.0 |
102+
| Microsoft.NETCore.Platforms | 7.0.4 |
103+
| Microsoft.Win32.Registry | 5.0.0 |
104+
| Newtonsoft.Json | 13.0.3 |
105+
| NuGet.Common | 6.7.0 |
106+
| NuGet.Frameworks | 6.7.0 |
107+
| NuGet.Packaging | 6.7.0 |
108+
| NuGet.Protocol | 6.7.0 |
109+
| NuGet.Resolver | 6.7.0 |
110+
| NuGet.Versioning | 6.7.0 |
111+
| System.Collections.Immutable | 8.0.0 |
112+
| System.Reflection.Metadata | 8.0.0 |
113+
| xunit | 2.6.1 |
114+
92115
## Related rules
93116

94117
* [CCG0010](../rules/ccg0010)
@@ -98,3 +121,9 @@ These rules are only applied for [project types](../settings#projecttype) `addin
98121
## Usage
99122

100123
Using this package automatically enables this guideline.
124+
125+
## Settings
126+
127+
### Cake Version
128+
129+
<?! Include "../settings/fragments/OverrideCakeVersion.md" /?>

docs/input/guidelines/TargetFramework.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ while missing a suggested target version will raise [CCG0007](../rules/ccg0007)
4444
* Cake.Core >= 3.0.0
4545
* Required: `net6.0`
4646
* Required: `net7.0`
47+
* Cake.Core >= 4.0.0
48+
* Required: `net6.0`
49+
* Required: `net7.0`
50+
* Required: `net8.0`
4751
* Package type: module
4852
* Cake.Core < 2.0.0
4953
* Required: `netstandard2.0`
@@ -54,6 +58,9 @@ while missing a suggested target version will raise [CCG0007](../rules/ccg0007)
5458
* Cake.Core >= 3.0.0
5559
* Required: `net6.0`
5660
* No additional targets are allowed.
61+
* Cake.Core >= 4.0.0
62+
* Required: `net6.0`
63+
* No additional targets are allowed.
5764

5865
For package type recipe no framework reference is required or suggested.
5966

src/Tasks.Tests/CheckCakeInternalReferencesTests.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,5 +154,23 @@ public void Should_Warn_If_Cake_Version_is_Out_Of_Range()
154154
fixture.BuildEngine.WarningEvents.First().Message.ShouldNotContain("6.3.1");
155155
fixture.BuildEngine.WarningEvents.First().Message.ShouldContain("no matching list of Cake provided references could be found");
156156
}
157+
158+
[Fact]
159+
public void Should_Warn_If_Newtonsoft_Is_Wrong_For_Cake_4()
160+
{
161+
// given
162+
var fixture = new CheckCakeInternalReferencesFixture();
163+
fixture.WithReference("Newtonsoft.Json", "13.0.1");
164+
fixture.WithReference("Cake.Core", "4.0.0");
165+
fixture.WithCakeVersion(string.Empty);
166+
167+
// when
168+
fixture.Execute();
169+
170+
// then
171+
fixture.BuildEngine.WarningEvents.Count.ShouldBe(1);
172+
fixture.BuildEngine.WarningEvents.First().Code.ShouldBe(CcgRule10);
173+
fixture.BuildEngine.WarningEvents.First().Message.ShouldContain("13.0.3"); // the required version for NuGet.Common
174+
}
157175
}
158176
}

src/Tasks.Tests/TargetFrameworkVersionsTests.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public class TargetFrameworkVersionsTests
1919
private const string Net50 = "net5.0";
2020
private const string Net60 = "net6.0";
2121
private const string Net70 = "net7.0";
22+
private const string Net80 = "net8.0";
2223

2324
[Fact]
2425
public void Should_Error_If_RequiredTargetFramework_Is_Not_Targeted()
@@ -335,6 +336,39 @@ public static IEnumerable<object[]> Should_Error_If_RequiredTargetFramework_Is_N
335336
yield return new object[] { new[] { Net60, Net70 }, false, string.Empty };
336337
}
337338

339+
[Theory]
340+
[MemberData(nameof(Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Cake_4_Data))]
341+
public void Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Cake_4(string[] targetFrameworks, bool expectedError, string missingTargetFramework)
342+
{
343+
// given
344+
var fixture = new TargetFrameworkVersionsFixture();
345+
fixture.WithCakeCoreReference(4);
346+
fixture.WithTargetFrameworks(targetFrameworks);
347+
348+
// when
349+
fixture.Execute();
350+
351+
// then
352+
if (expectedError)
353+
{
354+
fixture.BuildEngine.ErrorEvents.Count.ShouldBe(1);
355+
fixture.BuildEngine.ErrorEvents.First().Message.ShouldContain(missingTargetFramework);
356+
}
357+
else
358+
{
359+
fixture.BuildEngine.ErrorEvents.Count.ShouldBe(0);
360+
}
361+
}
362+
363+
public static IEnumerable<object[]> Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Cake_4_Data()
364+
{
365+
yield return new object[] { Array.Empty<string>(), true, Net60 };
366+
yield return new object[] { new[] { Net60 }, true, Net70 };
367+
yield return new object[] { new[] { Net70 }, true, Net60 };
368+
yield return new object[] { new[] { Net60, Net70 }, true, Net80 };
369+
yield return new object[] { new[] { Net60, Net70, Net80 }, false, string.Empty };
370+
}
371+
338372
[Fact]
339373
public void Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Cake_2_Module()
340374
{
@@ -367,6 +401,22 @@ public void Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Cake_3_Modul
367401
fixture.BuildEngine.ErrorEvents.First().Message.ShouldContain(Net60);
368402
}
369403

404+
[Fact]
405+
public void Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Cake_4_Module()
406+
{
407+
// given
408+
var fixture = new TargetFrameworkVersionsFixture();
409+
fixture.WithProjectType("module");
410+
fixture.WithCakeCoreReference("4.0.0");
411+
412+
// when
413+
fixture.Execute();
414+
415+
// then
416+
fixture.BuildEngine.ErrorEvents.Count.ShouldBe(1);
417+
fixture.BuildEngine.ErrorEvents.First().Message.ShouldContain(Net60);
418+
}
419+
370420
[Fact]
371421
public void Should_Error_If_RequiredTargetFramework_Is_Not_Targeted_Module_Explicit_Version()
372422
{

src/Tasks/CakeVersions.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@ internal static class CakeVersions
1616
// Cake 3.0.0
1717
internal static readonly Version V3 = new Version(3, 0, 0);
1818

19+
// Cake 4.0.0
20+
public static readonly Version V4 = new Version(4, 0, 0);
21+
1922
// The next, currently non-existing cake version
20-
public static Version VNext = new Version(4, 0, 0);
23+
public static Version VNext = new Version(5, 0, 0);
2124
}
2225
}

src/Tasks/CheckCakeInternalReferences.cs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,27 @@ public class CheckCakeInternalReferences : Task
107107
{ "xunit", "2.4.2" },
108108
};
109109

110+
// parsed from Cake: v4.0
111+
private static readonly Dictionary<string, string> CakeV40 = new Dictionary<string, string>
112+
{
113+
{ "Autofac", "7.1.0" },
114+
{ "Microsoft.CodeAnalysis.CSharp.Scripting", "4.8.0-3.final" },
115+
{ "Microsoft.CSharp", "4.7.0" },
116+
{ "Microsoft.Extensions.DependencyInjection", "8.0.0" },
117+
{ "Microsoft.NETCore.Platforms", "7.0.4" },
118+
{ "Microsoft.Win32.Registry", "5.0.0" },
119+
{ "Newtonsoft.Json", "13.0.3" },
120+
{ "NuGet.Common", "6.7.0" },
121+
{ "NuGet.Frameworks", "6.7.0" },
122+
{ "NuGet.Packaging", "6.7.0" },
123+
{ "NuGet.Protocol", "6.7.0" },
124+
{ "NuGet.Resolver", "6.7.0" },
125+
{ "NuGet.Versioning", "6.7.0" },
126+
{ "System.Collections.Immutable", "8.0.0" },
127+
{ "System.Reflection.Metadata", "8.0.0" },
128+
{ "xunit", "2.6.1" },
129+
};
130+
110131
private readonly Dictionary<Predicate<Version>, Dictionary<string, string>> allInternalReferences =
111132
new Dictionary<Predicate<Version>, Dictionary<string, string>>
112133
{
@@ -123,9 +144,13 @@ public class CheckCakeInternalReferences : Task
123144
CakeV20
124145
},
125146
{
126-
x => x.GreaterEqual(CakeVersions.V3) && x.LessThan(CakeVersions.VNext),
147+
x => x.GreaterEqual(CakeVersions.V3) && x.LessThan(CakeVersions.V4),
127148
CakeV30
128149
},
150+
{
151+
x => x.GreaterEqual(CakeVersions.V4) && x.LessThan(CakeVersions.VNext),
152+
CakeV40
153+
},
129154
};
130155

131156
/// <summary>

src/Tasks/TargetFrameworkVersions.cs

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class TargetFrameworkVersions : Task
2828
private const string Net50 = "net5.0";
2929
private const string Net60 = "net6.0";
3030
private const string Net70 = "net7.0";
31+
private const string Net80 = "net8.0";
3132

3233
private static readonly TargetsDefinitions DefaultTarget = new TargetsDefinitions
3334
{
@@ -56,16 +57,25 @@ public class TargetFrameworkVersions : Task
5657
d => d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V2) && d.Version.LessThan(CakeVersions.V3),
5758
new TargetsDefinitions
5859
{
59-
Name = "Module and 2.0.0 <= CakeVersion < 3.0.0 ",
60+
Name = "Module and 2.0.0 <= CakeVersion < 3.0.0",
6061
RequiredTargets = new[] { TargetsDefinition.From(NetCore31) },
6162
AllowAdditionalTargets = false,
6263
}
6364
},
6465
{
65-
d => d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V3),
66+
d => d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V3) && d.Version.LessThan(CakeVersions.V4),
6667
new TargetsDefinitions
6768
{
68-
Name = "Module and CakeVersion >= 3.0.0",
69+
Name = "Module and 3.0.0 <= CakeVersion < 4.0.0",
70+
RequiredTargets = new[] { TargetsDefinition.From(Net60) },
71+
AllowAdditionalTargets = false,
72+
}
73+
},
74+
{
75+
d => d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V4),
76+
new TargetsDefinitions
77+
{
78+
Name = "Module and CakeVersion >= 4.0.0",
6979
RequiredTargets = new[] { TargetsDefinition.From(Net60) },
7080
AllowAdditionalTargets = false,
7181
}
@@ -107,14 +117,28 @@ public class TargetFrameworkVersions : Task
107117
}
108118
},
109119
{
110-
d => !d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V3),
120+
d => !d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V3) && d.Version.LessThan(CakeVersions.V4),
121+
new TargetsDefinitions
122+
{
123+
Name = "not module and 3.0.0 <= CakeVersion < 4.0.0",
124+
RequiredTargets = new[]
125+
{
126+
TargetsDefinition.From(Net60),
127+
TargetsDefinition.From(Net70),
128+
},
129+
SuggestedTargets = Array.Empty<TargetsDefinition>(),
130+
}
131+
},
132+
{
133+
d => !d.IsModuleProject && d.Version.GreaterEqual(CakeVersions.V4),
111134
new TargetsDefinitions
112135
{
113-
Name = "not module and CakeVersion >= 3.0.0",
136+
Name = "not module and CakeVersion >= 4.0.0",
114137
RequiredTargets = new[]
115138
{
116139
TargetsDefinition.From(Net60),
117140
TargetsDefinition.From(Net70),
141+
TargetsDefinition.From(Net80),
118142
},
119143
SuggestedTargets = Array.Empty<TargetsDefinition>(),
120144
}

0 commit comments

Comments
 (0)