diff --git a/DecSm.Atom.Module.DevopsWorkflows/Generation/DevopsWorkflowWriter.cs b/DecSm.Atom.Module.DevopsWorkflows/Generation/DevopsWorkflowWriter.cs index a28ae4ab..c5b2df49 100644 --- a/DecSm.Atom.Module.DevopsWorkflows/Generation/DevopsWorkflowWriter.cs +++ b/DecSm.Atom.Module.DevopsWorkflows/Generation/DevopsWorkflowWriter.cs @@ -411,26 +411,52 @@ private void WriteStep(WorkflowModel workflow, WorkflowStepModel step, WorkflowJ .DistinctBy(x => x.FeedName) .ToList(); - using (WriteSection("- script: dotnet tool update --global DecSm.Atom.Tool")) - WriteLine("displayName: 'Install atom tool'"); + // If we know the SetupDotnet step was run for dotnet 10+, + // then we can use the dotnet tool exec command instead of installing the tool to run it + if (setupDotnetSteps.Any(x => + SemVer.TryParse(x.DotnetVersion?.Replace("x", "0"), out var version) && version.Major >= 10)) + { + using (WriteSection("- script: |")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $"dotnet tool exec decsm.atom.tool -y -- nuget-add --name \"{feedToAdd.FeedName}\" --url \"{feedToAdd.FeedUrl}\""); - WriteLine(); + WriteLine("displayName: 'Setup NuGet'"); - using (WriteSection("- script: |")) + using (WriteSection("env:")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $"{AddNugetFeedsStep.GetEnvVarNameForFeed(feedToAdd.FeedName)}: $({feedToAdd.SecretName})"); + } + + WriteLine(); + } + } + else { - foreach (var feedToAdd in feedsToAdd) - WriteLine($" atom nuget-add --name \"{feedToAdd.FeedName}\" --url \"{feedToAdd.FeedUrl}\""); + using (WriteSection("- script: dotnet tool update --global DecSm.Atom.Tool")) + WriteLine("displayName: 'Install atom tool'"); - WriteLine("displayName: 'Setup NuGet'"); + WriteLine(); - using (WriteSection("env:")) + using (WriteSection("- script: |")) { foreach (var feedToAdd in feedsToAdd) - WriteLine( - $"{AddNugetFeedsStep.GetEnvVarNameForFeed(feedToAdd.FeedName)}: $({feedToAdd.SecretName})"); - } + WriteLine($" atom nuget-add --name \"{feedToAdd.FeedName}\" --url \"{feedToAdd.FeedUrl}\""); - WriteLine(); + WriteLine("displayName: 'Setup NuGet'"); + + using (WriteSection("env:")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $"{AddNugetFeedsStep.GetEnvVarNameForFeed(feedToAdd.FeedName)}: $({feedToAdd.SecretName})"); + } + + WriteLine(); + } } } diff --git a/DecSm.Atom.Module.GithubWorkflows/Generation/GithubWorkflowWriter.cs b/DecSm.Atom.Module.GithubWorkflows/Generation/GithubWorkflowWriter.cs index 4803bb8c..b4f57eb1 100644 --- a/DecSm.Atom.Module.GithubWorkflows/Generation/GithubWorkflowWriter.cs +++ b/DecSm.Atom.Module.GithubWorkflows/Generation/GithubWorkflowWriter.cs @@ -492,29 +492,57 @@ private void WriteStep(WorkflowModel workflow, WorkflowStepModel step, WorkflowJ .DistinctBy(x => x.FeedName) .ToList(); - using (WriteSection("- name: Install atom tool")) + // If we know the SetupDotnet step was run for dotnet 10+, + // then we can use the dotnet tool exec command instead of installing the tool to run it + if (setupDotnetSteps.Any(x => + SemVer.TryParse(x.DotnetVersion?.Replace("x", "0"), out var version) && version.Major >= 10)) { - WriteLine("run: dotnet tool update --global DecSm.Atom.Tool"); - WriteLine("shell: bash"); - } + using (WriteSection("- name: Setup NuGet")) + { + using (WriteSection("run: |")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $"dotnet tool exec decsm.atom.tool -y -- nuget-add --name \"{feedToAdd.FeedName}\" --url \"{feedToAdd.FeedUrl}\""); + } - WriteLine(); + WriteLine("shell: bash"); - using (WriteSection("- name: Setup NuGet")) + using (WriteSection("env:")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $$$"""{{{AddNugetFeedsStep.GetEnvVarNameForFeed(feedToAdd.FeedName)}}}: ${{ secrets.{{{feedToAdd.SecretName}}} }}"""); + } + } + } + else { - using (WriteSection("run: |")) + using (WriteSection("- name: Install atom tool")) { - foreach (var feedToAdd in feedsToAdd) - WriteLine($" atom nuget-add --name \"{feedToAdd.FeedName}\" --url \"{feedToAdd.FeedUrl}\""); + WriteLine("run: dotnet tool update --global DecSm.Atom.Tool"); + WriteLine("shell: bash"); } - WriteLine("shell: bash"); + WriteLine(); - using (WriteSection("env:")) + using (WriteSection("- name: Setup NuGet")) { - foreach (var feedToAdd in feedsToAdd) - WriteLine( - $$$"""{{{AddNugetFeedsStep.GetEnvVarNameForFeed(feedToAdd.FeedName)}}}: ${{ secrets.{{{feedToAdd.SecretName}}} }}"""); + using (WriteSection("run: |")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $" atom nuget-add --name \"{feedToAdd.FeedName}\" --url \"{feedToAdd.FeedUrl}\""); + } + + WriteLine("shell: bash"); + + using (WriteSection("env:")) + { + foreach (var feedToAdd in feedsToAdd) + WriteLine( + $$$"""{{{AddNugetFeedsStep.GetEnvVarNameForFeed(feedToAdd.FeedName)}}}: ${{ secrets.{{{feedToAdd.SecretName}}} }}"""); + } } } }