Compare commits

...

13 Commits

Author SHA1 Message Date
Chris Farhood 1b0fd73d9b Merge pull request #55 from farhoodliquor/fix/init-home-before-git-config
fix(init-repo): create $HOME before git config on fresh volumes
2026-03-18 23:28:50 -04:00
Chris Farhood ed0ca39976 Merge pull request #57 from farhoodliquor/fix/update-cpfarhood-to-farhoodliquor
fix: replace stale cpfarhood references with farhoodliquor
2026-03-18 23:25:48 -04:00
Nick "Goose" Bradshaw 55c2afaeb1 fix: replace all stale cpfarhood references with farhoodliquor
After repo transfer from cpfarhood to farhoodliquor org, update all
references across docs, CI workflows, Makefile, Helm chart configs,
and memory files.

Closes #56

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 02:13:40 +00:00
DevContainer User d3365a71f6 feat: bump dependencies and add kubectl, k9s, Flux CLI
Update pinned versions: Node.js 22→24 LTS, Helm 3.17→4.1, Go 1.23→1.26.
Add kubectl, k9s, and Flux CLI to the container image.
Update MCP sidecars: kubernetes v0.0.59, flux-operator v0.45.0,
mcp-helm v1.3.3, homeassistant 7.1.0.
Bump chart version to 2.7.0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 15:00:54 +00:00
DevContainer User 70e74ab2d2 fix(init-repo): create $HOME before git config on fresh volumes
git config --global writes to $HOME/.gitconfig, but on a fresh PVC
$HOME (/config/userdata) doesn't exist yet. This causes the script to
fail with "could not lock config file" and exit due to set -e, leaving
the container in a crash loop with a black screen.

