Skip to content

Commit

Permalink
Fix up #1336
Browse files Browse the repository at this point in the history
- 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
  • Loading branch information
JoeRobich committed Feb 4, 2025
1 parent 2bbef13 commit 144a511
Show file tree
Hide file tree
Showing 14 changed files with 626 additions and 392 deletions.
4 changes: 1 addition & 3 deletions .build/.build.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<RootNamespace></RootNamespace>
<RootNamespace />
<IsPackable>False</IsPackable>
<NoWarn>CS0649;CS0169</NoWarn>
<NukeTelemetryVersion>1</NukeTelemetryVersion>
<EnableUnsafeBinaryFormatterSerialization>true</EnableUnsafeBinaryFormatterSerialization>
</PropertyGroup>

<ItemGroup>
Expand Down
83 changes: 29 additions & 54 deletions .build/Solution.cs → .build/Build.CI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,82 +3,58 @@
using Rocket.Surgery.Nuke.ContinuousIntegration;
using Rocket.Surgery.Nuke.DotNetCore;
using Rocket.Surgery.Nuke.GithubActions;
using Rocket.Surgery.Nuke.Jobs;

namespace Build;

internal class LocalConstants
{
public static string[] PathsIgnore => new[]
{
".codecov.yml",
".editorconfig",
".gitattributes",
".gitignore",
".gitmodules",
".lintstagedrc.js",
".prettierignore",
".prettierrc",
"LICENSE",
"nukeeper.settings.json",
"omnisharp.json",
"package-lock.json",
"package.json",
"Readme.md",
".github/dependabot.yml",
".github/labels.yml",
".github/release.yml",
".github/renovate.json",
};
}
#pragma warning disable CA1050

[GitHubActionsSteps(
"ci-ignore",
GitHubActionsImage.MacOsLatest,
GitHubActionsImage.WindowsLatest,
GitHubActionsImage.UbuntuLatest,
AutoGenerate = false,
On = new[] { RocketSurgeonGitHubActionsTrigger.Push },
OnPushTags = new[] { "v*" },
OnPushBranches = new[] { "master", "main", "next" },
OnPullRequestBranches = new[] { "master", "main", "next" },
Enhancements = new[] { nameof(CiIgnoreMiddleware) }
On = [RocketSurgeonGitHubActionsTrigger.Push],
OnPushTags = ["v*"],
OnPushBranches = ["master", "main", "next"],
OnPullRequestBranches = ["master", "main", "next"],
Enhancements = [nameof(CiIgnoreMiddleware)]
)]
[GitHubActionsSteps(
"ci",
GitHubActionsImage.MacOsLatest,
GitHubActionsImage.WindowsLatest,
GitHubActionsImage.UbuntuLatest,
AutoGenerate = false,
On = new[] { RocketSurgeonGitHubActionsTrigger.Push },
OnPushTags = new[] { "v*" },
OnPushBranches = new[] { "master", "main", "next" },
OnPullRequestBranches = new[] { "master", "main", "next" },
InvokedTargets = new[] { nameof(Default) },
NonEntryTargets = new[]
{
On = [RocketSurgeonGitHubActionsTrigger.Push],
OnPushTags = ["v*"],
OnPushBranches = ["master", "main", "next"],
OnPullRequestBranches = ["master", "main", "next"],
InvokedTargets = [nameof(Default)],
NonEntryTargets = [
nameof(ICIEnvironment.CIEnvironment),
nameof(ITriggerCodeCoverageReports.TriggerCodeCoverageReports),
nameof(ITriggerCodeCoverageReports.GenerateCodeCoverageReportCobertura),
nameof(IGenerateCodeCoverageBadges.GenerateCodeCoverageBadges),
nameof(IGenerateCodeCoverageReport.GenerateCodeCoverageReport),
nameof(IGenerateCodeCoverageSummary.GenerateCodeCoverageSummary),
nameof(Default)
},
ExcludedTargets = new[] { nameof(ICanClean.Clean), nameof(ICanRestoreWithDotNetCore.DotnetToolRestore) },
Enhancements = new[] { nameof(CiMiddleware) }
nameof(Default),
],
ExcludedTargets = [nameof(ICanClean.Clean), nameof(ICanRestoreWithDotNetCore.DotnetToolRestore)],
Enhancements = [nameof(CiMiddleware)]
)]
[CloseMilestoneJob(AutoGenerate = false)]
[DraftReleaseJob(AutoGenerate = false)]
[UpdateMilestoneJob(AutoGenerate = false)]
[PrintBuildVersion]
[PrintCIEnvironment]
[UploadLogs]
[TitleEvents]
[ContinuousIntegrationConventions]
public partial class Solution
internal sealed partial class Pipeline
{
public static RocketSurgeonGitHubActionsConfiguration CiIgnoreMiddleware(
RocketSurgeonGitHubActionsConfiguration configuration
)
{
configuration.IncludeRepositoryConfigurationFiles();

( (RocketSurgeonsGithubActionsJob)configuration.Jobs[0] ).Steps = new List<GitHubActionsStep>
{
new RunStep("N/A")
Expand All @@ -87,7 +63,7 @@ RocketSurgeonGitHubActionsConfiguration configuration
}
};

return configuration;
return configuration.IncludeRepositoryConfigurationFiles();
}

