ci(r2-12): delete no-op nightly E2E workflow + redundant integration matrix (07/S-3, 07/P-5)

- v2-e2e.yml deleted: its `--filter Category=E2E` matches zero tests repo-wide (the
  E2ETests project doesn't exist) so it reported a permanent false green; and its
  docker-dev fleet binds the LAN-only shared GLAuth (10.100.0.35:3893) + builds local
  images, so it isn't hosted-runner-bootable anyway. FOLLOW-UP: when a runner-reachable
  fleet + a real tests/Server/...E2ETests land, add a fresh workflow WITH a zero-match
  guard (fail if Category=E2E matches nothing).
- v2-ci.yml integration matrix removed: fully redundant with the unit-tests leg, which
  already runs both Host.IntegrationTests + OpcUaServer.IntegrationTests under the
  identical filter, fixtureless, gated at MIN_EXECUTED=1. No coverage lost. The S-2
  option-#2 fixture-backed-leg follow-up is preserved as a NOTE comment in the workflow.
Header comments updated; YAML validates; jobs are now build -> unit-tests.
This commit is contained in:
Joseph Doherty
2026-07-13 09:54:22 -04:00
parent 73d4061b77
commit 67de2c942b
3 changed files with 16 additions and 93 deletions
+14 -34
View File
@@ -1,11 +1,11 @@
# CI for the v2 branch — runs on every push + PR to the v2-akka-fuse / master
# branches. Layered into three jobs:
# branches. Layered into two jobs:
# build dotnet restore + build (fast feedback on compile errors)
# unit-tests the WHOLE solution minus the env-gated tiers (self-maintaining)
# integration 2-node Host.IntegrationTests harness + OpcUaServer.IntegrationTests
#
# Skips E2E (Category=E2E) — that runs nightly via v2-e2e.yml against the full
# four-node docker-dev stack — and LiveIntegration (needs a real gateway/PLC/VPN).
# Skips E2E (Category=E2E) and LiveIntegration (needs a real gateway/PLC/VPN) — both
# are env-gated tiers with no hosted-runner fixtures. (The skip-gated *.IntegrationTests
# still run in the unit-tests leg and Assert.Skip when their fixtures are unreachable.)
#
# Compatible with both GitHub Actions and Gitea Actions (act_runner). The .NET 10
# SDK is pinned via global.json at the repo root; if no global.json exists, the
@@ -74,33 +74,13 @@ jobs:
path: artifacts/trx/*.trx
if-no-files-found: warn
integration:
needs: build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
project:
- tests/Server/ZB.MOM.WW.OtOpcUa.Host.IntegrationTests
- tests/Server/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: dotnet test ${{ matrix.project }}
run: >
dotnet test ${{ matrix.project }} --configuration Release
--filter "Category!=E2E&Category!=LiveIntegration"
--logger "trx" --results-directory artifacts/trx
# 07/S-2: this leg has NO fixtures on a hosted runner, so its tests legitimately Assert.Skip.
# Report-only (MIN_EXECUTED=0 never fails) so the skip tally is VISIBLE in the log instead of
# a silent green. FOLLOW-UP (S-2 option #2): start the one public-image fixture as a workflow
# `services:` block (mcr.microsoft.com/iotedge/opc-plc; the modbus/S7/AB/FOCAS sims are
# locally-built `otopcua-*` images not pullable here) + set OPCUA_SIM_ENDPOINT, then flip this
# leg to MIN_EXECUTED=1 so a fixture outage turns the job red.
- name: report skips (integration has no hosted fixtures yet)
if: always()
env:
MIN_EXECUTED: "0"
run: bash scripts/ci/assert-not-all-skipped.sh artifacts/trx/*.trx
# NOTE (07/P-5): the former `integration` matrix job (Host.IntegrationTests +
# OpcUaServer.IntegrationTests) was removed as fully redundant — the unit-tests leg
# above already runs BOTH projects under the identical filter, fixtureless, and gates
# them at MIN_EXECUTED=1. Its only unique output was a report-only skip tally the unit
# leg's trx already contains. FOLLOW-UP (S-2 option #2): if a fixture-backed integration
# leg is wanted, add it as a NEW job that starts the one public-image fixture as a
# `services:` block (mcr.microsoft.com/iotedge/opc-plc; the modbus/S7/AB/FOCAS sims are
# locally-built `otopcua-*` images not pullable here), sets OPCUA_SIM_ENDPOINT, and gates
# at MIN_EXECUTED=1 so a fixture outage turns the job red — covering something the unit
# leg cannot, rather than re-running the same fixtureless tests.
-57
View File
@@ -1,57 +0,0 @@
# Nightly E2E job. Runs against the docker-dev four-node fleet (admin-a +
# admin-b + driver-a + driver-b + SQL + LDAP + Traefik). Trigger:
# - cron at 03:00 UTC daily
# - workflow_dispatch from the Actions UI for on-demand runs
#
# The E2E test project (tests/Server/ZB.MOM.WW.OtOpcUa.E2ETests) does not yet
# exist — it lands when the F-series follow-ups F10/F11/F12 wire enough of the
# SDK/historian/probe so an end-to-end driver round-trip is meaningful. Until
# then this workflow is a green no-op (the `--filter Category=E2E` matches
# zero tests, and `dotnet test` returns 0).
name: v2-e2e
on:
schedule:
- cron: "0 3 * * *"
workflow_dispatch: {}
env:
DOTNET_NOLOGO: "1"
DOTNET_CLI_TELEMETRY_OPTOUT: "1"
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
- name: dotnet restore
run: dotnet restore ZB.MOM.WW.OtOpcUa.slnx
- name: Build docker-dev fleet
run: docker compose -f docker-dev/docker-compose.yml up -d --build
- name: Wait for cluster
run: |
for i in $(seq 1 30); do
if curl -sf http://localhost/health/active >/dev/null; then
echo "Admin leader healthy after ${i}s"
exit 0
fi
sleep 2
done
echo "Timed out waiting for /health/active"
docker compose -f docker-dev/docker-compose.yml logs --tail=200
exit 1
- name: dotnet test (E2E only)
run: dotnet test --configuration Release --filter "Category=E2E"
- name: Tear down
if: always()
run: docker compose -f docker-dev/docker-compose.yml down -v
@@ -7,8 +7,8 @@
{ "id": 3, "subject": "T3b: U-6 — rm -rf the 5 Driver.Historian.Wonderware* husk dirs (disk-only, no commit)", "status": "completed", "blockedBy": [2] },
{ "id": 4, "subject": "T5a: U-4 proof — 5 planning files tracked; re-read looseends.md; present per-file table for sign-off", "status": "completed", "blockedBy": [] },
{ "id": 5, "subject": "T5b: U-4 — untrack pending/current + gitignore, archive stillpending + HISTORIAN-GATEWAY to docs/plans/, delete looseends.md, repoint docs/Historian.md (Commit 2; SIGN-OFF for the delete)", "status": "completed", "blockedBy": [4] },
{ "id": 6, "subject": "T6: S-3 — git rm .github/workflows/v2-e2e.yml (zero Category=E2E proven; SIGN-OFF); record E2ETests+zero-match-guard follow-up", "status": "pending", "blockedBy": [] },
{ "id": 7, "subject": "T7: P-5 — delete redundant integration matrix job from v2-ci.yml + fix header comments; YAML-validate (Commit 3 with T6)", "status": "pending", "blockedBy": [6] },
{ "id": 6, "subject": "T6: S-3 — git rm .github/workflows/v2-e2e.yml (zero Category=E2E proven; SIGN-OFF); record E2ETests+zero-match-guard follow-up", "status": "completed", "blockedBy": [] },
{ "id": 7, "subject": "T7: P-5 — delete redundant integration matrix job from v2-ci.yml + fix header comments; YAML-validate (Commit 3 with T6)", "status": "completed", "blockedBy": [6] },
{ "id": 8, "subject": "T8: U-3 — add ack/confirm/shelve/enable/disable sections to docs/Client.CLI.md; correct command count to 13", "status": "pending", "blockedBy": [] },
{ "id": 9, "subject": "T9a: C-5 proof — ScadaBridge sweep of StyleGuide.md + confirm no .editorconfig", "status": "pending", "blockedBy": [] },
{ "id": 10, "subject": "T9b: C-5 — StyleGuide ScadaBridge->OtOpcUa + minimal suggestion-severity .editorconfig; no new TWE warnings (Commit 4 with T8)", "status": "pending", "blockedBy": [9] },