Add e2e-k8s-pipeline.yml — first CI workflow for Squid.E2ETests
Summary
Pre-this-PR: no GitHub Actions workflow ran Squid.E2ETests. PRs #290 / #291 / #292 reported "CI green" only against unit / integration / calamari / tentacle suites. The E2E project had never been validated by CI.
This PR adds the workflow. The architecture audit from this session explicitly flagged this as the missing piece — without it, E2E tests are local-only and any latent breakage doesn't surface.
Triggers
- Every PR touching
src/**ortests/Squid.E2ETests/**ortests/Squid.IntegrationTests/** - Every push to
main - Daily 09:00 UTC schedule (same window as
tentacle-linux-e2e.yml+tentacle-windows-e2e.yml) - Manual
workflow_dispatchwith optional filter
Infrastructure
| Component | Version (pinned) | Why |
|---|---|---|
| Postgres | 17 | Test fixture isolates per-test-class DB via DbUp; matches integration-tests workflow |
| Redis | 7 | Used by parts of Squid.Core under test |
| Kind cluster | v0.24.0 (via helm/kind-action@v1.10.0) |
E2E tests require live K8s API |
| Helm | v3.16.1 (via azure/setup-helm@v4) |
Execution-tier tests in PR #292 require helm CLI |
| busybox image | latest, preloaded | Avoid Docker Hub rate limits on hybrid tests |
Single-job design
All E2E tests use [Collection("KindCluster")] which forces KindClusterFixture to initialise even for Pattern 2 (contract-only) tests. ~30s Kind setup cost dwarfs any savings from skipping tier subsets — one job keeps the workflow simple.
Failure diagnostics
On any failure, we capture:
-
kubectl cluster-info dump→/tmp/kind-dump→ uploaded as artefact (7d retention) - Pods, events, helm releases (printed to log)
- TRX test results → uploaded as artefact (14d retention, always)
Expected first-run outcome
This is the first time E2E tests run in CI. Likely to surface 1-2 latent bugs that local devs haven't tripped over — hardcoded paths, timing assumptions, missing CI-runner deps. Workflow timeout 30 minutes is generous; stable run should be 5-10 minutes.
Iteration plan
If first run is red, I'll:
- Pull diagnostics from
kind-cluster-dumpartefact - Reproduce locally (clean checkout + matching tooling versions)
- Push fixes to this branch
- Re-run until green
Test plan
-
Workflow file syntax valid (yaml parsed) -
First CI run pending — will iterate on any failures -
Once green, merge → all subsequent E2E PRs (#292, future) actually get CI validation