Skip to content

Add e2e-k8s-pipeline.yml — first CI workflow for Squid.E2ETests

Placeholder ppxd requested to merge feat/e2e-k8s-ci-workflow into main

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/** or tests/Squid.E2ETests/** or tests/Squid.IntegrationTests/**
  • Every push to main
  • Daily 09:00 UTC schedule (same window as tentacle-linux-e2e.yml + tentacle-windows-e2e.yml)
  • Manual workflow_dispatch with 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:

  1. Pull diagnostics from kind-cluster-dump artefact
  2. Reproduce locally (clean checkout + matching tooling versions)
  3. Push fixes to this branch
  4. 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

🤖 Generated with Claude Code

Merge request reports

Loading