public static RocketSurgeonGitHubActionsConfiguration CiMiddleware(
Expand All @@ -96,33 +72,32 @@ RocketSurgeonGitHubActionsConfiguration configuration
{
configuration
.ExcludeRepositoryConfigurationFiles()
.AddNugetPublish()
.Jobs.OfType<RocketSurgeonsGithubActionsJob>()
.First(z => z.Name.Equals("Build", StringComparison.OrdinalIgnoreCase))
.ConfigureStep<CheckoutStep>(step => step.FetchDepth = 0)
.UseDotNetSdks("3.1", "6.0", "8.0", "9.0")
.UseDotNetSdks("6.0", "8.0", "9.0")
.AddNuGetCache()
.AddVscodeExtensionTests()
.PublishLogs<Solution>()
.PublishArtifacts<Solution>()
.PublishLogs<Pipeline>()
.PublishArtifacts<Pipeline>()
.FailFast = false;

return configuration;
}
}

public static class Extensions
public static class JobExtensions
{
public static RocketSurgeonsGithubActionsJob AddVscodeExtensionTests(this RocketSurgeonsGithubActionsJob job)
{
return job
.AddStep(new RunStep("Npm install") {
Run = "npm ci",
WorkingDirectory = Solution.VscodeTestExtensionProjectDirectory
WorkingDirectory = Pipeline.VscodeTestExtensionProjectDirectory
})
.AddStep(new HeadlessRunStep("Vscode extension tests") {
Run = "npm run test",
WorkingDirectory = Solution.VscodeTestExtensionProjectDirectory
WorkingDirectory = Pipeline.VscodeTestExtensionProjectDirectory
});
}
}
58 changes: 30 additions & 28 deletions .build/Build.cs
Original file line number Diff line number Diff line change
@@ -1,37 +1,35 @@
using JetBrains.Annotations;
using Nuke.Common;
using Nuke.Common.CI;
using Nuke.Common.Execution;
using Nuke.Common.Git;
using Nuke.Common.IO;
using Nuke.Common.Tooling;
using Nuke.Common.Tools.DotNet;
using Nuke.Common.Tools.GitVersion;
using Nuke.Common.Tools.MSBuild;
using Nuke.Common.Tools.Npm;
using Rocket.Surgery.Nuke.DotNetCore;

namespace Build;
#pragma warning disable CA1050

