Repository navigation
Release v0.2.0: integrate IEC 61850 engineering workbench #1197
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: IED Simulator Qt | |
| on: | |
| push: | |
| paths: | |
| - 'apps/ied_simulator/**' | |
| - 'include/ariec61850/scl/**' | |
| - 'src/scl/**' | |
| - 'include/ariec61850/mms/**' | |
| - 'src/mms/**' | |
| - 'include/ariec61850/goose/**' | |
| - 'src/goose/**' | |
| - 'tools/static_ied_server.cpp' | |
| - 'tools/mms_read_probe.cpp' | |
| - 'tools/mms_urcb_gi_probe.cpp' | |
| - 'tools/mms_brcb_event_probe.cpp' | |
| - 'tools/mms_sgcb_probe.cpp' | |
| - 'tools/static_ied_server_iedsim/**' | |
| - 'tests/fixtures/scl/**' | |
| - 'CMakeLists.txt' | |
| - '.github/workflows/ied-simulator-qt.yml' | |
| pull_request: | |
| paths: | |
| - 'apps/ied_simulator/**' | |
| - 'include/ariec61850/scl/**' | |
| - 'src/scl/**' | |
| - 'include/ariec61850/mms/**' | |
| - 'src/mms/**' | |
| - 'include/ariec61850/goose/**' | |
| - 'src/goose/**' | |
| - 'tools/static_ied_server.cpp' | |
| - 'tools/mms_read_probe.cpp' | |
| - 'tools/mms_urcb_gi_probe.cpp' | |
| - 'tools/mms_brcb_event_probe.cpp' | |
| - 'tools/mms_sgcb_probe.cpp' | |
| - 'tools/static_ied_server_iedsim/**' | |
| - 'tests/fixtures/scl/**' | |
| - 'CMakeLists.txt' | |
| - '.github/workflows/ied-simulator-qt.yml' | |
| permissions: | |
| contents: read | |
| jobs: | |
| build-and-smoke: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Qt | |
| uses: jurplel/install-qt-action@v4 | |
| with: | |
| version: '6.8.3' | |
| cache: true | |
| - name: Configure | |
| run: >- | |
| cmake -S apps/ied_simulator -B build-ied-simulator-qt -G Ninja | |
| -DCMAKE_BUILD_TYPE=Release | |
| - name: Build | |
| run: >- | |
| cmake --build build-ied-simulator-qt | |
| --target arstack_ied_simulator ariec61850_mms_read_probe ariec61850_live_discover ariec61850_mms_sgcb_probe ied_setting_control_manifest_qa ied_simulator_guardrails_qa ied_simulator_responsiveness_qa ied_simulator_commissioning_qa ied_simulator_runtime_commissioning_qa ied_simulator_goose_publication_qa ied_goose_workspace_qa ied_mms_client_workbench_qa ied_report_workspace_qa ied_file_settings_workspace_qa ied_scl_workspace_qa ied_product_hardening_qa --parallel 2 | |
| - name: Bounded activity and child-output guardrails | |
| run: ./build-ied-simulator-qt/ied_simulator_guardrails_qa | |
| - name: QML smoke test | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: ./build-ied-simulator-qt/arstack_ied_simulator --smoke-test | |
| - name: MMS client discovery workbench gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/ied_mms_client_workbench_qa | |
| ./tests/fixtures/scl/client-workbench.scd | |
| - name: Report / RCB commissioning workspace gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/ied_report_workspace_qa | |
| ./tests/fixtures/scl/minimal-station-brcb.scd | |
| - name: external IEC 61850 client indexed RCB production-path gate | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/ied_report_workspace_qa | |
| ./tests/fixtures/scl/interop-indexed-reports.scd | |
| - name: File transfer + Setting Groups workspace gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: ./build-ied-simulator-qt/ied_file_settings_workspace_qa | |
| - name: Canonical SettingControl manifest projection gate | |
| run: ./build-ied-simulator-qt/ied_setting_control_manifest_qa | |
| - name: Production SGCB discovery and ActSG cross-association gate | |
| run: >- | |
| python3 apps/ied_simulator/test_sgcb_production.py | |
| --server ./build-ied-simulator-qt/ariec61850_ied_simulator_server | |
| --build-dir ./build-ied-simulator-qt | |
| - name: external IEC 61850 client synthetic golden runtime gate | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| python3 apps/ied_simulator/test_interop_golden_synthetic.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| --build-dir ./build-ied-simulator-qt | |
| --scl ./tests/fixtures/scl/interop-golden-synthetic.cid | |
| - name: SCL workspace preservation + conversion-policy gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/ied_scl_workspace_qa | |
| ./tests/fixtures/scl/minimal-station-brcb.scd | |
| - name: Product hardening state + runtime readiness gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: ./build-ied-simulator-qt/ied_product_hardening_qa | |
| - name: Prove interactive SCL import uses bounded async path | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/arstack_ied_simulator | |
| --qa-async-import ./tests/fixtures/scl/minimal-station-brcb.scd | |
| - name: Prove malformed SCL fails closed | |
| run: >- | |
| python3 apps/ied_simulator/test_malformed_import.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| - name: Start stop restart lifecycle soak | |
| run: >- | |
| python3 apps/ied_simulator/test_runtime_lifecycle.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| --scl ./tests/fixtures/scl/minimal-station-brcb.scd | |
| --cycles 12 | |
| - name: Large SCL import performance gates | |
| run: >- | |
| python3 apps/ied_simulator/benchmark_large_scl.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| --targets 5000,20000,50000 | |
| - name: Runtime scale and responsiveness gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| python3 apps/ied_simulator/test_runtime_responsiveness.py | |
| --qa ./build-ied-simulator-qt/ied_simulator_responsiveness_qa | |
| --multi-scl ./tests/fixtures/scl/compact-multi-stream.scd | |
| --single-scl ./tests/fixtures/scl/minimal-station-brcb.scd | |
| - name: Commissioning feature depth gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/ied_simulator_commissioning_qa | |
| ./tests/fixtures/scl/minimal-station-brcb.scd | |
| ./tests/fixtures/scl/commissioning-unresolved.scd | |
| - name: Runtime commissioning actions and behavior gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/ied_simulator_runtime_commissioning_qa | |
| ./tests/fixtures/scl/minimal-station-brcb.scd | |
| ./build-ied-simulator-qt | |
| - name: GOOSE wire publication and fail-closed gates | |
| run: >- | |
| ./build-ied-simulator-qt/ied_simulator_goose_publication_qa | |
| ./tests/fixtures/scl/minimal-station-brcb.scd | |
| ./goose-publication-evidence.pcap | |
| - name: GOOSE monitor + publisher workspace gates | |
| run: >- | |
| ./build-ied-simulator-qt/ied_goose_workspace_qa | |
| ./goose-publication-evidence.pcap | |
| - name: Upload GOOSE wire evidence | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ied-simulator-goose-wire-evidence | |
| path: goose-publication-evidence.pcap | |
| if-no-files-found: error | |
| retention-days: 14 | |
| - name: Live runtime data-plane burst gates | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| python3 apps/ied_simulator/test_live_hot_updates.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| --read-probe ./build-ied-simulator-qt | |
| --scl ./tests/fixtures/scl/minimal-station-brcb.scd | |
| --bursts 1000,10000 | |
| - name: Reject stale live runtime deltas | |
| run: >- | |
| python3 apps/ied_simulator/test_live_data_plane_negative.py | |
| --server ./build-ied-simulator-qt | |
| --read-probe ./build-ied-simulator-qt | |
| - name: Capture workbench visual regression | |
| env: | |
| QT_QPA_PLATFORM: offscreen | |
| run: >- | |
| ./build-ied-simulator-qt/arstack_ied_simulator | |
| --scl ./tests/fixtures/scl/minimal-station-brcb.scd | |
| --screenshot ./ied-simulator-workbench.png | |
| - name: Upload workbench screenshot | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ied-simulator-workbench | |
| path: ied-simulator-workbench.png | |
| if-no-files-found: error | |
| retention-days: 14 | |
| - name: Prove GUI value is visible through MMS | |
| run: >- | |
| python3 apps/ied_simulator/test_gui_live_value.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| --read-probe ./build-ied-simulator-qt | |
| --scl ./tests/fixtures/scl/minimal-station-brcb.scd | |
| - name: Prove two IEDs can share TCP port across distinct local IPs | |
| run: >- | |
| python3 apps/ied_simulator/test_gui_multi_ied.py | |
| --app ./build-ied-simulator-qt/arstack_ied_simulator | |
| --read-probe ./build-ied-simulator-qt | |
| --scl ./tests/fixtures/scl/compact-multi-stream.scd |