# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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

# NOTE: These are intended to be built using the arguments as
# described in ../build.sh. See that script for more details.

FROM rockylinux:8

# Install Java
ENV JAVA_HOME=/opt/java/openjdk
COPY --from=eclipse-temurin:11 $JAVA_HOME $JAVA_HOME
ENV PATH="${JAVA_HOME}/bin:${PATH}"

# Choose whether to install SpiderMonkey 1.8.5, default yes
ARG js=js
# Choose whether to install Erlang, default yes
ARG erlang=erlang
# Select version of Node, Erlang and Elixir to install
ARG erlangversion=24.3.4.10
ARG elixirversion=v1.13.4
ARG nodeversion=14

# Create Jenkins user and group
RUN groupadd --gid 910 jenkins; \
  useradd --uid 910 --gid jenkins --create-home jenkins

# Copy couchdb-ci repo into root's home directory
ADD --chown=root:root bin /root/couchdb-ci/bin/
ADD --chown=root:root files /root/couchdb-ci/files/

# Jenkins builds in /usr/src/couchdb.
RUN mkdir -p /usr/src/couchdb; \
  chown -R jenkins:jenkins /usr/src/couchdb

# Add /usr/local/lib to global LD_LIBRARY_PATH for CentOS
RUN echo "/usr/local/lib" > /etc/ld.so.conf.d/local.conf

# Install all dependencies, and optionally SM 1.8.5
# This allows us to use the same Dockerfile for building SM
RUN ERLANGVERSION=$erlangversion \
  ELIXIRVERSION=$elixirversion \
  NODEVERSION=$nodeversion \
  /root/couchdb-ci/bin/install-dependencies.sh $js $erlang

# Allow Jenkins to sudo
RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/jenkins

USER jenkins

# overwrite this with 'CMD []' in a dependent Dockerfile
CMD ["/bin/bash"]