Move the mkdir -p $HOME + chown to the top of the script so it runs
before any git operations.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 16:47:30 +00:00
github-actions[bot] 673554b393 chore(release): 2.6.0 [skip ci] 2026-03-11 12:05:49 +00:00
DevContainer User 609752e7dc fix: use Eclipse snapshots API for jdtls download
The jdtls GitHub repo has no release assets and the Eclipse milestones
directory listing is JS-rendered. Use snapshots/latest.txt which provides
a reliable tarball filename for automated downloads.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 12:05:21 +00:00
github-actions[bot] fcd959ae1f chore(release): 2.5.0 [skip ci] 2026-03-11 11:57:24 +00:00
DevContainer User 149120ff6c feat: add LSP servers for Claude Code language intelligence
Install pyright, typescript-language-server, gopls, clangd,
rust-analyzer, lua-language-server, jdtls, kotlin-language-server,
and intelephense so Claude Code can provide rich language support.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 11:57:00 +00:00
DevContainer User 50770b6e5f feat: add Node.js 22 LTS to container image
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:42:49 +00:00
DevContainer User 01d5ebbdb8 perf: cache base image pull only, rebuild all our layers
ARG CACHE_BUST placed immediately after FROM so only the base image
layer is served from GHA cache. All RUN/ENV/COPY layers are rebuilt
every build via CACHE_BUST=$GITHUB_SHA.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 16:51:22 +00:00
DevContainer User d5338ab836 Revert "perf: enable GHA cache for base image layers in Docker builds"
This reverts commit a378c0f913.
2026-03-03 16:48:47 +00:00
DevContainer User a378c0f913 perf: enable GHA cache for base image layers in Docker builds
Add ARG CACHE_BUST boundary in Dockerfile before curl-latest tool
installs. Layers above (base image, apt, Chrome) are cached via GHA
cache; layers below are rebuilt every build via CACHE_BUST=$GITHUB_SHA.
Replaces the blanket no-cache approach that also prevented caching the
expensive base image.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 16:48:05 +00:00
15 changed files with 124 additions and 40 deletions
+3 -3
View File
@@ -4,7 +4,7 @@
### 1️⃣ For Releases → **Unified Release**
Use this for all version releases:
1. Go to [Actions → Unified Release](https://github.com/cpfarhood/devcontainer/actions/workflows/release-unified.yaml)
1. Go to [Actions → Unified Release](https://github.com/farhoodliquor/devcontainer/actions/workflows/release-unified.yaml)
2. Click "Run workflow"
3. Either:
- Enter specific version (e.g., `0.2.1`), OR
@@ -15,12 +15,12 @@ Use this for all version releases:
- ✅ Updates chart version
- ✅ Creates git tag
- ✅ Builds Docker image with all proper tags
- ✅ Publishes Helm chart to GitHub Pages (`https://cpfarhood.github.io/devcontainer`)
- ✅ Publishes Helm chart to GitHub Pages (`https://farhoodliquor.github.io/devcontainer`)
- ✅ Creates GitHub Release with changelog
### 2️⃣ For Quick Fixes → **Quick Fix Build**
Use this for emergency fixes without version changes:
1. Go to [Actions → Quick Fix Build](https://github.com/cpfarhood/devcontainer/actions/workflows/quick-fix.yaml)
1. Go to [Actions → Quick Fix Build](https://github.com/farhoodliquor/devcontainer/actions/workflows/quick-fix.yaml)
2. Click "Run workflow"
3. Enter tag (default: `latest`)
4. Click "Run workflow"
+3 -1
View File
@@ -56,5 +56,7 @@ jobs:
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
no-cache: true
build-args: CACHE_BUST=${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
platforms: linux/amd64
+7 -5
View File
@@ -96,7 +96,9 @@ jobs:
with:
context: .
push: true
no-cache: true
build-args: CACHE_BUST=${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
tags: |
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.tag }}
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}
@@ -128,7 +130,7 @@ jobs:
<body>
<h1>Dev Container Helm Chart Repository</h1>
<p>Add this repository to Helm:</p>
<pre>helm repo add devcontainer https://cpfarhood.github.io/devcontainer</pre>
<pre>helm repo add devcontainer https://farhoodliquor.github.io/devcontainer</pre>
<p>Install the chart:</p>
<pre>helm install mydev devcontainer/devcontainer --set name=mydev</pre>
</body>
@@ -142,9 +144,9 @@ jobs:
# Copy chart package and rebuild index
cp "$CHART_TGZ" "$PAGES_DIR/"
if [ -f "$PAGES_DIR/index.yaml" ]; then
helm repo index "$PAGES_DIR" --url https://cpfarhood.github.io/devcontainer --merge "$PAGES_DIR/index.yaml"
helm repo index "$PAGES_DIR" --url https://farhoodliquor.github.io/devcontainer --merge "$PAGES_DIR/index.yaml"
else
helm repo index "$PAGES_DIR" --url https://cpfarhood.github.io/devcontainer
helm repo index "$PAGES_DIR" --url https://farhoodliquor.github.io/devcontainer
fi
# Commit and push
@@ -179,7 +181,7 @@ jobs:
### Helm Chart
\`\`\`bash
helm repo add devcontainer https://cpfarhood.github.io/devcontainer
helm repo add devcontainer https://farhoodliquor.github.io/devcontainer
helm repo update
helm install mydev devcontainer/devcontainer --version ${VERSION} --set name=mydev
\`\`\`
+1 -1
View File
@@ -95,4 +95,4 @@ Use this template for future releases:
- Vulnerability fixes
```
[Unreleased]: https://github.com/cpfarhood/devcontainer/compare/v1.0.0...HEAD
[Unreleased]: https://github.com/farhoodliquor/devcontainer/compare/v1.0.0...HEAD
+5 -5
View File
@@ -21,7 +21,7 @@ The stack is primarily **Bash scripts + YAML** — there is no Node.js package,
```bash
make build # Build Docker image
make build REGISTRY=ghcr.io/myuser IMAGE_TAG=v1.0 # Custom registry/tag
docker build -t ghcr.io/cpfarhood/devcontainer:latest . # Direct build
docker build -t ghcr.io/farhoodliquor/devcontainer:latest . # Direct build
```
### Running Locally
@@ -70,7 +70,7 @@ Container start
| File | Purpose |
|------|---------|
| `Dockerfile` | Image definition — installs Chrome, VSCode, Helm, gh CLI, kubeseal, Claude Code, OpenCode, Crush; creates non-root user (UID 1000) |
| `Dockerfile` | Image definition — installs Chrome, VSCode, Helm, gh CLI, kubectl, k9s, Flux CLI, kubeseal, Claude Code, OpenCode, Crush, LSP servers (pyright, typescript-language-server, gopls, clangd, rust-analyzer, lua-language-server, jdtls, kotlin-language-server, intelephense); creates non-root user (UID 1000) |
| `scripts/init-repo.sh` | Configures git credentials, clones GitHub repo(s), generates multi-root workspace file |
| `scripts/startapp.sh` | Calls init-repo.sh then opens VSCode in the workspace |
| `chart/` | Helm chart for Kubernetes deployment |
@@ -197,11 +197,11 @@ helm install my-devcontainer ./chart -f custom-values.yaml
### 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.
- **`release-unified.yaml`** — Manual release workflow: bumps chart version, builds Docker image, publishes Helm chart to GitHub Pages (`https://cpfarhood.github.io/devcontainer`), and creates GitHub Release.
- **`release-unified.yaml`** — Manual release workflow: bumps chart version, builds Docker image, publishes Helm chart to GitHub Pages (`https://farhoodliquor.github.io/devcontainer`), and creates GitHub Release.
- **`dependabot.yml`** — Weekly updates for GitHub Actions and Docker base image.
Image registry: `ghcr.io/cpfarhood/devcontainer`
Helm repo: `https://cpfarhood.github.io/devcontainer`
Image registry: `ghcr.io/farhoodliquor/devcontainer`
Helm repo: `https://farhoodliquor.github.io/devcontainer`
## Kubernetes Notes
+3 -3
View File
@@ -15,7 +15,7 @@ This guide provides step-by-step instructions for deploying the Antigravity Dev
### 1. Clone the Repository
```bash
git clone https://github.com/cpfarhood/devcontainer.git
git clone https://github.com/farhoodliquor/devcontainer.git
cd devcontainer
```
@@ -433,5 +433,5 @@ kubectl run backup --image=busybox --restart=Never --rm -i --tty \
## Support
For issues or questions:
- GitHub Issues: https://github.com/cpfarhood/devcontainer/issues
- Documentation: https://github.com/cpfarhood/devcontainer
- GitHub Issues: https://github.com/farhoodliquor/devcontainer/issues
- Documentation: https://github.com/farhoodliquor/devcontainer
+78 -1
View File
@@ -1,5 +1,8 @@
FROM jlesage/baseimage-gui:ubuntu-22.04-v4
# Bust cache for all layers below (base image pull is still cached)
ARG CACHE_BUST
# Set environment variables
ENV APP_NAME="Dev Container" \
KEEP_APP_RUNNING=1 \
@@ -56,6 +59,13 @@ exec /usr/bin/google-chrome-stable \\\n\
"$@"\n' > /usr/local/bin/google-chrome && \
chmod +x /usr/local/bin/google-chrome
# Install Node.js LTS via NodeSource
ARG NODE_MAJOR=24
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_MAJOR}.x | bash - && \
apt-get install -y nodejs && \
rm -rf /var/lib/apt/lists/* && \
node --version && npm --version
# Install Claude Code native binary (npm wrapper breaks remote control)
RUN curl -fsSL https://claude.ai/install.sh | bash && \
cp /root/.local/bin/claude /usr/local/bin/claude && \
@@ -81,7 +91,7 @@ RUN CRUSH_VERSION=$(curl -sL https://api.github.com/repos/charmbracelet/crush/re
rm -rf /tmp/crush*
# Install Helm CLI for Kubernetes chart management
ARG HELM_VERSION=3.17.1
ARG HELM_VERSION=4.1.3
RUN curl -fsSL "https://get.helm.sh/helm-v${HELM_VERSION}-linux-amd64.tar.gz" | \
tar -xz --strip-components=1 -C /usr/local/bin linux-amd64/helm && \
chmod +x /usr/local/bin/helm
@@ -107,6 +117,73 @@ RUN KUBESEAL_VERSION=$(curl -sL https://api.github.com/repos/bitnami-labs/sealed
tar -xz -C /usr/local/bin kubeseal && \
chmod +x /usr/local/bin/kubeseal
# Install kubectl CLI for Kubernetes cluster management
RUN KUBECTL_VERSION=$(curl -sL https://dl.k8s.io/release/stable.txt) && \
curl -fsSL "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/amd64/kubectl" -o /usr/local/bin/kubectl && \
chmod +x /usr/local/bin/kubectl
# Install k9s terminal UI for Kubernetes
RUN K9S_VERSION=$(curl -sL https://api.github.com/repos/derailed/k9s/releases/latest | jq -r '.tag_name') && \
curl -fsSL "https://github.com/derailed/k9s/releases/download/${K9S_VERSION}/k9s_Linux_amd64.tar.gz" | \
tar -xz -C /usr/local/bin k9s && \
chmod +x /usr/local/bin/k9s
# Install Flux CLI for GitOps operations
RUN FLUX_VERSION=$(curl -sL https://api.github.com/repos/fluxcd/flux2/releases/latest | jq -r '.tag_name' | sed 's/^v//') && \
curl -fsSL "https://github.com/fluxcd/flux2/releases/download/v${FLUX_VERSION}/flux_${FLUX_VERSION}_linux_amd64.tar.gz" | \
tar -xz -C /usr/local/bin flux && \
chmod +x /usr/local/bin/flux
# ── LSP servers for Claude Code language intelligence ──
# npm-based LSP servers: Python (pyright), TypeScript/JavaScript, PHP
RUN npm install -g pyright typescript-language-server typescript intelephense
# Install Go runtime and gopls LSP server
ARG GO_VERSION=1.26.1
RUN curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-amd64.tar.gz" | tar -xz -C /usr/local && \
/usr/local/go/bin/go install golang.org/x/tools/gopls@latest && \
mv /root/go/bin/gopls /usr/local/bin/gopls && \
rm -rf /root/go
ENV PATH="/usr/local/go/bin:${PATH}"
# Install clangd LSP server (C/C++)
RUN apt-get update && \
apt-get install -y clangd && \
rm -rf /var/lib/apt/lists/*
# Install rust-analyzer LSP server (Rust) — standalone binary, no full toolchain needed
RUN RUST_ANALYZER_VERSION=$(curl -sL https://api.github.com/repos/rust-lang/rust-analyzer/releases/latest | jq -r '.tag_name') && \
curl -fsSL "https://github.com/rust-lang/rust-analyzer/releases/download/${RUST_ANALYZER_VERSION}/rust-analyzer-x86_64-unknown-linux-gnu.gz" | \
gunzip > /usr/local/bin/rust-analyzer && \
chmod +x /usr/local/bin/rust-analyzer
# Install lua-language-server (Lua)
RUN LUA_LS_VERSION=$(curl -sL https://api.github.com/repos/LuaLS/lua-language-server/releases/latest | jq -r '.tag_name') && \
mkdir -p /opt/lua-language-server && \
curl -fsSL "https://github.com/LuaLS/lua-language-server/releases/download/${LUA_LS_VERSION}/lua-language-server-${LUA_LS_VERSION}-linux-x64.tar.gz" | \
tar -xz -C /opt/lua-language-server && \
ln -s /opt/lua-language-server/bin/lua-language-server /usr/local/bin/lua-language-server
# Install JDK for Java/Kotlin LSP servers
RUN apt-get update && \
apt-get install -y openjdk-17-jdk-headless && \
rm -rf /var/lib/apt/lists/*
# Install kotlin-language-server
RUN KLS_VERSION=$(curl -sL https://api.github.com/repos/fwcd/kotlin-language-server/releases/latest | jq -r '.tag_name') && \
curl -fsSL "https://github.com/fwcd/kotlin-language-server/releases/download/${KLS_VERSION}/server.zip" -o /tmp/kls.zip && \
unzip -o /tmp/kls.zip -d /opt/kotlin-language-server && \
ln -s /opt/kotlin-language-server/server/bin/kotlin-language-server /usr/local/bin/kotlin-language-server && \
rm /tmp/kls.zip
# Install jdtls (Java LSP) — Eclipse JDT Language Server
RUN JDTLS_TARBALL=$(curl -sL https://download.eclipse.org/jdtls/snapshots/latest.txt) && \
mkdir -p /opt/jdtls && \
curl -fsSL "https://download.eclipse.org/jdtls/snapshots/${JDTLS_TARBALL}" | tar -xz -C /opt/jdtls && \
printf '#!/bin/bash\nexec java -Declipse.application=org.eclipse.jdt.ls.core.id1 -Dosgi.bundles.defaultStartLevel=4 -Declipse.product=org.eclipse.jdt.ls.core.product -jar /opt/jdtls/plugins/org.eclipse.equinox.launcher_*.jar -configuration /opt/jdtls/config_linux "$@"\n' > /usr/local/bin/jdtls && \
chmod +x /usr/local/bin/jdtls
# Install VSCode (using Microsoft's current recommended setup)
RUN wget -qO- https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > /tmp/microsoft.gpg && \
install -D -o root -g root -m 644 /tmp/microsoft.gpg /usr/share/keyrings/microsoft.gpg && \
+2 -2
View File
@@ -1,7 +1,7 @@
.PHONY: build push run stop clean help
# Variables
REGISTRY ?= ghcr.io/cpfarhood
REGISTRY ?= ghcr.io/farhoodliquor
IMAGE_NAME ?= devcontainer
IMAGE_TAG ?= latest
FULL_IMAGE = $(REGISTRY)/$(IMAGE_NAME):$(IMAGE_TAG)
@@ -99,7 +99,7 @@ help:
@echo " helm-port-forward - Port forward to localhost"
@echo ""
@echo "Variables:"
@echo " REGISTRY - Docker registry (default: ghcr.io/cpfarhood)"
@echo " REGISTRY - Docker registry (default: ghcr.io/farhoodliquor)"
@echo " IMAGE_NAME - Image name (default: devcontainer)"
@echo " IMAGE_TAG - Image tag (default: latest)"
@echo " RELEASE_NAME - Helm release name (default: mydev)"
+6 -6
View File
@@ -1,6 +1,6 @@
# Dev Container
![Build and Push](https://github.com/cpfarhood/devcontainer/actions/workflows/build-and-push.yaml/badge.svg)
![Build and Push](https://github.com/farhoodliquor/devcontainer/actions/workflows/build-and-push.yaml/badge.svg)
A containerized cloud development environment with web-based GUI access, featuring:
- **VSCode or Google Antigravity** via browser-based VNC (port 5800)
@@ -18,7 +18,7 @@ A containerized cloud development environment with web-based GUI access, featuri
```bash
# Add the Helm repository
helm repo add devcontainer https://cpfarhood.github.io/devcontainer
helm repo add devcontainer https://farhoodliquor.github.io/devcontainer
helm repo update
# Deploy with one command
@@ -131,7 +131,7 @@ The Helm chart uses a logical organization with these main sections:
| `ide.type` | `vscode` | IDE to launch — `vscode`, `antigravity`, or `none` (see below) |
| `ssh.enabled` | `false` | Also start an OpenSSH server on port 22 (additive, any IDE) |
| `fileManager.enabled` | `false` | Enable the built-in web file manager for upload/download |
| `image.repository` | `ghcr.io/cpfarhood/devcontainer` | Container image |
| `image.repository` | `ghcr.io/farhoodliquor/devcontainer` | Container image |
| `image.tag` | `latest` | Image tag |
### IDE choice
@@ -418,7 +418,7 @@ docker run -d \
-e GITHUB_TOKEN="ghp_..." \
-e VNC_PASSWORD="changeme" \
-v $(pwd)/home:/home \
ghcr.io/cpfarhood/devcontainer:latest
ghcr.io/farhoodliquor/devcontainer:latest
```
---
@@ -426,8 +426,8 @@ docker run -d \
## Building
```bash
docker build -t ghcr.io/cpfarhood/devcontainer:latest .
docker push ghcr.io/cpfarhood/devcontainer:latest
docker build -t ghcr.io/farhoodliquor/devcontainer:latest .
docker push ghcr.io/farhoodliquor/devcontainer:latest
```
The image is also built and pushed automatically by CI on every push to `main` and on version tags (`v*`).
+1 -1
View File
@@ -37,7 +37,7 @@ Complete reference for all configurable values in the Antigravity Dev Container
### image.repository
- **Type:** String
- **Default:** `ghcr.io/cpfarhood/devcontainer`
- **Default:** `ghcr.io/farhoodliquor/devcontainer`
- **Description:** Container image repository
### image.tag
+1 -1
View File
@@ -2,7 +2,7 @@ apiVersion: v2
name: devcontainer
description: Dev Container with AI coding agents and MCP sidecars
type: application
version: 2.4.0
version: 2.7.0
appVersion: "latest"
keywords:
- development
+1 -1
View File
@@ -1,6 +1,6 @@
{
"$schema": "http://json-schema.org/draft-07/schema#",
"$id": "https://github.com/cpfarhood/devcontainer/chart/values.schema.json",
"$id": "https://github.com/farhoodliquor/devcontainer/chart/values.schema.json",
"title": "Dev Container Helm Chart Values Schema",
"description": "Schema for validating values.yaml in the Dev Container Helm chart",
"type": "object",
+5 -5
View File
@@ -7,7 +7,7 @@ name: ""
# Container image configuration
image:
repository: ghcr.io/cpfarhood/devcontainer
repository: ghcr.io/farhoodliquor/devcontainer
tag: latest
pullPolicy: Always
@@ -93,7 +93,7 @@ mcp:
enabled: true
image:
repository: quay.io/containers/kubernetes_mcp_server
tag: v0.0.57
tag: v0.0.59
port: 8080
resources:
requests:
@@ -108,7 +108,7 @@ mcp:
enabled: true
image:
repository: ghcr.io/controlplaneio-fluxcd/flux-operator-mcp
tag: v0.41.1
tag: v0.45.0
port: 8081
resources:
requests:
@@ -124,7 +124,7 @@ mcp:
enabled: false
image:
repository: ghcr.io/zekker6/mcp-helm
tag: v1.3.1
tag: v1.3.3
port: 8012
resources:
requests:
@@ -139,7 +139,7 @@ mcp:
enabled: false # Requires HOMEASSISTANT_URL and HOMEASSISTANT_TOKEN
image:
repository: ghcr.io/homeassistant-ai/ha-mcp
tag: "6.7.1"
tag: "7.1.0"
port: 8087
resources:
requests:
+1 -1
View File
@@ -1,7 +1,7 @@
# Antigravity Dev Container - Session Notes
## Key Architecture Facts
- Image: `ghcr.io/cpfarhood/devcontainer:latest` (repo name is `devcontainer`, not `antigravity`)
- Image: `ghcr.io/farhoodliquor/devcontainer:latest` (repo name is `devcontainer`, not `antigravity`)
- Deployed via Helm chart (`chart/`), not kustomize anymore
- Service must NOT be headless (`clusterIP: None`) — Cilium gateway can't route to headless services
- `SECURE_CONNECTION=0` — TLS is terminated at the gateway, not the app
+7 -4
View File
@@ -4,6 +4,13 @@ set -e
echo "=== Repository Initialization ==="
# Ensure home directory exists on the PVC before any git operations
# (git config --global writes to $HOME/.gitconfig, which fails on a fresh volume)
RUN_UID="${USER_ID:-1000}"
RUN_GID="${GROUP_ID:-1000}"
mkdir -p "$HOME"
chown "$RUN_UID:$RUN_GID" "$HOME"
# Set up basic git configuration
echo "Configuring git user settings..."
# Use environment variables if provided, otherwise use defaults
@@ -142,10 +149,6 @@ if [ ${#REPOS[@]} -eq 0 ]; then
chown -R "$RUN_UID:$RUN_GID" "$WORKSPACE_DIR"
fi
# Ensure home directory exists on the PVC (may be absent on a fresh volume)
mkdir -p "$HOME"
chown "$RUN_UID:$RUN_GID" "$HOME"
# Seed Claude Code settings if missing (disable auto-updater in Docker)
if [ ! -f "$HOME/.claude/settings.json" ]; then
mkdir -p "$HOME/.claude"