From 67de2c942b956b99b7c1d4730a0a108eaafcbb51 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 13 Jul 2026 09:54:22 -0400 Subject: [PATCH] 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. --- .github/workflows/v2-ci.yml | 48 +++++----------- .github/workflows/v2-e2e.yml | 57 ------------------- .../R2-12-repo-hygiene-plan.md.tasks.json | 4 +- 3 files changed, 16 insertions(+), 93 deletions(-) delete mode 100644 .github/workflows/v2-e2e.yml diff --git a/.github/workflows/v2-ci.yml b/.github/workflows/v2-ci.yml index 4abe8252..1f9128ec 100644 --- a/.github/workflows/v2-ci.yml +++ b/.github/workflows/v2-ci.yml @@ -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. diff --git a/.github/workflows/v2-e2e.yml b/.github/workflows/v2-e2e.yml deleted file mode 100644 index 6dd9bdf6..00000000 --- a/.github/workflows/v2-e2e.yml +++ /dev/null @@ -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 diff --git a/archreview/plans/R2-12-repo-hygiene-plan.md.tasks.json b/archreview/plans/R2-12-repo-hygiene-plan.md.tasks.json index a4366e71..49363eb6 100644 --- a/archreview/plans/R2-12-repo-hygiene-plan.md.tasks.json +++ b/archreview/plans/R2-12-repo-hygiene-plan.md.tasks.json @@ -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] },