opencode-cloud / Dockerfile
polats's picture
Let the agent manage Hugging Face repos when HF_TOKEN is set
e1f9a64
Raw
History Blame Contribute Delete
2.26 kB
# opencode-cloud — one image, two homes (Hugging Face Spaces + Railway).
#
# The port is decided at runtime by entrypoint.sh:
# * Railway injects $PORT
# * HF Spaces does not, so we fall back to 7860 (matches app_port in README.md)
FROM node:22-bookworm-slim
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates \
curl \
git \
jq \
less \
openssh-client \
python3 \
python3-venv \
ripgrep \
tar \
unzip \
&& rm -rf /var/lib/apt/lists/*
# Official Hugging Face CLI, so an agent holding HF_TOKEN can create and push
# repos in one step instead of hand-rolling API calls. Debian marks its Python
# externally-managed (PEP 668), hence the venv rather than a bare pip install.
RUN python3 -m venv /opt/hf-cli \
&& /opt/hf-cli/bin/pip install --no-cache-dir --upgrade pip \
&& /opt/hf-cli/bin/pip install --no-cache-dir "huggingface_hub[cli]" \
&& for bin in hf huggingface-cli; do \
[ -x "/opt/hf-cli/bin/$bin" ] && ln -sf "/opt/hf-cli/bin/$bin" "/usr/local/bin/$bin"; \
done \
&& hf version
# Install opencode at BUILD time so cold starts don't re-download the release.
# The official installer hardcodes $HOME/.opencode/bin (it ignores
# OPENCODE_INSTALL_DIR), so move the binary onto the shared PATH afterwards.
# Pin a release with: --build-arg OPENCODE_VERSION=1.18.18
ARG OPENCODE_VERSION=""
RUN VERSION="${OPENCODE_VERSION}" bash -c 'curl -fsSL https://opencode.ai/install | bash' \
&& mv "$HOME/.opencode/bin/opencode" /usr/local/bin/opencode \
&& chmod 755 /usr/local/bin/opencode \
&& rm -rf "$HOME/.opencode" \
&& opencode --version
# Hugging Face Spaces runs containers as uid 1000. The node images already ship
# a `node` user at uid 1000, so reuse it rather than useradd'ing a colliding one.
ENV HOME=/home/node
ENV PATH=/usr/local/bin:${PATH}
COPY --chown=node:node entrypoint.sh /home/node/entrypoint.sh
COPY --chown=node:node agents/hf-spaces.md /home/node/agents/hf-spaces.md
RUN chmod +x /home/node/entrypoint.sh \
&& mkdir -p /home/node/workspace \
&& chown -R node:node /home/node
USER node
WORKDIR /home/node/workspace
EXPOSE 7860
ENTRYPOINT ["/home/node/entrypoint.sh"]