Skip to content

feat: split Docker image into base and full variants#140

Merged
gricha merged 6 commits intomainfrom
feat/split-base-image
Jan 18, 2026
Merged

feat: split Docker image into base and full variants#140
gricha merged 6 commits intomainfrom
feat/split-base-image

Conversation

@gricha
Copy link
Copy Markdown
Owner

@gricha gricha commented Jan 18, 2026

Summary

  • Create perry-base image (~1.8GB) with minimal requirements for Perry to function
  • Refactor main perry image to extend from base (removed Go to reduce size)
  • Update CI workflows to build both images
  • Add documentation for workspace image customization

Base Image Contents (perry-base)

  • Perry runtime (workspace user, sudo, SSH, Docker-in-Docker, Bun, Git)
  • Essential tools (Neovim, ripgrep, fd, fzf, jq, GitHub CLI)
  • Node.js (needed for npm packages like codex)
  • Coding agents (Claude Code, OpenCode)
  • Tailscale

Full Image Additions (perry)

  • Python, AWS CLI, Tectonic (LaTeX)
  • Playwright with Chromium
  • imagemagick, vim, nano, zsh, luarocks, yarn

For Users Who Want Custom Images

Users can now extend perry-base directly:

FROM ghcr.io/gricha/perry-base:latest

# Add your tools
RUN apt-get update && apt-get install -y golang python3

Test plan

  • Verify Dockerfile.base syntax is valid
  • Build base image locally
  • Build full image from base locally
  • Verify image sizes (base: ~1.8GB, full: ~3GB)
  • CI builds both images successfully
  • Integration tests pass with new images

🤖 Generated with Claude Code

Create perry-base image (~1.8GB) with minimal requirements:
- Perry runtime (workspace user, sudo, SSH, Docker-in-Docker, Bun, Git)
- Essential tools (Neovim, ripgrep, fd, fzf, jq, GitHub CLI)
- Node.js (needed for npm packages)
- Coding agents (Claude Code, OpenCode)
- Tailscale

The full perry image extends base and adds:
- Go, Python, AWS CLI, Tectonic (LaTeX)
- Playwright with Chromium
- imagemagick, vim, nano, zsh, luarocks, yarn

Users can now extend perry-base directly for smaller custom images.
Comment on lines 175 to 182
context: ./perry
platforms: ${{ matrix.platform }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
BASE_IMAGE=${{ env.REGISTRY }}/${{ env.BASE_IMAGE_NAME }}:${{ needs.merge-base.outputs.version }}
outputs: type=image,name=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }},push-by-digest=true,name-canonical=true,push=true
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-${{ matrix.arch }}
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache-${{ matrix.arch }},mode=max

This comment was marked as outdated.

runner: ubuntu-latest
arch: amd64
- platform: linux/arm64
runner: ubuntu-24.04-arm

This comment was marked as outdated.

Comment thread perry/Dockerfile.base

RUN curl -fsSL https://claude.ai/install.sh | bash

RUN curl -fsSL https://opencode.ai/install | bash || echo "OpenCode install failed; will retry on workspace start"

This comment was marked as outdated.

@gricha
Copy link
Copy Markdown
Owner Author

gricha commented Jan 18, 2026

/rerun

@gricha gricha merged commit b83388e into main Jan 18, 2026
3 checks passed
@gricha gricha deleted the feat/split-base-image branch January 18, 2026 20:01
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant