88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| name: Feedser Tests CI
 | |
| 
 | |
| on:
 | |
|   push:
 | |
|     paths:
 | |
|       - 'StellaOps.Feedser/**'
 | |
|       - '.gitea/workflows/feedser-tests.yml'
 | |
|   pull_request:
 | |
|     paths:
 | |
|       - 'StellaOps.Feedser/**'
 | |
|       - '.gitea/workflows/feedser-tests.yml'
 | |
| 
 | |
| jobs:
 | |
|   advisory-store-performance:
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
| 
 | |
|       - name: Set up .NET SDK
 | |
|         uses: actions/setup-dotnet@v4
 | |
|         with:
 | |
|           dotnet-version: 10.0.100-rc.1
 | |
| 
 | |
|       - name: Restore dependencies
 | |
|         working-directory: StellaOps.Feedser
 | |
|         run: dotnet restore StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj
 | |
| 
 | |
|       - name: Run advisory store performance test
 | |
|         working-directory: StellaOps.Feedser
 | |
|         run: |
 | |
|           set -euo pipefail
 | |
|           dotnet test \
 | |
|             StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj \
 | |
|             --filter "FullyQualifiedName~AdvisoryStorePerformanceTests" \
 | |
|             --logger:"console;verbosity=detailed" | tee performance.log
 | |
| 
 | |
|       - name: Upload performance log
 | |
|         if: always()
 | |
|         uses: actions/upload-artifact@v4
 | |
|         with:
 | |
|           name: advisory-store-performance-log
 | |
|           path: StellaOps.Feedser/performance.log
 | |
| 
 | |
|   full-test-suite:
 | |
|     runs-on: ubuntu-latest
 | |
|     steps:
 | |
|       - uses: actions/checkout@v4
 | |
| 
 | |
|       - name: Set up .NET SDK
 | |
|         uses: actions/setup-dotnet@v4
 | |
|         with:
 | |
|           dotnet-version: 10.0.100-rc.1
 | |
| 
 | |
|       - name: Restore dependencies
 | |
|         working-directory: StellaOps.Feedser
 | |
|         run: dotnet restore StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj
 | |
| 
 | |
|       - name: Run full test suite with baseline guard
 | |
|         working-directory: StellaOps.Feedser
 | |
|         env:
 | |
|           BASELINE_SECONDS: "19.8"
 | |
|           TOLERANCE_PERCENT: "25"
 | |
|         run: |
 | |
|           set -euo pipefail
 | |
|           start=$(date +%s)
 | |
|           dotnet test StellaOps.Feedser.Tests/StellaOps.Feedser.Tests.csproj --no-build | tee full-tests.log
 | |
|           end=$(date +%s)
 | |
|           duration=$((end-start))
 | |
|           echo "Full test duration: ${duration}s"
 | |
|           export DURATION_SECONDS="$duration"
 | |
|           python - <<'PY'
 | |
| import os, sys
 | |
| duration = float(os.environ["DURATION_SECONDS"])
 | |
| baseline = float(os.environ["BASELINE_SECONDS"])
 | |
| tolerance = float(os.environ["TOLERANCE_PERCENT"])
 | |
| threshold = baseline * (1 + tolerance / 100)
 | |
| print(f"Baseline {baseline:.1f}s, threshold {threshold:.1f}s, observed {duration:.1f}s")
 | |
| if duration > threshold:
 | |
|     sys.exit(f"Full test duration {duration:.1f}s exceeded threshold {threshold:.1f}s")
 | |
| PY
 | |
| 
 | |
|       - name: Upload full test log
 | |
|         if: always()
 | |
|         uses: actions/upload-artifact@v4
 | |
|         with:
 | |
|           name: full-test-suite-log
 | |
|           path: StellaOps.Feedser/full-tests.log
 |