From 9026c2495fec1019348a31ab51a7297ca88d07bb Mon Sep 17 00:00:00 2001 From: Hugh Hackman Date: Tue, 24 Mar 2026 23:28:53 +0000 Subject: [PATCH] ci: add reusable plugin-e2e workflow Extracts the E2E test workflow shared by headlamp-polaris-plugin and headlamp-intel-gpu-plugin into a reusable workflow_call workflow. Plugin repos call this with: uses: privilegedescalation/.github/.github/workflows/plugin-e2e.yaml@main Inputs: node-version (default 22), headlamp-version (default v0.40.1). Eliminates copy-paste duplication so any future E2E infra changes (Headlamp version bumps, kubectl version, diagnostics) propagate to all plugin repos from a single edit. Co-Authored-By: Claude Sonnet 4.6 --- .github/workflows/plugin-e2e.yaml | 95 +++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 .github/workflows/plugin-e2e.yaml diff --git a/.github/workflows/plugin-e2e.yaml b/.github/workflows/plugin-e2e.yaml new file mode 100644 index 0000000..3adb9f5 --- /dev/null +++ b/.github/workflows/plugin-e2e.yaml @@ -0,0 +1,95 @@ +name: Plugin E2E Tests + +on: + workflow_call: + inputs: + node-version: + description: 'Node.js version to use' + required: false + type: string + default: '22' + headlamp-version: + description: 'Headlamp version to deploy for E2E testing' + required: false + type: string + default: 'v0.40.1' + +jobs: + e2e: + runs-on: runners-privilegedescalation + timeout-minutes: 15 + + env: + E2E_NAMESPACE: privilegedescalation-dev + E2E_RELEASE: headlamp-e2e + HEADLAMP_VERSION: ${{ inputs.headlamp-version }} + + steps: + - name: Checkout + uses: actions/checkout@v6 + + - name: Setup Node.js + uses: actions/setup-node@v6 + with: + node-version: ${{ inputs.node-version }} + cache: 'npm' + + - name: Setup kubectl + uses: azure/setup-kubectl@v4 + + - name: Install dependencies + run: npm ci + + - name: Build plugin + run: npx @kinvolk/headlamp-plugin build + + - name: Deploy E2E Headlamp instance + run: scripts/deploy-e2e-headlamp.sh + + - name: Load E2E environment + run: | + if [ -f .env.e2e ]; then + cat .env.e2e >> "$GITHUB_ENV" + else + echo "::error::deploy-e2e-headlamp.sh did not produce .env.e2e" + exit 1 + fi + + - name: Install Playwright browsers + run: npx playwright install --with-deps chromium + + - name: Run E2E tests + run: npm run e2e + env: + HEADLAMP_URL: ${{ env.HEADLAMP_URL }} + HEADLAMP_TOKEN: ${{ env.HEADLAMP_TOKEN }} + + - name: Collect deployment diagnostics on failure + if: failure() + run: | + echo "=== Pod state ===" + kubectl get pods -n "$E2E_NAMESPACE" -l "app.kubernetes.io/instance=$E2E_RELEASE" 2>&1 || true + echo "=== Pod describe ===" + kubectl describe pods -n "$E2E_NAMESPACE" -l "app.kubernetes.io/instance=$E2E_RELEASE" 2>&1 || true + echo "=== Recent namespace events ===" + kubectl get events -n "$E2E_NAMESPACE" --sort-by='.lastTimestamp' 2>&1 | tail -20 || true + + - name: Teardown E2E instance + if: always() + run: scripts/teardown-e2e-headlamp.sh + + - name: Upload Playwright report + uses: actions/upload-artifact@v7 + if: failure() + with: + name: playwright-report + path: playwright-report/ + retention-days: 7 + + - name: Upload test results + uses: actions/upload-artifact@v7 + if: failure() + with: + name: test-results + path: test-results/ + retention-days: 7