# Copyright 2022 Google LLC
#
# Licensed 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 ubuntu:22.04

# install system deps
RUN apt-get update && apt-get install -y build-essential wget vim libstdc++-10-dev \
git checkinstall zlib1g-dev curl protobuf-compiler cmake \
pkg-config libdbus-1-dev ninja-build libssl-dev default-jre default-jdk \
lsb-release wget software-properties-common gnupg clang
RUN apt upgrade -y

# Install node and npm following official instructions : https://github.com/nodesource/distributions/blob/master/README.md
RUN apt purge -y nodejs && apt autoremove
RUN curl -fsSL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
RUN bash nodesource_setup.sh
RUN apt install -y nodejs

RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
RUN apt-get -y install ./google-chrome-stable_current_amd64.deb
RUN export CHROME_BIN="/usr/bin/google-chrome-stable"

ENV CC=/usr/bin/clang
ENV CXX=/usr/bin/clang++

# install cargo with default settings
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"
RUN rustup toolchain install 1.79.0 --component llvm-tools-preview
RUN rustup toolchain install nightly-2024-09-03 --component rust-src --force
RUN rustup target add wasm32-unknown-unknown # used by np_web
RUN rustup target add thumbv7m-none-eabi

RUN cargo install --locked cargo-deny --color never 2>&1
RUN cargo install --locked cargo-llvm-cov --color never 2>&1
RUN cargo install bindgen-cli --version 0.69.4 --color never 2>&1
RUN cargo install wasm-pack --color never 2>&1

# unreleased PR https://github.com/ehuss/cargo-prefetch/pull/6
RUN cargo install cargo-prefetch \
    --git https://github.com/marshallpierce/cargo-prefetch.git \
    --rev f6affa68e950275f9fd773f2646ab7ee4db82897 \
    --color never 2>&1

# boringssl build wants go
RUN curl -L https://go.dev/dl/go1.20.2.linux-amd64.tar.gz | tar -C /usr/local -xz
ENV PATH="$PATH:/usr/local/go/bin"

# needed for boringssl git operations
RUN git config --global user.email "docker@example.com"
RUN git config --global user.name "NP Docker"

# Download google-java-format
RUN mkdir /opt/google-java-format
WORKDIR /opt/google-java-format
ENV GOOGLE_JAVA_FORMAT_VERSION="1.19.2"
RUN wget "https://github.com/google/google-java-format/releases/download/v${GOOGLE_JAVA_FORMAT_VERSION}/google-java-format-${GOOGLE_JAVA_FORMAT_VERSION}-all-deps.jar" -q -O "google-java-format-all-deps.jar"

RUN mkdir -p /beto-core
COPY . /beto-core
WORKDIR /beto-core

# prefetch dependencies so later build steps don't re-download on source changes
RUN cargo prefetch --lockfile nearby/Cargo.lock 2>&1
RUN cargo prefetch --lockfile common/Cargo.lock 2>&1

# when the image runs build and test everything to ensure env is setup correctly
WORKDIR /beto-core/nearby
CMD ["cargo", "run", "--", "run-all-checks"]
