94926eb0d7
v2-ci / unit-tests (push) Has been cancelled
v2-integration.yml runs the Sql, Historian.SqlServer, Historian.QuestDb and OpcUaClient integration projects against throwaway SQL Server/PostgreSQL/QuestDB/opc-plc containers started by scripts/ci/integration-fixtures.sh, with a MIN_EXECUTED=440 floor. v2-e2e.yml is manual/weekly, probes the shared fleet and skips cleanly when unreachable. v2-ci.yml is functionally unchanged. Unverified on a hosted runner until first run. Claude-Session: https://claude.ai/code/session_01GT67AEHd2Acv1YPwGfXEoV
74 lines
3.2 KiB
YAML
74 lines
3.2 KiB
YAML
# Guarded E2E workflow (#757 item a). UNVERIFIED on a hosted runner until its first run.
|
|
#
|
|
# Runs the simulator-backed driver integration projects against the shared fixture fleet on
|
|
# 10.100.0.35 (the fixtures' own default endpoints: Modbus :5020, S7 :1102, opc-plc :50000). That fleet
|
|
# is only reachable from a runner on the right network, so this workflow is:
|
|
# * MANUAL or SCHEDULED only — never push/PR, so it can never slow or flake the unit-tests leg;
|
|
# * SKIP-CLEAN — a TCP probe runs first and every later step is conditioned on it, so an unreachable
|
|
# fleet ends the run green with an explicit "skipped" notice rather than a wall of Assert.Skip;
|
|
# * ZERO-MATCH GUARDED — once the fleet is reachable, MIN_EXECUTED turns "everything skipped / filter
|
|
# matched nothing" (the failure mode that made the old v2-e2e.yml a silent no-op) into a RED job.
|
|
# Note: no test currently carries Category=E2E, so the guard is the executed-count floor over the
|
|
# fleet-backed projects rather than a Category=E2E match.
|
|
# Self-contained (throwaway-container) coverage lives in v2-integration.yml, not here.
|
|
|
|
name: v2-e2e
|
|
|
|
on:
|
|
workflow_dispatch: {}
|
|
schedule:
|
|
- cron: "17 3 * * 0" # weekly, Sunday 03:17 UTC (off-peak, off the :00 mark)
|
|
|
|
# Own group; same semantics as v2-ci (one active run, an active run is never cancelled).
|
|
concurrency:
|
|
group: lmxopcua-v2-e2e
|
|
cancel-in-progress: false
|
|
|
|
env:
|
|
DOTNET_NOLOGO: "1"
|
|
DOTNET_CLI_TELEMETRY_OPTOUT: "1"
|
|
|
|
jobs:
|
|
e2e:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 90 # #718 guard
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: probe fixture fleet
|
|
id: probe
|
|
run: bash scripts/ci/probe-e2e-fixtures.sh
|
|
- name: skipped — fixture fleet unreachable
|
|
if: steps.probe.outputs.reachable != 'true'
|
|
run: echo "::notice::E2E skipped — shared fixture fleet 10.100.0.35 is not reachable from this runner."
|
|
- uses: actions/setup-dotnet@v4
|
|
if: steps.probe.outputs.reachable == 'true'
|
|
with:
|
|
dotnet-version: 10.0.x
|
|
- name: dotnet test (fleet-backed projects)
|
|
if: steps.probe.outputs.reachable == 'true'
|
|
env:
|
|
E2E_PROJECTS: >-
|
|
Driver.Modbus Driver.S7 Driver.OpcUaClient Driver.OpcUaClient.Browser
|
|
run: |
|
|
set -euo pipefail
|
|
for p in $E2E_PROJECTS; do
|
|
dotnet test "tests/Drivers/ZB.MOM.WW.OtOpcUa.$p.IntegrationTests/ZB.MOM.WW.OtOpcUa.$p.IntegrationTests.csproj" \
|
|
--configuration Release -m:1 --settings scripts/ci/ci.runsettings \
|
|
--filter "Category!=LiveIntegration" \
|
|
--logger "trx;LogFileName=$p.trx" --results-directory artifacts/trx \
|
|
--blame-hang --blame-hang-timeout 20m --blame-hang-dump-type none
|
|
done
|
|
- name: assert not-all-skipped
|
|
if: always() && steps.probe.outputs.reachable == 'true'
|
|
env:
|
|
MIN_EXECUTED: "35"
|
|
run: bash scripts/ci/assert-not-all-skipped.sh artifacts/trx/*.trx
|
|
- name: upload trx
|
|
if: always() && steps.probe.outputs.reachable == 'true'
|
|
continue-on-error: true
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: e2e-trx
|
|
path: artifacts/trx/*.trx
|
|
if-no-files-found: warn
|