Skip to content

Commit 4b0cf79

Browse files
authored
Merge branch 'kubernetes-sigs:main' into in-cluster-context-name
2 parents 2c31828 + f75905b commit 4b0cf79

File tree

16 files changed

+368
-36
lines changed

16 files changed

+368
-36
lines changed

ADOPTERS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ If you would like your organization to be added to this list, please open a PR w
1111
| Organization | Description |
1212
|----------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
1313
| [EPAM Systems, Inc.](https://epam.com/) | EPAM leverages Headlamp for their [edp-headlamp](https://github.com/epam/edp-headlamp) project, integrating it within their [KubeRocketCI](https://docs.kuberocketci.io/) open-source solution to enhance the user interface and experience for managing Platform using Kubernetes-native approach. |
14+
| [KA-NABELL](https://www.ka-nabell.com/) | KA-NABELL, Japan's largest trading card e-commerce platform, contributes to Headlamp and uses it as a central operations hub for its microservices DevOps teams. They develop and extend official plugins (including a Knative plugin) alongside custom Headlamp plugins to streamline day-to-day application operations and integrate with their broader cloud native toolchain (including CNCF ecosystem tools and services). |
1415
| [Microsoft](https://www.microsoft.com/) | Microsoft contributes to Headlamp, uses Headlamp internally, and also uses Headlamp as the basis for [AKS desktop](https://github.com/Azure/aks-desktop). |
1516
| [Millennium bcp](https://www.millenniumbcp.pt/) | Millennium bcp is utilizing Headlamp as a User Interface to enhance visibility and streamline the configuration and deployment of microservices and applications. |
1617
| [Oracle](https://www.oracle.com/) | [Oracle Cloud Native Environment (OCNE)](https://www.oracle.com/linux/cloud-native-environment/), based on open standards, specifications, and APIs defined by the Open Container Initiative and Cloud Native Computing Foundation (CNCF), includes a CNCF-certified Kubernetes module, container runtimes, virtualization, service mesh, storage, networking, observability, and diagnostics. Oracle leverages Headlamp and its plugin system for implementing its own [OCNE UI](https://docs.oracle.com/en/learn/ocne-ui/index.html).

AGENTS.md

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ default_agent: "@dev-agent"
2828
> - `/docs/development/index.md` - Main development guide with build/run commands
2929
> - `/docs/development/frontend.md` - Frontend development guide
3030
> - `/docs/development/backend.md` - Backend development guide with testing commands
31+
> - `/docs/development/app.md` - Desktop app development guide
3132
> - `/docs/development/testing.md` - Load testing guide
3233
> - `/docs/development/architecture.md` - Architecture documentation
3334
> - `/docs/development/plugins/index.md` - Plugin system overview
@@ -83,7 +84,7 @@ should NOT unless explicitly requested or strictly necessary for the change
8384
- **`backend/`** — Go server and API; see `/backend/README.md` and `/docs/development/backend.md` for server commands.
8485
- **`docs/`** — all developer and user docs; reference specific files under `docs/` for workflows.
8586
- **`plugins/`** — plugin system and examples; see `/plugins/README.md` and `/docs/development/plugins/`.
86-
- **`app/`** — desktop application (Electron); see `/app/README.md`.
87+
- **`app/`** — desktop application (Electron); see `/app/README.md` and `/docs/development/app.md` for build/run/test commands.
8788
- **CI & infra:** `.github/workflows/`, Dockerfiles (`/Dockerfile`, `/Dockerfile.plugins`), Kubernetes manifests (`kubernetes-headlamp*.yaml`), Helm charts (`/charts/`) — treat as manual-review-only.
8889

8990
---
@@ -117,10 +118,13 @@ should NOT unless explicitly requested or strictly necessary for the change
117118
- **Lint backend (fix):** `npm run backend:lint:fix` (from `/package.json`, documented in `/docs/development/backend.md`)
118119
- **Lint frontend:** `npm run frontend:lint` (from `/package.json`)
119120
- **Lint frontend (fix):** `npm run frontend:lint:fix` (from `/package.json`)
121+
- **Lint app:** `npm run app:lint` (from `/package.json`, documented in `/docs/development/app.md`)
122+
- **Lint app (fix):** `npm run app:lint:fix` (from `/package.json`, documented in `/docs/development/app.md`)
120123

121124
#### Format commands (from `/package.json` and `/docs/development/backend.md`):
122125
- **Format backend:** `npm run backend:format` (from `/package.json`, documented in `/docs/development/backend.md`)
123126
- **Format and lint frontend:** `npm run frontend:lint:fix` (from `/package.json`)
127+
- **Format app:** `npm run app:format` (from `/package.json`, documented in `/docs/development/app.md`)
124128

125129
#### Documentation generation (from `/package.json` and `/docs/development/frontend.md`):
126130
- **Generate API docs:** `npm run docs` (from `/package.json`, documented in `/docs/development/frontend.md`)
@@ -227,14 +231,25 @@ should NOT unless explicitly requested or strictly necessary for the change
227231
3. `npm run backend:test` (from `/package.json`, documented in `/docs/development/backend.md`)
228232
4. `npm run backend:format` (from `/package.json`, documented in `/docs/development/backend.md`)
229233

230-
#### Example 3: Documentation update
234+
#### Example 3: Desktop app code fix
235+
- **Files to change:** `app/electron/example.ts` (example path)
236+
- **Rationale:** Fix window management issue in Electron app
237+
- **Commands to validate:**
238+
1. `npm run app:install` (from `/package.json`)
239+
2. `npm run app:lint:fix` (from `/package.json`, documented in `/docs/development/app.md`)
240+
3. `npm run app:format` (from `/package.json`, documented in `/docs/development/app.md`)
241+
4. `npm run app:lint` (from `/package.json`, documented in `/docs/development/app.md`)
242+
5. `npm run app:tsc` (from `/package.json`, documented in `/docs/development/app.md`)
243+
6. `npm run app:test` (from `/package.json`, documented in `/docs/development/app.md`)
244+
245+
#### Example 4: Documentation update
231246
- **Files to change:** `docs/development/index.md` (from consulted files list)
232247
- **Rationale:** Clarify local dev startup steps to match current npm scripts
233248
- **Commands to validate:**
234249
- Run the documented commands exactly as written and confirm they succeed
235250
- For doc-only changes, testing commands is sufficient; no build needed
236251

237-
#### Example 4: Plugin development
252+
#### Example 5: Plugin development
238253
- **Files to change:** Plugin code in `/plugins/examples/` directory
239254
- **Rationale:** Add new plugin example
240255
- **Commands to validate:**
@@ -327,18 +342,19 @@ Reference: `/docs/contributing.md` and `/.github/pull_request_template.md`
327342
1. `/docs/development/index.md` - Primary development guide (lines 1-310)
328343
2. `/docs/development/frontend.md` - Frontend dev guide (lines 1-82)
329344
3. `/docs/development/backend.md` - Backend dev guide (lines 1-69)
330-
4. `/docs/development/testing.md` - Testing guide (lines 1-83)
331-
5. `/docs/development/architecture.md` - System architecture
332-
6. `/docs/development/plugins/index.md` - Plugin system
333-
7. `/docs/development/plugins/building.md` - Building plugins
334-
8. `/docs/development/plugins/getting-started.md` - Plugin quickstart
335-
9. `/docs/development/plugins/publishing.md` - Publishing plugins
336-
10. `/docs/development/plugins/common-patterns.md` - Plugin patterns
337-
11. `/docs/development/i18n/index.md` - Internationalization
338-
12. `/docs/development/release-guide.md` - Release process
339-
13. `/docs/contributing.md` - Contribution guidelines
340-
14. `/docs/faq.md` - FAQ
341-
15. `/docs/platforms.md` - Tested platforms
345+
4. `/docs/development/app.md` - Desktop app dev guide
346+
5. `/docs/development/testing.md` - Testing guide (lines 1-83)
347+
6. `/docs/development/architecture.md` - System architecture
348+
7. `/docs/development/plugins/index.md` - Plugin system
349+
8. `/docs/development/plugins/building.md` - Building plugins
350+
9. `/docs/development/plugins/getting-started.md` - Plugin quickstart
351+
10. `/docs/development/plugins/publishing.md` - Publishing plugins
352+
11. `/docs/development/plugins/common-patterns.md` - Plugin patterns
353+
12. `/docs/development/i18n/index.md` - Internationalization
354+
13. `/docs/development/release-guide.md` - Release process
355+
14. `/docs/contributing.md` - Contribution guidelines
356+
15. `/docs/faq.md` - FAQ
357+
16. `/docs/platforms.md` - Tested platforms
342358

343359
#### Versioning guidance:
344360
- Follow semantic versioning (documented in `/docs/development/release-guide.md`)

app/package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,10 @@
1616
"copy-plugins": "npx --no-install shx rm -rf build/.plugins && mkdirp build/.plugins && copyfiles ../.plugins build/.plugins",
1717
"dev": "npm run compile-electron && cross-env ELECTRON_DEV=1 electron .",
1818
"dev-only-app": "npm run compile-electron && cross-env ELECTRON_DEV=1 ELECTRON_START_URL=http://localhost:3000 EXTERNAL_SERVER=true electron .",
19+
"format": "cd .. && npm run frontend:format",
1920
"i18n": "npx --no-install i18next ./electron/main.ts -c ./electron/i18next-parser.config.js",
21+
"lint": "cd .. && npm run frontend:lint",
22+
"lint-fix": "cd .. && npm run frontend:lint:fix",
2023
"package": "npm run build && electron-builder build --publish never",
2124
"package-msi": "npm run build && node windows/msi/build.js",
2225
"prod-deps": "mkdirp prod_deps && cd ./prod_deps && copyfiles -f ../package.json ../package-lock.json . && npm i --only=prod && cd .. && npx --no-install shx rm -rf ./prod_deps/node_modules/.bin",

charts/headlamp/README.md

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,43 @@ ingress:
205205
- headlamp.example.com
206206
```
207207

208+
### HTTPRoute Configuration (Gateway API)
209+
210+
For users who prefer Gateway API over classic Ingress resources, Headlamp supports HTTPRoute configuration.
211+
212+
| Key | Type | Default | Description |
213+
|-----|------|---------|-------------|
214+
| httpRoute.enabled | bool | `false` | Enable HTTPRoute resource for Gateway API |
215+
| httpRoute.annotations | object | `{}` | Annotations for HTTPRoute resource |
216+
| httpRoute.labels | object | `{}` | Additional labels for HTTPRoute resource |
217+
| httpRoute.parentRefs | list | `[]` | Parent gateway references (REQUIRED when enabled) |
218+
| httpRoute.hostnames | list | `[]` | Hostnames for the HTTPRoute |
219+
| httpRoute.rules | list | `[]` | Custom routing rules (optional, defaults to path prefix /) |
220+
221+
Example HTTPRoute configuration:
222+
```yaml
223+
httpRoute:
224+
enabled: true
225+
annotations:
226+
gateway.example.com/custom-annotation: "value"
227+
labels:
228+
app.kubernetes.io/component: ingress
229+
parentRefs:
230+
- name: my-gateway
231+
namespace: gateway-namespace
232+
hostnames:
233+
- headlamp.example.com
234+
# Optional custom rules (defaults to path prefix / if not specified)
235+
rules:
236+
- matches:
237+
- path:
238+
type: PathPrefix
239+
value: /headlamp
240+
backendRefs:
241+
- name: my-headlamp
242+
port: 80
243+
```
244+
208245
### Resource Management
209246

210247
| Key | Type | Default | Description |
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
{{- if .Values.httpRoute.enabled -}}
2+
{{- $fullName := include "headlamp.fullname" . -}}
3+
{{- $svcPort := .Values.service.port -}}
4+
apiVersion: gateway.networking.k8s.io/v1
5+
kind: HTTPRoute
6+
metadata:
7+
name: {{ $fullName }}
8+
namespace: {{ include "headlamp.namespace" . }}
9+
labels:
10+
{{- include "headlamp.labels" . | nindent 4 }}
11+
{{- with .Values.httpRoute.labels }}
12+
{{- toYaml . | nindent 4 }}
13+
{{- end }}
14+
{{- with .Values.httpRoute.annotations }}
15+
annotations:
16+
{{- toYaml . | nindent 4 }}
17+
{{- end }}
18+
spec:
19+
parentRefs:
20+
{{- required "A valid .Values.httpRoute.parentRefs entry is required when httpRoute.enabled is true" .Values.httpRoute.parentRefs | toYaml | nindent 4 }}
21+
{{- with .Values.httpRoute.hostnames }}
22+
hostnames:
23+
{{- toYaml . | nindent 4 }}
24+
{{- end }}
25+
rules:
26+
{{- if .Values.httpRoute.rules }}
27+
{{- toYaml .Values.httpRoute.rules | nindent 4 }}
28+
{{- else }}
29+
- matches:
30+
- path:
31+
type: PathPrefix
32+
value: /
33+
backendRefs:
34+
- name: {{ $fullName }}
35+
port: {{ $svcPort }}
36+
{{- end }}
37+
{{- end }}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Test case for HTTPRoute Gateway API configuration
2+
httpRoute:
3+
enabled: true
4+
annotations:
5+
gateway.example.com/annotation: "test"
6+
labels:
7+
app.kubernetes.io/component: ingress
8+
parentRefs:
9+
- name: my-gateway
10+
namespace: gateway-namespace
11+
hostnames:
12+
- headlamp.example.com

charts/headlamp/values.schema.json

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,60 @@
445445
}
446446
}
447447
},
448+
"httpRoute": {
449+
"type": "object",
450+
"description": "HTTPRoute configuration for Gateway API",
451+
"properties": {
452+
"enabled": {
453+
"type": "boolean",
454+
"description": "Enable HTTPRoute resource for Gateway API"
455+
},
456+
"annotations": {
457+
"type": "object",
458+
"description": "Annotations for HTTPRoute resource"
459+
},
460+
"labels": {
461+
"type": "object",
462+
"description": "Additional labels for HTTPRoute resource"
463+
},
464+
"parentRefs": {
465+
"type": "array",
466+
"description": "Parent references (REQUIRED when enabled - HTTPRoute will not work without this)",
467+
"items": {
468+
"type": "object",
469+
"properties": {
470+
"name": {
471+
"type": "string",
472+
"description": "Name of the parent gateway"
473+
},
474+
"namespace": {
475+
"type": "string",
476+
"description": "Namespace of the parent gateway"
477+
},
478+
"sectionName": {
479+
"type": "string",
480+
"description": "Section name of the parent gateway listener"
481+
}
482+
},
483+
"required": ["name"]
484+
}
485+
},
486+
"hostnames": {
487+
"type": "array",
488+
"description": "Hostnames for the HTTPRoute",
489+
"items": {
490+
"type": "string"
491+
}
492+
},
493+
"rules": {
494+
"type": "array",
495+
"description": "Custom routing rules (optional, defaults to path prefix /)",
496+
"items": {
497+
"type": "object"
498+
}
499+
}
500+
}
501+
},
448502
"podDisruptionBudget": {
449503
"type": "object",
450504
"properties": {

charts/headlamp/values.yaml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,6 +240,39 @@ ingress:
240240
# hosts:
241241
# - chart-example.local
242242

243+
# HTTPRoute configuration for Gateway API
244+
# Please refer to https://gateway-api.sigs.k8s.io/reference/spec/#gateway.networking.k8s.io/v1.HTTPRoute
245+
httpRoute:
246+
# -- Enable HTTPRoute resource for Gateway API
247+
enabled: false
248+
# -- Annotations for HTTPRoute resource
249+
annotations: {}
250+
# -- Additional labels for HTTPRoute resource
251+
labels: {}
252+
# -- Parent references (REQUIRED when enabled - HTTPRoute will not work without this)
253+
# Example:
254+
# parentRefs:
255+
# - name: my-gateway
256+
# namespace: gateway-namespace
257+
parentRefs: []
258+
# -- Hostnames for the HTTPRoute
259+
# Example:
260+
# hostnames:
261+
# - headlamp.example.com
262+
hostnames: []
263+
# -- Custom routing rules (optional, defaults to path prefix /)
264+
# If not specified, a default rule routing all traffic to the service is used
265+
rules: []
266+
# Example custom rules:
267+
# rules:
268+
# - matches:
269+
# - path:
270+
# type: PathPrefix
271+
# value: /headlamp
272+
# backendRefs:
273+
# - name: "{{ .Release.Name }}-headlamp"
274+
# port: 80
275+
243276
# -- CPU/Memory resource requests/limits
244277
resources:
245278
{}

0 commit comments

Comments
 (0)