Skip to content

Commit 144a511

Browse files
committed
Fix up #1336
- Mimic the style of the RSG/Nuke repo's .build - Regenerated GH actions - Left in the tweak around NuGet caching, the matrix of artifacts, and NuGet publishing
1 parent 2bbef13 commit 144a511

14 files changed

+626
-392
lines changed

.build/.build.csproj

+1-3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,9 @@
44
<OutputType>Exe</OutputType>
55
<TargetFramework>net8.0</TargetFramework>
66
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
7-
<RootNamespace></RootNamespace>
7+
<RootNamespace />
88
<IsPackable>False</IsPackable>
99
<NoWarn>CS0649;CS0169</NoWarn>
10-
<NukeTelemetryVersion>1</NukeTelemetryVersion>
11-
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
1210
</PropertyGroup>
1311

1412
<ItemGroup>

.build/Solution.cs .build/Build.CI.cs

+29-54
Original file line numberDiff line numberDiff line change
@@ -3,82 +3,58 @@
33
using Rocket.Surgery.Nuke.ContinuousIntegration;
44
using Rocket.Surgery.Nuke.DotNetCore;
55
using Rocket.Surgery.Nuke.GithubActions;
6+
using Rocket.Surgery.Nuke.Jobs;
67

7-
namespace Build;
8-
9-
internal class LocalConstants
10-
{
11-
public static string[] PathsIgnore => new[]
12-
{
13-
".codecov.yml",
14-
".editorconfig",
15-
".gitattributes",
16-
".gitignore",
17-
".gitmodules",
18-
".lintstagedrc.js",
19-
".prettierignore",
20-
".prettierrc",
21-
"LICENSE",
22-
"nukeeper.settings.json",
23-
"omnisharp.json",
24-
"package-lock.json",
25-
"package.json",
26-
"Readme.md",
27-
".github/dependabot.yml",
28-
".github/labels.yml",
29-
".github/release.yml",
30-
".github/renovate.json",
31-
};
32-
}
8+
#pragma warning disable CA1050
339

3410
[GitHubActionsSteps(
3511
"ci-ignore",
12+
GitHubActionsImage.MacOsLatest,
3613
GitHubActionsImage.WindowsLatest,
3714
GitHubActionsImage.UbuntuLatest,
3815
AutoGenerate = false,
39-
On = new[] { RocketSurgeonGitHubActionsTrigger.Push },
40-
OnPushTags = new[] { "v*" },
41-
OnPushBranches = new[] { "master", "main", "next" },
42-
OnPullRequestBranches = new[] { "master", "main", "next" },
43-
Enhancements = new[] { nameof(CiIgnoreMiddleware) }
16+
On = [RocketSurgeonGitHubActionsTrigger.Push],
17+
OnPushTags = ["v*"],
18+
OnPushBranches = ["master", "main", "next"],
19+
OnPullRequestBranches = ["master", "main", "next"],
20+
Enhancements = [nameof(CiIgnoreMiddleware)]
4421
)]
4522
[GitHubActionsSteps(
4623
"ci",
4724
GitHubActionsImage.MacOsLatest,
4825
GitHubActionsImage.WindowsLatest,
4926
GitHubActionsImage.UbuntuLatest,
5027
AutoGenerate = false,
51-
On = new[] { RocketSurgeonGitHubActionsTrigger.Push },
52-
OnPushTags = new[] { "v*" },
53-
OnPushBranches = new[] { "master", "main", "next" },
54-
OnPullRequestBranches = new[] { "master", "main", "next" },
55-
InvokedTargets = new[] { nameof(Default) },
56-
NonEntryTargets = new[]
57-
{
28+
On = [RocketSurgeonGitHubActionsTrigger.Push],
29+
OnPushTags = ["v*"],
30+
OnPushBranches = ["master", "main", "next"],
31+
OnPullRequestBranches = ["master", "main", "next"],
32+
InvokedTargets = [nameof(Default)],
33+
NonEntryTargets = [
5834
nameof(ICIEnvironment.CIEnvironment),
59-
nameof(ITriggerCodeCoverageReports.TriggerCodeCoverageReports),
6035
nameof(ITriggerCodeCoverageReports.GenerateCodeCoverageReportCobertura),
6136
nameof(IGenerateCodeCoverageBadges.GenerateCodeCoverageBadges),
6237
nameof(IGenerateCodeCoverageReport.GenerateCodeCoverageReport),
6338
nameof(IGenerateCodeCoverageSummary.GenerateCodeCoverageSummary),
64-
nameof(Default)
65-
},
66-
ExcludedTargets = new[] { nameof(ICanClean.Clean), nameof(ICanRestoreWithDotNetCore.DotnetToolRestore) },
67-
Enhancements = new[] { nameof(CiMiddleware) }
39+
nameof(Default),
40+
],
41+
ExcludedTargets = [nameof(ICanClean.Clean), nameof(ICanRestoreWithDotNetCore.DotnetToolRestore)],
42+
Enhancements = [nameof(CiMiddleware)]
6843
)]
44+
[CloseMilestoneJob(AutoGenerate = false)]
45+
[DraftReleaseJob(AutoGenerate = false)]
46+
[UpdateMilestoneJob(AutoGenerate = false)]
6947
[PrintBuildVersion]
7048
[PrintCIEnvironment]
7149
[UploadLogs]
7250
[TitleEvents]
7351
[ContinuousIntegrationConventions]
74-
public partial class Solution
52+
internal sealed partial class Pipeline
7553
{
7654
public static RocketSurgeonGitHubActionsConfiguration CiIgnoreMiddleware(
7755
RocketSurgeonGitHubActionsConfiguration configuration
7856
)
7957
{
80-
configuration.IncludeRepositoryConfigurationFiles();
81-
8258
( (RocketSurgeonsGithubActionsJob)configuration.Jobs[0] ).Steps = new List<GitHubActionsStep>
8359
{
8460
new RunStep("N/A")
@@ -87,7 +63,7 @@ RocketSurgeonGitHubActionsConfiguration configuration
8763
}
8864
};
8965

90-
return configuration;
66+
return configuration.IncludeRepositoryConfigurationFiles();
9167
}
9268

