diff --git a/containers/buildbot-linux/.dockerignore b/containers/buildbot-linux/.dockerignore new file mode 100644 index 0000000..74bf493 --- /dev/null +++ b/containers/buildbot-linux/.dockerignore @@ -0,0 +1 @@ +cloudbuild.yaml \ No newline at end of file diff --git a/containers/buildbot-linux/Dockerfile b/containers/buildbot-linux/Dockerfile new file mode 100644 index 0000000..f2154c2 --- /dev/null +++ b/containers/buildbot-linux/Dockerfile @@ -0,0 +1,84 @@ +FROM ubuntu:latest + +RUN echo 'intall packages'; \ + apt-get update; \ + apt-get upgrade; \ + apt-get install -y --no-install-recommends \ + gosu tini \ + locales openssh-client gnupg ca-certificates apt-transport-https \ + zip wget curl git \ + gdb build-essential \ + ninja-build \ + libelf-dev libffi-dev gcc-multilib libmpfr-dev libpfm4-dev \ + # for llvm-libc tests that build mpfr and gmp from source + autoconf automake libtool \ + python3 python3-psutil python3-pip python3-setuptools \ + lsb-release software-properties-common \ + swig python3-dev libedit-dev libncurses5-dev libxml2-dev liblzma-dev golang rsync jq \ + # for llvm installation script + sudo \ + # build scripts + nodejs ccache \ + # shell users + less vim + +# Install cmake 3.23+ from source. +RUN wget --no-verbose -O /cmake.sh https://github.com/Kitware/CMake/releases/download/v3.23.3/cmake-3.23.3-linux-x86_64.sh; \ + chmod +x /cmake.sh; \ + mkdir -p /etc/cmake; \ + /cmake.sh --prefix=/etc/cmake --skip-license; \ + ln -s /etc/cmake/bin/cmake /usr/bin/cmake; \ + cmake --version; \ + rm /cmake.sh + +# Install sccache. +RUN curl -o sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz -L https://github.com/mozilla/sccache/releases/download/v0.5.4/sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz \ + && echo "4bf3ce366aa02599019093584a5cbad4df783f8d6e3610548c2044daa595d40b sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz" | shasum -a 256 -c \ + && tar xzf ./sccache-v0.5.4-x86_64-unknown-linux-musl.tar.gz \ + && mv sccache-v0.5.4-x86_64-unknown-linux-musl/sccache /usr/bin \ + && chown root:root /usr/bin/sccache \ + && ls -la /usr/bin/sccache \ + && sccache --version + +# LLVM must be installed after prerequsite packages. +ENV LLVM_VERSION=16 +RUN echo 'install llvm ${LLVM_VERSION}' && \ + wget --no-verbose https://apt.llvm.org/llvm.sh && \ + chmod +x llvm.sh && \ + ./llvm.sh ${LLVM_VERSION} && \ + apt-get update && \ + apt-get install -y clang-${LLVM_VERSION} clang-format-${LLVM_VERSION} clang-tidy-${LLVM_VERSION} lld-${LLVM_VERSION} && \ + ln -s /usr/bin/clang-${LLVM_VERSION} /usr/bin/clang && \ + ln -s /usr/bin/clang++-${LLVM_VERSION} /usr/bin/clang++ && \ + ln -s /usr/bin/clang-tidy-${LLVM_VERSION} /usr/bin/clang-tidy && \ + ln -s /usr/bin/clang-tidy-diff-${LLVM_VERSION}.py /usr/bin/clang-tidy-diff && \ + ln -s /usr/bin/clang-format-${LLVM_VERSION} /usr/bin/clang-format && \ + ln -s /usr/bin/clang-format-diff-${LLVM_VERSION} /usr/bin/clang-format-diff && \ + ln -s /usr/bin/lld-${LLVM_VERSION} /usr/bin/lld && \ + ln -s /usr/bin/lldb-${LLVM_VERSION} /usr/bin/lldb && \ + ln -s /usr/bin/ld.lld-${LLVM_VERSION} /usr/bin/ld.lld && \ + clang --version + +RUN echo 'configure locale' && \ + sed --in-place '/en_US.UTF-8/s/^#//' /etc/locale.gen && \ + locale-gen +ENV LANG en_US.UTF-8 +ENV LANGUAGE en_US:en +ENV LC_ALL en_US.UTF-8 + +RUN pip3 install buildbot-worker==2.8.4 + +VOLUME /build +# WORKDIR /build + +RUN groupadd -g 121 runner \ + && useradd -mr -d /home/runner -u 1001 -g 121 runner \ + && mkdir -p /build \ + && chown -R runner:runner /build; + +COPY *.sh /usr/local/bin/ +RUN chmod og+rx /usr/local/bin/*.sh + +ENTRYPOINT ["entrypoint.sh"] +CMD ["gosu", "runner", "sleep", "infinity"] + diff --git a/containers/buildbot-linux/entrypoint.sh b/containers/buildbot-linux/entrypoint.sh new file mode 100755 index 0000000..33f9b7e --- /dev/null +++ b/containers/buildbot-linux/entrypoint.sh @@ -0,0 +1,37 @@ +#!/usr/bin/env bash + +# Copyright 2021 Google LLC +# +# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://llvm.org/LICENSE.txt +# +# 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. +set -eu +set -o pipefail + +USER=runner +WORKDIR=/build +chown -R ${USER}:${USER} "$WORKDIR" + +export CCACHE_DIR="${WORKDIR}"/ccache +export CCACHE_MAXSIZE=20G +mkdir -p "${CCACHE_DIR}" +chown -R ${USER}:${USER} "${CCACHE_DIR}" + +export SCCACHE_DIR="$WORKDIR/sccache" +export SCCACHE_IDLE_TIMEOUT="0" +rm -rf "$SCCACHE_DIR" +mkdir -p "${SCCACHE_DIR}" +chown -R ${USER}:${USER} "${SCCACHE_DIR}" +chmod oug+rw "${SCCACHE_DIR}" +gosu "$USER" bash -c 'SCCACHE_DIR="${SCCACHE_DIR}" SCCACHE_IDLE_TIMEOUT=0 SCCACHE_CACHE_SIZE=20G sccache --start-server' + +# Run with tini to correctly pass exit codes. +exec /usr/bin/tini -g -- $@ diff --git a/kubernetes/buildbot/linux-test.yaml b/kubernetes/buildbot/linux-test.yaml new file mode 100644 index 0000000..778912f --- /dev/null +++ b/kubernetes/buildbot/linux-test.yaml @@ -0,0 +1,57 @@ +# Copyright 2021 Google LLC +# +# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://llvm.org/LICENSE.txt +# +# 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. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: buildbot-linux-test +spec: + replicas: 1 + strategy: + rollingUpdate: + maxUnavailable: 1 + maxSurge: 0 + type: RollingUpdate + selector: + matchLabels: + app: buildbot-linux-test + template: + metadata: + labels: + app: buildbot-linux-test + spec: + containers: + - name: runner + image: gcr.io/llvm-premerge-checks/buildbot-linux:latest + resources: + limits: + cpu: 31 + memory: 80Gi + requests: + cpu: 31 + memory: 80Gi + volumeMounts: + - name: workdir + mountPath: /build + env: + - name: POD_NAME + valueFrom: + fieldRef: + fieldPath: metadata.name + volumes: + - name: workdir + emptyDir: {} + nodeSelector: + cloud.google.com/gke-nodepool: linux-agents-2 + terminationGracePeriodSeconds: 30 diff --git a/kubernetes/buildbot/windows-test.yaml b/kubernetes/buildbot/windows-test.yaml new file mode 100644 index 0000000..b4928df --- /dev/null +++ b/kubernetes/buildbot/windows-test.yaml @@ -0,0 +1,59 @@ +# Copyright 2022 Google LLC +# +# Licensed under the the Apache License v2.0 with LLVM Exceptions (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://llvm.org/LICENSE.txt +# +# 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. + +apiVersion: apps/v1 +kind: Deployment +metadata: + name: buildbot-windows-test +spec: + replicas: 1 + strategy: + type: Recreate + selector: + matchLabels: + app: buildbot-windows-test + template: + metadata: + labels: + app: buildbot-windows-test + spec: + containers: + - name: runner + image: gcr.io/llvm-premerge-checks/buildbot-windows:latest + resources: + limits: + cpu: 31 + memory: 110Gi + requests: + cpu: 31 + memory: 110Gi + volumeMounts: + - name: workdir + mountPath: "C:\\ws" + env: + - name: WORKDIR + value: "c:/ws" # matching workdir + # Empty dir volume can use all disk space from VM. By default container + # disk will only be 20Gb and run out of space. + volumes: + - name: workdir + emptyDir: {} + nodeSelector: + cloud.google.com/gke-nodepool: windows-32 + tolerations: + - key: "node.kubernetes.io/os" + operator: "Equal" + value: "windows" + effect: "NoSchedule" + terminationGracePeriodSeconds: 30