# Copyright 2018 the original author or authors.
#
# 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.

ARG REGISTRY=
ARG REPOSITORY=
ARG TAG=latest

FROM ${REGISTRY}${REPOSITORY}voltha-protoc:${TAG} as builder
MAINTAINER Voltha Community <info@opennetworking.org>

COPY adapters/protos/third_party/google/api/*.proto /protos/google/api/
COPY adapters/docker/config/Makefile.protos /protos/google/api/Makefile.protos
WORKDIR /protos
RUN make -f google/api/Makefile.protos google_api
RUN touch /protos/google/__init__.py /protos/google/api/__init__.py

COPY protos/*.proto /protos/voltha/
COPY adapters/docker/config/Makefile.protos /protos/voltha/Makefile.protos
WORKDIR /protos/voltha
RUN make -f Makefile.protos build

# Copy the files to a scrach based container to minimize its size
FROM ${REGISTRY}scratch
COPY --from=builder /protos/ /protos/
