feat(LinuxTentacleE2E): Phase 12.M.L.B.0 — LinuxTentacleBinaryFixture (real binary build)
Summary
Big-infrastructure PR. UNBLOCKS Section B (service-lifecycle CLI), Section C (register), and Section G (multi-instance) — none of these can be tested with the bash-script placeholder used for upgrade-flow E2E.
User direction (option a3 of self-audit after 26-test stage close): build the real binary fixture as a one-time investment to unlock the most important remaining functionality (register + service-lifecycle).
Strategy
| Aspect | Choice | Rationale |
|---|---|---|
| Build flags | Mirror production CI exactly | Same as build-publish-linux-tentacle.yml: -c Release -r linux-x64 --self-contained true -p:PublishSingleFile=true -p:Version=<stamp>
|
| Cache location | bin/squid-tentacle-binary-fixture/linux-x64/ |
Stable path under bin/, survives between runs, cleared by dotnet clean
|
| Concurrency | Process-wide singleton via static lock | First test triggers ~30-60s build, subsequent reuse instantly |
| Skip-on-non-Linux |
IsAvailable checks Linux + dotnet on PATH |
Self-contained linux-x64 binary won't run on macOS/Windows |
Why a real binary, not a placeholder
| Without real binary | With real binary |
|---|---|
service install writes systemd unit pointing at fake binary → unit fails to start |
Real binary path → real systemd start works |
register requires real REST POST + cert validation |
Production binary handles it |
create-instance walks real config dir layouts |
Production binary's InstanceRegistry does it |
| Would need Tier |
Stays at Tier |
Scope of THIS PR
Smallest viable foundation + 2 smoke tests:
-
LinuxTentacleBinaryFixtureinfrastructure (build + cache + run helper) -
LinuxTentacleE2ECategories.TentacleBinarytrait constant -
tentacle-linux-e2e.ymlworkflow filter updated - Smoke test class:
-
Binary_Version_PrintsBuildVersionStamp— proves build pipeline + AssemblyVersion.Canonical regression check -
Binary_NoArgs_FailsClearlyWithoutHanging— sanity for default RunCommand path
-
What this PR does NOT include
Deferred to follow-up PRs to keep this reviewable:
- J.M.L.C.1+ register E2E (needs StubSquidServer-equivalent for Linux project)
-
J.M.L.B.1+ service install/start/stop E2E (uses this fixture +
LinuxServiceFixture, no server needed) - J.M.L.G.1+ multi-instance E2E
Fidelity tier
Expected runtime
-
Cold (first run): 30-60s for
dotnet publish - Warm (subsequent): <100ms per test
- CI ubuntu-latest with cold NuGet cache: ~60-90s for first build
Test plan
-
Linux E2E workflow runs (manual workflow_dispatchafter merge) -
Binary_Version_PrintsBuildVersionStamppasses within 90s (first runner; build + assert) -
Binary_NoArgs_FailsClearlyWithoutHangingpasses within ~5s (uses cached binary) -
No regression on existing 26 Linux E2E tests -
Workflow filter picks up new Category=LinuxTentacleBinaryE2Etraited tests