# Copyright 2022-present Open Networking Foundation
#
# 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.

# voltha-northbound-bbf-adapter dockerfile

#-------------
# Build stage

FROM voltha/bbf-adapter-builder:local AS dev

# Use Standard go build directory structure
WORKDIR /go/src
COPY . .

ARG EXTRA_GO_BUILD_TAGS=""

ARG CGO_PARAMETER=1

ARG org_label_schema_version=unknown
ARG org_label_schema_vcs_url=unknown
ARG org_label_schema_vcs_ref=unknown
ARG org_label_schema_build_date=unknown
ARG org_opencord_vcs_commit_date=unknown
ARG org_opencord_vcs_dirty=unknown

# Build
SHELL ["/bin/ash", "-o", "pipefail", "-c"]
RUN \
      CGO_ENABLED=$CGO_PARAMETER go build $EXTRA_GO_BUILD_TAGS -mod=vendor -o /app/bbf-adapter \
      -ldflags \
      "-X github.com/opencord/voltha-lib-go/v7/pkg/version.version=$org_label_schema_version \
      -X github.com/opencord/voltha-lib-go/v7/pkg/version.vcsRef=$org_label_schema_vcs_ref \
      -X github.com/opencord/voltha-lib-go/v7/pkg/version.vcsDirty=$org_opencord_vcs_dirty \
      -X github.com/opencord/voltha-lib-go/v7/pkg/version.goVersion=$(go version 2>&1 | sed -E  's/.*go([0-9]+\.[0-9]+\.[0-9]+).*/\1/g') \
      -X github.com/opencord/voltha-lib-go/v7/pkg/version.os=$(go env GOHOSTOS) \
      -X github.com/opencord/voltha-lib-go/v7/pkg/version.arch=$(go env GOHOSTARCH) \
      -X github.com/opencord/voltha-lib-go/v7/pkg/version.buildTime=$org_label_schema_build_date" \
      ./cmd/bbf-adapter/

WORKDIR /app

# -------------
# Image creation stage
FROM alpine:3.13 AS prod

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

RUN apk add --no-cache build-base=0.5-r2 pcre2-dev=10.36-r0 git=2.30.2-r0 cmake=3.18.4-r1 libssh-dev=0.9.5-r0 openssl-dev=1.1.1n-r0 openssl=1.1.1n-r0 bash=5.1.16-r0

RUN rm -r /usr/local/lib && ln -s /usr/local/lib64 /usr/local/lib

WORKDIR /

COPY --from=dev /libyang /libyang
COPY --from=dev /sysrepo /sysrepo

#Build libyang
WORKDIR /libyang/build
RUN make install && \
    rm -rf libyang

#Build sysrepo
WORKDIR /sysrepo/build
RUN make install && \
    rm -rf sysrepo

ARG LIBNETCONF2_VERSION
ARG NETOPEER2_VERSION

#Build libnetconf2
WORKDIR /
RUN git clone https://github.com/CESNET/libnetconf2.git
WORKDIR /libnetconf2
RUN git checkout $LIBNETCONF2_VERSION && mkdir build
WORKDIR /libnetconf2/build
RUN cmake -D CMAKE_BUILD_TYPE:String="Release" .. && \
    make && \
    make install && \
    rm -rf libnetconf2

#Build netopeer2
WORKDIR /
RUN git clone https://github.com/CESNET/netopeer2.git
WORKDIR /netopeer2
RUN git checkout $NETOPEER2_VERSION && mkdir build
WORKDIR /netopeer2/build
RUN cmake -D CMAKE_BUILD_TYPE:String="Release" .. && \
    make && \
    make install && \
    rm -rf netopeer2

# Copy yang files and install them to sysrepo
COPY ./build/yang-files /yang
RUN for f in /yang/*.yang; do sysrepoctl -i "$f" -s /yang -p 664 -v3; done

# Add user for connecting to netopeer2-server through ssh
ARG NETCONF_USER=voltha
ARG NETCONF_PASSWORD=onf

RUN addgroup -S netconf
RUN adduser $NETCONF_USER --uid 1001 -G netconf --disabled-password
RUN echo $NETCONF_USER:$NETCONF_PASSWORD | chpasswd

# Set the working directory
WORKDIR /app

# Copy required files
COPY --from=dev /app/bbf-adapter /app/bbf-adapter

# Label image
ARG org_label_schema_version=unknown
ARG org_label_schema_vcs_url=unknown
ARG org_label_schema_vcs_ref=unknown
ARG org_label_schema_build_date=unknown
ARG org_opencord_vcs_commit_date=unknown
ARG org_opencord_vcs_dirty=unknown

LABEL \
org.label-schema.schema-version=1.0 \
org.label-schema.name=voltha-northbound-bbf-adapter \
org.label-schema.version=$org_label_schema_version \
org.label-schema.vcs-url=$org_label_schema_vcs_url \
org.label-schema.vcs-ref=$org_label_schema_vcs_ref \
org.label-schema.build-date=$org_label_schema_build_date \
org.opencord.vcs-commit-date=$org_opencord_vcs_commit_date \
org.opencord.vcs-dirty=$org_opencord_vcs_dirty

# running netopeer2-server as a standard user is not supported right now
# https://github.com/sysrepo/sysrepo/issues/2148#issuecomment-695950173