111 lines
3.7 KiB
Docker
111 lines
3.7 KiB
Docker
ARG COYOTE_VERSION
|
|
FROM docker/sandbox-templates:shell-docker AS build
|
|
|
|
ARG COYOTE_VERSION
|
|
ARG TARGETARCH
|
|
|
|
ENV PATH="/home/agent/.cargo/bin:/home/agent/.local/bin:${PATH}"
|
|
|
|
USER root
|
|
|
|
RUN apt-get update && \
|
|
apt-get install -y --no-install-recommends \
|
|
jq curl git \
|
|
build-essential pkg-config \
|
|
cmake \
|
|
clang libclang-dev \
|
|
musl-tools \
|
|
libssl-dev \
|
|
pandoc \
|
|
bzip2 \
|
|
nano && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
RUN set -euo pipefail; \
|
|
USQL_VERSION=0.21.4; \
|
|
case "${TARGETARCH}" in \
|
|
amd64) USQL_ARCH=amd64 ;; \
|
|
arm64) USQL_ARCH=arm64 ;; \
|
|
*) echo "Unsupported TARGETARCH: ${TARGETARCH}" >&2; exit 1 ;; \
|
|
esac; \
|
|
TMPDIR=$(mktemp -d); \
|
|
curl -fsSL --retry 3 \
|
|
"https://github.com/xo/usql/releases/download/v${USQL_VERSION}/usql_static-${USQL_VERSION}-linux-${USQL_ARCH}.tar.bz2" \
|
|
-o "$TMPDIR/usql.tar.bz2"; \
|
|
tar -xjf "$TMPDIR/usql.tar.bz2" -C "$TMPDIR"; \
|
|
install -m 0755 "$TMPDIR/usql_static" /usr/local/bin/usql; \
|
|
rm -rf "$TMPDIR"
|
|
|
|
RUN set -euo pipefail; \
|
|
DUCKDB_VERSION=1.5.5; \
|
|
case "${TARGETARCH}" in \
|
|
amd64) DUCKDB_ARCH=amd64 ;; \
|
|
arm64) DUCKDB_ARCH=arm64 ;; \
|
|
*) echo "Unsupported TARGETARCH: ${TARGETARCH}" >&2; exit 1 ;; \
|
|
esac; \
|
|
TMPDIR=$(mktemp -d); \
|
|
curl -fsSL --retry 3 \
|
|
"https://github.com/duckdb/duckdb/releases/download/v${DUCKDB_VERSION}/duckdb_cli-linux-${DUCKDB_ARCH}.gz" \
|
|
-o "$TMPDIR/duckdb.gz"; \
|
|
gunzip "$TMPDIR/duckdb.gz"; \
|
|
install -m 0755 "$TMPDIR/duckdb" /usr/local/bin/duckdb; \
|
|
rm -rf "$TMPDIR"
|
|
|
|
USER 1000
|
|
|
|
RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \
|
|
printf '#!/bin/sh\nexec uv tool run "$@"\n' > "$HOME/.local/bin/uvx" && \
|
|
chmod +x "$HOME/.local/bin/uvx"
|
|
|
|
RUN mkdir -p /usr/local/share/npm-global/lib
|
|
|
|
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | \
|
|
sh -s -- -y --default-toolchain stable --profile minimal && \
|
|
. "$HOME/.cargo/env" && \
|
|
cargo install --locked iwec && \
|
|
cargo install --locked ast-grep
|
|
|
|
USER root
|
|
|
|
RUN set -euo pipefail; \
|
|
case "${TARGETARCH}" in \
|
|
amd64) MUSL_TARGET=x86_64-unknown-linux-musl ;; \
|
|
arm64) MUSL_TARGET=aarch64-unknown-linux-musl ;; \
|
|
*) echo "Unsupported TARGETARCH: ${TARGETARCH}" >&2; exit 1 ;; \
|
|
esac; \
|
|
TMPDIR=$(mktemp -d); \
|
|
curl -fsSL --retry 3 \
|
|
"https://github.com/Dark-Alex-17/coyote/releases/download/v${COYOTE_VERSION}/coyote-${MUSL_TARGET}.tar.gz" \
|
|
-o "$TMPDIR/coyote.tar.gz"; \
|
|
tar -xzf "$TMPDIR/coyote.tar.gz" -C "$TMPDIR"; \
|
|
install -m 0755 "$TMPDIR/coyote" /home/agent/.cargo/bin/coyote; \
|
|
chown 1000:1000 /home/agent/.cargo/bin/coyote; \
|
|
rm -rf "$TMPDIR"
|
|
|
|
FROM scratch
|
|
|
|
ARG COYOTE_VERSION
|
|
|
|
COPY --from=build / /
|
|
|
|
ENV PATH="/home/agent/.cargo/bin:/home/agent/.local/bin:/usr/local/share/npm-global/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
|
|
NPM_CONFIG_PREFIX="/usr/local/share/npm-global" \
|
|
NO_PROXY="localhost,127.0.0.1,::1,172.17.0.0/16" \
|
|
no_proxy="localhost,127.0.0.1,::1,172.17.0.0/16" \
|
|
BASH_ENV="/etc/sandbox-persistent.sh"
|
|
|
|
LABEL com.docker.sandboxes="templates" \
|
|
com.docker.sandboxes.base="ubuntu:questing" \
|
|
com.docker.sandboxes.flavor="shell-docker" \
|
|
com.docker.sandboxes.start-docker="true" \
|
|
org.opencontainers.image.title="coyote" \
|
|
org.opencontainers.image.description="An all-in-one, batteries-included LLM CLI tool: Shell Assistant, CLI & REPL mode, RAG, AI tools & agents, MCP servers, skills, and macros." \
|
|
org.opencontainers.image.source="https://github.com/Dark-Alex-17/coyote" \
|
|
org.opencontainers.image.version="${COYOTE_VERSION}"
|
|
|
|
WORKDIR /home/agent/workspace
|
|
|
|
USER 1000
|
|
|
|
ENTRYPOINT ["coyote"]
|