mirror of
https://github.com/aaif-goose/goose.git
synced 2026-06-02 06:14:27 +02:00
Add Docker support for Goose in CI/CD pipelines (#4434)
Adds a production-ready Docker image for Goose that enables using Goose itself in CI pipelines to improve the codebase.
This commit is contained in:
+73
@@ -0,0 +1,73 @@
|
||||
# syntax=docker/dockerfile:1.4
|
||||
# Goose CLI and Server Docker Image
|
||||
# Multi-stage build for minimal final image size
|
||||
|
||||
# Build stage
|
||||
FROM rust:1.82-bookworm AS builder
|
||||
|
||||
# Install build dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
pkg-config \
|
||||
libssl-dev \
|
||||
libdbus-1-dev \
|
||||
protobuf-compiler \
|
||||
libprotobuf-dev \
|
||||
ca-certificates \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Create app directory
|
||||
WORKDIR /build
|
||||
|
||||
# Copy source code
|
||||
COPY . .
|
||||
|
||||
# Build release binaries with optimizations
|
||||
ENV CARGO_REGISTRIES_CRATES_IO_PROTOCOL=sparse
|
||||
ENV CARGO_PROFILE_RELEASE_LTO=true
|
||||
ENV CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
|
||||
ENV CARGO_PROFILE_RELEASE_OPT_LEVEL=z
|
||||
ENV CARGO_PROFILE_RELEASE_STRIP=true
|
||||
RUN cargo build --release --package goose-cli
|
||||
|
||||
# Runtime stage - minimal Debian
|
||||
FROM debian:bookworm-slim@sha256:b1a741487078b369e78119849663d7f1a5341ef2768798f7b7406c4240f86aef
|
||||
|
||||
# Install only runtime dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
ca-certificates \
|
||||
libssl3 \
|
||||
libdbus-1-3 \
|
||||
libxcb1 \
|
||||
curl \
|
||||
git \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy binary from builder
|
||||
COPY --from=builder /build/target/release/goose /usr/local/bin/goose
|
||||
|
||||
# Create non-root user
|
||||
RUN useradd -m -u 1000 -s /bin/bash goose && \
|
||||
mkdir -p /home/goose/.config/goose && \
|
||||
chown -R goose:goose /home/goose
|
||||
|
||||
# Set up environment
|
||||
ENV PATH="/usr/local/bin:${PATH}"
|
||||
ENV HOME="/home/goose"
|
||||
|
||||
# Switch to non-root user
|
||||
USER goose
|
||||
WORKDIR /home/goose
|
||||
|
||||
# Default to goose CLI
|
||||
ENTRYPOINT ["/usr/local/bin/goose"]
|
||||
CMD ["--help"]
|
||||
|
||||
# Labels for metadata
|
||||
LABEL org.opencontainers.image.title="Goose"
|
||||
LABEL org.opencontainers.image.description="Goose CLI"
|
||||
LABEL org.opencontainers.image.vendor="Block"
|
||||
LABEL org.opencontainers.image.source="https://github.com/block/goose"
|
||||
Reference in New Issue
Block a user