###############################################################################
# Copyright IBM Corp. and others 2025
#
# This program and the accompanying materials are made available under
# the terms of the Eclipse Public License 2.0 which accompanies this
# distribution and is available at https://www.eclipse.org/legal/epl-2.0/
# or the Apache License, Version 2.0 which accompanies this distribution and
# is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# This Source Code may also be made available under the following
# Secondary Licenses when the conditions for such availability set
# forth in the Eclipse Public License, v. 2.0 are satisfied: GNU
# General Public License, version 2 with the GNU Classpath
# Exception [1] and GNU General Public License, version 2 with the
# OpenJDK Assembly Exception [2].
#
# [1] https://www.gnu.org/software/classpath/license.html
# [2] https://openjdk.org/legal/assembly-exception.html
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0 OR GPL-2.0-only WITH Classpath-exception-2.0 OR GPL-2.0-only WITH OpenJDK-assembly-exception-1.0
###############################################################################

# Some sections generated by Claude 3.7 Sonnet (version 20250219).

FROM registry.access.redhat.com/ubi8/ubi-minimal:latest

# Create a non-root user and group.
RUN microdnf install -y shadow-utils \
    && groupadd -g 1000 clanguser \
    && useradd -u 1000 -g clanguser -m -s /bin/bash clanguser \
    && microdnf remove -y shadow-utils \
    && microdnf clean all

# Install required packages.
RUN set -eux; \
    microdnf install -y \
       ncurses-compat-libs tar wget xz \
    && microdnf update -y \
    && microdnf clean all

# Create directories with appropriate permissions.
RUN mkdir -p /opt/clang-tools /src \
    && chown -R clanguser:clanguser /opt/clang-tools /src

# Install clang-format in a location accessible to non-root users.
RUN cd /tmp \
    && wget --progress=dot:giga https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz \
    && tar --no-same-owner -xvf clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04.tar.xz clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04/bin/clang-format \
    && cp clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04/bin/clang-format /opt/clang-tools/clang-format.real \
    && rm -rf clang+llvm-18.1.8-x86_64-linux-gnu-ubuntu-18.04* \
    && microdnf remove -y tar wget xz \
    && microdnf clean all

# Copy the wrapper script.
COPY clang-format-wrapper.sh /opt/clang-tools/clang-format
RUN chmod +x /opt/clang-tools/clang-format

# Set up environment.
ENV PATH=/opt/clang-tools:$PATH

# Switch to non-root user.
USER clanguser
WORKDIR /src
CMD [""]
