Compare commits
11 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 47af7acc5e | |||
| da45415cfe | |||
| 897555b1dc | |||
| df1f4d9b50 | |||
| 2f5a8d65d5 | |||
| 0d8fe1ec64 | |||
| 00638d372c | |||
| 31ec139a8a | |||
| 71c6ca70cc | |||
| b9c30b8e4d | |||
| 794de6d0e5 |
@@ -62,3 +62,80 @@ jobs:
|
|||||||
cache-from: type=gha
|
cache-from: type=gha
|
||||||
cache-to: type=gha,mode=max
|
cache-to: type=gha,mode=max
|
||||||
platforms: linux/amd64
|
platforms: linux/amd64
|
||||||
|
|
||||||
|
release:
|
||||||
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
|
needs: build-and-push
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
packages: write
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v6
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Helm
|
||||||
|
uses: azure/setup-helm@v4
|
||||||
|
|
||||||
|
- name: Extract version from tag
|
||||||
|
id: version
|
||||||
|
run: |
|
||||||
|
TAG=${GITHUB_REF#refs/tags/}
|
||||||
|
VERSION=${TAG#v}
|
||||||
|
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
||||||
|
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
||||||
|
echo "🚀 Creating release for ${TAG}"
|
||||||
|
|
||||||
|
- name: Package and Push Helm Chart
|
||||||
|
run: |
|
||||||
|
helm registry login ghcr.io \
|
||||||
|
--username ${{ github.actor }} \
|
||||||
|
--password ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
helm package chart/
|
||||||
|
helm push devcontainer-${{ steps.version.outputs.version }}.tgz oci://ghcr.io/cpfarhood/charts
|
||||||
|
|
||||||
|
- name: Generate Release Notes
|
||||||
|
id: notes
|
||||||
|
run: |
|
||||||
|
# Get commits since last tag
|
||||||
|
PREV_TAG=$(git describe --tags --abbrev=0 ${{ steps.version.outputs.tag }}^ 2>/dev/null || echo "")
|
||||||
|
if [ -z "$PREV_TAG" ]; then
|
||||||
|
COMMITS=$(git log --pretty=format:"- %s (%h)" ${{ steps.version.outputs.tag }})
|
||||||
|
else
|
||||||
|
COMMITS=$(git log --pretty=format:"- %s (%h)" ${PREV_TAG}..${{ steps.version.outputs.tag }})
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat << EOF > release-notes.md
|
||||||
|
## 🚀 Release ${{ steps.version.outputs.version }}
|
||||||
|
|
||||||
|
### Changes
|
||||||
|
${COMMITS}
|
||||||
|
|
||||||
|
### Docker Image
|
||||||
|
\`\`\`bash
|
||||||
|
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.tag }}
|
||||||
|
\`\`\`
|
||||||
|
|
||||||
|
### Helm Chart
|
||||||
|
\`\`\`bash
|
||||||
|
helm install devcontainer oci://ghcr.io/cpfarhood/charts/devcontainer --version ${{ steps.version.outputs.version }}
|
||||||
|
\`\`\`
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "notes<<EOF" >> $GITHUB_OUTPUT
|
||||||
|
cat release-notes.md >> $GITHUB_OUTPUT
|
||||||
|
echo "EOF" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create GitHub Release
|
||||||
|
uses: actions/create-release@v1
|
||||||
|
env:
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
with:
|
||||||
|
tag_name: ${{ steps.version.outputs.tag }}
|
||||||
|
release_name: Release ${{ steps.version.outputs.tag }}
|
||||||
|
body: ${{ steps.notes.outputs.notes }}
|
||||||
|
draft: false
|
||||||
|
prerelease: false
|
||||||
|
|||||||
@@ -1,86 +0,0 @@
|
|||||||
name: Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
tags:
|
|
||||||
- 'v*'
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: ghcr.io
|
|
||||||
IMAGE_NAME: ${{ github.repository }}
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
|
|
||||||
- name: Set up Helm
|
|
||||||
uses: azure/setup-helm@v4
|
|
||||||
|
|
||||||
- name: Extract version from tag
|
|
||||||
id: version
|
|
||||||
run: |
|
|
||||||
TAG=${GITHUB_REF#refs/tags/}
|
|
||||||
VERSION=${TAG#v}
|
|
||||||
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
|
||||||
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
|
||||||
echo "🚀 Creating release for ${TAG}"
|
|
||||||
|
|
||||||
- name: Package and Push Helm Chart
|
|
||||||
run: |
|
|
||||||
helm registry login ghcr.io \
|
|
||||||
--username ${{ github.actor }} \
|
|
||||||
--password ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
helm package chart/
|
|
||||||
helm push devcontainer-${{ steps.version.outputs.version }}.tgz oci://ghcr.io/cpfarhood/charts
|
|
||||||
|
|
||||||
- name: Generate Release Notes
|
|
||||||
id: notes
|
|
||||||
run: |
|
|
||||||
# Get commits since last tag
|
|
||||||
PREV_TAG=$(git describe --tags --abbrev=0 ${{ steps.version.outputs.tag }}^ 2>/dev/null || echo "")
|
|
||||||
if [ -z "$PREV_TAG" ]; then
|
|
||||||
COMMITS=$(git log --pretty=format:"- %s (%h)" ${{ steps.version.outputs.tag }})
|
|
||||||
else
|
|
||||||
COMMITS=$(git log --pretty=format:"- %s (%h)" ${PREV_TAG}..${{ steps.version.outputs.tag }})
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat << EOF > release-notes.md
|
|
||||||
## 🚀 Release ${{ steps.version.outputs.version }}
|
|
||||||
|
|
||||||
### Changes
|
|
||||||
${COMMITS}
|
|
||||||
|
|
||||||
### Docker Image
|
|
||||||
\`\`\`bash
|
|
||||||
docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.tag }}
|
|
||||||
\`\`\`
|
|
||||||
|
|
||||||
### Helm Chart
|
|
||||||
\`\`\`bash
|
|
||||||
helm install devcontainer oci://ghcr.io/cpfarhood/charts/devcontainer --version ${{ steps.version.outputs.version }}
|
|
||||||
\`\`\`
|
|
||||||
EOF
|
|
||||||
|
|
||||||
echo "notes<<EOF" >> $GITHUB_OUTPUT
|
|
||||||
cat release-notes.md >> $GITHUB_OUTPUT
|
|
||||||
echo "EOF" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Create GitHub Release
|
|
||||||
uses: actions/create-release@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
tag_name: ${{ steps.version.outputs.tag }}
|
|
||||||
release_name: Release ${{ steps.version.outputs.tag }}
|
|
||||||
body: ${{ steps.notes.outputs.notes }}
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
@@ -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:
|
||||||
@@ -179,8 +174,7 @@ helm install my-devcontainer ./chart -f custom-values.yaml
|
|||||||
|
|
||||||
### CI/CD
|
### CI/CD
|
||||||
|
|
||||||
- **`build-and-push.yaml`** — Builds and pushes to GHCR on every push to `main`, version tags (`v*`), and PRs. Tags: `latest` (main), semver, branch name, commit SHA.
|
- **`build-and-push.yaml`** — Builds and pushes to GHCR on every push to `main`, version tags (`v*`), and PRs. For version tags, also creates GitHub Release with Helm chart after Docker build completes. Tags: `latest` (main), semver, branch name, commit SHA.
|
||||||
- **`release.yaml`** — Creates a GitHub Release with docker pull instructions when a version tag is pushed.
|
|
||||||
- **`dependabot.yml`** — Weekly updates for GitHub Actions and Docker base image.
|
- **`dependabot.yml`** — Weekly updates for GitHub Actions and Docker base image.
|
||||||
|
|
||||||
Image registry: `ghcr.io/cpfarhood/devcontainer`
|
Image registry: `ghcr.io/cpfarhood/devcontainer`
|
||||||
|
|||||||
@@ -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
@@ -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.4
|
||||||
appVersion: "latest"
|
appVersion: "latest"
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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,15 @@ 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
|
||||||
|
- --host
|
||||||
|
- 0.0.0.0
|
||||||
- --port
|
- --port
|
||||||
- {{ .Values.mcp.sidecars.playwright.port | quote }}
|
- {{ .Values.mcp.sidecars.playwright.port | quote }}
|
||||||
ports:
|
ports:
|
||||||
@@ -303,4 +277,4 @@ spec:
|
|||||||
sizeLimit: {{ .Values.shm.sizeLimit }}
|
sizeLimit: {{ .Values.shm.sizeLimit }}
|
||||||
- name: userhome
|
- name: userhome
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: {{ include "antigravity.pvcName" . }}
|
claimName: {{ include "devcontainer.pvcName" . }}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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" }}
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -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 }}
|
||||||
|
|||||||
@@ -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
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user