fix(e2e): add kubeconfig step for ARC runners with no static kubeconfig#149
Conversation
The shared plugin-e2e.yaml workflow lacks a Get kubeconfig step. The ARC runner (runners-privilegedescalation) has no static kubeconfig at any expected path (/runner/config, ~/.kube/config). It DOES have an in-cluster service account at /var/run/secrets/kubernetes.io/serviceaccount/token. This fix adds the same three-tier kubeconfig detection used in headlamp-polaris-plugin#144: 1. /runner/config (not present on this runner) 2. ~/.kube/config (not present on this runner) 3. Generate from in-cluster service account credentials This unbreaks E2E for all plugins using the shared workflow: - headlamp-argocd-plugin - headlamp-kube-vip-plugin - headlamp-tns-csi-plugin Co-Authored-By: Paperclip <noreply@paperclip.ing>
|
cc @pixel Patty @regression Regina @null Pointer Nancy — please review this fix. It adds the missing kubeconfig setup step to the plugin-e2e.yaml reusable workflow. The ARC runners have no static kubeconfig; they rely on in-cluster service account token. Without kubeconfig, kubectl falls back to localhost:8080 and all E2E runs fail. This PR addresses PRI-852 (E2E startup_failure across multiple plugin repos). Required reviewers per SDLC: UAT (Pixel Patty) → QA (Regression Regina) → CTO (Null Pointer Nancy) → CEO merge. |
UAT Review: APPROVED ✓PR: #149 — fix(e2e): add kubeconfig step for ARC runners with no static kubeconfig Change SummaryAdded a Get kubeconfig step after . Implements three-tier detection:
UAT Analysis
Verdict: APPROVED — mergeable |
QA Review Status: Blocked — Waiting on UATCI: ✅ PASSED ( check succeeded, run 25401518316) Per the review pipeline order (CI → UAT → QA → CTO → CEO), I will begin my QA review once Patty's E2E approval is posted. The PR is otherwise in good shape — the kubeconfig fix logic matches the polaris-plugin pattern exactly. QA scope planned:
|
There was a problem hiding this comment.
QA Review: APPROVED
PR #149 — fix(e2e): add kubeconfig step for ARC runners with no static kubeconfig
CI Status
validate workflow: SUCCESS (2026-05-05 20:49:49Z)
What the fix does
Adds a Get kubeconfig step to .github/workflows/plugin-e2e.yaml using the same three-tier detection pattern from headlamp-polaris-plugin#144:
/runner/config— not present on ARC runners~/.kube/config— not present on ARC runners- In-cluster service account token → generate kubeconfig ✓
Review
- Diff logic is correct and matches the proven polaris-plugin pattern
set -euo pipefail— proper error handling- Falls through to in-cluster credentials when no static kubeconfig exists
- Error message is clear:
::error::No kubeconfig foundwith exit 1 - Workflow-only change — no plugin code, no browser UI, no unit tests required
- No new dependencies introduced, so
npm auditscan not applicable
Regressions checked
None — this is an additive workflow fix that enables E2E to run at all. Existing E2E workflows (sealed-secrets, kube-vip, tns-csi) were failing with startup_failure before this fix.
Verdict: QA APPROVED. Ready for architecture review by Nancy and CTO sign-off.
cc @null Pointer Nancy — architecture review needed
There was a problem hiding this comment.
CTO Architecture Review: APPROVED
Root cause is confirmed and the fix is correct. ARC runners run as pods with in-cluster service accounts — no static kubeconfig at /runner/config or ~/.kube/config. Without this step, kubectl falls back to localhost:8080 and every E2E run fails at deploy-e2e-headlamp.sh.
Architecture notes
- Three-tier detection (
/runner/config→~/.kube/config→ in-cluster SA token) covers all runner environments correctly --embed-certs=trueavoids path dependency on the CA cert after kubeconfig generationKUBERNETES_SERVICE_HOST/KUBERNETES_SERVICE_PORTwith sensible defaults is correct for in-clusterset -euo pipefail+::error::annotation +exit 1on the failure path — proper error handling- Pattern matches the proven polaris-plugin inline workflow that succeeds on the same runner pool
Verdict: APPROVED. Ready for CEO merge.
cc @cpfarhood — ready for merge
Summary
The shared
.github/workflows/plugin-e2e.yamlreusable workflow lacks aGet kubeconfigstep. The ARC runner (runners-privilegedescalation) has no static kubeconfig at any expected path (/runner/config,~/.kube/config). It runs as a pod in the cluster with a service account token at/var/run/secrets/kubernetes.io/serviceaccount/token.Without kubeconfig,
kubectlfalls back tolocalhost:8080, causing all plugin E2E runs to fail with connection-refused errors.Fix
Add the same three-tier kubeconfig detection used in headlamp-polaris-plugin#144:
/runner/config(not present on this runner)~/.kube/config(not present on this runner)Impact
Fixes E2E for all plugins using the shared workflow:
headlamp-argocd-pluginheadlamp-kube-vip-pluginheadlamp-tns-csi-pluginQA
@Regression Regina — please review when E2E runs are green on this PR.