diff --git a/.github/workflows/azure-objects.yml b/.github/workflows/azure-objects.yml index afc895a6..e781b47e 100644 --- a/.github/workflows/azure-objects.yml +++ b/.github/workflows/azure-objects.yml @@ -62,6 +62,9 @@ jobs: echo "AZURE_FEDERATED_TOKEN_FILE=$RUNNER_TEMP/assertion" >> "$GITHUB_ENV" - name: Test against the storage account + # #126: two contract classes against a real account; the services + # leg's limit and hang dump, which run the same classes on emulators. + timeout-minutes: 10 run: > dotnet test --project tests/Varve.Store.Tests/Varve.Store.Tests.csproj @@ -69,6 +72,10 @@ jobs: --no-build --filter-class Varve.Store.Tests.Objects.AzureAccountObjectStoreContractTests --filter-class Varve.Store.Tests.Objects.AzureAccountStorageContractTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --hangdump + --hangdump-timeout 5m - name: What-if for the Container Apps template env: @@ -101,3 +108,13 @@ jobs: - name: Remove the token if: always() run: rm -f "$RUNNER_TEMP/assertion" + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-azure-objects + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01863eeb..4c2c393f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -249,6 +249,18 @@ jobs: # dotNetRDF is a benchmark-only reference. run: dotnet build tests/Varve.Benchmarks/Varve.Benchmarks.csproj --configuration Release + - name: Temporary folder on the runner's temporary drive + # #126: every test dataset, and the object store's cache directories, + # are made under the temporary folder. On windows-latest that is the + # profile's, on C:, the system drive; the runner's own temporary folder + # is on D:, as the workspace is. From here on, the tests' is too. + if: runner.os == 'Windows' + shell: pwsh + run: | + "The temporary folder was $([System.IO.Path]::GetTempPath()); it is now $env:RUNNER_TEMP." + "TEMP=$env:RUNNER_TEMP" >> $env:GITHUB_ENV + "TMP=$env:RUNNER_TEMP" >> $env:GITHUB_ENV + # Every test project except the conformance one, which has a job of its # own because it is gated by the ratchet rather than by its own result. # One step each rather than one step over the solution: `dotnet test` @@ -259,114 +271,168 @@ jobs: dotnet test --project tests/Varve.Analyzers.Tests/Varve.Analyzers.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Analyzers.Tests - name: Test Varve.Iri run: > dotnet test --project tests/Varve.Iri.Tests/Varve.Iri.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Iri.Tests - name: Test Varve.Rdf run: > dotnet test --project tests/Varve.Rdf.Tests/Varve.Rdf.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Rdf.Tests - name: Test Varve.Turtle run: > dotnet test --project tests/Varve.Turtle.Tests/Varve.Turtle.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Turtle.Tests - name: Test Varve.RdfXml run: > dotnet test --project tests/Varve.RdfXml.Tests/Varve.RdfXml.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.RdfXml.Tests - name: Test Varve.JsonLd run: > dotnet test --project tests/Varve.JsonLd.Tests/Varve.JsonLd.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.JsonLd.Tests - name: Test Varve.Delta run: > dotnet test --project tests/Varve.Delta.Tests/Varve.Delta.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Delta.Tests - name: Test Varve.Json.Canonical run: > dotnet test --project tests/Varve.Json.Canonical.Tests/Varve.Json.Canonical.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Json.Canonical.Tests - name: Test Varve.Events run: > dotnet test --project tests/Varve.Events.Tests/Varve.Events.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Events.Tests - name: Test Varve.Management run: > dotnet test --project tests/Varve.Management.Tests/Varve.Management.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Management.Tests - name: Test Varve.Store + # #126: about twice the slowest green run, so a hang fails in an hour + # rather than at the six-hour job limit; the hang dump fires first, + # when no test has ended for 15 minutes, and names the tests in flight. + # The longest gap between two tests ending was 9.0 minutes on Windows. + timeout-minutes: ${{ matrix.os == 'windows-latest' && 65 || 35 }} run: > dotnet test --project tests/Varve.Store.Tests/Varve.Store.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --hangdump + --hangdump-timeout 15m + + - name: Store test durations + # #126: the slowest tests and the classes that held the parallel slots, + # in the job summary, from the step's own TRX. + if: always() + run: > + dotnet run eng/test-durations.cs -- + ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --label "Varve.Store.Tests on ${{ matrix.os }}" - name: Test Varve.Xsd run: > dotnet test --project tests/Varve.Xsd.Tests/Varve.Xsd.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Xsd.Tests - name: Test Varve.Sparql run: > dotnet test --project tests/Varve.Sparql.Tests/Varve.Sparql.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Tests - name: Test Varve.Sparql.Results run: > dotnet test --project tests/Varve.Sparql.Results.Tests/Varve.Sparql.Results.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Results.Tests - name: Test Varve.Sparql.Evaluation run: > dotnet test --project tests/Varve.Sparql.Evaluation.Tests/Varve.Sparql.Evaluation.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Evaluation.Tests - name: Test Varve.Sparql.Store run: > dotnet test --project tests/Varve.Sparql.Store.Tests/Varve.Sparql.Store.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Store.Tests - name: Test Varve.Shacl run: > dotnet test --project tests/Varve.Shacl.Tests/Varve.Shacl.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Shacl.Tests - name: Test Varve.Shacl.Sparql run: > dotnet test --project tests/Varve.Shacl.Sparql.Tests/Varve.Shacl.Sparql.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Shacl.Sparql.Tests - name: Test Varve.Protocol run: > dotnet test --project tests/Varve.Protocol.Tests/Varve.Protocol.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Protocol.Tests # Built with the solution since 7b and never run by CI until the # Client and integration milestone's second part found the gap. @@ -375,6 +441,8 @@ jobs: dotnet test --project tests/Varve.Protocol.Client.Tests/Varve.Protocol.Client.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Protocol.Client.Tests # Layer (a) of ADR 0100: the permission matrix and every way a token can # be wrong, against an issuer in the test, on every platform. @@ -383,6 +451,8 @@ jobs: dotnet test --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests # tools/repo-standard: its own solution, built and tested on both # platforms (ADR 0039). Not packed: it is not published from here. @@ -394,6 +464,8 @@ jobs: dotnet test --project tools/repo-standard/tests/RepoStandard.Tests/RepoStandard.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/RepoStandard.Tests # The publish dry run. A version pushed to nuget.org cannot be edited, # replaced or deleted, so the pack step and its output are exercised on @@ -410,6 +482,16 @@ jobs: - name: Check the package metadata run: dotnet run eng/package-metadata.cs -- ${{ github.workspace }}/artifacts/packages + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-build-${{ matrix.os }} + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn + # Constraint 2, proven rather than configured. An analyzer only sees what it # can see statically; only an ILC run shows the packages publish, and only # running the binary shows the interesting AOT failures — a trimmed type, a @@ -538,6 +620,18 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.ProviderTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-auth-mock-oauth2 + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # The object-storage legs (ADR 0134): the storage contract suite and the # object-store contract, race properties included, against Azurite and the @@ -584,6 +678,8 @@ jobs: exit 1 - name: Test against them + # #126: about twice its slowest green run, with the hang dump below it. + timeout-minutes: 10 env: VARVE_AZURITE: http://127.0.0.1:10000/devstoreaccount1 VARVE_RUSTFS: http://127.0.0.1:9000,varvetest,varvetestsecret @@ -593,6 +689,17 @@ jobs: --project tests/Varve.Store.Tests/Varve.Store.Tests.csproj --configuration Release --filter-namespace Varve.Store.Tests.Objects + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --hangdump + --hangdump-timeout 5m + + - name: Store test durations + if: always() + run: > + dotnet run eng/test-durations.cs -- + ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --label "Varve.Store.Tests.Objects against the services" # A server's datasets in the container: a second server takes one over, # the first answers writes with writer-superseded, and varve lease @@ -606,6 +713,18 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.ObjectStorageServerTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-storage-services + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # The fleet (ADRs 0163, 0164, 0168): two server processes on one Azurite # container, the system writer and a follower that forwards. Its own job, @@ -657,6 +776,18 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.FleetTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-fleet-services + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # The REC generator's bytes on both architectures (ADR 0141): its tests pin # each size's SHA-256, so a pass on each runner is the same bytes on both. @@ -685,7 +816,17 @@ jobs: global-json-file: global.json - name: Generate S, M and L and compare - run: dotnet test --project tests/Varve.Rec.Tests/Varve.Rec.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Rec.Tests/Varve.Rec.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Rec.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-rec-generator-${{ matrix.rid }} + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # Auth test layer (c) (ADR 0100): Zitadel and PostgreSQL, a real provider, # started by compose and seeded through its API by eng/zitadel-seed.cs. One @@ -733,11 +874,23 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.ProviderTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests - name: Zitadel's log if: failure() run: docker compose --file .github/zitadel/compose.yaml logs zitadel + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-auth-zitadel + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn + # The real-provider legs (ADR 0100): one test each for Entra ID and Google, # with secrets from the auth-providers environment, which only main can # deploy to — so no pull request, and no fork, ever sees them. Not a required @@ -772,6 +925,18 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.ProviderTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-auth-providers + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # The container image (ADR 0111): the Native AOT binary published on a # native runner for its architecture, built into the chiseled image, pushed @@ -985,6 +1150,8 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.ProviderTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests - name: Stop the mock and its container if: always() && matrix.rid == 'linux-x64' @@ -1063,6 +1230,8 @@ jobs: --project tests/Varve.Server.Tests/Varve.Server.Tests.csproj --configuration Release --filter-class Varve.Server.Tests.ProviderTests + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Server.Tests - name: Stop Zitadel and its container if: always() && matrix.rid == 'linux-x64' @@ -1079,6 +1248,16 @@ jobs: path: ${{ github.workspace }}/artifacts/container-protocol if-no-files-found: warn + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-container-${{ matrix.rid }} + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn + # The Aspire sample (ADR 0117): the AppHost starts the server's container # beside the test issuer and its test passes a token, an update and a # query. The image is the one the container job just pushed for this @@ -1128,6 +1307,18 @@ jobs: dotnet test --project samples/Varve.Aspire.Sample.Tests/Varve.Aspire.Sample.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Aspire.Sample.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-aspire + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # Durability, measured per platform (ADR 0073): what an append and a flush # to the device cost on each runner, with the calls the file backend makes. @@ -1183,6 +1374,18 @@ jobs: dotnet test --project samples/Varve.OnBehalfOf.Sample.Tests/Varve.OnBehalfOf.Sample.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.OnBehalfOf.Sample.Tests + + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-samples + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn # The Event Hubs bridge sample (ADRs 0143, 0146): the emulator and Azurite # started by compose, and the sample's test, which runs Varve as a process, @@ -1228,6 +1431,8 @@ jobs: dotnet test --project samples/Varve.EventHubs.Sample.Tests/Varve.EventHubs.Sample.Tests.csproj --configuration Release + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.EventHubs.Sample.Tests - name: The emulator's log if: failure() @@ -1237,6 +1442,16 @@ jobs: if: always() run: docker compose --file .github/eventhubs/compose.yaml down || true + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-samples-eventhubs + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn + # The Entra registrations of the on-behalf-of chain build (ADR 0127): the # Bicep CLI the runner's Azure CLI carries, and the Microsoft Graph # extension from mcr.microsoft.com. Nothing is deployed. diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 00000000..4ba440ae --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,106 @@ +# The store's searches at their full depth, every night on main (#126). +# +# Some of the store's tests search a space wider than a pull request can wait +# for. On a pull request each explores a share of it; here, every variable in +# docs/testing.md section 8 is set, and each explores the whole: as much as +# the gate explored before #126, or more. The property each test proves is the +# same at either depth. +# +# Not a required check: it runs after the commits it tests have landed. A red +# night is a defect on main, found the next morning instead of never. #129 may +# make this run a release's gate. +# +# No container: the suites here run in process. The services legs keep their +# own job in ci.yml and its images in .github/ci-images.yaml. +name: Nightly + +on: + schedule: + # 02:41 UTC every day: off the hour, as GitHub asks of scheduled workflows. + - cron: "41 2 * * *" + workflow_dispatch: + +permissions: + contents: read + +env: + DOTNET_NOLOGO: "true" + DOTNET_CLI_TELEMETRY_OPTOUT: "true" + DOTNET_SKIP_FIRST_TIME_EXPERIENCE: "true" + NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages + +jobs: + store: + name: store, full depth (${{ matrix.os }}) + if: github.ref == 'refs/heads/main' + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest] + + steps: + - name: Line endings + # As the build job: the bytes tested are the bytes committed (ADR 0036). + shell: bash + run: git config --global core.autocrlf false + + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7 + + - name: Set up .NET + uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6 + with: + global-json-file: global.json + + - name: Cache NuGet packages + uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6 + with: + path: ${{ env.NUGET_PACKAGES }} + key: nuget-${{ runner.os }}-${{ hashFiles('Directory.Packages.props') }} + restore-keys: nuget-${{ runner.os }}- + + - name: Build + run: dotnet build tests/Varve.Store.Tests/Varve.Store.Tests.csproj --configuration Release + + - name: Temporary folder on the runner's temporary drive + # As the build job (#126): the tests' temporary folder on D:, not C:. + if: runner.os == 'Windows' + shell: pwsh + run: | + "TEMP=$env:RUNNER_TEMP" >> $env:GITHUB_ENV + "TMP=$env:RUNNER_TEMP" >> $env:GITHUB_ENV + + - name: Test Varve.Store at full depth + # The pull request's depth runs in the build job; this is the rest. + # Each value covers the whole of its search (docs/testing.md §8). The + # crash during recovery at stride 1 runs alone for most of an hour on + # Windows with no other test ending, so the hang dump waits longer. + timeout-minutes: 150 + env: + VARVE_FAULT_RECOVERY_STRIDE: "1" + VARVE_CACHE_DAMAGE_STRIDE: "1" + run: > + dotnet test + --project tests/Varve.Store.Tests/Varve.Store.Tests.csproj + --configuration Release + --no-build + --report-trx + --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --hangdump + --hangdump-timeout 100m + + - name: Store test durations + if: always() + run: > + dotnet run eng/test-durations.cs -- + ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests + --label "Varve.Store.Tests at full depth on ${{ matrix.os }}" + + - name: Upload the test results + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-nightly-${{ matrix.os }} + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index a50d39ea..a6fc043d 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -101,49 +101,51 @@ jobs: run: dotnet build Varve.slnx --configuration Release --no-restore - name: Test the analyzers - run: dotnet test --project tests/Varve.Analyzers.Tests/Varve.Analyzers.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Analyzers.Tests/Varve.Analyzers.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Analyzers.Tests - name: Test Varve.Iri - run: dotnet test --project tests/Varve.Iri.Tests/Varve.Iri.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Iri.Tests/Varve.Iri.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Iri.Tests - name: Test Varve.Rdf - run: dotnet test --project tests/Varve.Rdf.Tests/Varve.Rdf.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Rdf.Tests/Varve.Rdf.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Rdf.Tests - name: Test Varve.Turtle - run: dotnet test --project tests/Varve.Turtle.Tests/Varve.Turtle.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Turtle.Tests/Varve.Turtle.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Turtle.Tests - name: Test Varve.RdfXml - run: dotnet test --project tests/Varve.RdfXml.Tests/Varve.RdfXml.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.RdfXml.Tests/Varve.RdfXml.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.RdfXml.Tests - name: Test Varve.JsonLd - run: dotnet test --project tests/Varve.JsonLd.Tests/Varve.JsonLd.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.JsonLd.Tests/Varve.JsonLd.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.JsonLd.Tests - name: Test Varve.Delta - run: dotnet test --project tests/Varve.Delta.Tests/Varve.Delta.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Delta.Tests/Varve.Delta.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Delta.Tests - name: Test Varve.Store - run: dotnet test --project tests/Varve.Store.Tests/Varve.Store.Tests.csproj --configuration Release + # #126: the build job's Ubuntu limit and hang dump, for the same suite. + timeout-minutes: 35 + run: dotnet test --project tests/Varve.Store.Tests/Varve.Store.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Store.Tests --hangdump --hangdump-timeout 15m - name: Test Varve.Xsd - run: dotnet test --project tests/Varve.Xsd.Tests/Varve.Xsd.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Xsd.Tests/Varve.Xsd.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Xsd.Tests - name: Test Varve.Sparql - run: dotnet test --project tests/Varve.Sparql.Tests/Varve.Sparql.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Sparql.Tests/Varve.Sparql.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Tests - name: Test Varve.Sparql.Results - run: dotnet test --project tests/Varve.Sparql.Results.Tests/Varve.Sparql.Results.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Sparql.Results.Tests/Varve.Sparql.Results.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Results.Tests - name: Test Varve.Sparql.Evaluation - run: dotnet test --project tests/Varve.Sparql.Evaluation.Tests/Varve.Sparql.Evaluation.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Sparql.Evaluation.Tests/Varve.Sparql.Evaluation.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Evaluation.Tests - name: Test Varve.Sparql.Store - run: dotnet test --project tests/Varve.Sparql.Store.Tests/Varve.Sparql.Store.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Sparql.Store.Tests/Varve.Sparql.Store.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Sparql.Store.Tests - name: Test Varve.Shacl - run: dotnet test --project tests/Varve.Shacl.Tests/Varve.Shacl.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Shacl.Tests/Varve.Shacl.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Shacl.Tests - name: Test Varve.Shacl.Sparql - run: dotnet test --project tests/Varve.Shacl.Sparql.Tests/Varve.Shacl.Sparql.Tests.csproj --configuration Release + run: dotnet test --project tests/Varve.Shacl.Sparql.Tests/Varve.Shacl.Sparql.Tests.csproj --configuration Release --report-trx --results-directory ${{ github.workspace }}/artifacts/test-results/Varve.Shacl.Sparql.Tests - name: Run the W3C suites continue-on-error: true @@ -244,6 +246,16 @@ jobs: --source https://api.nuget.org/v3/index.json --skip-duplicate + - name: Upload the test results + # #126: every run keeps its TRX, pass or fail, so a slow or red run + # can be explained test by test from its own artifacts. + if: always() + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7 + with: + name: test-results-publish + path: ${{ github.workspace }}/artifacts/test-results + if-no-files-found: warn + # The container image (ADR 0111), after the gates: the Native AOT binary # published on a native runner per architecture, built into the chiseled # image and pushed by digest; the manifest job joins the two, tags the diff --git a/Directory.Packages.props b/Directory.Packages.props index 50244a65..fd61865e 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -188,6 +188,7 @@ +