Update Dockerfile to install additional tools (orla, rust-analyzer), configure user permissions, and set up bash completion. Update docker-entrypoint.sh to export new environment variables and configure MCP language servers for multiple languages (Go, Python, Rust, TypeScript) with proper workspace and LSP settings. Add new documentation file AGENTS.md with development guidelines and security rules. Add pyproject.toml for Python project configuration with dependencies and dev tools. Add src/PMOCrazyCoder.py as a new MCP server implementation with example tools.
74 lines
2.6 KiB
Docker
74 lines
2.6 KiB
Docker
FROM debian:bookworm-slim
|
|
|
|
RUN apt-get update && apt-get install -y \
|
|
clang clangd llvm-dev libclang-dev pkg-config build-essential git make curl nodejs npm \
|
|
pylint black flake8 mypy isort logrotate sudo cmake libicu-dev zlib1g-dev \
|
|
libcurl4-openssl-dev libssl-dev ruby-dev jq python3 python3-pip golang-go rustc cargo \
|
|
r-base sqlite3 wget bash zsh libgit2-dev \
|
|
&& apt-get clean && rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN echo "deb http://deb.debian.org/debian testing main" > /etc/apt/sources.list.d/testing.list
|
|
|
|
COPY tools/install_latest_go.sh /tmp/install_latest_go.sh
|
|
RUN bash /tmp/install_latest_go.sh && \
|
|
echo "PATH=/usr/local/go/bin:$PATH" >> /root/.bashrc
|
|
ENV PATH=/usr/local/go/bin:$PATH
|
|
|
|
ENV RUSTUP_HOME=/usr/local/rustup
|
|
ENV CARGO_HOME=/usr/local/cargo
|
|
ENV PATH=/usr/local/cargo/bin:$PATH
|
|
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y --default-toolchain stable && \
|
|
rustup install nightly && \
|
|
rustup component add rustfmt clippy rust-src rust-docs && \
|
|
cargo install cargo-edit cargo-watch cargo-outdated cargo-make cargo-binstall
|
|
|
|
RUN npm install -g typescript tsc @types/node eslint prettier pyright typescript-language-server
|
|
|
|
RUN cargo binstall --strategies crate-meta-data jj-cli
|
|
|
|
RUN cargo install --git https://github.com/nilskch/jj-lsp.git
|
|
|
|
RUN gem install github-linguist
|
|
|
|
RUN pip install --no-cache-dir --break-system-packages ruff fastmcp ipython
|
|
|
|
RUN curl -fsSL https://opencode.ai/install | bash && \
|
|
mkdir -p /root/.config/opencode && \
|
|
mv /root/.opencode/bin/opencode /usr/local/bin/
|
|
|
|
ENV GOPATH=/usr/local/go
|
|
ENV GOBIN=/usr/local/go/bin
|
|
RUN go install golang.org/x/tools/gopls@latest \
|
|
&& go install github.com/isaacphi/mcp-language-server@latest \
|
|
&& go install github.com/dorcha-inc/orla/cmd/orla@latest
|
|
|
|
RUN mkdir -p /etc/bash_completion.d \
|
|
&& orla completion bash > /etc/bash_completion.d/orla \
|
|
&& jj util completion bash > /etc/bash_completion.d/jj
|
|
|
|
RUN rustup component add rust-analyzer --toolchain nightly
|
|
|
|
ARG USERNAME=devuser
|
|
ARG USER_UID=1000
|
|
ARG USER_GID=1000
|
|
RUN groupadd --gid $USER_GID $USERNAME && \
|
|
useradd --uid $USER_UID \
|
|
--gid $USER_GID \
|
|
-m $USERNAME \
|
|
--shell /bin/bash && \
|
|
echo "$USERNAME ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/$USERNAME && \
|
|
chmod 440 /etc/sudoers.d/$USERNAME
|
|
|
|
COPY docker-entrypoint.sh /usr/local/bin/entrypoint.sh
|
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
|
RUN mkdir -p /home/${USERNAME}/.config \
|
|
&& chown -R ${USERNAME}:${USERNAME} /home/${USERNAME}/.config
|
|
COPY --chown=${USERNAME}:${USERNAME} opencode /home/${USERNAME}/.config/opencode
|
|
|
|
USER $USERNAME
|
|
WORKDIR /workspace
|
|
|
|
|
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
|
CMD ["/bin/bash"]
|