# Copyright 2019 The Hafnium 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
#
#     https://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.

#
# Container derived from the base image hosted on Google Cloud Platform.
# It sets up a user with the same UID/GID as the local user, so that generated
# files can be accessed by the host.
# Please keep the diff between base and local images as small as possible.
#
FROM eu.gcr.io/hafnium-build/hafnium_ci
ARG LOCAL_UID=1000
ARG LOCAL_GID=1000

RUN	addgroup \
		--gid "${LOCAL_GID}" \
		hafnium \
	&& adduser \
		-disabled-password \
		-gecos "" \
		--uid "${LOCAL_UID}" \
		--shell "/bin/bash" \
		--ingroup hafnium \
		hafnium
USER hafnium