Repository navigation
Phase 4D-C1: add guarded Direct/SBO control semantics #636
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: C++ CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| linux: | |
| name: Linux / ${{ matrix.compiler }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| compiler: [gcc, clang] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Select compiler | |
| shell: bash | |
| run: | | |
| if [[ "${{ matrix.compiler }}" == "gcc" ]]; then | |
| echo "CC=gcc" >> "$GITHUB_ENV" | |
| echo "CXX=g++" >> "$GITHUB_ENV" | |
| else | |
| echo "CC=clang" >> "$GITHUB_ENV" | |
| echo "CXX=clang++" >> "$GITHUB_ENV" | |
| fi | |
| - name: Configure | |
| run: cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DARIEC61850_WARNINGS_AS_ERRORS=ON | |
| - name: Build | |
| run: cmake --build build --parallel | |
| - name: Test | |
| run: ctest --test-dir build --output-on-failure | |
| - name: Cross-language model parity tool self-test | |
| run: python3 tools/compare_live_model_json.py --self-test | |
| - name: Read-only evidence runner syntax and CLI smoke | |
| run: | | |
| python3 -m py_compile scripts/run-live-readonly-interop.py | |
| python3 scripts/run-live-readonly-interop.py --help > /dev/null | |
| python3 -m py_compile scripts/run-phase4c-physical-acceptance.py | |
| python3 scripts/run-phase4c-physical-acceptance.py --help > /dev/null | |
| python3 -m py_compile scripts/run-phase4c-timeout-recovery.py | |
| python3 scripts/run-phase4c-timeout-recovery.py --help > /dev/null | |
| windows: | |
| name: Windows / MSVC | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Configure | |
| run: cmake -S . -B build -A x64 -DARIEC61850_WARNINGS_AS_ERRORS=ON | |
| - name: Build | |
| run: cmake --build build --config Release --parallel | |
| - name: Test | |
| run: ctest --test-dir build -C Release --output-on-failure | |
| - name: Evidence tooling self-tests | |
| run: | | |
| python tools/compare_live_model_json.py --self-test | |
| python -m py_compile scripts/run-live-readonly-interop.py | |
| python scripts/run-live-readonly-interop.py --help | Out-Null | |
| python -m py_compile scripts/run-phase4c-physical-acceptance.py | |
| python scripts/run-phase4c-physical-acceptance.py --help | Out-Null | |
| python -m py_compile scripts/run-phase4c-timeout-recovery.py | |
| python scripts/run-phase4c-timeout-recovery.py --help | Out-Null | |
| - name: Build deterministic SV injector evidence bundle | |
| shell: pwsh | |
| run: | | |
| $ErrorActionPreference = 'Stop' | |
| $out = 'sv-injector-artifact' | |
| New-Item -ItemType Directory -Force -Path $out | Out-Null | |
| $exe = 'build/Release/ariec61850_sv_injector.exe' | |
| if (-not (Test-Path $exe)) { throw "Missing $exe" } | |
| & $exe --capabilities | Out-File -Encoding utf8 "$out/capabilities.json" | |
| & $exe --scenario normal --frames 8000 --pcap "$out/sv-loopback-normal-2s.pcap" --json | | |
| Out-File -Encoding utf8 "$out/normal-2s-evidence.json" | |
| if ($LASTEXITCODE -ne 0) { throw "Normal 8,000-frame injector evidence run failed: $LASTEXITCODE" } | |
| & $exe --scenario protection-fault --json | | |
| Out-File -Encoding utf8 "$out/protection-fault-evidence.json" | |
| if ($LASTEXITCODE -ne 0) { throw "Protection-fault injector evidence run failed: $LASTEXITCODE" } | |
| Copy-Item $exe "$out/ariec61850_sv_injector.exe" | |
| Get-FileHash "$out/ariec61850_sv_injector.exe", "$out/sv-loopback-normal-2s.pcap", "$out/normal-2s-evidence.json", "$out/protection-fault-evidence.json", "$out/capabilities.json" -Algorithm SHA256 | | |
| ForEach-Object { "{0} {1}" -f $_.Hash.ToLowerInvariant(), (Split-Path $_.Path -Leaf) } | | |
| Out-File -Encoding ascii "$out/SHA256SUMS" | |
| - name: Upload Windows SV injector | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: windows-sv-injector-${{ github.event.pull_request.head.sha || github.sha }} | |
| if-no-files-found: error | |
| retention-days: 14 | |
| path: sv-injector-artifact/ |