diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 5c203078..352332eb 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -28,18 +28,32 @@ jobs: dotnet --version dotnet --list-sdks - - name: Complete Release gate + # NOT tools/run-release-gate.ps1 here. That script redirects every child + # process to its own log file, so the step emits nothing for minutes at a + # time; Forgejo treats a task that stops reporting as a zombie and fails + # it while the work is still running (observed: job marked failed with 20 + # dotnet processes still alive and a complete 8.7 MB TRX on disk). Running + # the projects directly keeps output streaming. The script stays the + # canonical LOCAL gate; the trait filter below is copied from its default. + - name: Build shell: pwsh - run: ./tools/run-release-gate.ps1 + run: dotnet build AcDream.slnx -c Release --nologo - - name: Upload gate evidence - if: always() - uses: actions/upload-artifact@v4 - with: - name: release-gate-windows - path: artifacts/release-gate/ - if-no-files-found: warn - retention-days: 14 + - name: Test (lane-filtered, streaming) + shell: pwsh + run: | + $ErrorActionPreference = 'Stop' + $filter = 'Lane!=InstalledDat&Lane!=PreparedPackage&Lane!=Live&Lane!=Manual&Lane!=Windows&Lane!=Linux&Lane!=SystemFont&Purpose!=Diagnostic&Status!=KnownFailure' + $failed = @() + foreach ($proj in Get-ChildItem tests -Directory | Sort-Object Name) { + $csproj = Join-Path $proj.FullName "$($proj.Name).csproj" + if (-not (Test-Path $csproj)) { continue } + Write-Host "::group::$($proj.Name)" + dotnet test $csproj -c Release --no-build --nologo --filter $filter + if ($LASTEXITCODE -ne 0) { $failed += $proj.Name } + Write-Host "::endgroup::" + } + if ($failed.Count) { throw "Failed test projects: $($failed -join ', ')" } linux-portable: runs-on: ubuntu-latest