| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- # Build arguments for metadata (all optional with defaults)
- ARG BUILD_DATE
- ARG VCS_REF
- ARG VERSION
- # ==========================================
- # 1. Alpine Base
- # ==========================================
- FROM node:20.20.0-alpine AS alpine_base
- # Install dependencies
- RUN apk add --no-cache \
- # Build tools for native npm modules
- python3 \
- make \
- g++ \
- # Version control
- git \
- # Network tools
- curl
- # Create non-root user and set up directories
- RUN addgroup -S kilocode && \
- adduser -S -G kilocode -G audio -G video kilocode && \
- mkdir -p /home/kilocode/.kilocode /workspace && \
- chown -R kilocode:kilocode /home/kilocode /workspace
- # Set environment variables
- ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
- HOME=/home/kilocode
- # ==========================================
- # 2. Debian Base
- # ==========================================
- FROM node:20.20.0-bookworm-slim AS debian_base
- # Install system dependencies
- RUN apt-get update && apt-get install -y \
- python3 \
- make \
- g++ \
- # Chromium and dependencies for puppeteer
- chromium \
- chromium-sandbox \
- fonts-liberation \
- fonts-noto-color-emoji \
- libnss3 \
- libnspr4 \
- libatk1.0-0 \
- libatk-bridge2.0-0 \
- libcups2 \
- libdrm2 \
- libxkbcommon0 \
- libxcomposite1 \
- libxdamage1 \
- libxfixes3 \
- libxrandr2 \
- libgbm1 \
- libasound2 \
- git \
- curl \
- ca-certificates \
- && apt-get clean \
- && rm -rf /var/lib/apt/lists/*
- # Create non-root user and set up directories
- RUN groupadd -r kilocode && useradd -r -g kilocode -G audio,video kilocode \
- && mkdir -p /home/kilocode/.kilocode /workspace \
- && chown -R kilocode:kilocode /home/kilocode /workspace
- # Set environment variables for Chromium
- ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
- PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium \
- CHROME_PATH=/usr/bin/chromium \
- CHROME_BIN=/usr/bin/chromium \
- HOME=/home/kilocode
- # ==========================================
- # 3. Final Alpine Target
- # ==========================================
- FROM alpine_base AS alpine
- # Re-declare ARGs needed for Labels (ARGs assume scope of the FROM)
- ARG BUILD_DATE
- ARG VCS_REF
- ARG VERSION
- # Apply Labels
- LABEL org.opencontainers.image.created="${BUILD_DATE}" \
- org.opencontainers.image.revision="${VCS_REF}" \
- org.opencontainers.image.version="${VERSION}" \
- org.opencontainers.image.title="Kilo CLI (Alpine)" \
- org.opencontainers.image.description="Docker image for Kilo CLI (Alpine)" \
- org.opencontainers.image.vendor="Kilo" \
- org.opencontainers.image.licenses="Apache-2.0" \
- org.opencontainers.image.url="https://hub.docker.com/r/kiloai/cli"
- # Install App
- COPY dist/kilocode-cli-${VERSION}.tgz /tmp/kilocode-cli.tgz
- RUN npm install -g /tmp/kilocode-cli.tgz && rm /tmp/kilocode-cli.tgz
- USER kilocode
- WORKDIR /workspace
- ENTRYPOINT ["/usr/local/bin/kilocode"]
- CMD []
- # ==========================================
- # 4. Final Debian Target
- # ==========================================
- FROM debian_base AS debian
- # Re-declare ARGs
- ARG BUILD_DATE
- ARG VCS_REF
- ARG VERSION
- # Apply Labels
- LABEL org.opencontainers.image.created="${BUILD_DATE}" \
- org.opencontainers.image.revision="${VCS_REF}" \
- org.opencontainers.image.version="${VERSION}" \
- org.opencontainers.image.title="Kilo CLI" \
- org.opencontainers.image.description="Docker image for Kilo CLI" \
- org.opencontainers.image.vendor="Kilo" \
- org.opencontainers.image.licenses="Apache-2.0" \
- org.opencontainers.image.url="https://hub.docker.com/r/kiloai/cli"
- # Install App
- COPY dist/kilocode-cli-${VERSION}.tgz /tmp/kilocode-cli.tgz
- RUN npm install -g /tmp/kilocode-cli.tgz && rm /tmp/kilocode-cli.tgz
- USER kilocode
- WORKDIR /workspace
- ENTRYPOINT ["/usr/local/bin/kilocode"]
- CMD []
|