diff --git a/.github/actions/execute-pipeline/action.yml b/.github/actions/execute-pipeline/action.yml index c53f2b692b..057619990c 100644 --- a/.github/actions/execute-pipeline/action.yml +++ b/.github/actions/execute-pipeline/action.yml @@ -30,7 +30,7 @@ runs: steps: - name: Run Pipeline shell: bash - run: dotnet run -c Release --categories ${{ inputs.categories }} + run: dotnet run -c Release --no-build --categories ${{ inputs.categories }} working-directory: "TUnit.Pipeline" env: ADMIN_TOKEN: ${{ inputs.admin-token }} diff --git a/.github/workflows/dotnet.yml b/.github/workflows/dotnet.yml index 9f5e3401d2..07fdcb0872 100644 --- a/.github/workflows/dotnet.yml +++ b/.github/workflows/dotnet.yml @@ -145,6 +145,16 @@ jobs: "-p:RepositoryBranch=${{ steps.gitversion.outputs.branchName }}" "-p:RepositoryCommit=${{ steps.gitversion.outputs.sha }}" + - name: Publish Mock Tests AOT + if: matrix.os == 'ubuntu-latest' + shell: bash + run: | + for fw in net8.0 net9.0 net10.0; do + dotnet publish TUnit.Mocks.Tests/TUnit.Mocks.Tests.csproj -c Release \ + --use-current-runtime -p:Aot=true -o "MOCKTESTS_AOT_${fw}" --framework "${fw}" & + done + wait + - name: Expose GitHub Actions Runtime uses: actions/github-script@v8 with: diff --git a/TUnit.Pipeline/Modules/PackTUnitFilesModule.cs b/TUnit.Pipeline/Modules/PackTUnitFilesModule.cs index 2d026af2fb..f9f3c44d16 100644 --- a/TUnit.Pipeline/Modules/PackTUnitFilesModule.cs +++ b/TUnit.Pipeline/Modules/PackTUnitFilesModule.cs @@ -56,6 +56,7 @@ await context.DotNet() Properties = properties, IncludeSource = project == Sourcy.DotNet.Projects.TUnit_Templates ? false : true, Configuration = "Release", + NoBuild = true, }, new CommandExecutionOptions { LogSettings = new CommandLoggingOptions diff --git a/TUnit.Pipeline/Modules/PublishAndRunMockTestsAOTModule.cs b/TUnit.Pipeline/Modules/PublishAndRunMockTestsAOTModule.cs deleted file mode 100644 index 6b1216cb29..0000000000 --- a/TUnit.Pipeline/Modules/PublishAndRunMockTestsAOTModule.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Runtime.InteropServices; -using ModularPipelines.Attributes; -using ModularPipelines.Configuration; -using ModularPipelines.Context; -using ModularPipelines.DotNet.Extensions; -using ModularPipelines.DotNet.Options; -using ModularPipelines.Extensions; -using ModularPipelines.Git.Extensions; -using ModularPipelines.Models; -using ModularPipelines.Modules; -using ModularPipelines.Options; - -namespace TUnit.Pipeline.Modules; - -[DependsOn] -public class PublishAndRunMockTestsAOTModule : Module> -{ - protected override ModuleConfiguration Configure() => ModuleConfiguration.Create() - .WithSkipWhen(_ => EnvironmentVariables.IsNetFramework || !RuntimeInformation.IsOSPlatform(OSPlatform.Linux) - ? SkipDecision.Skip("Only runs on Linux") - : SkipDecision.DoNotSkip) - .Build(); - - protected override async Task?> ExecuteAsync(IModuleContext context, CancellationToken cancellationToken) - { - var results = new List(); - - var testProject = context.Git() - .RootDirectory - .AssertExists() - .FindFile(x => x.Name == "TUnit.Mocks.Tests.csproj") - .AssertExists(); - - var rootDir = context.Git().RootDirectory.AssertExists().Path; - - foreach (var framework in new[] { "net8.0", "net9.0", "net10.0" }) - { - var outputDir = Path.Combine(rootDir, $"MOCKTESTS_AOT_{framework}"); - - // Publish with AOT - var publishResult = await context.SubModule($"Publish-AOT-{framework}", async () => - { - return await context.DotNet().Publish(new DotNetPublishOptions - { - ProjectSolution = testProject.Path, - Runtime = GetRuntimeIdentifier(), - Configuration = "Release", - Output = outputDir, - Properties = - [ - new KeyValue("Aot", "true"), - ], - Framework = framework, - }, new CommandExecutionOptions - { - LogSettings = new CommandLoggingOptions - { - ShowCommandArguments = true, - ShowStandardError = true, - ShowExecutionTime = true, - ShowExitCode = true - } - }, cancellationToken); - }); - - results.Add(publishResult); - - // Run the published AOT executable - var exeName = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) - ? "TUnit.Mocks.Tests.exe" - : "TUnit.Mocks.Tests"; - var exePath = Path.Combine(outputDir, exeName); - - var runResult = await context.SubModule($"Run-AOT-{framework}", async () => - { - return await context.Shell.Bash.Command( - new BashCommandOptions($"DISABLE_GITHUB_REPORTER=true \"{exePath}\""), - cancellationToken); - }); - - results.Add(runResult); - } - - return results; - } - - private static string GetRuntimeIdentifier() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - return "linux-x64"; - } - - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - return "win-x64"; - } - - if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - return "osx-arm64"; - } - - throw new ArgumentException("Unknown platform"); - } -} diff --git a/TUnit.Pipeline/Modules/RunMockTestsAOTModule.cs b/TUnit.Pipeline/Modules/RunMockTestsAOTModule.cs new file mode 100644 index 0000000000..51eb65d5a5 --- /dev/null +++ b/TUnit.Pipeline/Modules/RunMockTestsAOTModule.cs @@ -0,0 +1,44 @@ +using System.Runtime.InteropServices; +using ModularPipelines.Attributes; +using ModularPipelines.Configuration; +using ModularPipelines.Context; +using ModularPipelines.Extensions; +using ModularPipelines.Git.Extensions; +using ModularPipelines.Models; +using ModularPipelines.Modules; +using ModularPipelines.Options; + +namespace TUnit.Pipeline.Modules; + +[DependsOn] +public class RunMockTestsAOTModule : Module> +{ + protected override ModuleConfiguration Configure() => ModuleConfiguration.Create() + .WithSkipWhen(_ => EnvironmentVariables.IsNetFramework || !RuntimeInformation.IsOSPlatform(OSPlatform.Linux) + ? SkipDecision.Skip("Only runs on Linux") + : SkipDecision.DoNotSkip) + .Build(); + + protected override async Task?> ExecuteAsync(IModuleContext context, CancellationToken cancellationToken) + { + var results = new List(); + + var rootDir = context.Git().RootDirectory.AssertExists().Path; + + foreach (var framework in new[] { "net8.0", "net9.0", "net10.0" }) + { + var exePath = Path.Combine(rootDir, $"MOCKTESTS_AOT_{framework}", "TUnit.Mocks.Tests"); + + var runResult = await context.SubModule($"Run-AOT-{framework}", async () => + { + return await context.Shell.Bash.Command( + new BashCommandOptions($"DISABLE_GITHUB_REPORTER=true \"{exePath}\""), + cancellationToken); + }); + + results.Add(runResult); + } + + return results; + } +}