mirror of
https://github.com/aljazceru/goose.git
synced 2025-12-17 22:24:21 +01:00
feat: Build Goose in a Docker Container (#1551)
This commit is contained in:
111
documentation/docs/docker/Dockerfile
Normal file
111
documentation/docs/docker/Dockerfile
Normal file
@@ -0,0 +1,111 @@
|
||||
# Build stage
|
||||
FROM rust:bullseye AS builder
|
||||
|
||||
SHELL ["/bin/bash", "-c"]
|
||||
|
||||
# Install Node.js and any missing dependencies
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
|
||||
apt-get update && apt-get install -y \
|
||||
nodejs \
|
||||
libdbus-1-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create a new directory for the app
|
||||
WORKDIR /usr/src/goose
|
||||
|
||||
# Copy the entire project
|
||||
COPY . .
|
||||
|
||||
# Build the project
|
||||
RUN cargo build --release
|
||||
|
||||
# Runtime stage
|
||||
FROM ubuntu:22.04
|
||||
|
||||
# Configure non-interactive installation
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
# Install runtime libraries with DBus and keyring support
|
||||
RUN apt-get update && apt-get install -y \
|
||||
# Runtime dependencies
|
||||
ca-certificates \
|
||||
curl \
|
||||
gnupg \
|
||||
# DBus and keyring
|
||||
dbus \
|
||||
dbus-x11 \
|
||||
gnome-keyring \
|
||||
libsecret-1-0 \
|
||||
libsecret-tools \
|
||||
# Other dependencies
|
||||
libssl3 \
|
||||
libxcb1 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Node.js
|
||||
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && \
|
||||
apt-get update && apt-get install -y nodejs && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install common development tools
|
||||
RUN apt-get update && apt-get install -y \
|
||||
# Version control
|
||||
git \
|
||||
# Text processing and search
|
||||
ripgrep \
|
||||
fd-find \
|
||||
fzf \
|
||||
# File manipulation
|
||||
jq \
|
||||
# Network tools
|
||||
wget \
|
||||
# Process management
|
||||
htop \
|
||||
# System utilities
|
||||
sudo \
|
||||
# Text editors
|
||||
nano \
|
||||
vim \
|
||||
# Archive tools
|
||||
zip \
|
||||
unzip \
|
||||
# Build essentials
|
||||
build-essential \
|
||||
# Python
|
||||
python3 \
|
||||
python3-pip \
|
||||
# Additional tools
|
||||
tree \
|
||||
tmux \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install uv using curl
|
||||
RUN curl -LsSf https://astral.sh/uv/install.sh | sh
|
||||
|
||||
# Copy the built binaries
|
||||
COPY --from=builder /usr/src/goose/target/release/goose /usr/local/bin/
|
||||
|
||||
# Create a wrapper script to initialize DBus and keyring
|
||||
RUN echo '#!/bin/bash\n\
|
||||
# Start DBus session daemon if not running\n\
|
||||
if [ -z "$DBUS_SESSION_BUS_ADDRESS" ]; then\n\
|
||||
eval $(dbus-launch --sh-syntax)\n\
|
||||
export DBUS_SESSION_BUS_ADDRESS\n\
|
||||
fi\n\
|
||||
\n\
|
||||
# Initialize keyring if needed\n\
|
||||
if [ -z "$GNOME_KEYRING_CONTROL" ]; then\n\
|
||||
eval $(gnome-keyring-daemon --start)\n\
|
||||
export GNOME_KEYRING_CONTROL SSH_AUTH_SOCK\n\
|
||||
fi\n\
|
||||
\n\
|
||||
' > /usr/local/bin/entrypoint.sh && \
|
||||
chmod +x /usr/local/bin/entrypoint.sh
|
||||
|
||||
# Set up some basic git config
|
||||
RUN git config --global init.defaultBranch main && \
|
||||
git config --global core.editor "vim"
|
||||
|
||||
# Add some helpful aliases
|
||||
RUN echo 'alias ll="ls -la"' >> ~/.bashrc && \
|
||||
echo 'alias fd=fdfind' >> ~/.bashrc
|
||||
36
documentation/docs/docker/docker-compose.yml
Normal file
36
documentation/docs/docker/docker-compose.yml
Normal file
@@ -0,0 +1,36 @@
|
||||
services:
|
||||
goose-cli:
|
||||
build:
|
||||
context: ../../..
|
||||
dockerfile: documentation/docs/docker/Dockerfile
|
||||
args:
|
||||
USER_ID: ${UID:-1000}
|
||||
volumes:
|
||||
# Mount user's directory with read-write access
|
||||
- ../../..:/root/workspace
|
||||
- goose-config:/root/.goose
|
||||
# Mount git config
|
||||
- ~/.gitconfig:/root/.gitconfig:ro
|
||||
# Mount SSH keys
|
||||
- ~/.ssh:/root/.ssh:ro
|
||||
working_dir: /root/workspace
|
||||
environment:
|
||||
- OOSE_HOME=/root/.goose
|
||||
# Set default editor
|
||||
- EDITOR=vim
|
||||
# Preserve git author info
|
||||
- GIT_AUTHOR_NAME=${GIT_AUTHOR_NAME:-Goose User}
|
||||
- GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL:-goose@example.com}
|
||||
# Set GOOGLE_API_KEY to your own API key
|
||||
- GOOGLE_API_KEY="XXX"
|
||||
- GOOSE_PROVIDER=google
|
||||
- GOOSE_MODEL=gemini-2.0-flash-exp
|
||||
- DBUS_SESSION_BUS_ADDRESS
|
||||
- GNOME_KEYRING_CONTROL
|
||||
- SSH_AUTH_SOCK
|
||||
stdin_open: true
|
||||
tty: true
|
||||
entrypoint: ["/bin/bash"]
|
||||
|
||||
volumes:
|
||||
goose-config:
|
||||
Reference in New Issue
Block a user