9369
public static RocketSurgeonGitHubActionsConfiguration CiMiddleware(
@@ -96,33 +72,32 @@ RocketSurgeonGitHubActionsConfiguration configuration
9672
{
9773
configuration
9874
.ExcludeRepositoryConfigurationFiles()
99-
.AddNugetPublish()
10075
.Jobs.OfType<RocketSurgeonsGithubActionsJob>()
10176
.First(z => z.Name.Equals("Build", StringComparison.OrdinalIgnoreCase))
10277
.ConfigureStep<CheckoutStep>(step => step.FetchDepth = 0)
103-
.UseDotNetSdks("3.1", "6.0", "8.0", "9.0")
78+
.UseDotNetSdks("6.0", "8.0", "9.0")
10479
.AddNuGetCache()
10580
.AddVscodeExtensionTests()
106-
.PublishLogs<Solution>()
107-
.PublishArtifacts<Solution>()
81+
.PublishLogs<Pipeline>()
82+
.PublishArtifacts<Pipeline>()
10883
.FailFast = false;
10984

11085
return configuration;
11186
}
11287
}
11388

114-
public static class Extensions
89+
public static class JobExtensions
11590
{
11691
public static RocketSurgeonsGithubActionsJob AddVscodeExtensionTests(this RocketSurgeonsGithubActionsJob job)
11792
{
11893
return job
11994
.AddStep(new RunStep("Npm install") {
12095
Run = "npm ci",
121-
WorkingDirectory = Solution.VscodeTestExtensionProjectDirectory
96+
WorkingDirectory = Pipeline.VscodeTestExtensionProjectDirectory
12297
})
12398
.AddStep(new HeadlessRunStep("Vscode extension tests") {
12499
Run = "npm run test",
125-
WorkingDirectory = Solution.VscodeTestExtensionProjectDirectory
100+
WorkingDirectory = Pipeline.VscodeTestExtensionProjectDirectory
126101
});
127102
}
128103
}

.build/Build.cs

+30-28
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,35 @@
11
using JetBrains.Annotations;
22
using Nuke.Common;
3+
using Nuke.Common.CI;
34
using Nuke.Common.Execution;
45
using Nuke.Common.Git;
5-
using Nuke.Common.IO;
66
using Nuke.Common.Tooling;
77
using Nuke.Common.Tools.DotNet;
88
using Nuke.Common.Tools.GitVersion;
99
using Nuke.Common.Tools.MSBuild;
1010
using Nuke.Common.Tools.Npm;
1111
using Rocket.Surgery.Nuke.DotNetCore;
1212

13-
namespace Build;
13+
#pragma warning disable CA1050
1414

