Commit graph

59 commits

Author SHA1 Message Date
docker-claude
526ff6dc2e Revert "feat: remove MCP servers"
Some checks failed
Build images / check-docker (push) Successful in 1s
Build images / scan (push) Failing after 1m42s
Build images / build-and-push (push) Has been skipped
This reverts commit a9ff78b494.
2026-04-20 15:32:29 +02:00
docker-claude
a9ff78b494 feat: remove MCP servers
Remove all four MCP server packages from the Dockerfile along with their
associated env vars (docker-compose.yml, .env.example) and egress allowlist
entries (squid.conf).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 15:32:05 +02:00
docker-claude
eb5f240d3e fix(docker): patch transitive CVEs in MCP server dependencies
MCP servers bundle their own copies of vulnerable packages. After global
install, patch nested node_modules in each server directly:
- @modelcontextprotocol/sdk 1.0.1 → 1.25.2 (CVE-2025-66414, CVE-2026-0621)
- picomatch 4.0.3 → 4.0.4 (CVE-2026-33671)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 15:28:20 +02:00
docker-claude
53325c4fcd stuff
Some checks failed
Build images / check-docker (push) Successful in 1s
Build images / scan (push) Failing after 55s
Build images / build-and-push (push) Has been skipped
2026-04-20 15:17:58 +02:00
docker-claude
a566b463a9 docs: update node:20-alpine references to node:24-alpine
Some checks failed
Build images / build-and-push (push) Blocked by required conditions
Build images / check-docker (push) Successful in 1s
Build images / scan (push) Has been cancelled
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 15:17:15 +02:00
docker-claude
ec329ca616 chore(docker): upgrade base image to node:24-alpine (LTS)
Node 24 (Krypton) is the current LTS release.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 15:16:52 +02:00
docker-claude
e056e5c006 chore(docker): pin npm to 11.12.1
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 15:15:51 +02:00
docker-claude
19c59a2fb3 fix(docker): upgrade npm to remediate 11 HIGH CVEs in bundled dependencies
All findings are in npm's own bundled packages (cross-spawn, glob,
minimatch, tar). Upgrading npm to latest pulls in the patched versions:
- cross-spawn ≥7.0.5 (CVE-2024-21538)
- glob ≥10.5.0 (CVE-2025-64756)
- minimatch ≥9.0.6 (CVE-2026-26996, CVE-2026-27903, CVE-2026-27904)
- tar ≥7.5.11 (CVE-2026-23745, CVE-2026-23950, CVE-2026-24842,
               CVE-2026-26960, CVE-2026-29786, CVE-2026-31802)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 15:14:58 +02:00
docker-claude
484e0fecb8 revert(docker): switch back to node:20-alpine base image
Some checks failed
Build images / check-docker (push) Successful in 0s
Build images / scan (push) Failing after 57s
Build images / build-and-push (push) Has been skipped
dhi.io is unreachable on the company network, blocking apk during build.
Trivy scanning in CI provides vulnerability coverage in the meantime.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 14:28:45 +02:00
docker-claude
89a3d3dae5 security: use dhi image for the proxy as well
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / scan (push) Failing after 1m26s
Build images / build-and-push (push) Has been skipped
2026-04-16 22:52:33 +02:00
docker-claude
edeae9dc4b security: use dhi image for nodejs
Some checks failed
Build images / check-docker (push) Successful in 4s
Build images / scan (push) Failing after 27s
Build images / build-and-push (push) Has been skipped
2026-04-16 22:46:52 +02:00
docker-claude
94dadbbe8e chore(ci): pull trivy from registry mirror
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / scan (push) Failing after 31s
Build images / build-and-push (push) Has been skipped
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:04:24 +02:00
docker-claude
4a0f2e90fc fix(ci): replace trivy-action with docker run to fix missing binary
trivy-action@v0.35.0 expects trivy pre-installed in the runner environment.
Switch to docker run aquasec/trivy:0.69.3 which uses the Docker daemon
already available in the pipeline. Pin version via TRIVY_IMAGE env var.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 12:03:17 +02:00
docker-claude
e6b46087b3 feat(ci): generate SBOMs in scan job and attach attestations on push
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / scan (push) Failing after 46s
Build images / build-and-push (push) Has been skipped
Scan job: run Trivy before the security gate to emit a CycloneDX SBOM
for each image (exit-code 0), then run the HIGH/CRITICAL gate as before.
SBOMs are uploaded as a pipeline artifact (90-day retention) with
if: always() so they're available even when the security gate fails.