[PublicAPI]
[UnsetVisualStudioEnvironmentVariables]
[PackageIcon("http://www.omnisharp.net/images/logo.png")]
[EnsureReadmeIsUpdated]
[DotNetVerbosityMapping]
[MSBuildVerbosityMapping]
[NuGetVerbosityMapping]
[ShutdownDotNetAfterServerBuild]
[LocalBuildConventions]
public sealed partial class Solution : NukeBuild,
internal sealed partial class Pipeline : NukeBuild,
ICanRestoreWithDotNetCore,
ICanBuildWithDotNetCore,
ICanTestWithDotNetCore,
ICanPackWithDotNetCore,
IHaveDataCollector,
ICanClean,
ICanUpdateReadme,
IHavePublicApis,
IGenerateCodeCoverageReport,
IGenerateCodeCoverageSummary,
IGenerateCodeCoverageBadges,
IGenerateDocFx,
IHaveConfiguration<Configuration>
{
/// <summary>
Expand All @@ -41,29 +39,39 @@ public sealed partial class Solution : NukeBuild,
/// - Microsoft VisualStudio https://nuke.build/visualstudio
/// - Microsoft VSCode https://nuke.build/vscode
/// </summary>
public static int Main() => Execute<Solution>(x => x.Default);
public static int Main() => Execute<Pipeline>(x => x.Default);

[OptionalGitRepository] public GitRepository? GitRepository { get; }
public Target Build => _ => _;

private Target Default => _ => _
.DependsOn(Restore)
.DependsOn(Build)
.DependsOn(Test)
.DependsOn(Pack);
public Target Clean => _ => _;

[Parameter("Configuration to build")]
public Configuration Configuration { get; } = IsLocalBuild ? Configuration.Debug : Configuration.Release;

public Target Build => _ => _.Inherit<ICanBuildWithDotNetCore>(x => x.CoreBuild);
[OptionalGitRepository]
public GitRepository? GitRepository { get; }

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

[ComputedGitVersion] public GitVersion GitVersion { get; } = null!;
public Target Lint => _ => _;

public Target Clean => _ => _.Inherit<ICanClean>(x => x.Clean);
public Target Restore => _ => _.Inherit<ICanRestoreWithDotNetCore>(x => x.CoreRestore);
public Target Pack => _ => _.DependsOn(Clean);

public Target Test => _ => _.Inherit<ICanTestWithDotNetCore>(x => x.CoreTest);
public Target Restore => _ => _;

public Target Test => _ => _;

[NonEntryTarget]
private Target Default => _ => _
.DependsOn(Restore)
.DependsOn(Build)
.DependsOn(Test)
.DependsOn(Pack);

#pragma warning disable CA1822
public Target NpmInstall => _ => _
#pragma warning restore CA1822 // Member 'NpmInstall' does not access instance data and can be marked as static
.Executes(() =>
NpmTasks.NpmCi(s => s
.SetProcessWorkingDirectory(VscodeTestExtensionProjectDirectory)));
Expand All @@ -75,13 +83,7 @@ public sealed partial class Solution : NukeBuild,
.SetProcessWorkingDirectory(VscodeTestExtensionProjectDirectory)
.SetCommand("test")));

public Target BuildVersion => _ => _.Inherit<IHaveBuildVersion>(x => x.BuildVersion)
.Before(Default)
.Before(Clean);

[Parameter("Configuration to build")] public Configuration Configuration { get; } = IsLocalBuild ? Configuration.Debug : Configuration.Release;

AbsolutePath ICanUpdateReadme.ReadmeFilePath => RootDirectory / "README.md";
public Target BuildVersion => _ => _.Before(Default).Before(Clean);

internal const string VscodeTestExtensionProjectDirectory = "vscode-testextension";
}
6 changes: 3 additions & 3 deletions .build/Configuration.cs
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
using System.ComponentModel;
using Nuke.Common.Tooling;

namespace Build;
#pragma warning disable CA1050, CA1724, CA2225

[TypeConverter(typeof(TypeConverter<Configuration>))]
public class Configuration : Enumeration
{
public static Configuration Debug = new() { Value = nameof(Debug) };
public static Configuration Release = new() { Value = nameof(Release) };
public static readonly Configuration Debug = new() { Value = nameof(Debug) };
public static readonly Configuration Release = new() { Value = nameof(Release) };

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

0 comments on commit 144a511

Please sign in to comment.