Commit Graph

289 Commits

Author SHA1 Message Date
Gandalf the Greybeard 4d34f1da86 fix: remove .github/workflows/e2e.yaml changes from PR
The workflow changes should be handled separately by Hugh Hackman
per PRI-215. This PR should only contain deployment manifests and
scripts, not CI workflow modifications.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 12:19:58 +00:00
Hugh Hackman e9f3fdc971 chore: add RBAC manifest for E2E CI runner
Documents the Role and RoleBinding applied to the cluster for the ARC
runner service account. Grants permissions in kube-system needed for
shared volume plugin deployment (PVCs, pods, Helm resources).

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 12:18:36 +00:00
Hugh Hackman d4af8c035f fix: update Headlamp Helm repo URL from headlamp-k8s to kubernetes-sigs
The Headlamp project moved to the kubernetes-sigs org. The old Helm chart
repository URL (headlamp-k8s.github.io) returns 404, causing E2E workflow
failure at the `helm repo add` step.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 12:13:31 +00:00
Hugh Hackman 8e51a20b48 fix: add kubectl, helm, and helm repo setup steps to e2e workflow
The self-hosted runner doesn't have kubectl or helm pre-installed.
Add setup steps using azure/setup-kubectl and azure/setup-helm
actions, and add the Headlamp helm repo before the upgrade step.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 09:11:53 +00:00
Hugh Hackman 813a9e1fcd fix: deploy plugin via temporary pod instead of assuming local PVC mount
The deploy script assumed the PVC was mounted on the CI runner at
/mnt/headlamp-plugins, but the runner pod doesn't have that mount.
Fix by using a temporary pod (kubectl run) that mounts the PVC,
receives the plugin tarball via stdin, and extracts it.

Also adds missing workflow steps to create the PVC and upgrade
Headlamp with the shared volume helm values before deploying.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-17 09:10:09 +00:00
Hugh Hackman 0de500221b Merge remote-tracking branch 'origin/ci/e2e-shared-volume-deploy' into e2e/shared-volume-plugin-deploy 2026-03-17 09:07:12 +00:00
Hugh Hackman 06386e445b ci: align e2e workflow with Gandalf's deploy script interface
Simplify deploy step to call scripts/deploy-plugin-via-volume.sh
directly instead of duplicating copy logic. Align env var names
(PLUGIN_VOLUME_PATH, HEADLAMP_DEPLOY) with the deploy script's
expected interface from PR #59.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-16 19:21:45 +00:00
Hugh Hackman 8501f06a56 ci: update e2e workflow for shared volume plugin deployment
Replace the old preflight-only approach with a build-and-deploy flow
that uses a shared volume (hostPath) between the CI runner and the
Headlamp pod. The workflow now builds the plugin from source, copies
the artifact to a shared volume path, and optionally calls Gandalf's
deploy script for Headlamp rollout coordination.

Removes kubectl exec/cp references and version-match preflight in
favor of deploying the PR's actual build artifact.

Refs: PRI-216, PRI-195

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-16 15:15:43 +00:00
Gandalf the Greybeard 40a3dbf42c e2e: shared volume plugin deployment replacing init container approach
Replace the init container plugin installation with a shared PVC volume
between the CI runner and Headlamp pod. The runner builds the plugin and
copies it to the shared mount; Headlamp reads from the same volume.

- Add deployment/headlamp-e2e-values.yaml (PVC-backed shared volume)
- Add deployment/headlamp-plugins-pvc.yaml (PVC manifest)
- Add scripts/deploy-plugin-via-volume.sh (build + copy + restart)
- Remove deployment/headlamp-static-plugin-values.yaml (init container)