Build job: add sbom: true and provenance: true to both build-push steps
so BuildKit attaches SBOM and provenance attestations to the image
manifest in the registry.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:59:24 +02:00
docker-claude
530def213b feat(ci): add Trivy container security scanning before push
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / scan (push) Failing after 1m28s
Build images / build-and-push (push) Has been skipped
Add a scan job between check-docker and build-and-push. Builds each image
locally (no push, current platform only), runs Trivy v0.35.0 against it,
and fails on unfixed HIGH/CRITICAL CVEs. build-and-push only runs if both
scans pass.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 11:53:16 +02:00
docker-claude
cf50570733 docs(claude.md): sync with current project state
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 5m4s
Update architecture (remove webui reference), file structure (add setup.sh,
launch.sh, launch.bat, hooks/), auth (credentials now in ~/.claude), and
development workflow (use setup.sh instead of manual .env copy).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:17:49 +02:00
docker-claude
3aff92bd41 chore: replace Docker Desktop references with open-source alternatives
Docker Desktop requires a commercial licence for business use. Replace all
references with free alternatives:
- macOS: Rancher Desktop (GUI) or Colima (CLI)
- Linux: Docker Engine CE (no Desktop needed at all)
- Windows: Rancher Desktop or WSL2 + Docker Engine

setup.sh detects the OS and shows platform-specific install instructions.
claude.sh defers to setup.sh for install hints to avoid duplication.
README documents all options including a WSL2 setup walkthrough.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:16:23 +02:00
docker-claude
f68ed674d0 feat: add non-technical user onboarding
- setup.sh: interactive wizard for Docker check and auth configuration
- launch.sh: folder-picker launcher (macOS native dialog, zenity/kdialog on Linux, text fallback)
- launch.bat: Windows launcher using PowerShell folder browser + Git Bash
- claude.sh: friendlier error messages with actionable links; prompt setup.sh if .env missing
- hooks/pre-commit: add setup.sh and launch.sh to executable enforcement
- README: add Quick Start section aimed at non-technical users

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:13:34 +02:00
docker-claude
51e7ab2b08 fix(proxy): close port-6443 allowlist bypass in squid ACLs
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 5m16s
The kubectl_api ACL allowed CONNECT tunnels to any host on port 6443,
bypassing the domain allowlist entirely. Remove it and require cluster
hostnames to be added explicitly to allowed_sites instead.

