| File: WorkflowScripts\CiWorkflowTests.cs | Web Access |
| Project: src\tests\Infrastructure.Tests\Infrastructure.Tests.csproj (Infrastructure.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Xunit; namespace Infrastructure.Tests; public sealed class CiWorkflowTests { [Theory] [InlineData("prepare_winget_installer_artifacts")] [InlineData("prepare_homebrew_installer_artifacts")] public void InstallerJobsDependOnBuiltPackages(string jobName) { var workflow = ReadWorkflow("tests.yml"); var job = GetJob(workflow, jobName); Assert.Contains(" build_packages,", job); } [Fact] public void InstallerWorkflowStagesSameRunTemplatePackages() { var workflow = ReadWorkflow("prepare-installer-artifacts.yml"); var job = GetJob(workflow, "prepare_installer_artifacts"); var downloadStep = GetStep(job, "Download NuGet packages"); var configureStep = GetStep(job, "Configure CLI package override"); Assert.Contains("name: built-nugets", downloadStep); Assert.Contains("path: ${{ github.workspace }}/built-nugets", downloadStep); Assert.Contains("Aspire.ProjectTemplates.*.nupkg", configureStep); Assert.Contains("Where-Object { $_.Directory.Name -eq 'Shipping' }", configureStep); Assert.Contains("ASPIRE_CLI_PACKAGES=$packageDirectory", configureStep); Assert.Contains("$env:GITHUB_ENV", configureStep); } [Fact] public void RunTestsInstallsJavaForProjectsThatRequireIt() { var workflow = File.ReadAllText(Path.Combine(RepoRoot.Path, ".github", "workflows", "run-tests.yml")); var javaSetup = System.Text.RegularExpressions.Regex.Match( workflow, "(?ms)^ - name: Set up Java\\n(?<body>.*?)(?=^ - |\\z)"); Assert.True(javaSetup.Success, "Could not find the Java setup step in run-tests.yml."); Assert.Contains("if: ${{ fromJson(inputs.properties).requiresJava == true }}", javaSetup.Value); Assert.Contains("uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0", javaSetup.Value); Assert.Contains("distribution: temurin", javaSetup.Value); Assert.Contains("java-version: 21", javaSetup.Value); var properties = File.ReadAllText(Path.Combine(RepoRoot.Path, "eng", "testing", "CITestsProperties.props")); Assert.Contains("<CITestsProperty Include=\"requiresJava\" MSBuildProp=\"RequiresJava\"", properties); var javaTests = File.ReadAllText(Path.Combine( RepoRoot.Path, "tests", "Aspire.Hosting.CodeGeneration.Java.Tests", "Aspire.Hosting.CodeGeneration.Java.Tests.csproj")); Assert.Contains("<RequiresJava>true</RequiresJava>", javaTests); } [Fact] public void CiFailureTrackerCheckoutDoesNotPinMain() { var workflow = ReadWorkflow("ci.yml"); var job = GetJob(workflow, "ci_failure_tracker"); var checkout = System.Text.RegularExpressions.Regex.Match(job, "(?ms)^ - uses: actions/checkout@.*?(?=^ - |\\z)"); Assert.True(checkout.Success, "Could not find the ci_failure_tracker checkout step."); // Push CI also runs on release/**. Pinning this checkout to main makes the // tracker execute main's reporter instead of the workflow code from the branch // whose run is being evaluated. Assert.DoesNotContain("ref: main", checkout.Value); } private static string ReadWorkflow(string fileName) => File.ReadAllText(Path.Combine(RepoRoot.Path, ".github", "workflows", fileName)); private static string GetJob(string workflow, string jobName) { var job = System.Text.RegularExpressions.Regex.Match( workflow, $@"(?ms)^ {System.Text.RegularExpressions.Regex.Escape(jobName)}:\n(?<body>.*?)(?=^ [A-Za-z0-9_-]+:\n|\z)"); Assert.True(job.Success, $"Could not find the {jobName} job."); return job.Value; } private static string GetStep(string job, string stepName) { var step = System.Text.RegularExpressions.Regex.Match( job, $@"(?ms)^ - name: {System.Text.RegularExpressions.Regex.Escape(stepName)}\n.*?(?=^ - |\z)"); Assert.True(step.Success, $"Could not find the {stepName} step."); return step.Value; } }