diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 000000000..116f0087f --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,5 @@ +FROM mcr.microsoft.com/devcontainers/rust:1-1-bookworm +RUN apt-get update && apt-get install -y build-essential cmake libclang-dev lldb +RUN wget https://github.com/tsenart/vegeta/releases/download/v12.11.1/vegeta_12.11.1_linux_arm64.tar.gz +RUN tar -xvf vegeta_12.11.1_linux_arm64.tar.gz +RUN mv ./vegeta /usr/local/bin/vegeta \ No newline at end of file diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 000000000..972888108 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,23 @@ +{ + "name": "Rust", + "build": { + "dockerfile": "Dockerfile" + }, + "features": { + "ghcr.io/jungaretti/features/make:1": {}, + "ghcr.io/lee-orr/rusty-dev-containers/cargo-make:0": {} + }, + "runArgs": [ + "--rm", + "--privileged" + ], + "customizations": { + "vscode": { + "extensions": [ + "rust-lang.rust-analyzer", + "eamodio.gitlens", + "ms-azuretools.vscode-docker" + ] + } + } +} \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 000000000..2f7896d1d --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +target/ diff --git a/Dockerfile b/Dockerfile index 8cc295456..022d1ab1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,10 @@ # syntax=docker/dockerfile:1.4 FROM rust:1.74.1-bookworm as builder + ARG TARGETPLATFORM ARG GIT_V_VERSION ARG ONNXRUNTIME_VERSION=1.17.0 + RUN apt-get update && apt-get install -y llvm-dev libclang-dev clang cmake WORKDIR /usr/src/edge-runtime RUN --mount=type=cache,target=/usr/local/cargo/registry,id=${TARGETPLATFORM} \ @@ -16,11 +18,41 @@ RUN ./scripts/install_onnx.sh $ONNXRUNTIME_VERSION $TARGETPLATFORM /root/libonnx FROM debian:bookworm-slim + +ARG TARGETARCH +ARG USE_CODE_SERVER_INTEGRATION + +ENV USE_CODE_SERVER_INTEGRATION ${USE_CODE_SERVER_INTEGRATION} +ENV DENO_VERSION 1.40.3 +ENV CODE_SERVER_VERSION 4.20.0 +ENV CODE_SERVER_HOST 0.0.0.0 +ENV CODE_SERVER_PORT 8999 +ENV CODE_SERVER_EXTENSIONS denoland.vscode-deno +ENV ORT_DYLIB_PATH=/usr/local/bin/libonnxruntime.so +ENV SB_AI_MODELS_DIR=/etc/sb_ai/models + RUN apt-get update && apt-get install -y libssl-dev && rm -rf /var/lib/apt/lists/* RUN apt-get remove -y perl && apt-get autoremove -y + COPY --from=builder /root/edge-runtime /usr/local/bin/edge-runtime COPY --from=builder /root/libonnxruntime.so /usr/local/bin/libonnxruntime.so COPY ./models /etc/sb_ai/models -ENV ORT_DYLIB_PATH=/usr/local/bin/libonnxruntime.so -ENV SB_AI_MODELS_DIR=/etc/sb_ai/models -ENTRYPOINT ["edge-runtime"] +COPY ./bin/entrypoint.sh /usr/local/bin + +RUN chmod u+x /usr/local/bin/entrypoint.sh + +# vscode-server integration +RUN if [ -n "$USE_CODE_SERVER_INTEGRATION" ]; then \ + apt-get update && apt-get install -y ca-certificates curl wget unzip dumb-init \ + && wget https://github.com/coder/code-server/releases/download/v${CODE_SERVER_VERSION}/code-server_${CODE_SERVER_VERSION}_${TARGETARCH}.deb -P /tmp \ + && dpkg -i /tmp/code-server_${CODE_SERVER_VERSION}_${TARGETARCH}.deb \ + && rm -f /tmp/code-server_${CODE_SERVER_VERSION}_${TARGETARCH}.deb; \ + if [ "${TARGETARCH}" = "arm64" ]; then \ + wget https://github.com/LukeChannings/deno-arm64/releases/download/v${DENO_VERSION}/deno-linux-arm64.zip -P /tmp \ + && unzip /tmp/deno-linux-arm64.zip -d /usr/local/bin; \ + else \ + curl -fsSL https://deno.land/install.sh | DENO_INSTALL=/usr/local sh; \ + fi \ + fi + +ENTRYPOINT ["dumb-init", "--", "/usr/local/bin/entrypoint.sh"] diff --git a/bin/entrypoint.sh b/bin/entrypoint.sh new file mode 100644 index 000000000..8bc445d3c --- /dev/null +++ b/bin/entrypoint.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -eu + +export PS1='\w $ ' + +EXTENSIONS="${CODE_SERVER_EXTENSIONS:-none}" + +if [ -z "$USE_CODE_SERVER_INTEGRATION" ]; then + edge-runtime $@ & +else + mkdir -p /root/.local/share/code-server/User + cat > /root/.local/share/code-server/User/settings.json << EOF + { + "workbench.colorTheme": "Visual Studio Dark", + "deno.enable": true + } +EOF + + if [ ${EXTENSIONS} != "none" ]; then + echo "Installing Extensions" + for extension in $(echo ${EXTENSIONS} | tr "," "\n") + do + if [ "${extension}" != "" ]; then + /usr/bin/code-server \ + --install-extension "${extension}" \ + /home/deno/functions + fi + done + fi + + (/usr/bin/code-server \ + --bind-addr "${CODE_SERVER_HOST}":"${CODE_SERVER_PORT}" \ + --auth none \ + /home/deno/functions \ + ) & + + edge-runtime $@ & +fi + +wait -n \ No newline at end of file