Also remove the localhost and .local entries — these aren't needed for
Claude Code or the configured MCP servers.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 10:07:22 +02:00
docker-claude
698b06aafd fix: ash doesn't seem to work with the claude script
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 5m4s
2026-04-16 09:48:42 +02:00
docker-claude
6e5744b456 fix claude install
Some checks failed
Build images / check-docker (push) Successful in 2s
Build images / build-and-push (push) Failing after 1m0s
2026-04-16 09:38:46 +02:00
docker-claude
0fa411a178 docs: updated inline docs
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Failing after 1m5s
2026-04-15 22:43:00 +02:00
docker-claude
f4cf8056e9 docs(readme): sync with current state after webui removal
Remove webui from architecture, commands, and security table.
Update auth option 3 to reference ~/.claude instead of claude-config volume.
Drop stale registry path comment and web interface section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 22:41:28 +02:00
docker-claude
b76d1e5e2a chore(docker): pin Claude Code install to stable release channel
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Failing after 58s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 22:40:01 +02:00
docker-claude
27feedf65e chore(hooks): restore executable bit on hooks/pre-commit
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 22:02:15 +02:00
docker-claude
e78a302cb9 feat: remove webui
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 5m15s
2026-04-15 21:59:08 +02:00
docker-claude
1dee611fb3 fix repository path
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 5m46s
2026-04-15 21:39:10 +02:00
docker-claude
8b4f08e68c chore(hooks): fix executable bit on build.sh and hooks/pre-commit
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 5m5s
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 21:19:46 +02:00
docker-claude
2002ea7b32 chore(registry): use docker-public registry path
Update image references from registry.zeidler.dev/docker/playground to
registry.zeidler.dev/docker-public/playground in docker-compose.yml and build.sh.
Also bind-mount ${HOME}/.claude instead of using the claude-config named volume.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-15 21:19:33 +02:00
docker-claude
4edef5ac1a fix stuff finally?
All checks were successful
Build images / check-docker (push) Successful in 2s
Build images / build-and-push (push) Successful in 5m27s
2026-04-15 19:18:48 +02:00
docker-claude
1b141b200c use new native install 2026-04-15 19:18:39 +02:00
docker-claude
ab7e909c3c make sure that files are executable
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 4m19s
2026-04-15 17:55:01 +02:00
docker-claude
c328427517 feat(proxy): allow platform.claude.com in egress allowlist 2026-04-15 17:53:26 +02:00
docker-claude
f07a30bd0b chore(hooks): enforce executable bit on claude.sh and build.sh via pre-commit hook 2026-04-15 17:16:58 +02:00
docker-claude
6a060aa8ab fix(workflow): remove build contexts from compose; build.sh uses docker build directly 2026-04-15 17:15:51 +02:00
docker-claude
3f91b27c94 refactor(claude.sh): use array for volume args, merge run into start, tighten helpers 2026-04-15 17:14:37 +02:00
docker-claude
a5af0a5427 ci: also tag builds as latest
All checks were successful
Build images / check-docker (push) Successful in 2s
Build images / build-and-push (push) Successful in 4m53s
2026-04-15 17:06:53 +02:00
docker-claude
f4a6bc0a99 fix(claude.sh): add --no-build to prevent fallback to local build 2026-04-15 17:05:44 +02:00
docker-claude
2d822305d1 refactor(images): pull from registry instead of building; add build.sh for local dev 2026-04-15 17:02:43 +02:00
docker-claude
ff9ed447c0 update workflow
All checks were successful
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Successful in 4m30s
2026-04-15 16:52:40 +02:00
docker-claude
50cfa9da4e fix workflow
Some checks failed
Build images / check-docker (push) Successful in 3s
Build images / build-and-push (push) Failing after 52s
2026-04-15 16:49:55 +02:00
docker-claude
1dbbbc840d ci: add Forgejo action to build and push Docker images to registry
Some checks failed
Build and push Docker images / build (./claude, claude) (push) Failing after 33s
Build and push Docker images / build (./proxy, proxy) (push) Failing after 11s
2026-04-15 08:56:25 +02:00
docker-claude
659fb3f339 feat(proxy): allow CONNECT tunnels to Kubernetes API server port 6443 2026-04-15 08:49:11 +02:00
docker-claude
1c01d49f51 feat(claude): install kubectl into container image 2026-04-15 08:47:32 +02:00
docker-claude
c3c3fcd099 feat(workspace): add --kube flag to mount $HOME/.kube read-only into container 2026-04-15 08:45:05 +02:00
docker-claude
c3875397b0 feat(security): block user home dirs and SSH/PGP key directories from workspace mount 2026-04-15 08:43:09 +02:00
docker-claude
65ac4c7011 feat(security): block mounting home and system directories as workspace 2026-04-15 08:40:50 +02:00
docker-claude
3401fa38a5 refactor(workspace): mount CWD as /workspace instead of named volume
Run from the project directory you want to work on; claude.sh mounts
it automatically. Removes WORKSPACE_DIR env var support and the
named claude-secure-workspace Docker volume.
2026-04-15 08:10:44 +02:00
docker-claude
e19d4eb0a3 feat(mcp): add GitHub, GitLab, Jira, and Confluence MCP servers
Install four MCP servers globally in the claude image:
  @modelcontextprotocol/server-github  → mcp-server-github
  @yoda.digital/gitlab-mcp-server      → gitlab-mcp-server
  @aashari/mcp-server-atlassian-jira   → mcp-atlassian-jira
  @aashari/mcp-server-atlassian-confluence → mcp-atlassian-confluence

Wire them in managed-settings.json via mcpServers with env var
pass-through. Jira and Confluence share ATLASSIAN_* credentials.
Add api.github.com, .gitlab.com, .atlassian.net to the squid
allowlist. All credentials are optional — servers are skipped
if the relevant env vars are unset.
2026-04-14 23:09:42 +02:00
docker-claude
c65ed15653 refactor(policy): rename managed-settings.json to settings.json 2026-04-14 22:59:25 +02:00