FROM openeuler/openeuler:24.03 AS dev

RUN dnf update -y && \
    dnf install -y git gcc g++ gdb make ninja-build autoconf automake curl zip unzip tar &&\
    dnf clean all && \
    rm -rf /var/cache/dnf/*

ENV VCPKG_ROOT="/vcpkg" \
    VCPKG_FORCE_SYSTEM_BINARIES=1

RUN architecture=$(uname -m) && \
    if [ "$architecture" = "aarch64" ]; then \
        echo "Current architecture is ARM64"; \
        curl -fsSL https://github.com/Kitware/CMake/releases/download/v3.27.2/cmake-3.27.2-linux-aarch64.sh -o cmake_install.sh && \
        chmod +x cmake_install.sh && \
        ./cmake_install.sh --prefix=/usr/local --skip-license && \
        rm -rf cmake_install.sh; \
    elif [ "$architecture" = "x86_64" ]; then \
        echo "Current architecture is x86_64"; \
        curl -fsSL https://github.com/Kitware/CMake/releases/download/v3.27.2/cmake-3.27.2-linux-x86_64.sh -o cmake_install.sh && \
        chmod +x cmake_install.sh && \
        ./cmake_install.sh --prefix=/usr/local --skip-license && \
        rm -rf cmake_install.sh; \
    else \
        echo "platform [$architecture] not supported"; \
        exit 1; \
    fi

RUN git clone -b 2024-08-01 --depth 1 https://github.com/microsoft/vcpkg-tool.git /tmp/vcpkg-tool \
    && cd /tmp/vcpkg-tool \
    && mkdir build \
    && cd build \
    && cmake .. \
    && cmake --build . --target vcpkg \
    && cp ./vcpkg /usr/local/bin/ \
    && chmod +x /usr/local/bin/vcpkg \
    && git clone -b 2024.08.23 --depth 1 https://github.com/microsoft/vcpkg.git /vcpkg \
    && rm -rf /tmp/vcpkg-tool

RUN vcpkg install civetweb prometheus-cpp spdlog nlohmann-json yaml-cpp open62541 --clean-after-build

FROM dev AS build

RUN mkdir /app

WORKDIR /app

COPY . /app

RUN mkdir build && \
    cd build && \
    cmake .. -DCMAKE_TOOLCHAIN_FILE=/vcpkg/scripts/buildsystems/vcpkg.cmake -DCMAKE_BUILD_TYPE=Release -G Ninja && \
    cmake --build . --target opcua_exporter

FROM openeuler/openeuler:24.03

RUN dnf update -y && \
    dnf install -y supervisor &&\
    dnf clean all && \
    rm -rf /var/cache/dnf/*

RUN architecture=$(uname -m); \
    if [ "$architecture" = "aarch64" ]; then \
        echo "Current architecture is ARM64"; \
        curl -fsSL https://github.com/abtreece/confd/releases/download/v0.20.0/confd-v0.20.0-linux-arm64.tar.gz | tar -xz -C /usr/local/bin; \
        chmod +x /usr/local/bin/confd; \
    elif [ "$architecture" = "x86_64" ]; then \
        echo "Current architecture is x86_64"; \
        curl -fsSL https://github.com/abtreece/confd/releases/download/v0.20.0/confd-v0.20.0-linux-amd64.tar.gz | tar -xz -C /usr/local/bin; \
        chmod +x /usr/local/bin/confd; \
    else \
        echo "platform [$architecture] not supported"; \
        exit 1; \
    fi

RUN mkdir /etc/opcua

COPY ./confd/ /etc/confd/

COPY ./supervisord/ /etc/supervisord/

COPY --from=build /app/build/opcua_exporter /usr/local/bin

CMD [ "supervisord", "-c", "/etc/supervisord/supervisord.conf" ]