Spaces:
Sleeping
Sleeping
| # 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"] | |