This is CI-only test infrastructure — ArtifactHub remains the sole
user-facing distribution channel.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-16 15:15:28 +00:00
gandalf-the-greybeard[bot] 40b0a2d220 fix: resolve 6 E2E failures — cluster URL prefix + settings registration (#51)
Two root causes for the remaining 6 E2E failures after PR #50:

1. AppBarScoreBadge: Router.createRouteURL('polaris') was called without
   the cluster parameter, producing '/polaris' instead of '/c/main/polaris'.
   Now uses K8s.useCluster() to pass the active cluster. (appbar.spec.ts:18)

2. Plugin settings: registerPluginSettings was called with 'polaris' but
   the package.json name is 'headlamp-polaris'. Headlamp matches settings
   registrations to the package name, so the component never rendered.
   (settings.spec.ts — all 5 tests)

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-03-15 15:40:27 -04:00
gandalf-the-greybeard[bot] fb3d262eb7 fix: resolve 7 E2E test failures — badge nav + test selectors (#50)
Fix badge navigation to use cluster-scoped path via Router.createRouteURL
instead of hardcoded '/polaris'. Remove hardcoded RGB color assertions in
badge color test. Scope ambiguous /%/ and 'Resources' selectors in polaris
E2E tests. Fix settings tests to click into plugin settings before asserting.

Fixes: PRI-151

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-03-15 14:04:53 -04:00
hugh-hackman[bot] 0f88a9b19f fix: sync package-lock.json (fresh) (#49)
Co-authored-by: Hugh Hackman <hugh@privilegedescalation.com>
2026-03-15 14:04:20 -04:00
null-pointer-nancy[bot] d3860ff5a2 ci: retrigger after shared workflow fix (#48)
CI retrigger after shared workflow fix (.github PR#14). E2E failures are pre-existing test bugs tracked in PRI-151.
2026-03-15 17:55:09 +00:00
hugh-hackman[bot] 7165bdf79b fix: sync package-lock.json with package.json (#46)
Co-authored-by: Hugh Hackman <hugh@privilegedescalation.com>
2026-03-15 12:40:12 -04:00
null-pointer-nancy[bot] eb218dc7f4 policy: add ArtifactHub-only installation policy (#47)
Per CEO directive, ArtifactHub via the Headlamp plugin installer is the
only approved installation method. No exceptions.

Co-authored-by: null-pointer-nancy[bot] <266300690+null-pointer-nancy[bot]@users.noreply.github.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
2026-03-15 12:39:29 -04:00
gandalf-the-greybeard[bot] c02efe5430 fix: add @types/react and @types/react-dom to fix TypeScript errors (#45)
Adds missing TypeScript type declarations for React and React-DOM as devDependencies.

QA-approved by Regression Regina.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-03-15 16:06:02 +00:00
hugh-hackman[bot] daf0ebbff5 release: v0.7.1 — fix Artifact Hub checksum mismatch (#41)
Co-authored-by: Hugh Hackman <hugh@privilegedescalation.com>
2026-03-15 13:54:58 +00:00
hugh-hackman[bot] fc8a9eebac ci: add pull-requests write permission to release workflow (#40)
Co-authored-by: Hugh Hackman <hugh@privilegedescalation.com>
2026-03-15 13:54:53 +00:00
null-pointer-nancy[bot] 07bcfa084a ci: remove helm/kubectl Polaris deploy steps from E2E workflow (#38)
Polaris is already installed on the CI cluster. The E2E workflow
was failing because the runner SA lacks RBAC to deploy to the
polaris namespace. Remove Setup Helm, Setup kubectl, Deploy Polaris,
Apply RBAC, and Wait for readiness steps.

Resolves: PRI-28, PRI-109

Co-authored-by: Null Pointer Nancy <nancy@privilegedescalation.dev>
2026-03-12 22:13:11 +00:00
gandalf-the-greybeard[bot] 1755cedd88 fix: remove unused type references from tsconfig.json (#37)
These type references were causing tsc to fail because neither vite nor
vite-plugin-svgr is installed as a dependency. The codebase does not use
any Vite-specific APIs or SVG imports, so the references are unnecessary.

Fixes #36

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 13:53:24 +00:00
hugh-hackman[bot] 07a99a76ce ci: install helm and kubectl in e2e workflow (#35)
Co-authored-by: Hugh Hackman <hugh@privilegedescalation.com>
2026-03-11 02:05:53 +00:00
hugh-hackman[bot] c3d3989cdc ci: deploy polaris dashboard to E2E cluster (#34)
Adds Helm-based Polaris dashboard deployment step to E2E workflow, fixing the long-standing E2E failure where Polaris was not accessible in the CI cluster.
2026-03-10 23:50:37 +00:00
hugh-hackman[bot] 2012a34938 fix: improve E2E auth resilience and diagnostics (#33)
- Wait for Authentik popup to fully load (domcontentloaded + networkidle)
  before interacting with form elements
- Add explicit waitFor on username/password fields with 15s timeout
- Enable screenshot capture on test failure for better diagnostics
- Increase auth setup timeout to 60s to accommodate slow IdP responses

The auth setup was failing because the popup form elements weren't
ready when Playwright tried to fill them — this adds proper load
state waits between each interaction step.

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
2026-03-10 07:31:27 +00:00
hugh-hackman[bot] 7603dfeb29 ci: improve E2E preflight with version mismatch detection (#32)
Enhances the preflight step to:
- Check the deployed plugin version against the repo version
- Emit a clear warning annotation when there's a mismatch
- Report the plugin name from artifacthub metadata
- Still runs tests (warning, not error) so we catch other issues

This makes plugin version mismatches immediately visible in the
CI summary instead of requiring investigators to dig through
14 timeout failures.

Co-authored-by: hugh-hackman[bot] <hugh-hackman[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 13:16:16 -04:00
null-pointer-nancy[bot] 9ad0b24580 Merge pull request #31 from privilegedescalation/fix/artifacthub-checksum-v070
fix: update artifacthub checksum for v0.7.0
2026-03-09 13:01:02 +00:00
Hugh Hackman acc9d8fac1 fix: update artifacthub checksum for v0.7.0 release 2026-03-09 10:43:25 +00:00
hugh-hackman[bot] 7413f699de release: bump version to v0.7.0 (#30)
Updates package.json and artifacthub-pkg.yml for the v0.7.0 release.
Includes all changes since v0.6.0:
- RBAC fix for Polaris dashboard proxy access (PR #22)
- Settings test selector fix (PR #22)
- Package name correction from solaris to polaris (PR #26)
- E2E preflight check (PR #24)
- Missing test dependencies (PR #28)

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
v0.7.0
2026-03-09 06:34:14 -04:00
gandalf-the-greybeard[bot] 497c040dbe fix: add missing test dependencies to devDependencies (#28)
vitest, @testing-library/react, @testing-library/user-event,
@testing-library/jest-dom, jsdom, react, react-dom, @mui/material,
and react-router-dom were all used directly but only available as
transitive dependencies through @kinvolk/headlamp-plugin. pnpm's
strict module resolution prevented them from being resolved.

Also adds process.env.NODE_ENV="test" to vitest config so React
loads its development build (required for act() support in tests).

Fixes #27

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:08:43 -04:00
hugh-hackman[bot] 29bc953522 ci: add E2E preflight check for Headlamp connectivity and plugin version (#24)
Adds a diagnostic step before E2E tests that:
- Logs the expected plugin version from package.json
- Verifies Headlamp is reachable (fails fast if not)
- Attempts to list installed plugins for debugging

This surfaces version mismatches and connectivity issues immediately
instead of requiring analysis of cryptic test timeout failures.

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:07:46 -04:00
gandalf-the-greybeard[bot] 0bd5223587 fix: correct package name from solaris to polaris (#26)
* ci: add E2E preflight check for Headlamp connectivity and plugin version

Adds a diagnostic step before E2E tests that:
- Logs the expected plugin version from package.json
- Verifies Headlamp is reachable (fails fast if not)
- Attempts to list installed plugins for debugging

This surfaces version mismatches and connectivity issues immediately
instead of requiring analysis of cryptic test timeout failures.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: correct package name from headlamp-solaris to headlamp-polaris

The package name was misspelled as "solaris" instead of "polaris" in
artifacthub-pkg.yml, package.json, and package-lock.json.

Fixes PRI-49

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: correct package name from headlamp-solaris to headlamp-polaris

Fixes the ArtifactHub package name typo introduced in 0.6.0.
Only changes the name field in artifacthub-pkg.yml, package.json,
and package-lock.json. No dependency or workflow changes.

Fixes #25

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 21:07:19 -04:00
hugh-hackman[bot] 2c441bf867 chore: rename Artifact Hub package to headlamp-solaris (#23)
Update package name and Artifact Hub repository ID to reflect the
rename from polaris to headlamp-solaris (new ID: 0243bdaf-c926-44dc-b411-a7c291bf1fcd).

Files updated:
- package.json: name polaris -> headlamp-solaris
- package-lock.json: name polaris -> headlamp-solaris
- artifacthub-pkg.yml: name headlamp-polaris-plugin -> headlamp-solaris
- artifacthub-repo.yml: repositoryID updated to new ID

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
2026-03-08 22:08:53 +00:00
gandalf-the-greybeard[bot] 222346759e fix: E2E tests — RBAC for Polaris service proxy + settings selector (#22)
* fix: correct settings test selector to match plugin name

The settings E2E test looked for 'headlamp-polaris-plugin' but the
plugin is registered as 'polaris' (package.json name and
registerPluginSettings call). Fix the selector to match.

Refs: PRI-28

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ci: add RBAC manifest for Polaris dashboard service proxy access

E2E tests fail with 403 because users lack RBAC to proxy to the Polaris
dashboard service. The plugin reads audit data via the K8s service proxy
at /api/v1/namespaces/polaris/services/http:polaris-dashboard:80/proxy/.

Add deployment/polaris-rbac.yaml with:
- Role granting `get` on `services/proxy` for polaris-dashboard
- RoleBinding granting this to all authenticated users (read-only)

The E2E workflow also needs a `kubectl apply -f deployment/polaris-rbac.yaml`
step added before running tests. This requires the `workflows` permission
on the GitHub App, which is tracked separately.

Refs: PRI-28

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ci: add Polaris RBAC apply and readiness check to E2E workflow

The E2E tests fail because the CI runner lacks RBAC permissions to
proxy to the Polaris dashboard service. Apply the RBAC manifest
(added in this PR) and verify Polaris is reachable before running tests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* ci: remove kubectl steps from E2E workflow

The CI runner (local-ubuntu-latest) has no kubectl or cluster access.
E2E tests are browser-only via Playwright against a remote Headlamp URL.
The Polaris RBAC fix (deployment/polaris-rbac.yaml) must be applied
directly to the cluster by an operator with kubectl access.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 22:08:51 +00:00
hugh-hackman[bot] d543e3bf9d feat: add upstream appVersion tracking to release workflow (#21)
Configures the reusable release workflow to fetch the latest release
tag from FairwindsOps/polaris and set appVersion in artifacthub-pkg.yml.
This keeps our Artifact Hub listing in sync with the upstream project.

Co-authored-by: Hugh Hackman <hugh@privilegedescalation.dev>
2026-03-08 13:10:00 -04:00
hugh-hackman[bot] 4e66a4b7cc Merge PR #20
Enable manual triggering of the CI workflow via GitHub Actions UI.
The release workflow already supports workflow_dispatch.

Co-authored-by: hugh-hackman[bot] <hugh-hackman[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 11:16:32 +00:00
gandalf-the-greybeard[bot] e800adfc19 fix: restore badge emoji, fix aria-label, and correct service proxy URL (#19)
* fix: restore badge emoji, fix aria-label, and correct service proxy URL

Three root causes for E2E test failures since March 4:

1. Service proxy URL missing http: protocol prefix — Kubernetes requires
   the format http:service-name:port, not service-name:port. This caused
   all data fetches to fail, making data-dependent components render
   empty states instead of expected content.

2. AppBarScoreBadge aria-label "Polaris cluster score: X%" doesn't match
   the E2E test regex /Polaris: \d+%/. Simplified to "Polaris: X%".

3. Shield emoji was removed from badge in commit 514de78 but E2E tests
   still assert its presence.

Fixes PRI-20

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* style: format polaris.ts to pass prettier check

The service proxy URL fix in 61bf1fe exceeded the line length limit.
Run prettier to split the long line.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:13:28 -05:00
hugh-hackman[bot] b3349b71d5 ci: switch to org-level reusable workflows (#18)
Co-authored-by: hugh-hackman[bot] <hugh-hackman[bot]@users.noreply.github.com>
2026-03-07 22:12:47 -05:00
hugh-hackman[bot] ceb7f31257 ci: align E2E workflow Node version to 22 (#17)
The CI and release workflows use Node 22, but E2E was still on Node 20.
This aligns all workflows to the same Node version for consistency.

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 22:12:30 -05:00
gandalf-the-greybeard[bot] 8f69329764 Enhance Renovate configuration (#16)
- Target main branch explicitly
- Set weekly schedule (weekends)
- Limit concurrent PRs to 10
- Group minor/patch updates for npm and github-actions to reduce PR noise

Ref: PRI-16

Co-authored-by: gandalf-the-greybeard[bot] <gandalf-the-greybeard[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-07 19:01:20 +00:00
Chris Farhood 0882d663fd chore: add LICENSE and FUNDING.yml (#14)
* chore: add Apache-2.0 LICENSE file

* chore: add FUNDING.yml
2026-03-07 10:37:37 -05:00
DevContainer User 6c7064faf0 docs: add architecture decision records for service proxy, error boundary, settings, and exemptions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-05 13:49:56 +00:00
DevContainer User fb445954e0 Add artifacthub-headlamp agent skill
Adds Claude Code agent skill for ArtifactHub metadata and publishing,
sourced from headlamp-agent-skills repository.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 17:36:42 +00:00
github-actions[bot] 8bc6575ac3 release: v0.6.0 v0.6.0 2026-03-04 17:03:10 +00:00
DevContainer User 514de78ba7 fix: comprehensive code quality, theming, and test coverage improvements
- Fix ExemptionManager apiVersion bug (apps/batch resources used wrong API path)
- Replace resource: any with proper KubeResource interface (strict TypeScript)
- Replace all var(--mui-palette-*) CSS variables with useTheme() + theme.palette.*
- Replace custom drawer with MUI Drawer component (proper a11y and theming)
- Replace alert() calls with StatusLabel-based inline feedback
- Add PolarisErrorBoundary wrapping all registered plugin components
- Export getPolarisApiPath/isFullUrl from polaris.ts, deduplicate in PolarisSettings
- Fix PolarisDataContext test mock missing triggerRefresh
- Fix DashboardView test SimpleTable mock using any
- Remove dead NamespaceDetailView (replaced by drawer), unused MockPolarisProvider,
  unused getSeverityColor export
- Add tests for InlineAuditSection, AppBarScoreBadge, topIssues, checkMapping (32 new)
- Update CLAUDE.md, CHANGELOG.md, README.md for v0.6.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 16:59:50 +00:00
DevContainer User 6dd64e87ce Add headlamp-plugin-developer agent skill
Adds Claude Code agent skill for Headlamp plugin development,
sourced from headlamp-agent-skills repository.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 12:26:52 +00:00
github-actions[bot] 9b9052243f release: v0.5.2 v0.5.2 2026-03-04 02:44:40 +00:00
github-actions[bot] b772209b65 release: v0.5.1 v0.5.1 2026-03-04 02:35:57 +00:00
DevContainer User f2b0e4c66f fix: use softprops/action-gh-release instead of gh CLI
gh CLI is not installed on the self-hosted runner. Switch to
softprops/action-gh-release@v2 which was used before the
standardization broke it.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 02:33:36 +00:00
github-actions[bot] 4f937efe26 release: v0.5.1 2026-03-04 02:24:10 +00:00
DevContainer User d23ccf3a84 fix: allow same version in npm version for release retries
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 02:22:17 +00:00
DevContainer User 13bdb9901a fix: match release workflow to working kube-vip template
Remove broken mv logic and use gh CLI for release creation,
matching the proven workflow from other headlamp plugins.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 02:17:40 +00:00