123 lines · plain
1ARG LLVM_VERSION=21.1.02# FIXME: Use "${LLVM_VERSION%%.*}" instead of "LLVM_VERSION_MAJOR" once we update runners to Ubuntu-26.04 with Buildah >= 1.373ARG LLVM_VERSION_MAJOR=214 5FROM docker.io/library/ubuntu:24.04 AS llvm-downloader6ARG LLVM_VERSION7ARG LLVM_VERSION_MAJOR8 9RUN apt-get update && \10 apt-get install -y wget xz-utils && \11 wget -O llvm.tar.xz https://github.com/llvm/llvm-project/releases/download/llvmorg-${LLVM_VERSION}/LLVM-${LLVM_VERSION}-Linux-X64.tar.xz && \12 mkdir -p /llvm-extract && \13 tar -xvJf llvm.tar.xz -C /llvm-extract \14 # Only unpack these tools to save space on Github runner.15 LLVM-${LLVM_VERSION}-Linux-X64/bin/clang-${LLVM_VERSION_MAJOR} \16 LLVM-${LLVM_VERSION}-Linux-X64/lib/clang/${LLVM_VERSION_MAJOR}/include \17 LLVM-${LLVM_VERSION}-Linux-X64/bin/clang-tidy \18 LLVM-${LLVM_VERSION}-Linux-X64/bin/clang-format \19 LLVM-${LLVM_VERSION}-Linux-X64/bin/git-clang-format && \20 rm llvm.tar.xz21 22 23FROM docker.io/library/ubuntu:24.04 AS base24ENV LLVM_SYSROOT=/opt/llvm25ENV PATH=${LLVM_SYSROOT}/bin:${PATH}26 27# Need nodejs for some of the GitHub actions.28# Need git for git-clang-format.29RUN apt-get update && \30 DEBIAN_FRONTEND=noninteractive apt-get install -y \31 git \32 nodejs \33 sudo \34 # These are needed by the premerge pipeline.35 # Pip is used to install dependent python packages.36 python3-pip \37 python-is-python3 && \38 apt-get clean && \39 rm -rf /var/lib/apt/lists/*40 41# Create a new user with id 1001 as that is the user id that42# Github Actions uses to perform the checkout action.43RUN useradd gha -u 1001 -m -s /bin/bash44RUN adduser gha sudo45RUN echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers46# Don't set USER gha right away because we still need to install packages47# as root in 'ci-container-code-format' and 'ci-container-code-lint' containers48 49 50FROM base AS ci-container-build-tools51ARG LLVM_VERSION52ARG LLVM_VERSION_MAJOR53 54COPY --from=llvm-downloader /llvm-extract/LLVM-${LLVM_VERSION}-Linux-X64/bin/clang-${LLVM_VERSION_MAJOR} \55 ${LLVM_SYSROOT}/bin/56COPY --from=llvm-downloader /llvm-extract/LLVM-${LLVM_VERSION}-Linux-X64/lib/clang/${LLVM_VERSION_MAJOR}/include \57 ${LLVM_SYSROOT}/lib/clang/${LLVM_VERSION_MAJOR}/include58RUN ln -s ${LLVM_SYSROOT}/bin/clang-${LLVM_VERSION_MAJOR} ${LLVM_SYSROOT}/bin/clang && \59 ln -s ${LLVM_SYSROOT}/bin/clang ${LLVM_SYSROOT}/bin/clang++60 61RUN apt-get update && \62 DEBIAN_FRONTEND=noninteractive apt-get install -y \63 cmake \64 ninja-build && \65 apt-get clean && \66 rm -rf /var/lib/apt/lists/*67 68ENV CC=${LLVM_SYSROOT}/bin/clang69ENV CXX=${LLVM_SYSROOT}/bin/clang++70 71 72FROM base AS ci-container-code-format73ARG LLVM_VERSION74 75COPY --from=llvm-downloader /llvm-extract/LLVM-${LLVM_VERSION}-Linux-X64/bin/clang-format \76 /llvm-extract/LLVM-${LLVM_VERSION}-Linux-X64/bin/git-clang-format \77 ${LLVM_SYSROOT}/bin/78 79 80# Install dependencies for 'pr-code-format.yml' job81COPY llvm/utils/git/requirements_formatting.txt requirements_formatting.txt82RUN pip install -r requirements_formatting.txt --break-system-packages && \83 rm requirements_formatting.txt84USER gha85WORKDIR /home/gha86 87 88FROM ci-container-build-tools AS ci-container-code-lint89ARG LLVM_VERSION90ARG LLVM_VERSION_MAJOR91 92COPY --from=llvm-downloader /llvm-extract/LLVM-${LLVM_VERSION}-Linux-X64/bin/clang-tidy \93 ${LLVM_SYSROOT}/bin/94COPY clang-tools-extra/clang-tidy/tool/clang-tidy-diff.py ${LLVM_SYSROOT}/bin/clang-tidy-diff.py95 96# Install dependencies for 'pr-code-lint.yml' job97COPY llvm/utils/git/requirements_linting.txt requirements_linting.txt98RUN pip install -r requirements_linting.txt --break-system-packages && \99 rm requirements_linting.txt100USER gha101WORKDIR /home/gha102 103 104FROM ci-container-build-tools as ci-container-abi-tests105 106RUN apt-get update && \107 DEBIAN_FRONTEND=noninteractive apt-get install -y \108 abi-compliance-checker \109 abi-dumper \110 autoconf \111 parallel \112 pkg-config && \113 apt-get clean && \114 rm -rf /var/lib/apt/lists/*115 116RUN git clone https://github.com/universal-ctags/ctags.git && \117 cd ctags && \118 ./autogen.sh && \119 ./configure && \120 sudo make install && \121 rm -Rf ../ctags122 123