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
 |