1515
[PublicAPI]
1616
[UnsetVisualStudioEnvironmentVariables]
1717
[PackageIcon("http://www.omnisharp.net/images/logo.png")]
18-
[EnsureReadmeIsUpdated]
1918
[DotNetVerbosityMapping]
2019
[MSBuildVerbosityMapping]
2120
[NuGetVerbosityMapping]
21+
[ShutdownDotNetAfterServerBuild]
2222
[LocalBuildConventions]
23-
public sealed partial class Solution : NukeBuild,
23+
internal sealed partial class Pipeline : NukeBuild,
2424
ICanRestoreWithDotNetCore,
2525
ICanBuildWithDotNetCore,
2626
ICanTestWithDotNetCore,
2727
ICanPackWithDotNetCore,
28-
IHaveDataCollector,
2928
ICanClean,
30-
ICanUpdateReadme,
29+
IHavePublicApis,
3130
IGenerateCodeCoverageReport,
3231
IGenerateCodeCoverageSummary,
3332
IGenerateCodeCoverageBadges,
34-
IGenerateDocFx,
3533
IHaveConfiguration<Configuration>
3634
{
3735
/// <summary>
@@ -41,29 +39,39 @@ public sealed partial class Solution : NukeBuild,
4139
/// - Microsoft VisualStudio https://nuke.build/visualstudio
4240
/// - Microsoft VSCode https://nuke.build/vscode
4341
/// </summary>
44-
public static int Main() => Execute<Solution>(x => x.Default);
42+
public static int Main() => Execute<Pipeline>(x => x.Default);
4543

46-
[OptionalGitRepository] public GitRepository? GitRepository { get; }
44+
public Target Build => _ => _;
4745

48-
private Target Default => _ => _
49-
.DependsOn(Restore)
50-
.DependsOn(Build)
51-
.DependsOn(Test)
52-
.DependsOn(Pack);
46+
public Target Clean => _ => _;
47+
48+
[Parameter("Configuration to build")]
49+
public Configuration Configuration { get; } = IsLocalBuild ? Configuration.Debug : Configuration.Release;
5350

54-
public Target Build => _ => _.Inherit<ICanBuildWithDotNetCore>(x => x.CoreBuild);
51+
[OptionalGitRepository]
52+
public GitRepository? GitRepository { get; }
5553

56-
public Target Pack => _ => _.Inherit<ICanPackWithDotNetCore>(x => x.CorePack)
57-
.DependsOn(Clean);
54+
[GitVersion(NoFetch = true, NoCache = false)]
55+
public GitVersion GitVersion { get; } = null!;
5856

59-
[ComputedGitVersion] public GitVersion GitVersion { get; } = null!;
57+
public Target Lint => _ => _;
6058

61-
public Target Clean => _ => _.Inherit<ICanClean>(x => x.Clean);
62-
public Target Restore => _ => _.Inherit<ICanRestoreWithDotNetCore>(x => x.CoreRestore);
59+
public Target Pack => _ => _.DependsOn(Clean);
6360

64-
public Target Test => _ => _.Inherit<ICanTestWithDotNetCore>(x => x.CoreTest);
61+
public Target Restore => _ => _;
6562

63+
public Target Test => _ => _;
64+
65+
[NonEntryTarget]
66+
private Target Default => _ => _
67+
.DependsOn(Restore)
68+
.DependsOn(Build)
69+
.DependsOn(Test)
70+
.DependsOn(Pack);
71+
72+
#pragma warning disable CA1822
6673
public Target NpmInstall => _ => _
74+
#pragma warning restore CA1822 // Member 'NpmInstall' does not access instance data and can be marked as static
6775
.Executes(() =>
6876
NpmTasks.NpmCi(s => s
6977
.SetProcessWorkingDirectory(VscodeTestExtensionProjectDirectory)));
@@ -75,13 +83,7 @@ public sealed partial class Solution : NukeBuild,
7583
.SetProcessWorkingDirectory(VscodeTestExtensionProjectDirectory)
7684
.SetCommand("test")));
7785

78-
public Target BuildVersion => _ => _.Inherit<IHaveBuildVersion>(x => x.BuildVersion)
79-
.Before(Default)
80-
.Before(Clean);
81-
82-
[Parameter("Configuration to build")] public Configuration Configuration { get; } = IsLocalBuild ? Configuration.Debug : Configuration.Release;
83-
84-
AbsolutePath ICanUpdateReadme.ReadmeFilePath => RootDirectory / "README.md";
86+
public Target BuildVersion => _ => _.Before(Default).Before(Clean);
8587

8688
internal const string VscodeTestExtensionProjectDirectory = "vscode-testextension";
8789
}

.build/Configuration.cs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
using System.ComponentModel;
22
using Nuke.Common.Tooling;
33

4-
namespace Build;
4+
#pragma warning disable CA1050, CA1724, CA2225
55

66
[TypeConverter(typeof(TypeConverter<Configuration>))]
77
public class Configuration : Enumeration
88
{
9-
public static Configuration Debug = new() { Value = nameof(Debug) };
10-
public static Configuration Release = new() { Value = nameof(Release) };
9+
public static readonly Configuration Debug = new() { Value = nameof(Debug) };
10+
public static readonly Configuration Release = new() { Value = nameof(Release) };
1111

1212
public static implicit operator string(Configuration configuration) => configuration.Value;
1313
}

0 commit comments

Comments
 (0)