FROM golang:1.25-bookworm AS builder
WORKDIR /observability
RUN apt-get update && apt-get install -y build-essential zlib1g-dev git

ARG GIT_TOKEN
ENV GOPRIVATE=github.com/tidbcloud,github.com/pingcap/dbaas
ENV GONOPROXY=github.com/tidbcloud,github.com/pingcap/dbaas
ENV GONOSUMDB=github.com/tidbcloud,github.com/pingcap/dbaas

RUN if [ -n "$GIT_TOKEN" ]; then \
      git config --global url."https://${GIT_TOKEN}@github.com/".insteadOf "https://github.com/"; \
    fi

COPY . ./
# Generate Swagger docs so the binary embeds /swagger (no need to commit api/diagnosisqueryswagger)
RUN go install github.com/swaggo/swag/cmd/swag@v1.6.7 && \
    swag init -g cmd/diagnosis-query/main.go \
      --exclude pkg/globalapi,pkg/regionalapi,pkg/opsapi,pkg/dataapi,agent-control-server,data-collector,sli-reporter,o11ymetering \
      -o api/diagnosisqueryswagger
RUN cd cmd/diagnosis-query && CGO_ENABLED=1 go build

FROM debian:bookworm-slim
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y --no-install-recommends \
        ca-certificates \
        curl \
        gzip \
        perl \
        binutils && \
    rm -rf /var/lib/apt/lists/*
WORKDIR /

# Pin CLI to match duckdb-go (v2.10505.0 -> DuckDB 1.5.5).
# Download the binary directly: install.duckdb.org's script uses bash [[ ]] and, when
# piped to Debian's /bin/sh (dash), falls through to a non-existent .tar.gz URL (404).
ARG DUCKDB_CLI_VERSION=1.5.5
ARG TARGETARCH
RUN set -eux; \
    case "${TARGETARCH}" in \
      amd64) dist=linux-amd64 ;; \
      arm64) dist=linux-arm64 ;; \
      *) echo "unsupported TARGETARCH=${TARGETARCH}" >&2; exit 1 ;; \
    esac; \
    dest="/root/.duckdb/cli/${DUCKDB_CLI_VERSION}"; \
    mkdir -p "${dest}"; \
    curl -fsSL "https://install.duckdb.org/v${DUCKDB_CLI_VERSION}/duckdb_cli-${dist}.gz" \
      | gzip -dc > "${dest}/duckdb"; \
    chmod a+x "${dest}/duckdb"; \
    ln -sfn "${dest}" /root/.duckdb/cli/latest; \
    "${dest}/duckdb" -noheader -init /dev/null -csv -batch -s "SELECT 2*3*7" | grep -qx 42
RUN echo '\
/root/.duckdb/cli/latest/duckdb -c "INSTALL aws; LOAD aws;" && \
/root/.duckdb/cli/latest/duckdb -c "INSTALL httpfs; LOAD httpfs;" && \
/root/.duckdb/cli/latest/duckdb -c "INSTALL azure; LOAD azure;" && \
/root/.duckdb/cli/latest/duckdb -c "INSTALL cache_httpfs FROM community; LOAD cache_httpfs;" && \
/root/.duckdb/cli/latest/duckdb -c "INSTALL delta; LOAD delta;" \
' > /preload_duckdb.sh && \
    chmod +x /preload_duckdb.sh
RUN /preload_duckdb.sh
COPY --from=0 /observability/cmd/diagnosis-query/diagnosis-query /
RUN chmod +x /diagnosis-query
ENTRYPOINT ["/diagnosis-query"]
