mirror of
https://github.com/crytic/slither.git
synced 2026-10-12 02:12:39 +00:00
71 lines
2.3 KiB
Docker
71 lines
2.3 KiB
Docker
# syntax=docker/dockerfile:1.12
|
|
|
|
# --- Stage 1: Build ---
|
|
FROM ubuntu:noble AS builder
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
python3 python3-venv curl \
|
|
&& curl -LsSf https://astral.sh/uv/install.sh \
|
|
| UV_INSTALL_DIR=/usr/local/bin sh \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
ENV UV_LINK_MODE=copy \
|
|
UV_COMPILE_BYTECODE=1 \
|
|
UV_PYTHON_DOWNLOADS=never \
|
|
UV_PYTHON=python3.12 \
|
|
UV_PROJECT_ENVIRONMENT=/app
|
|
|
|
WORKDIR /build
|
|
|
|
# Layer 1: deps only (cached until pyproject.toml or uv.lock change)
|
|
RUN --mount=type=cache,target=/root/.cache \
|
|
--mount=type=bind,source=uv.lock,target=uv.lock \
|
|
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
|
|
--mount=type=bind,source=README.md,target=README.md \
|
|
uv sync --locked --no-dev --no-install-project
|
|
|
|
# Layer 2: install project (rebuilds on source changes)
|
|
COPY slither/ slither/
|
|
COPY pyproject.toml uv.lock README.md ./
|
|
RUN --mount=type=cache,target=/root/.cache \
|
|
uv sync --locked --no-dev --no-editable
|
|
|
|
|
|
# --- Stage 2: Runtime ---
|
|
FROM ubuntu:noble AS final
|
|
|
|
LABEL org.opencontainers.image.title="slither" \
|
|
org.opencontainers.image.description="Static Analyzer for Solidity" \
|
|
org.opencontainers.image.url="https://github.com/crytic/slither" \
|
|
org.opencontainers.image.source="https://github.com/crytic/slither" \
|
|
org.opencontainers.image.vendor="Trail of Bits" \
|
|
org.opencontainers.image.licenses="AGPL-3.0"
|
|
|
|
RUN export DEBIAN_FRONTEND=noninteractive \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends python3 ca-certificates \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Cross-arch solc compat (e.g. Docker Desktop on Apple Silicon)
|
|
ENV QEMU_LD_PREFIX=/usr/x86_64-linux-gnu
|
|
RUN if [ "$(dpkg --print-architecture)" != "amd64" ]; then \
|
|
export DEBIAN_FRONTEND=noninteractive \
|
|
&& apt-get update \
|
|
&& apt-get install -y --no-install-recommends libc6-amd64-cross \
|
|
&& rm -rf /var/lib/apt/lists/*; \
|
|
fi
|
|
|
|
RUN useradd --create-home slither
|
|
USER slither
|
|
WORKDIR /home/slither
|
|
|
|
# Copy the pre-built venv from builder
|
|
COPY --from=builder --chown=slither:slither /app /app
|
|
ENV PATH="/app/bin:${PATH}"
|
|
|
|
# Pre-download latest solc so the image is ready to use
|
|
RUN solc-select use latest --always-install
|
|
|
|
CMD ["/bin/bash"]
|