Repository navigation
feat(ci): run k3d Kubernetes E2E harness in CI - #1027
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
RonaldHensbergen
left a comment
There was a problem hiding this comment.
Review
Independently verified:
- k3d pin: downloaded the v5.9.0
k3d-linux-amd64release binary and hashed it —06d8f25bc3a971c4eb29e0ff08429b180402db0f4dec838c9eac427e296800a0matches the pinned SHA256. - Env coverage: all nine
CDS_*variables required byprofiles/local-dagster-postgres-superset/profile.yamlare supplied in the workflowenv. - Diagnostics wiring: the failure() step sources
k3d-env.shand uses${CDS_NAMESPACE}-e2e, matching the namespacee2e.shderives.CDS_E2E_KEEP_CLUSTER=1correctly skipse2e.sh's cleanup so the cluster survives for diagnostics, and thealways()make k3d-downstep deletes it afterwards — the two settings are coherent. - venv contract:
pip install .into.venvmatches whatinstall.sh(${CDS_REPO_ROOT}/.venv/bin/cds) ande2e.sh(.venv/bin/python) expect. Python 3.14 matchesrequires-python = ">=3.14". - postgres image consistency: the helm target renders production variants (
cli/k8s_renderer.pysetsis_production=True), so the postgres workload useslocal/postgres:customwithimagePullPolicy: Never— building and importing it inbuild-images.sh/k3d-env.shis required and now consistent. - Ran
tests/test_k8s_e2e_workflow.py+tests/test_k3d_e2e_profile.pylocally: 7 passed.
Issue
tests/test_k3d_e2e_profile.py: the newK3dLocalImagesTestclass is defined after theif __name__ == "__main__": unittest.main()block. Under pytest it is collected, but executing the file directly (python tests/test_k3d_e2e_profile.py) runsunittest.main()before the class exists, so the test silently never runs that way. Please move the class above the__main__block.
Nits (non-blocking)
- The path filters omit
Makefile— changes to thek3d-*targets there won't trigger this workflow.pyproject.toml(CLI entry points) is also outside the filters. cancel-in-progress: truealso cancels a running main-branch E2E run when a new push lands; that is reasonable, just noting the behavior.
Otherwise this looks good: the workflow reuses the documented harness rather than adding a parallel setup, pins and verifies k3d, and the invariants are pinned by tests. All checks green including the E2E job itself (4m13s).
- Move K3dLocalImagesTest above the __main__ block so direct execution of the test file also collects it. - Add Makefile and pyproject.toml to the workflow path filters so changes to the k3d targets or CLI entry points trigger the E2E run; update docs, CHANGELOG, and the invariant test to match. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
RonaldHensbergen
left a comment
There was a problem hiding this comment.
Addressed the review comments in 1166193: the test class moved above the __main__ block, and Makefile/pyproject.toml joined the path filters (docs, CHANGELOG, and the invariant test updated to match). The cancel-in-progress note needed no change. Full suite: 1917 passed, 22 skipped.
|
|
Quality-gate note: all review items are addressed (test class placement, path filters, docs/CHANGELOG/test alignment), every review thread is resolved, and the full check suite is green on 1166193 — including the k3d E2E job. Local verification: 1917 passed / 22 skipped, ruff, markdownlint, and yamllint clean. I see no remaining loose ends or gaps, code-quality or otherwise: in my judgment this PR is merge-ready. |
|
Final review pass (contributor == reviewer, post-merge record): Blocking: none. Checked angles: functional correctness of the workflow against the harness scripts (namespace derivation, Conclusion: no open items remain beyond the cosmetic #1040; the PR was merge-ready and is merged. No openstaande punten meer voor deze PR. |



Closes #76.
Renderer unit tests (
tests/test_k8s_renderer.py,test_k8s_runner.py,test_k8s_security.py) and the k3d E2E harness already existed; the missing piece was CI. Per the 2026-10-25 note on the issue, this reuses the documented k3d harness instead of adding a parallel kind setup..github/workflows/k8s-e2e.yml: builds local images, runsmake k3d-e2e(cluster,cds up --target helm, all workloads Ready, Postgres/Dagster/Superset checks), uploads diagnostics on failure, always runsmake k3d-down.tests/test_k8s_e2e_workflow.pypins the workflow's key invariants; docs and CHANGELOG updated.Verified locally: full suite 1934 OK, yamllint/markdownlint/ruff pass. k3d/helm are not installed locally, so the workflow itself is first exercised by this PR's run.