From cca064deadb97d87ea133e41953725b238c1a853 Mon Sep 17 00:00:00 2001 From: Marko Lahma Date: Thu, 16 Jan 2025 19:39:10 +0200 Subject: [PATCH] Add GitHub actions/setup-dotnet support --- ...ribute=GitHubActionsAttribute.verified.txt | 15 ++++++++ .../CI/ConfigurationGenerationTest.cs | 3 +- .../GitHubActionsSetupDotNetStep.cs | 36 +++++++++++++++++++ .../GitHubActions/GitHubActionsAttribute.cs | 10 ++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 source/Nuke.Common/CI/GitHubActions/Configuration/GitHubActionsSetupDotNetStep.cs diff --git a/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.Test_testName=detailed-triggers_attribute=GitHubActionsAttribute.verified.txt b/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.Test_testName=detailed-triggers_attribute=GitHubActionsAttribute.verified.txt index 697dd6e7c..ee276a302 100644 --- a/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.Test_testName=detailed-triggers_attribute=GitHubActionsAttribute.verified.txt +++ b/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.Test_testName=detailed-triggers_attribute=GitHubActionsAttribute.verified.txt @@ -74,6 +74,11 @@ jobs: .nuke/temp ~/.nuget/packages key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }} + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0 + 9.0 - name: 'Run: Test' run: ./build.cmd Test env: @@ -122,6 +127,11 @@ jobs: .nuke/temp ~/.nuget/packages key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }} + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0 + 9.0 - name: 'Run: Test' run: ./build.cmd Test env: @@ -170,6 +180,11 @@ jobs: .nuke/temp ~/.nuget/packages key: ${{ runner.os }}-${{ hashFiles('**/global.json', '**/*.csproj', '**/Directory.Packages.props') }} + - uses: actions/setup-dotnet@v4 + with: + dotnet-version: | + 8.0 + 9.0 - name: 'Run: Test' run: ./build.cmd Test env: diff --git a/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.cs b/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.cs index c8f5c3146..a3b9bade8 100644 --- a/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.cs +++ b/source/Nuke.Common.Tests/CI/ConfigurationGenerationTest.cs @@ -165,7 +165,8 @@ public class TestBuild : NukeBuild JobConcurrencyCancelInProgress = true, JobConcurrencyGroup = "custom-job-group", EnvironmentName = "environment-name", - EnvironmentUrl = "environment-url" + EnvironmentUrl = "environment-url", + SetupDotNetVersions = new [] { "8.0", "9.0" } } ); diff --git a/source/Nuke.Common/CI/GitHubActions/Configuration/GitHubActionsSetupDotNetStep.cs b/source/Nuke.Common/CI/GitHubActions/Configuration/GitHubActionsSetupDotNetStep.cs new file mode 100644 index 000000000..65e7a8c32 --- /dev/null +++ b/source/Nuke.Common/CI/GitHubActions/Configuration/GitHubActionsSetupDotNetStep.cs @@ -0,0 +1,36 @@ +// Copyright 2025 Maintainers of NUKE. +// Distributed under the MIT License. +// https://github.com/nuke-build/nuke/blob/master/LICENSE + +using JetBrains.Annotations; +using Nuke.Common.Utilities; + +namespace Nuke.Common.CI.GitHubActions.Configuration; + +// https://github.com/actions/setup-dotnet +[PublicAPI] +public class GitHubActionsSetupDotNetStep : GitHubActionsStep +{ + public string[] Versions { get; set; } + + public override void Write(CustomFileWriter writer) + { + writer.WriteLine("- uses: actions/setup-dotnet@v4"); + + using (writer.Indent()) + { + writer.WriteLine("with:"); + using (writer.Indent()) + { + writer.WriteLine("dotnet-version: |"); + using (writer.Indent()) + { + foreach (var version in Versions) + { + writer.WriteLine(version); + } + } + } + } + } +} diff --git a/source/Nuke.Common/CI/GitHubActions/GitHubActionsAttribute.cs b/source/Nuke.Common/CI/GitHubActions/GitHubActionsAttribute.cs index 2c1f1599e..7169bdc49 100644 --- a/source/Nuke.Common/CI/GitHubActions/GitHubActionsAttribute.cs +++ b/source/Nuke.Common/CI/GitHubActions/GitHubActionsAttribute.cs @@ -86,6 +86,8 @@ public GitHubActionsAttribute( public string JobConcurrencyGroup { get; set; } public bool JobConcurrencyCancelInProgress { get; set; } + public string[] SetupDotNetVersions { get; set; } = new string[0]; + public string[] InvokedTargets { get; set; } = new string[0]; public GitHubActionsSubmodules Submodules @@ -181,6 +183,14 @@ private IEnumerable GetSteps(GitHubActionsImage image, IReadO }; } + if (SetupDotNetVersions.Any()) + { + yield return new GitHubActionsSetupDotNetStep + { + Versions = SetupDotNetVersions, + }; + } + yield return new GitHubActionsRunStep { BuildCmdPath = BuildCmdPath,