FROM ros:jazzy-ros-base@sha256:2589a8fba5257307857890173c069852c2abf913a0be7970f172478baecb09e4

SHELL ["/bin/bash", "-o", "pipefail", "-c"]

ARG TRAVEL_REVISION=95dc2fbd66a343efd9060c45a5711b6307a950a4
ARG KITTI_FIXTURE_SHA256=bf272996d5b6d25cc5589e1089137cb20a98b63bd4823a7fea5631b359f6d68c
ARG KITTI_GOLD_SHA256=8aaacaa57d17a8a2f043c3ea0a0c134d36a3c50da2385f2364ca4eff53ea9b9f

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        build-essential \
        ca-certificates \
        cmake \
        curl \
        git \
        libboost-filesystem-dev \
        libboost-system-dev \
        libeigen3-dev \
        libpcl-dev \
        mpi-default-dev \
        python3-colcon-common-extensions \
        ros-jazzy-pcl-conversions \
        ros-jazzy-rclcpp \
        ros-jazzy-sensor-msgs \
        ros-jazzy-std-msgs \
        time \
    && rm -rf /var/lib/apt/lists/*

RUN mkdir -p /opt/travel/src/TRAVEL \
    && git -C /opt/travel/src/TRAVEL init \
    && git -C /opt/travel/src/TRAVEL remote add origin https://github.com/url-kaist/TRAVEL.git \
    && git -C /opt/travel/src/TRAVEL fetch --depth 1 origin "${TRAVEL_REVISION}" \
    && git -C /opt/travel/src/TRAVEL checkout --detach FETCH_HEAD \
    && test "$(git -C /opt/travel/src/TRAVEL rev-parse HEAD)" = "${TRAVEL_REVISION}" \
    && test -z "$(git -C /opt/travel/src/TRAVEL status --porcelain)"

RUN mkdir -p /opt/travel/fixture/00/velodyne \
    && curl -L --fail --retry 3 \
        -o /opt/travel/fixture/00/velodyne/000000.bin \
        https://github.com/url-kaist/TRAVEL/releases/download/test-data-v1/kitti00_000000.bin \
    && test "$(stat -c%s /opt/travel/fixture/00/velodyne/000000.bin)" = "1994688" \
    && echo "${KITTI_FIXTURE_SHA256}  /opt/travel/fixture/00/velodyne/000000.bin" | sha256sum -c - \
    && echo "${KITTI_GOLD_SHA256}  /opt/travel/src/TRAVEL/cpp/tests/data/kitti00_000000_gold.bin" | sha256sum -c -

RUN cmake \
        -S /opt/travel/src/TRAVEL/cpp/travel \
        -B /opt/travel/core-build \
        -DTRAVEL_BUILD_EXAMPLES=ON \
        -DTRAVEL_BUILD_TESTS=ON \
        -DCMAKE_BUILD_TYPE=Release \
    && cmake --build /opt/travel/core-build \
        --target regression_kitti run_travel_kitti \
        --parallel 16

RUN set +u \
    && source /opt/ros/jazzy/setup.bash \
    && set -u \
    && colcon build \
        --base-paths /opt/travel/src/TRAVEL \
        --build-base /opt/travel/ros-build \
        --install-base /opt/travel/ros-install \
        --merge-install \
        --packages-select travel_ros \
        --cmake-args -DCMAKE_BUILD_TYPE=Release \
    && test -x /opt/travel/ros-install/lib/travel_ros/travel_node

COPY qualify.sh /usr/local/bin/m49-t3-travel-qualify
RUN chmod 0755 /usr/local/bin/m49-t3-travel-qualify

ENTRYPOINT ["/usr/local/bin/m49-t3-travel-qualify"]
