Compare commits

..

7 Commits

Author SHA1 Message Date
DevContainer User 2f5a8d65d5 fix: playwright MCP sidecar startup args (#41)
The Playwright MCP image (mcr.microsoft.com/playwright/mcp) doesn't
support --transport flag. Use node cli.js entrypoint with --headless,
--browser chromium, --no-sandbox, and --port for SSE mode.

Fixes #41

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-22 20:04:16 +00:00
github-actions[bot] 0d8fe1ec64 chore: release version 0.4.0 2026-02-22 19:39:04 +00:00
DevContainer User 00638d372c docs: comprehensive update for new values format and template names
- Fix CLAUDE.md: update Docker build example from antigravity to devcontainer
- Fix README.md stale value references throughout:
  - ide → ide.type, ssh → ssh.enabled
  - happyServerUrl → happy.serverUrl (and all happy.* values)
  - secureConnection → display.secureConnection
  - userId/groupId → user.id/user.groupId
  - mcpSidecars.* → mcp.sidecars.*
- Remove GitHub MCP sidecar from custom config example (discontinued)
- Fix YAML indentation in MCP config examples
- Fix storage mount path from /home to /config
- Fix Happy state directory from /home/user/.happy to /config/userdata/.happy

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-22 19:38:11 +00:00
DevContainer User 31ec139a8a refactor: rename template helpers from antigravity to devcontainer
Rename all Helm template helper functions from antigravity.* to
devcontainer.* to match the actual chart name. Also update Chart.yaml
description to remove "Antigravity" branding.

Renamed helpers:
- antigravity.fullname → devcontainer.fullname
- antigravity.pvcName → devcontainer.pvcName
- antigravity.envSecretName → devcontainer.envSecretName
- antigravity.labels → devcontainer.labels
- antigravity.smartResources → devcontainer.smartResources
- antigravity.smartDefaults → devcontainer.smartDefaults
- antigravity.mcpDefaults → devcontainer.mcpDefaults

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-22 19:34:09 +00:00
DevContainer User 71c6ca70cc fix: resolve MCP sidecar image failures (issue #40)
Three fixes for broken MCP sidecars:

1. Remove GitHub MCP sidecar entirely - the upstream image
   (ghcr.io/modelcontextprotocol/servers/github) is discontinued.
   GitHub MCP is now accessed via Copilot API instead.

2. Fix Playwright MCP image - changed from non-existent
   microsoft/playwright-mcp to mcr.microsoft.com/playwright/mcp
   (the official Microsoft Container Registry image).

3. Fix pgtuner MCP startup command - changed --transport to --mode
   and added --host 0.0.0.0 to match the current pgtuner_mcp CLI.

Bumps chart version to 0.3.3.

Closes #40

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-22 19:31:08 +00:00
github-actions[bot] b9c30b8e4d chore: release version 0.3.2 2026-02-22 18:05:08 +00:00
DevContainer User 794de6d0e5 fix: update service.yaml to use new nested values format
service.yaml was still using the old flat values format (.Values.ide
and .Values.ssh) while values.yaml had been restructured to nested
objects (ide.type and ssh.enabled). This caused a type comparison
error breaking all devcontainer deployments across cpfarhood and
homeassistant namespaces.

Bumps chart version to 0.3.1.

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-22 18:04:23 +00:00
10 changed files with 122 additions and 189 deletions
+24 -29
View File
@@ -20,7 +20,7 @@ The stack is primarily **Bash scripts + YAML** — there is no Node.js package,
```bash ```bash
make build # Build Docker image make build # Build Docker image
make build REGISTRY=ghcr.io/myuser IMAGE_TAG=v1.0 # Custom registry/tag make build REGISTRY=ghcr.io/myuser IMAGE_TAG=v1.0 # Custom registry/tag
docker build -t ghcr.io/cpfarhood/antigravity:latest . # Direct build docker build -t ghcr.io/cpfarhood/devcontainer:latest . # Direct build
``` ```
### Running Locally ### Running Locally
@@ -77,7 +77,7 @@ Container start
| `chart/templates/pvc.yaml` | PersistentVolumeClaim for user home | | `chart/templates/pvc.yaml` | PersistentVolumeClaim for user home |
| `chart/templates/service.yaml` | ClusterIP Service (VNC + optional SSH) | | `chart/templates/service.yaml` | ClusterIP Service (VNC + optional SSH) |
| `chart/values.yaml` | Default Helm values | | `chart/values.yaml` | Default Helm values |
| `.mcp.json` | MCP server connection config (Kubernetes, Flux, GitHub, Home Assistant, Playwright) | | `.mcp.json` | MCP server connection config (GitHub Copilot, Kubernetes, Flux, Playwright, pgtuner) |
| `Makefile` | Build/deploy automation | | `Makefile` | Build/deploy automation |
### MCP Sidecars ### MCP Sidecars
@@ -88,15 +88,14 @@ MCP (Model Context Protocol) servers run as sidecar containers in the pod, enabl
|---------|-------|---------|------|----------|---------| |---------|-------|---------|------|----------|---------|
| `kubernetes-mcp` | `quay.io/containers/kubernetes_mcp_server` | v0.0.57 | 8080 | `http://localhost:8080/sse` | Enabled | | `kubernetes-mcp` | `quay.io/containers/kubernetes_mcp_server` | v0.0.57 | 8080 | `http://localhost:8080/sse` | Enabled |
| `flux-mcp` | `ghcr.io/controlplaneio-fluxcd/flux-operator-mcp` | v0.41.1 | 8081 | `http://localhost:8081/sse` | Enabled | | `flux-mcp` | `ghcr.io/controlplaneio-fluxcd/flux-operator-mcp` | v0.41.1 | 8081 | `http://localhost:8081/sse` | Enabled |
| `github-mcp` | `ghcr.io/modelcontextprotocol/servers/github` | latest | 8088 | `http://localhost:8088/sse` | Disabled |
| `homeassistant-mcp` | `ghcr.io/homeassistant-ai/ha-mcp` | stable | 8087 | `http://localhost:8087/sse` | Disabled | | `homeassistant-mcp` | `ghcr.io/homeassistant-ai/ha-mcp` | stable | 8087 | `http://localhost:8087/sse` | Disabled |
| `pgtuner-mcp` | `dog830228/pgtuner_mcp` | latest | 8085 | `http://localhost:8085/sse` | Disabled | | `pgtuner-mcp` | `dog830228/pgtuner_mcp` | latest | 8085 | `http://localhost:8085/sse` | Disabled |
| `playwright-mcp` | `microsoft/playwright-mcp` | latest | 8086 | `http://localhost:8086/sse` | Enabled | | `playwright-mcp` | `mcr.microsoft.com/playwright/mcp` | latest | 8086 | `http://localhost:8086/sse` | Enabled |
**Note:** **Note:**
- GitHub MCP is accessed via the Copilot API (`https://api.githubcopilot.com/mcp/`), not as a sidecar
- Kubernetes and Flux sidecars require `clusterAccess` != `none` to be deployed (they need RBAC permissions) - Kubernetes and Flux sidecars require `clusterAccess` != `none` to be deployed (they need RBAC permissions)
- Kubernetes and Flux sidecars inherit the pod's ServiceAccount RBAC permissions - Kubernetes and Flux sidecars inherit the pod's ServiceAccount RBAC permissions
- GitHub sidecar uses `GITHUB_TOKEN` from the env secret (same token used for repo cloning)
- Home Assistant sidecar requires `HOMEASSISTANT_URL` and `HOMEASSISTANT_TOKEN` in the env secret - Home Assistant sidecar requires `HOMEASSISTANT_URL` and `HOMEASSISTANT_TOKEN` in the env secret
- PostgreSQL tuner sidecar requires `DATABASE_URI` in the env secret (PostgreSQL connection string) - PostgreSQL tuner sidecar requires `DATABASE_URI` in the env secret (PostgreSQL connection string)
- Playwright sidecar provides browser automation and web testing capabilities - Playwright sidecar provides browser automation and web testing capabilities
@@ -109,34 +108,30 @@ To control MCP sidecars, set the `enabled` flag in your values override:
# Disable all MCP sidecars # Disable all MCP sidecars
mcp: mcp:
sidecars: sidecars:
kubernetes: kubernetes:
enabled: false enabled: false
flux: flux:
enabled: false enabled: false
github: homeassistant:
enabled: false enabled: false
homeassistant: pgtuner:
enabled: false enabled: false
pgtuner: playwright:
enabled: false enabled: false
playwright:
enabled: false
# Or selectively enable/disable # Or selectively enable/disable
mcp: mcp:
sidecars: sidecars:
kubernetes: kubernetes:
enabled: true # Keep Kubernetes MCP enabled enabled: true # Keep Kubernetes MCP enabled
flux: flux:
enabled: false # Disable Flux MCP enabled: false # Disable Flux MCP
github: homeassistant:
enabled: true # Keep GitHub MCP enabled (uses GITHUB_TOKEN) enabled: true # Enable Home Assistant MCP (requires secrets)
homeassistant: pgtuner:
enabled: true # Enable Home Assistant MCP (requires secrets) enabled: true # Enable PostgreSQL tuner MCP (requires DATABASE_URI)
pgtuner: playwright:
enabled: true # Enable PostgreSQL tuner MCP (requires DATABASE_URI) enabled: true # Enable Playwright MCP for browser automation
playwright:
enabled: true # Enable Playwright MCP for browser automation
``` ```
When deploying via Helm: When deploying via Helm:
+61 -77
View File
@@ -48,9 +48,9 @@ The secret is picked up automatically via `envFrom`. Keys recognised:
| `VNC_PASSWORD` | Password for the VNC web UI | | `VNC_PASSWORD` | Password for the VNC web UI |
| `ANTHROPIC_API_KEY` | API key — alternative to browser-based Claude login | | `ANTHROPIC_API_KEY` | API key — alternative to browser-based Claude login |
| `SSH_AUTHORIZED_KEYS` | Public key(s) for SSH access (required when `ssh: true`) | | `SSH_AUTHORIZED_KEYS` | Public key(s) for SSH access (required when `ssh: true`) |
| `HOMEASSISTANT_URL` | Home Assistant URL (required when `mcpSidecars.homeassistant.enabled: true`) | | `HOMEASSISTANT_URL` | Home Assistant URL (required when `mcp.sidecars.homeassistant.enabled: true`) |
| `HOMEASSISTANT_TOKEN` | Home Assistant long-lived access token (required when `mcpSidecars.homeassistant.enabled: true`) | | `HOMEASSISTANT_TOKEN` | Home Assistant long-lived access token (required when `mcp.sidecars.homeassistant.enabled: true`) |
| `DATABASE_URI` | PostgreSQL connection string (required when `mcpSidecars.pgtuner.enabled: true`) | | `DATABASE_URI` | PostgreSQL connection string (required when `mcp.sidecars.pgtuner.enabled: true`) |
| `PGTUNER_EXCLUDE_USERIDS` | Comma-separated PostgreSQL user OIDs to exclude from monitoring (optional) | | `PGTUNER_EXCLUDE_USERIDS` | Comma-separated PostgreSQL user OIDs to exclude from monitoring (optional) |
```bash ```bash
@@ -119,14 +119,14 @@ The Helm chart uses a logical organization with these main sections:
|-------|---------|-------------| |-------|---------|-------------|
| `name` | `""` | Instance name — used in all resource names (`devcontainer-{name}`) | | `name` | `""` | Instance name — used in all resource names (`devcontainer-{name}`) |
| `githubRepo` | `""` | Repository to clone into `/workspace` on startup | | `githubRepo` | `""` | Repository to clone into `/workspace` on startup |
| `ide` | `vscode` | IDE to launch — `vscode`, `antigravity`, or `none` (see below) | | `ide.type` | `vscode` | IDE to launch — `vscode`, `antigravity`, or `none` (see below) |
| `ssh` | `false` | Also start an OpenSSH server on port 22 (additive, any `ide`) | | `ssh.enabled` | `false` | Also start an OpenSSH server on port 22 (additive, any IDE) |
| `image.repository` | `ghcr.io/cpfarhood/devcontainer` | Container image | | `image.repository` | `ghcr.io/cpfarhood/devcontainer` | Container image |
| `image.tag` | `latest` | Image tag | | `image.tag` | `latest` | Image tag |
### IDE choice ### IDE choice
`ide` controls what GUI is launched in the VNC session: `ide.type` controls what GUI is launched in the VNC session:
| Value | Port | Description | | Value | Port | Description |
|-------|------|-------------| |-------|------|-------------|
@@ -136,14 +136,14 @@ The Helm chart uses a logical organization with these main sections:
### SSH access ### SSH access
`ssh: true` starts OpenSSH on port 22 **in addition to** the IDE. It works with any `ide` value: `ssh.enabled: true` starts OpenSSH on port 22 **in addition to** the IDE. It works with any `ide.type` value:
```bash ```bash
# SSH-only (no VNC) # SSH-only (no VNC)
helm install mydev ./chart --set name=mydev --set ide=none --set ssh=true helm install mydev ./chart --set name=mydev --set ide.type=none --set ssh.enabled=true
# VSCode in VNC + SSH access at the same time # VSCode in VNC + SSH access at the same time
helm install mydev ./chart --set name=mydev --set ssh=true helm install mydev ./chart --set name=mydev --set ssh.enabled=true
``` ```
Add your public key to the env secret: Add your public key to the env secret:
@@ -165,10 +165,10 @@ ssh -p 2222 user@localhost
| Value | Default | Description | | Value | Default | Description |
|-------|---------|-------------| |-------|---------|-------------|
| `happyServerUrl` | `https://happy.farh.net` | Happy Coder server endpoint | | `happy.serverUrl` | `https://happy.farh.net` | Happy Coder server endpoint |
| `happyWebappUrl` | `https://happy-coder.farh.net` | Happy Coder webapp URL | | `happy.webappUrl` | `https://happy-coder.farh.net` | Happy Coder webapp URL |
| `happyHomeDir` | `/home/user/.happy` | Happy runtime state directory (persists on the home PVC) | | `happy.homeDir` | `/config/userdata/.happy` | Happy runtime state directory (persists on the home PVC) |
| `happyExperimental` | `true` | Enable experimental Happy features | | `happy.experimental` | `true` | Enable experimental Happy features |
### Kubernetes cluster access ### Kubernetes cluster access
@@ -200,16 +200,16 @@ The devcontainer includes MCP (Model Context Protocol) servers as sidecar contai
|---------|---------|---------| |---------|---------|---------|
| `mcp.sidecars.kubernetes.enabled` | `true` | Kubernetes API access via MCP | | `mcp.sidecars.kubernetes.enabled` | `true` | Kubernetes API access via MCP |
| `mcp.sidecars.flux.enabled` | `true` | Flux GitOps operations via MCP | | `mcp.sidecars.flux.enabled` | `true` | Flux GitOps operations via MCP |
| `mcp.sidecars.github.enabled` | `false` | GitHub API access via MCP (DISABLED: archived image) |
| `mcp.sidecars.homeassistant.enabled` | `false` | Home Assistant smart home control via MCP | | `mcp.sidecars.homeassistant.enabled` | `false` | Home Assistant smart home control via MCP |
| `mcp.sidecars.pgtuner.enabled` | `false` | PostgreSQL performance tuning and analysis via MCP | | `mcp.sidecars.pgtuner.enabled` | `false` | PostgreSQL performance tuning and analysis via MCP |
| `mcp.sidecars.playwright.enabled` | `true` | Browser automation and web testing via MCP | | `mcp.sidecars.playwright.enabled` | `true` | Browser automation and web testing via MCP |
**Notes:** **Notes:**
- GitHub MCP is accessed via the Copilot API (`https://api.githubcopilot.com/mcp/`), not as a sidecar
- Kubernetes and Flux sidecars require `clusterAccess` != `none` to be deployed (automatically disabled when no cluster access) - Kubernetes and Flux sidecars require `clusterAccess` != `none` to be deployed (automatically disabled when no cluster access)
- Kubernetes and Flux sidecars inherit the pod's ServiceAccount RBAC permissions (controlled by `clusterAccess`) - Kubernetes and Flux sidecars inherit the pod's ServiceAccount RBAC permissions (controlled by `clusterAccess`)
- Home Assistant sidecar requires `homeassistant-url` and `homeassistant-token` in the env secret - Home Assistant sidecar requires `HOMEASSISTANT_URL` and `HOMEASSISTANT_TOKEN` in the env secret
- PostgreSQL tuner sidecar requires `database-uri` in the env secret (PostgreSQL connection string) - PostgreSQL tuner sidecar requires `DATABASE_URI` in the env secret (PostgreSQL connection string)
- Playwright sidecar provides browser automation and web testing capabilities - Playwright sidecar provides browser automation and web testing capabilities
**Disable MCP sidecars:** **Disable MCP sidecars:**
@@ -263,62 +263,46 @@ helm install mydev ./chart \
# values.yaml override # values.yaml override
mcp: mcp:
sidecars: sidecars:
kubernetes: kubernetes:
enabled: true enabled: true
image: image:
repository: quay.io/containers/kubernetes_mcp_server repository: quay.io/containers/kubernetes_mcp_server
tag: v0.0.57 tag: v0.0.57
port: 8080 port: 8080
resources: resources:
requests: requests:
memory: "64Mi" memory: "64Mi"
cpu: "50m" cpu: "50m"
limits: limits:
memory: "256Mi" memory: "256Mi"
cpu: "500m" cpu: "500m"
flux: flux:
enabled: false # Disabled in this example enabled: false # Disabled in this example
github: homeassistant:
enabled: false # Disabled by default (archived image) enabled: true
homeassistant: image:
enabled: true repository: ghcr.io/homeassistant-ai/ha-mcp
image: tag: stable
repository: ghcr.io/homeassistant-ai/ha-mcp port: 8087
tag: stable pgtuner:
port: 8087 enabled: true
resources: image:
requests: repository: dog830228/pgtuner_mcp
memory: "64Mi" tag: latest
cpu: "50m" port: 8085
limits: playwright:
memory: "256Mi" enabled: true
cpu: "500m" image:
pgtuner: repository: mcr.microsoft.com/playwright/mcp
enabled: true tag: latest
image: port: 8086
repository: dog830228/pgtuner_mcp resources:
tag: latest requests:
port: 8085 memory: "128Mi"
resources: cpu: "100m"
requests: limits:
memory: "64Mi" memory: "512Mi"
cpu: "50m" cpu: "1000m"
limits:
memory: "256Mi"
cpu: "500m"
playwright:
enabled: true
image:
repository: microsoft/playwright-mcp
tag: latest
port: 8086
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "512Mi"
cpu: "1000m"
``` ```
### Display and resources ### Display and resources
@@ -327,9 +311,9 @@ mcp:
|-------|---------|-------------| |-------|---------|-------------|
| `display.width` | `1920` | VNC width (px) | | `display.width` | `1920` | VNC width (px) |
| `display.height` | `1080` | VNC height (px) | | `display.height` | `1080` | VNC height (px) |
| `secureConnection` | `0` | Set to `1` if TLS is not terminated upstream | | `display.secureConnection` | `0` | Set to `1` if TLS is not terminated upstream |
| `userId` | `1000` | UID for the app user | | `user.id` | `1000` | UID for the app user |
| `groupId` | `1000` | GID for the app user | | `user.groupId` | `1000` | GID for the app user |
| `storage.size` | `32Gi` | Home PVC size | | `storage.size` | `32Gi` | Home PVC size |
| `storage.className` | `ceph-filesystem` | StorageClass (must be ReadWriteMany) | | `storage.className` | `ceph-filesystem` | StorageClass (must be ReadWriteMany) |
| `shm.sizeLimit` | `2Gi` | `/dev/shm` size (memory-backed; used by Electron apps) | | `shm.sizeLimit` | `2Gi` | `/dev/shm` size (memory-backed; used by Electron apps) |
@@ -362,10 +346,10 @@ Container start
| Mount | Source | Persistence | | Mount | Source | Persistence |
|-------|--------|-------------| |-------|--------|-------------|
| `/home` | ReadWriteMany PVC (`userhome-{name}`) | Survives pod restarts — stores Claude credentials, dotfiles, git config | | `/config` | ReadWriteMany PVC (`userhome-{name}`) | Survives pod restarts — stores Claude credentials, dotfiles, git config |
| `/workspace` | `emptyDir` | Ephemeral — repo is re-cloned on each pod start | | `/workspace` | `emptyDir` | Ephemeral — repo is re-cloned on each pod start |
Happy Coder's runtime state (`HAPPY_HOME_DIR`) is kept in `/home/user/.happy` on the persistent home PVC, so auth credentials and settings survive pod restarts when manually started. Happy Coder's runtime state (`HAPPY_HOME_DIR`) is kept in `/config/userdata/.happy` on the persistent home PVC, so auth credentials and settings survive pod restarts when manually started.
--- ---
+2 -2
View File
@@ -1,6 +1,6 @@
apiVersion: v2 apiVersion: v2
name: devcontainer name: devcontainer
description: Antigravity Dev Container with Happy Coder AI assistant description: Dev Container with AI coding agents and MCP sidecars
type: application type: application
version: 0.3.0 version: 0.4.1
appVersion: "latest" appVersion: "latest"
+7 -7
View File
@@ -1,28 +1,28 @@
{{/* {{/*
Resource name prefix: devcontainer-{name} Resource name prefix: devcontainer-{name}
*/}} */}}
{{- define "antigravity.fullname" -}} {{- define "devcontainer.fullname" -}}
{{- printf "devcontainer-%s" .Values.name }} {{- printf "devcontainer-%s" .Values.name }}
{{- end }} {{- end }}
{{/* {{/*
PVC name: userhome-{name} PVC name: userhome-{name}
*/}} */}}
{{- define "antigravity.pvcName" -}} {{- define "devcontainer.pvcName" -}}
{{- printf "userhome-%s" .Values.name }} {{- printf "userhome-%s" .Values.name }}
{{- end }} {{- end }}
{{/* {{/*
Secret name for env vars, default to devcontainer-{name}-secrets-env Secret name for env vars, default to devcontainer-{name}-secrets-env
*/}} */}}
{{- define "antigravity.envSecretName" -}} {{- define "devcontainer.envSecretName" -}}
{{- .Values.envSecretName | default (printf "devcontainer-%s-secrets-env" .Values.name) }} {{- .Values.envSecretName | default (printf "devcontainer-%s-secrets-env" .Values.name) }}
{{- end }} {{- end }}
{{/* {{/*
Common labels Common labels
*/}} */}}
{{- define "antigravity.labels" -}} {{- define "devcontainer.labels" -}}
app: devcontainer app: devcontainer
instance: {{ .Values.name }} instance: {{ .Values.name }}
{{- end }} {{- end }}
@@ -30,7 +30,7 @@ instance: {{ .Values.name }}
{{/* {{/*
Smart resource sizing based on enabled features Smart resource sizing based on enabled features
*/}} */}}
{{- define "antigravity.smartResources" -}} {{- define "devcontainer.smartResources" -}}
{{- $baseMemory := "2Gi" }} {{- $baseMemory := "2Gi" }}
{{- $baseCpu := "1000m" }} {{- $baseCpu := "1000m" }}
{{- $limitMemory := "8Gi" }} {{- $limitMemory := "8Gi" }}
@@ -59,7 +59,7 @@ limits:
{{/* {{/*
Auto-detect environment type and set smart defaults Auto-detect environment type and set smart defaults
*/}} */}}
{{- define "antigravity.smartDefaults" -}} {{- define "devcontainer.smartDefaults" -}}
{{- $isDev := or (contains "dev" .Values.name) (contains "test" .Values.name) (contains "local" .Values.name) }} {{- $isDev := or (contains "dev" .Values.name) (contains "test" .Values.name) (contains "local" .Values.name) }}
{{- $isProd := or (contains "prod" .Values.name) (contains "production" .Values.name) }} {{- $isProd := or (contains "prod" .Values.name) (contains "production" .Values.name) }}
{{- $isTeam := or (contains "team" .Values.name) (contains "shared" .Values.name) }} {{- $isTeam := or (contains "team" .Values.name) (contains "shared" .Values.name) }}
@@ -79,7 +79,7 @@ team: true
{{/* {{/*
Smart MCP sidecar selection based on cluster access Smart MCP sidecar selection based on cluster access
*/}} */}}
{{- define "antigravity.mcpDefaults" -}} {{- define "devcontainer.mcpDefaults" -}}
{{- if eq .Values.clusterAccess "none" }} {{- if eq .Values.clusterAccess "none" }}
{{/* No cluster access - disable k8s/flux sidecars */}} {{/* No cluster access - disable k8s/flux sidecars */}}
kubernetes: kubernetes:
+18 -46
View File
@@ -1,21 +1,21 @@
apiVersion: apps/v1 apiVersion: apps/v1
kind: Deployment kind: Deployment
metadata: metadata:
name: {{ include "antigravity.fullname" . }} name: {{ include "devcontainer.fullname" . }}
labels: labels:
{{- include "antigravity.labels" . | nindent 4 }} {{- include "devcontainer.labels" . | nindent 4 }}
spec: spec:
replicas: 1 replicas: 1
selector: selector:
matchLabels: matchLabels:
{{- include "antigravity.labels" . | nindent 6 }} {{- include "devcontainer.labels" . | nindent 6 }}
template: template:
metadata: metadata:
labels: labels:
{{- include "antigravity.labels" . | nindent 8 }} {{- include "devcontainer.labels" . | nindent 8 }}
spec: spec:
{{- if ne (.Values.clusterAccess | default "none") "none" }} {{- if ne (.Values.clusterAccess | default "none") "none" }}
serviceAccountName: {{ include "antigravity.fullname" . }} serviceAccountName: {{ include "devcontainer.fullname" . }}
{{- end }} {{- end }}
securityContext: securityContext:
fsGroup: 1000 fsGroup: 1000
@@ -81,7 +81,7 @@ spec:
value: {{ .Values.githubRepo | quote }} value: {{ .Values.githubRepo | quote }}
envFrom: envFrom:
- secretRef: - secretRef:
name: {{ include "antigravity.envSecretName" . }} name: {{ include "devcontainer.envSecretName" . }}
optional: true optional: true
resources: resources:
{{- toYaml .Values.resources | nindent 12 }} {{- toYaml .Values.resources | nindent 12 }}
@@ -178,13 +178,13 @@ spec:
- name: HOMEASSISTANT_URL - name: HOMEASSISTANT_URL
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ include "antigravity.envSecretName" . }} name: {{ include "devcontainer.envSecretName" . }}
key: HOMEASSISTANT_URL key: HOMEASSISTANT_URL
optional: true optional: true
- name: HOMEASSISTANT_TOKEN - name: HOMEASSISTANT_TOKEN
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ include "antigravity.envSecretName" . }} name: {{ include "devcontainer.envSecretName" . }}
key: HOMEASSISTANT_TOKEN key: HOMEASSISTANT_TOKEN
optional: true optional: true
livenessProbe: livenessProbe:
@@ -200,43 +200,11 @@ spec:
resources: resources:
{{- toYaml .Values.mcp.sidecars.homeassistant.resources | nindent 12 }} {{- toYaml .Values.mcp.sidecars.homeassistant.resources | nindent 12 }}
{{- end }} {{- end }}
{{- if .Values.mcp.sidecars.github.enabled }}
- name: github-mcp
image: "{{ .Values.mcp.sidecars.github.image.repository }}:{{ .Values.mcp.sidecars.github.image.tag }}"
imagePullPolicy: Always
args:
- --sse
- --port={{ .Values.mcp.sidecars.github.port }}
ports:
- name: github
containerPort: {{ .Values.mcp.sidecars.github.port }}
env:
- name: GITHUB_PERSONAL_ACCESS_TOKEN
valueFrom:
secretKeyRef:
name: {{ include "antigravity.envSecretName" . }}
key: GITHUB_TOKEN
optional: true
livenessProbe:
httpGet:
path: /health
port: {{ .Values.mcp.sidecars.github.port }}
initialDelaySeconds: 10
periodSeconds: 10
readinessProbe:
httpGet:
path: /health
port: {{ .Values.mcp.sidecars.github.port }}
initialDelaySeconds: 5
periodSeconds: 5
resources:
{{- toYaml .Values.mcp.sidecars.github.resources | nindent 12 }}
{{- end }}
{{- if .Values.mcp.sidecars.pgtuner.enabled }} {{- if .Values.mcp.sidecars.pgtuner.enabled }}
- name: pgtuner-mcp - name: pgtuner-mcp
image: "{{ .Values.mcp.sidecars.pgtuner.image.repository }}:{{ .Values.mcp.sidecars.pgtuner.image.tag }}" image: "{{ .Values.mcp.sidecars.pgtuner.image.repository }}:{{ .Values.mcp.sidecars.pgtuner.image.tag }}"
imagePullPolicy: Always imagePullPolicy: Always
command: ["python", "-m", "pgtuner_mcp", "--transport", "sse", "--port", "{{ .Values.mcp.sidecars.pgtuner.port }}"] command: ["python", "-m", "pgtuner_mcp", "--mode", "sse", "--host", "0.0.0.0", "--port", "{{ .Values.mcp.sidecars.pgtuner.port }}"]
ports: ports:
- name: pgtuner - name: pgtuner
containerPort: {{ .Values.mcp.sidecars.pgtuner.port }} containerPort: {{ .Values.mcp.sidecars.pgtuner.port }}
@@ -244,13 +212,13 @@ spec:
- name: DATABASE_URI - name: DATABASE_URI
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ include "antigravity.envSecretName" . }} name: {{ include "devcontainer.envSecretName" . }}
key: DATABASE_URI key: DATABASE_URI
optional: true optional: true
- name: PGTUNER_EXCLUDE_USERIDS - name: PGTUNER_EXCLUDE_USERIDS
valueFrom: valueFrom:
secretKeyRef: secretKeyRef:
name: {{ include "antigravity.envSecretName" . }} name: {{ include "devcontainer.envSecretName" . }}
key: PGTUNER_EXCLUDE_USERIDS key: PGTUNER_EXCLUDE_USERIDS
optional: true optional: true
livenessProbe: livenessProbe:
@@ -270,9 +238,13 @@ spec:
- name: playwright-mcp - name: playwright-mcp
image: "{{ .Values.mcp.sidecars.playwright.image.repository }}:{{ .Values.mcp.sidecars.playwright.image.tag }}" image: "{{ .Values.mcp.sidecars.playwright.image.repository }}:{{ .Values.mcp.sidecars.playwright.image.tag }}"
imagePullPolicy: Always imagePullPolicy: Always
command: ["node"]
args: args:
- --transport - cli.js
- sse - --headless
- --browser
- chromium
- --no-sandbox
- --port - --port
- {{ .Values.mcp.sidecars.playwright.port | quote }} - {{ .Values.mcp.sidecars.playwright.port | quote }}
ports: ports:
@@ -303,4 +275,4 @@ spec:
sizeLimit: {{ .Values.shm.sizeLimit }} sizeLimit: {{ .Values.shm.sizeLimit }}
- name: userhome - name: userhome
persistentVolumeClaim: persistentVolumeClaim:
claimName: {{ include "antigravity.pvcName" . }} claimName: {{ include "devcontainer.pvcName" . }}
+2 -2
View File
@@ -1,9 +1,9 @@
apiVersion: v1 apiVersion: v1
kind: PersistentVolumeClaim kind: PersistentVolumeClaim
metadata: metadata:
name: {{ include "antigravity.pvcName" . }} name: {{ include "devcontainer.pvcName" . }}
labels: labels:
{{- include "antigravity.labels" . | nindent 4 }} {{- include "devcontainer.labels" . | nindent 4 }}
spec: spec:
accessModes: accessModes:
- ReadWriteMany - ReadWriteMany
+2 -2
View File
@@ -1,7 +1,7 @@
{{- $access := .Values.clusterAccess | default "none" }} {{- $access := .Values.clusterAccess | default "none" }}
{{- $name := include "antigravity.fullname" . }} {{- $name := include "devcontainer.fullname" . }}
{{- $ns := .Release.Namespace }} {{- $ns := .Release.Namespace }}
{{- $labels := include "antigravity.labels" . }} {{- $labels := include "devcontainer.labels" . }}
{{- if ne $access "none" }} {{- if ne $access "none" }}
--- ---
+5 -5
View File
@@ -1,22 +1,22 @@
apiVersion: v1 apiVersion: v1
kind: Service kind: Service
metadata: metadata:
name: {{ include "antigravity.fullname" . }} name: {{ include "devcontainer.fullname" . }}
labels: labels:
{{- include "antigravity.labels" . | nindent 4 }} {{- include "devcontainer.labels" . | nindent 4 }}
spec: spec:
ports: ports:
{{- if ne (.Values.ide | default "vscode") "none" }} {{- if ne (.Values.ide.type | default "vscode") "none" }}
- port: 5800 - port: 5800
name: vnc-web name: vnc-web
protocol: TCP protocol: TCP
targetPort: vnc-web targetPort: vnc-web
{{- end }} {{- end }}
{{- if .Values.ssh }} {{- if .Values.ssh.enabled }}
- port: 22 - port: 22
name: ssh name: ssh
protocol: TCP protocol: TCP
targetPort: ssh targetPort: ssh
{{- end }} {{- end }}
selector: selector:
{{- include "antigravity.labels" . | nindent 4 }} {{- include "devcontainer.labels" . | nindent 4 }}
-3
View File
@@ -177,9 +177,6 @@
"homeassistant": { "homeassistant": {
"$ref": "#/$defs/mcpSidecar" "$ref": "#/$defs/mcpSidecar"
}, },
"github": {
"$ref": "#/$defs/mcpSidecar"
},
"pgtuner": { "pgtuner": {
"$ref": "#/$defs/mcpSidecar" "$ref": "#/$defs/mcpSidecar"
}, },
+1 -16
View File
@@ -123,21 +123,6 @@ mcp:
memory: "256Mi" memory: "256Mi"
cpu: "500m" cpu: "500m"
# GitHub API access (DISABLED: archived image)
github:
enabled: false
image:
repository: ghcr.io/modelcontextprotocol/servers/github
tag: latest
port: 8088
resources:
requests:
memory: "64Mi"
cpu: "50m"
limits:
memory: "256Mi"
cpu: "500m"
# PostgreSQL performance tuning # PostgreSQL performance tuning
pgtuner: pgtuner:
enabled: false # Requires DATABASE_URI in secrets enabled: false # Requires DATABASE_URI in secrets
@@ -157,7 +142,7 @@ mcp:
playwright: playwright:
enabled: true enabled: true
image: image:
repository: microsoft/playwright-mcp repository: mcr.microsoft.com/playwright/mcp
tag: latest tag: latest
port: 8086 port: 8086
resources: resources: