Dockerfile 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. # Build arguments for metadata (all optional with defaults)
  2. ARG BUILD_DATE
  3. ARG VCS_REF
  4. ARG VERSION
  5. # ==========================================
  6. # 1. Alpine Base
  7. # ==========================================
  8. FROM node:20.20.0-alpine AS alpine_base
  9. # Install dependencies
  10. RUN apk add --no-cache \
  11. # Build tools for native npm modules
  12. python3 \
  13. make \
  14. g++ \
  15. # Version control
  16. git \
  17. # Network tools
  18. curl
  19. # Create non-root user and set up directories
  20. RUN addgroup -S kilocode && \
  21. adduser -S -G kilocode -G audio -G video kilocode && \
  22. mkdir -p /home/kilocode/.kilocode /workspace && \
  23. chown -R kilocode:kilocode /home/kilocode /workspace
  24. # Set environment variables
  25. ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
  26. HOME=/home/kilocode
  27. # ==========================================
  28. # 2. Debian Base
  29. # ==========================================
  30. FROM node:20.20.0-bookworm-slim AS debian_base
  31. # Install system dependencies
  32. RUN apt-get update && apt-get install -y \
  33. python3 \
  34. make \
  35. g++ \
  36. # Chromium and dependencies for puppeteer
  37. chromium \
  38. chromium-sandbox \
  39. fonts-liberation \
  40. fonts-noto-color-emoji \
  41. libnss3 \
  42. libnspr4 \
  43. libatk1.0-0 \
  44. libatk-bridge2.0-0 \
  45. libcups2 \
  46. libdrm2 \
  47. libxkbcommon0 \
  48. libxcomposite1 \
  49. libxdamage1 \
  50. libxfixes3 \
  51. libxrandr2 \
  52. libgbm1 \
  53. libasound2 \
  54. git \
  55. curl \
  56. ca-certificates \
  57. && apt-get clean \
  58. && rm -rf /var/lib/apt/lists/*
  59. # Create non-root user and set up directories
  60. RUN groupadd -r kilocode && useradd -r -g kilocode -G audio,video kilocode \
  61. && mkdir -p /home/kilocode/.kilocode /workspace \
  62. && chown -R kilocode:kilocode /home/kilocode /workspace
  63. # Set environment variables for Chromium
  64. ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true \
  65. PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium \
  66. CHROME_PATH=/usr/bin/chromium \
  67. CHROME_BIN=/usr/bin/chromium \
  68. HOME=/home/kilocode
  69. # ==========================================
  70. # 3. Final Alpine Target
  71. # ==========================================
  72. FROM alpine_base AS alpine
  73. # Re-declare ARGs needed for Labels (ARGs assume scope of the FROM)
  74. ARG BUILD_DATE
  75. ARG VCS_REF
  76. ARG VERSION
  77. # Apply Labels
  78. LABEL org.opencontainers.image.created="${BUILD_DATE}" \
  79. org.opencontainers.image.revision="${VCS_REF}" \
  80. org.opencontainers.image.version="${VERSION}" \
  81. org.opencontainers.image.title="Kilo CLI (Alpine)" \
  82. org.opencontainers.image.description="Docker image for Kilo CLI (Alpine)" \
  83. org.opencontainers.image.vendor="Kilo" \
  84. org.opencontainers.image.licenses="Apache-2.0" \
  85. org.opencontainers.image.url="https://hub.docker.com/r/kiloai/cli"
  86. # Install App
  87. COPY dist/kilocode-cli-${VERSION}.tgz /tmp/kilocode-cli.tgz
  88. RUN npm install -g /tmp/kilocode-cli.tgz && rm /tmp/kilocode-cli.tgz
  89. USER kilocode
  90. WORKDIR /workspace
  91. ENTRYPOINT ["/usr/local/bin/kilocode"]
  92. CMD []
  93. # ==========================================
  94. # 4. Final Debian Target
  95. # ==========================================
  96. FROM debian_base AS debian
  97. # Re-declare ARGs
  98. ARG BUILD_DATE
  99. ARG VCS_REF
  100. ARG VERSION
  101. # Apply Labels
  102. LABEL org.opencontainers.image.created="${BUILD_DATE}" \
  103. org.opencontainers.image.revision="${VCS_REF}" \
  104. org.opencontainers.image.version="${VERSION}" \
  105. org.opencontainers.image.title="Kilo CLI" \
  106. org.opencontainers.image.description="Docker image for Kilo CLI" \
  107. org.opencontainers.image.vendor="Kilo" \
  108. org.opencontainers.image.licenses="Apache-2.0" \
  109. org.opencontainers.image.url="https://hub.docker.com/r/kiloai/cli"
  110. # Install App
  111. COPY dist/kilocode-cli-${VERSION}.tgz /tmp/kilocode-cli.tgz
  112. RUN npm install -g /tmp/kilocode-cli.tgz && rm /tmp/kilocode-cli.tgz
  113. USER kilocode
  114. WORKDIR /workspace
  115. ENTRYPOINT ["/usr/local/bin/kilocode"]
  116. CMD []