Compare commits

...

12 Commits

Author SHA1 Message Date
github-actions[bot] 248ffa4962 chore: release v0.2.16 2026-02-13 17:54:57 +00:00
Chris Farhood 0b082984a7 chore: bump version to 0.2.16 2026-02-13 12:53:36 -05:00
Chris Farhood 4da3513015 feat: add displayName to package.json for proper UI display
Set displayName to 'Sealed Secrets' so the plugin settings list shows
the friendly name instead of the package name 'headlamp-sealed-secrets'.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-13 12:53:28 -05:00
github-actions[bot] 74af59ef50 chore: release v0.2.15 2026-02-13 15:13:39 +00:00
Chris Farhood 67287158fd chore: bump version to 0.2.15 2026-02-13 10:12:38 -05:00
Chris Farhood dbc1fb199b fix: correct settings JSX structure, update display name, improve params handling
- Fix extra closing Box tag in SettingsPage causing blank display
- Change display name from 'Sealed Secrets Plugin for Headlamp' to 'Sealed Secrets'
- Use default values for params to avoid undefined in hooks (fixes retry button issue)

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-13 10:12:38 -05:00
github-actions[bot] c63afb1461 chore: release v0.2.14 2026-02-13 12:39:41 +00:00
Chris Farhood 3429b32625 chore: bump version to 0.2.14 2026-02-13 07:38:45 -05:00
Chris Farhood 5cf360b591 fix: enable drawer scrolling, fix blank settings page, and eliminate retry button requirement
- Add overflow: auto to drawer Box wrapper for vertical scrolling
- Remove unnecessary SectionBox wrapper from SettingsPage (Headlamp provides container)
- Add param guard to prevent race condition on initial detail view load

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-13 07:38:45 -05:00
github-actions[bot] 889504962d chore: release v0.2.13 2026-02-13 11:34:16 +00:00
Chris Farhood 7b51df5ce5 chore: bump version to 0.2.13 2026-02-13 06:33:22 -05:00
Chris Farhood a3b860c1f5 fix: use friendly name 'Sealed Secrets' in settings UI
Changed plugin settings registration name from 'headlamp-sealed-secrets'
to 'Sealed Secrets' for better user experience in Settings → Plugins.

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-02-13 06:33:22 -05:00
5 changed files with 20 additions and 19 deletions
+5 -5
View File
@@ -1,13 +1,13 @@
# Artifact Hub package metadata file # Artifact Hub package metadata file
# https://github.com/artifacthub/hub/blob/master/docs/metadata/artifacthub-pkg.yml # https://github.com/artifacthub/hub/blob/master/docs/metadata/artifacthub-pkg.yml
version: 0.2.12 version: 0.2.16
name: headlamp-sealed-secrets name: headlamp-sealed-secrets
displayName: Sealed Secrets Plugin for Headlamp displayName: Sealed Secrets
createdAt: "2026-02-12T00:00:00Z" createdAt: "2026-02-12T00:00:00Z"
description: A comprehensive Headlamp plugin for managing Bitnami Sealed Secrets with client-side encryption and RBAC-aware UI description: A comprehensive Headlamp plugin for managing Bitnami Sealed Secrets with client-side encryption and RBAC-aware UI
license: Apache-2.0 license: Apache-2.0
homeURL: https://github.com/privilegedescalation/headlamp-sealed-secrets-plugin homeURL: https://github.com/privilegedescalation/headlamp-sealed-secrets-plugin
appVersion: 0.2.12 appVersion: 0.2.16
containersImages: containersImages:
- name: sealed-secrets-controller - name: sealed-secrets-controller
image: docker.io/bitnami/sealed-secrets-controller:v0.24.0 image: docker.io/bitnami/sealed-secrets-controller:v0.24.0
@@ -19,8 +19,8 @@ keywords:
- encryption - encryption
- security - security
annotations: annotations:
headlamp/plugin/archive-url: "https://github.com/privilegedescalation/headlamp-sealed-secrets-plugin/releases/download/v0.2.12/headlamp-sealed-secrets-0.2.12.tar.gz" headlamp/plugin/archive-url: "https://github.com/privilegedescalation/headlamp-sealed-secrets-plugin/releases/download/v0.2.16/headlamp-sealed-secrets-0.2.16.tar.gz"
headlamp/plugin/archive-checksum: sha256:a269f578a94131dc85ae50aa7f828f0dfe4f2fcc95638879784e4cdc09c0c076 headlamp/plugin/archive-checksum: sha256:a71c98341e07a9bb946a75ee3a3d139b9dcb6c905464950685fc6779b229e5cf
headlamp/plugin/version-compat: ">=0.13.0" headlamp/plugin/version-compat: ">=0.13.0"
headlamp/plugin/distro-compat: "desktop,in-cluster,web,docker-desktop" headlamp/plugin/distro-compat: "desktop,in-cluster,web,docker-desktop"
links: links:
+2 -1
View File
@@ -1,6 +1,7 @@
{ {
"name": "headlamp-sealed-secrets", "name": "headlamp-sealed-secrets",
"version": "0.2.12", "displayName": "Sealed Secrets",
"version": "0.2.16",
"description": "Headlamp plugin for Bitnami Sealed Secrets - manage encrypted Kubernetes secrets", "description": "Headlamp plugin for Bitnami Sealed Secrets - manage encrypted Kubernetes secrets",
"files": [ "files": [
"dist", "dist",
@@ -57,15 +57,15 @@ function formatScope(scope: SealedSecretScope): string {
* SealedSecret detail view component * SealedSecret detail view component
*/ */
export function SealedSecretDetail() { export function SealedSecretDetail() {
const { namespace, name } = useParams<{ namespace: string; name: string }>(); const { namespace = '', name = '' } = useParams<{ namespace: string; name: string }>();
const [sealedSecret, error] = SealedSecret.useGet(name, namespace); const [sealedSecret, error] = SealedSecret.useGet(name || undefined, namespace || undefined);
const [secret] = K8s.ResourceClasses.Secret.useGet(name, namespace); const [secret] = K8s.ResourceClasses.Secret.useGet(name || undefined, namespace || undefined);
const [decryptKey, setDecryptKey] = React.useState<string | null>(null); const [decryptKey, setDecryptKey] = React.useState<string | null>(null);
const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false); const [deleteDialogOpen, setDeleteDialogOpen] = React.useState(false);
const [rotating, setRotating] = React.useState(false); const [rotating, setRotating] = React.useState(false);
const [canDecrypt, setCanDecrypt] = React.useState(false); const [canDecrypt, setCanDecrypt] = React.useState(false);
const { enqueueSnackbar } = useSnackbar(); const { enqueueSnackbar } = useSnackbar();
const { permissions } = usePermissions(namespace); const { permissions } = usePermissions(namespace || undefined);
// Check if user can decrypt secrets (requires get permission on Secrets) // Check if user can decrypt secrets (requires get permission on Secrets)
React.useEffect(() => { React.useEffect(() => {
@@ -74,6 +74,11 @@ export function SealedSecretDetail() {
} }
}, [namespace]); }, [namespace]);
// Wait for required params before rendering
if (!namespace || !name) {
return <SealedSecretDetailSkeleton />;
}
// Show error if fetch failed // Show error if fetch failed
if (error) { if (error) {
return ( return (
@@ -146,7 +151,7 @@ export function SealedSecretDetail() {
}, },
}} }}
> >
<Box> <Box sx={{ height: '100%', overflow: 'auto' }}>
<SectionBox <SectionBox
title={ title={
<Box display="flex" alignItems="center" justifyContent="space-between"> <Box display="flex" alignItems="center" justifyContent="space-between">
@@ -4,7 +4,6 @@
* Configuration page for the Sealed Secrets plugin * Configuration page for the Sealed Secrets plugin
*/ */
import { SectionBox } from '@kinvolk/headlamp-plugin/lib/CommonComponents';
import { Box, Button, Divider, TextField, Typography } from '@mui/material'; import { Box, Button, Divider, TextField, Typography } from '@mui/material';
import { useSnackbar } from 'notistack'; import { useSnackbar } from 'notistack';
import React from 'react'; import React from 'react';
@@ -35,10 +34,7 @@ export function SettingsPage() {
}; };
return ( return (
<SectionBox <Box p={3}>
title="Sealed Secrets Plugin Settings"
>
<Box p={3}>
<Typography variant="body1" paragraph id="settings-description"> <Typography variant="body1" paragraph id="settings-description">
Configure the connection to your Sealed Secrets controller. These settings are stored in Configure the connection to your Sealed Secrets controller. These settings are stored in
your browser's local storage. your browser's local storage.
@@ -155,7 +151,6 @@ export function SettingsPage() {
<dd style={{ display: 'inline', margin: 0 }}>8080</dd> <dd style={{ display: 'inline', margin: 0 }}>8080</dd>
</Typography> </Typography>
</Box> </Box>
</Box> </Box>
</SectionBox>
); );
} }
+1 -1
View File
@@ -107,7 +107,7 @@ registerDetailsViewSection(({ resource }) => {
* Settings will appear in Settings → Plugins → Sealed Secrets * Settings will appear in Settings → Plugins → Sealed Secrets
*/ */
registerPluginSettings( registerPluginSettings(
'headlamp-sealed-secrets', 'Sealed Secrets',
() => ( () => (
<GenericErrorBoundary> <GenericErrorBoundary>
<SettingsPage /> <SettingsPage />