Skip to content

Give SQL null comparison qualification its own bounded test group #261

Give SQL null comparison qualification its own bounded test group

Give SQL null comparison qualification its own bounded test group #261

name: Build and Tests
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
workflow_call:
env:
KEYLOAD_TEST_CONFIGURATION: Release
permissions:
contents: read
# Shards and lanes come from scripts/Features/TestInfrastructure/ci-test-shards.json (ADR-148).
# Test jobs build the whole solution: unit CodeQuality checks read every project's compiled image and
# the cold bootstrap topology test launches src/KeyLoad.Cli, which the test projects do not reference.
jobs:
build:
name: Strict Release build and compiled test inventory
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Download source code
uses: actions/checkout@v7
- name: Set up .NET
uses: actions/setup-dotnet@v6
with:
global-json-file: global.json
- name: Check repository and website source inventory
run: |
node scripts/Features/RepositoryGovernance/verify.mjs
node scripts/Features/BenchmarkComparisons/session-source-closure.mjs --verify=scripts/Features/BenchmarkComparisons/site-isolated-dependencies.txt
- name: Check test shard partition
run: node scripts/Features/TestInfrastructure/ci-test-shards.mjs verify
- name: Build
run: dotnet build KeyLoad.slnx --configuration "$KEYLOAD_TEST_CONFIGURATION" -warnaserror
- name: Check compiled TUnit shard inventory
run: node --test scripts/Features/TestInfrastructure/ci-test-inventory.test.mjs
- name: Check compiled unit inventory and coverage selectors
shell: pwsh
run: |
$evidence = Join-Path $PWD 'tests/KeyLoad.FunctionalTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-inventory'
New-Item -ItemType Directory -Path $evidence -ErrorAction Stop | Out-Null
& ./scripts/Features/CodeQuality/functional-coverage.workflow-discovery.ps1 -Repository $PWD -EvidenceRoot $evidence
- name: Save compiled discovery evidence
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: compiled-test-discovery
path: |
tests/KeyLoad.FunctionalTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-inventory
tests/*/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/compiled-shard-inventory-*
if-no-files-found: warn
retention-days: 30
shards:
name: Plan named test groups
runs-on: ubuntu-24.04
timeout-minutes: 5
outputs:
functional: ${{ steps.plan.outputs.functional }}
cluster: ${{ steps.plan.outputs.cluster }}
steps:
- name: Download source code
uses: actions/checkout@v7
- name: Read the shard manifest
id: plan
run: |
echo "functional=$(node scripts/Features/TestInfrastructure/ci-test-shards.mjs matrix functional)" >> "$GITHUB_OUTPUT"
echo "cluster=$(node scripts/Features/TestInfrastructure/ci-test-shards.mjs matrix cluster)" >> "$GITHUB_OUTPUT"
functional:
name: Functional tests – ${{ matrix.name }}
needs: shards
runs-on: ubuntu-24.04
timeout-minutes: 30
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.shards.outputs.functional) }}
env:
SHARD: ${{ matrix.shard }}
steps:
- name: Download source code
uses: actions/checkout@v7
- name: Set up .NET
uses: actions/setup-dotnet@v6
with:
global-json-file: global.json
- name: Build
run: dotnet build KeyLoad.slnx --configuration "$KEYLOAD_TEST_CONFIGURATION" -warnaserror
- name: Test functional operations
run: node scripts/Features/TestInfrastructure/ci-test-shards.mjs run "$SHARD" --results-directory "$GITHUB_WORKSPACE/tests/KeyLoad.FunctionalTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results"
- name: Save test results
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: test-results-functional-${{ matrix.shard }}
path: tests/KeyLoad.FunctionalTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results
if-no-files-found: warn
retention-days: 30
overwrite: true
analyzers-recovery:
name: Analyzers and process recovery
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Download source code
uses: actions/checkout@v7
- name: Set up .NET
uses: actions/setup-dotnet@v6
with:
global-json-file: global.json
- name: Build
run: dotnet build KeyLoad.slnx --configuration "$KEYLOAD_TEST_CONFIGURATION" -warnaserror
- name: Test code analyzers
run: node scripts/Features/TestInfrastructure/ci-test-shards.mjs run compiler-analyzers --results-directory "$GITHUB_WORKSPACE/tests/KeyLoad.AnalyzerTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results"
- name: Test process recovery
if: ${{ !cancelled() }}
run: node scripts/Features/TestInfrastructure/ci-test-shards.mjs run process-crash-recovery --results-directory "$GITHUB_WORKSPACE/tests/KeyLoad.ProcessRecoveryTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results"
- name: Save test results
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: test-results-analyzers-recovery
path: |
tests/KeyLoad.AnalyzerTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results
tests/KeyLoad.ProcessRecoveryTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results
if-no-files-found: warn
retention-days: 30
overwrite: true
cluster:
name: Cluster tests – ${{ matrix.name }}
needs: shards
runs-on: ubuntu-24.04
timeout-minutes: 55
strategy:
fail-fast: false
matrix: ${{ fromJSON(needs.shards.outputs.cluster) }}
env:
SHARD: ${{ matrix.shard }}
steps:
- name: Download source code
uses: actions/checkout@v7
- name: Set up .NET
uses: actions/setup-dotnet@v6
with:
global-json-file: global.json
- name: Build
run: dotnet build KeyLoad.slnx --configuration "$KEYLOAD_TEST_CONFIGURATION" -warnaserror
- name: Install administration browser
if: ${{ matrix.playwright }}
shell: pwsh
run: tests/KeyLoad.ClusterTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/playwright.ps1 install --with-deps chromium
- name: Prepare Chromium certificate store
if: ${{ matrix.playwright }}
run: |
sudo apt-get update
sudo apt-get install --yes libnss3-tools
mkdir -p "$HOME/.pki/nssdb"
if [[ ! -f "$HOME/.pki/nssdb/cert9.db" ]]; then
certutil -N -d "sql:$HOME/.pki/nssdb" --empty-password
fi
- name: Trust standard Aspire development certificate
run: |
export SSL_CERT_DIR="$HOME/.aspnet/dev-certs/trust:/usr/lib/ssl/certs"
echo "SSL_CERT_DIR=$SSL_CERT_DIR" >> "$GITHUB_ENV"
dotnet dev-certs https --trust
- name: Test Aspire topology lanes
run: node scripts/Features/TestInfrastructure/ci-test-shards.mjs run "$SHARD" --results-directory "$GITHUB_WORKSPACE/tests/KeyLoad.ClusterTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results"
- name: Save test results
if: ${{ always() }}
uses: actions/upload-artifact@v7
with:
name: test-results-cluster-${{ matrix.shard }}
path: |
tests/KeyLoad.ClusterTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/ci-results
tests/KeyLoad.ClusterTests/bin/${{ env.KEYLOAD_TEST_CONFIGURATION }}/net10.0/aspire-diagnostics-*.log
if-no-files-found: warn
retention-days: 30
overwrite: true
verify-partition:
name: Verify every required test ran exactly once
needs: [functional, analyzers-recovery, cluster]
if: ${{ !cancelled() }}
runs-on: ubuntu-24.04
timeout-minutes: 10
steps:
- name: Download source code
uses: actions/checkout@v7
- name: Download test results
uses: actions/download-artifact@v8
with:
pattern: test-results-*
path: TestResults
merge-multiple: true
- name: Check every test ran exactly once
run: node scripts/Features/TestInfrastructure/ci-test-shards.mjs verify TestResults