# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#

FROM --platform=linux/amd64 debian:bullseye as debian-amd64
RUN apt-get -y update && apt -y upgrade &&\
    apt-get install -y libssh2-1-dev libssl-dev zlib1g-dev

FROM golang:1.20.4-bullseye as builder

# Base dependencies
RUN apt-get -y update && apt -y upgrade &&\
    apt-get install -y gcc binutils libfindbin-libs-perl cmake libssh2-1-dev libssl-dev zlib1g-dev \
    gcc-x86-64-linux-gnu binutils-x86-64-linux-gnu

COPY --from=debian-amd64 /usr/include /rootfs-amd64/usr/include
COPY --from=debian-amd64 /usr/lib/x86_64-linux-gnu /rootfs-amd64/usr/lib/x86_64-linux-gnu
COPY --from=debian-amd64 /lib/x86_64-linux-gnu /rootfs-amd64/lib/x86_64-linux-gnu

## Build libs/headers needed for gitextractor plugin
RUN \
    mkdir -p /tmp/build/x86_64 && cd /tmp/build/x86_64 && \
    wget https://github.com/libgit2/libgit2/archive/refs/tags/v1.3.2.tar.gz -O - | tar -xz && \
    cd libgit2-1.3.2 && \
    mkdir build && cd build && \
    cmake .. -DCMAKE_C_COMPILER=x86_64-linux-gnu-gcc -DBUILD_SHARED_LIBS=ON -DCMAKE_SYSROOT=/rootfs-amd64 -DCMAKE_INSTALL_PREFIX=/usr/local/deps/x86_64 &&\
    make -j install &&\
    mkdir -p /tmp/deps &&\
    cp *libgit2* /tmp/deps/ &&\
    cp -r ../include /tmp/deps/include

FROM python:3.9-slim-bullseye

RUN apt -y update && apt -y upgrade && apt -y install tzdata make tar curl gcc g++ pkg-config git \
    libssh2-1 zlib1g libffi-dev  \
    default-libmysqlclient-dev \
    libpq-dev

# Install Libs/Headers from previous stage
COPY --from=builder /tmp/deps/*.so* /usr/lib/
COPY --from=builder /tmp/deps/*.pc /usr/lib/x86_64-linux-gnu/pkgconfig/
COPY --from=builder /tmp/deps/include/ /usr/include/
ENV PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig

# Install Golang
RUN curl -L https://git.io/vQhTU | bash -s -- --version 1.20.4
RUN mv /root/go /go &&\
    mv /root/.go /usr/local/go &&\
    ln -sf /usr/local/go/bin/* /usr/bin

# Install Golang Tools
RUN export GOPATH=/go &&  \
    go install github.com/vektra/mockery/v2@v2.20.0 &&  \
    go install github.com/swaggo/swag/cmd/swag@v1.16.1

# Golang Env
ENV GOPATH=/go
# Make sure GOROOT is unset
ENV GOROOT=
ENV PATH=${GOPATH}/bin:${PATH}

# Python Poetry package manager
RUN curl -sSL https://install.python-poetry.org | python3 -
RUN ln -sf /root/.local/bin/poetry /usr/local/bin