-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathDockerfile.stacks
More file actions
82 lines (69 loc) · 3.34 KB
/
Dockerfile.stacks
File metadata and controls
82 lines (69 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
# syntax=docker/dockerfile:1
ARG BASE_IMAGE=openclaw-runtime:base
# ============================================================
# Stage: stack-go
# ============================================================
FROM ${BASE_IMAGE} AS stack-go
ARG GO_VERSION=1.26.1
ARG GOLANGCI_LINT_VERSION=1.64.8
RUN ARCH=$(dpkg --print-architecture) && \
curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-${ARCH}.tar.gz" | tar -C /usr/local -xz && \
ln -sf /usr/local/go/bin/go /usr/local/bin/go && \
ln -sf /usr/local/go/bin/gofmt /usr/local/bin/gofmt
ENV PATH="/usr/local/go/bin:${PATH}"
ENV GOPATH=/home/node/go
ENV PATH="${GOPATH}/bin:${PATH}"
# Install golangci-lint (covers most linting needs, replaces staticcheck/gosec/etc.)
RUN curl -sSfL "https://raw.githubusercontent.com/golangci/golangci-lint/HEAD/install.sh" | \
sh -s -- -b /usr/local/bin "v${GOLANGCI_LINT_VERSION}"
# Create GOPATH with correct ownership
RUN mkdir -p /home/node/go && chown -R node:node /home/node/go
USER root
# ============================================================
# Stage: stack-java
# ============================================================
FROM ${BASE_IMAGE} AS stack-java
ARG JDK_VERSION=21
RUN set -eux && \
ARCH=$(dpkg --print-architecture) && \
case "$ARCH" in \
amd64) TEMURIN_ARCH="x64" ;; \
arm64) TEMURIN_ARCH="aarch64" ;; \
*) echo "Unsupported arch: $ARCH" && exit 1 ;; \
esac && \
TEMURIN_URL=$(curl -fsSL \
"https://api.adoptium.net/v3/assets/latest/${JDK_VERSION}/hotspot?architecture=${TEMURIN_ARCH}&image_type=jdk&jvm_impl=hotspot&os=linux&vendor=eclipse" \
| jq -r '.[0].binary.package.link') && \
mkdir -p /usr/lib/jvm/java-${JDK_VERSION} && \
curl -fsSL "$TEMURIN_URL" | tar -xz -C /usr/lib/jvm/java-${JDK_VERSION} --strip-components=1
ENV JAVA_HOME=/usr/lib/jvm/java-${JDK_VERSION}
ENV PATH="${JAVA_HOME}/bin:${PATH}"
# Install Gradle and Maven with uv (fast) or standard wget
RUN wget -q https://services.gradle.org/distributions/gradle-8.14-bin.zip -O /tmp/gradle.zip && \
unzip -q /tmp/gradle.zip -d /opt && \
ln -sf /opt/gradle-8.14/bin/gradle /usr/local/bin/gradle && \
wget -q https://archive.apache.org/dist/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz -O /tmp/maven.tar.gz && \
tar -xzf /tmp/maven.tar.gz -C /opt && \
ln -sf /opt/apache-maven-3.9.9/bin/mvn /usr/local/bin/mvn && \
rm /tmp/gradle.zip /tmp/maven.tar.gz
# ============================================================
# Stage: stack-office
# ============================================================
FROM ${BASE_IMAGE} AS stack-office
# Core Python packages for document processing (removed heavy deps: docling, marker-pdf)
ARG PYTHON_PACKAGES="python-pptx openpyxl python-docx beautifulsoup4 lxml pyyaml pandoc pdfplumber polars pyarrow"
RUN apt-get update && apt-get install -y --no-install-recommends \
# PDF processing
poppler-utils \
# LibreOffice headless (minimal, no GUI libs)
libreoffice-nogui \
libreoffice-java-common \
# Minimal font set
fonts-liberation \
fonts-dejavu-core \
# Python runtime
python3 python3-pip python3-venv && \
apt-get clean && rm -rf /var/lib/apt/lists/* && \
rm -rf /usr/share/doc/* /usr/share/man/*
# Use uv for ultra-fast python package installation
RUN uv pip install --system --break-system-packages --no-cache $PYTHON_PACKAGES