Skip to content

CI

CI #20

Workflow file for this run

name: KeyLoad CI
on:
push:
branches: [main]
pull_request:
workflow_dispatch:
permissions:
contents: read
concurrency:
group: keyload-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
analyzer-rules:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: global.json
- run: dotnet restore tests/KeyLoad.Analyzers.Tests/KeyLoad.Analyzers.Tests.csproj
- run: dotnet build tests/KeyLoad.Analyzers.Tests/KeyLoad.Analyzers.Tests.csproj --no-restore --configuration Release
- run: dotnet test --project tests/KeyLoad.Analyzers.Tests --no-build --no-restore --configuration Release
- name: Retain rule regression and diagnostic evidence
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: analyzer-rule-evidence
path: |
tests/KeyLoad.Analyzers.Tests/**/TestResults/**
artifacts/code-quality/**
if-no-files-found: error
verify:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
runs-on: ${{ matrix.os }}
timeout-minutes: 30
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: global.json
- run: dotnet restore KeyLoad.slnx
- run: dotnet build KeyLoad.slnx --no-restore --configuration Release
- name: Verify EditorConfig and analyzer fixes
run: dotnet format KeyLoad.slnx --verify-no-changes --no-restore
- name: Verify repository governance
run: node scripts/Features/RepositoryGovernance/verify.mjs
- name: Verify source-owned Roslyn rules
run: dotnet test --project tests/KeyLoad.Analyzers.Tests --no-build --no-restore --configuration Release
- run: dotnet test --project tests/KeyLoad.UnitTests --no-build --no-restore --configuration Release
- run: dotnet test --project tests/KeyLoad.RecoveryTests --no-build --no-restore --configuration Release
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: test-results-${{ matrix.os }}
path: |
**/TestResults/**
artifacts/qualification/**
if-no-files-found: ignore
- name: Retain compiler diagnostic reports
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: code-quality-${{ matrix.os }}
path: artifacts/code-quality/**
if-no-files-found: error
docker-rf3:
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: global.json
- name: Require the actual Docker runtime
run: docker version
- run: dotnet restore KeyLoad.slnx
- run: dotnet build tests/KeyLoad.IntegrationTests --no-restore --configuration Release
- name: Qualify RF3 through the real SDK clients
run: dotnet test --project tests/KeyLoad.IntegrationTests --no-build --no-restore --configuration Release
- name: Retain real topology and fault receipts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: docker-rf3-qualification
path: |
tests/KeyLoad.IntegrationTests/**/TestResults/**
artifacts/qualification/**
if-no-files-found: error
- name: Retain RF3 compiler diagnostic reports
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: code-quality-docker-rf3
path: artifacts/code-quality/**
if-no-files-found: error
comparison-smoke:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: actions/setup-dotnet@a98b56852c35b8e3190ac28c8c2271da59106c68 # v6.0.0
with:
global-json-file: global.json
- run: dotnet restore KeyLoad.slnx
- run: dotnet build tests/KeyLoad.ComparisonTests --no-restore --configuration Release
- run: dotnet test --project tests/KeyLoad.ComparisonTests --no-build --no-restore --configuration Release
- name: Measure 1 KiB documents, eight clients and three graph hops
run: dotnet test --project tests/KeyLoad.ComparisonTests --no-build --no-restore --configuration Release
env:
KEYLOAD_COMPARISON_DOCUMENTS: 128
KEYLOAD_COMPARISON_OPERATIONS: 60
KEYLOAD_COMPARISON_WARMUP: 5
KEYLOAD_COMPARISON_REPETITIONS: 3
KEYLOAD_COMPARISON_CONCURRENCY: 8
KEYLOAD_COMPARISON_DIMENSIONS: 32
KEYLOAD_COMPARISON_TOPK: 10
KEYLOAD_COMPARISON_GRAPHVERTICES: 128
KEYLOAD_COMPARISON_GRAPHDEPTH: 3
KEYLOAD_COMPARISON_REPORT_NAME: json-1k-c8
- name: Measure 16 KiB documents, four clients and five graph hops
run: dotnet test --project tests/KeyLoad.ComparisonTests --no-build --no-restore --configuration Release
env:
KEYLOAD_COMPARISON_DOCUMENTS: 128
KEYLOAD_COMPARISON_OPERATIONS: 60
KEYLOAD_COMPARISON_WARMUP: 5
KEYLOAD_COMPARISON_REPETITIONS: 3
KEYLOAD_COMPARISON_CONCURRENCY: 4
KEYLOAD_COMPARISON_PAYLOADBYTES: 16384
KEYLOAD_COMPARISON_DIMENSIONS: 32
KEYLOAD_COMPARISON_TOPK: 10
KEYLOAD_COMPARISON_GRAPHVERTICES: 128
KEYLOAD_COMPARISON_GRAPHDEPTH: 5
KEYLOAD_COMPARISON_REPORT_NAME: json-16k-c4
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: comparison-suite
path: artifacts/comparisons/**
if-no-files-found: warn
- name: Retain comparison compiler diagnostic reports
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
if: always()
with:
name: code-quality-comparisons
path: artifacts/code-quality/**
if-no-files-found: error