#
# 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
# under the License.
#

#
# Dockerfile for guacamole-manual
# 
# See the README for more information on how to use this file.

# Set this build arg to any of the available version labels for the httpd image
ARG HTTPD_VERSION=2.4

# Perform the build itself using Python+Sphinx
FROM sphinxdoc/sphinx AS builder
RUN pip3 install sphinx-rtd-theme sphinx-inline-tabs myst-parser

# Set the working directory for the remainder of the build process
WORKDIR /manual

# Copy the manual source into the working directory and build it
COPY ./ ./
RUN make

# For the runtime image, use the official Apache httpd image
FROM httpd:${HTTPD_VERSION}

# Copy any HTML generated by the build into httpd's document root
COPY --from=builder /manual/build/html/ /usr/local/apache2/htdocs/

