mirror of
https://github.com/NVIDIA/OpenShell.git
synced 2026-10-30 07:33:59 +08:00
## Summary - Add `Provider` entity for managing 3p deps from a sandbox - Add provider CRUD API/server persistence and new CLI workflows (`nav provider create/get/list/update/delete`), including `--from-existing` laptop discovery. - Integrate providers into sandbox create flow: infer from command (`-- claude`), support repeatable `--provider <type>`, prompt before auto-create, and allow manual in-sandbox setup. - Add a dedicated `navigator-providers` crate with per-provider modules and mockable discovery test helpers. ## Key UX Changes - `nav sandbox create --provider gitlab -- claude` - Missing provider prompt now asks before creating from local state. - `nav provider list --names` for scripting/cleanup. ## Test Plan - `mise run cluster:deploy` - `mise run test:e2e:sandbox` - `mise run pre-commit` Closes #19 Closes #22 Closes #11
108 lines
4.4 KiB
Docker
108 lines
4.4 KiB
Docker
# syntax=docker/dockerfile:1.4
|
|
# CI runner image with all development tools pre-installed
|
|
# Rebuild triggered automatically when mise.toml or this file changes
|
|
|
|
FROM ubuntu:24.04
|
|
|
|
ARG DOCKER_VERSION=27.5.1
|
|
ARG BUILDX_VERSION=v0.21.1
|
|
ARG TARGETARCH
|
|
ARG KUBECTL_VERSION=v1.35.1
|
|
ARG HELM_VERSION=v4.1.1
|
|
ARG PROTOC_VERSION=29.6
|
|
ARG SCCACHE_VERSION=v0.14.0
|
|
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
ENV MISE_DATA_DIR=/opt/mise
|
|
ENV MISE_CACHE_DIR=/opt/mise/cache
|
|
ENV PATH="/opt/mise/shims:/root/.local/bin:$PATH"
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
git \
|
|
build-essential \
|
|
pkg-config \
|
|
libssl-dev \
|
|
python3 \
|
|
python3-venv \
|
|
cmake \
|
|
protobuf-compiler \
|
|
socat \
|
|
unzip \
|
|
xz-utils \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Install Docker CLI and buildx plugin used by CI jobs
|
|
RUN case "$TARGETARCH" in \
|
|
amd64) docker_arch=x86_64; buildx_arch=amd64 ;; \
|
|
arm64) docker_arch=aarch64; buildx_arch=arm64 ;; \
|
|
*) echo "Unsupported TARGETARCH: $TARGETARCH"; exit 1 ;; \
|
|
esac \
|
|
&& curl -fsSL "https://download.docker.com/linux/static/stable/${docker_arch}/docker-${DOCKER_VERSION}.tgz" \
|
|
| tar xz --strip-components=1 -C /usr/local/bin docker/docker \
|
|
&& mkdir -p /usr/local/lib/docker/cli-plugins \
|
|
&& curl -fsSL "https://github.com/docker/buildx/releases/download/${BUILDX_VERSION}/buildx-${BUILDX_VERSION}.linux-${buildx_arch}" \
|
|
-o /usr/local/lib/docker/cli-plugins/docker-buildx \
|
|
&& chmod +x /usr/local/lib/docker/cli-plugins/docker-buildx
|
|
|
|
# Install AWS CLI v2 used for ECR publishing
|
|
RUN case "$TARGETARCH" in \
|
|
amd64) aws_arch=x86_64 ;; \
|
|
arm64) aws_arch=aarch64 ;; \
|
|
*) echo "Unsupported TARGETARCH: $TARGETARCH"; exit 1 ;; \
|
|
esac \
|
|
&& curl -fsSL "https://awscli.amazonaws.com/awscli-exe-linux-${aws_arch}.zip" -o /tmp/awscliv2.zip \
|
|
&& unzip -q /tmp/awscliv2.zip -d /tmp \
|
|
&& /tmp/aws/install \
|
|
&& rm -rf /tmp/aws /tmp/awscliv2.zip
|
|
|
|
# Install kubectl, helm, and protoc without GitHub API lookups
|
|
RUN case "$TARGETARCH" in \
|
|
amd64) karch=amd64; helm_arch=amd64; protoc_arch=x86_64 ;; \
|
|
arm64) karch=arm64; helm_arch=arm64; protoc_arch=aarch_64 ;; \
|
|
*) echo "Unsupported TARGETARCH: $TARGETARCH"; exit 1 ;; \
|
|
esac \
|
|
&& curl -fsSL "https://dl.k8s.io/release/${KUBECTL_VERSION}/bin/linux/${karch}/kubectl" -o /usr/local/bin/kubectl \
|
|
&& chmod +x /usr/local/bin/kubectl \
|
|
&& curl -fsSL "https://get.helm.sh/helm-${HELM_VERSION}-linux-${helm_arch}.tar.gz" -o /tmp/helm.tgz \
|
|
&& tar -xzf /tmp/helm.tgz -C /tmp \
|
|
&& mv "/tmp/linux-${helm_arch}/helm" /usr/local/bin/helm \
|
|
&& chmod +x /usr/local/bin/helm \
|
|
&& rm -rf /tmp/helm.tgz "/tmp/linux-${helm_arch}" \
|
|
&& curl -fsSL "https://github.com/protocolbuffers/protobuf/releases/download/v${PROTOC_VERSION}/protoc-${PROTOC_VERSION}-linux-${protoc_arch}.zip" -o /tmp/protoc.zip \
|
|
&& unzip -q /tmp/protoc.zip -d /tmp/protoc \
|
|
&& mv /tmp/protoc/bin/protoc /usr/local/bin/protoc \
|
|
&& chmod +x /usr/local/bin/protoc \
|
|
&& rm -rf /tmp/protoc /tmp/protoc.zip
|
|
|
|
# Install sccache directly on amd64 (mise/aqua plugin is arch-limited)
|
|
RUN if [ "$TARGETARCH" = "amd64" ]; then \
|
|
curl -fsSL "https://github.com/mozilla/sccache/releases/download/${SCCACHE_VERSION}/sccache-${SCCACHE_VERSION}-x86_64-unknown-linux-musl.tar.gz" -o /tmp/sccache.tgz \
|
|
&& tar -xzf /tmp/sccache.tgz -C /tmp \
|
|
&& mv "/tmp/sccache-${SCCACHE_VERSION}-x86_64-unknown-linux-musl/sccache" /usr/local/bin/sccache \
|
|
&& chmod +x /usr/local/bin/sccache \
|
|
&& rm -rf /tmp/sccache.tgz "/tmp/sccache-${SCCACHE_VERSION}-x86_64-unknown-linux-musl"; \
|
|
else \
|
|
echo "Skipping sccache install on $TARGETARCH"; \
|
|
fi
|
|
|
|
# Install mise
|
|
RUN curl https://mise.run | sh
|
|
|
|
# Copy mise.toml and build task includes, then install core tools
|
|
COPY mise.toml /opt/mise/mise.toml
|
|
COPY build/ /opt/mise/build/
|
|
WORKDIR /opt/mise
|
|
RUN mise trust /opt/mise/mise.toml && \
|
|
env -u RUSTC_WRAPPER mise install python rust 'cargo:cargo-edit' && \
|
|
/root/.cargo/bin/rustup component remove rust-docs || true && \
|
|
rm -rf /root/.rustup/toolchains/*/share/doc /root/.rustup/toolchains/*/share/man
|
|
|
|
# Install uv directly to avoid GitHub API rate limits in CI image builds
|
|
RUN curl -LsSf https://astral.sh/uv/0.10.2/install.sh | sh
|
|
|
|
# Set working directory for CI jobs
|
|
WORKDIR /builds
|