From c2023dec42120acafebff2fbfc82637c53526367 Mon Sep 17 00:00:00 2001 From: willcl-ark Date: Thu, 28 Nov 2024 15:29:35 +0000 Subject: [PATCH] Add Dockerfiles --- ci/test/02_run_container.sh | 23 --------------------- ci/test/Dockerfile.asan | 41 +++++++++++++++++++++++++++++++++++++ ci/test/Dockerfile.base | 25 ++++++++++++++++++++++ ci/test/docker-bake.hcl | 13 ++++++++++++ ci/test/justfile | 9 ++++++++ 5 files changed, 88 insertions(+), 23 deletions(-) create mode 100644 ci/test/Dockerfile.asan create mode 100644 ci/test/Dockerfile.base create mode 100644 ci/test/docker-bake.hcl create mode 100644 ci/test/justfile diff --git a/ci/test/02_run_container.sh b/ci/test/02_run_container.sh index ce01db325cebed..afd447c347f73f 100755 --- a/ci/test/02_run_container.sh +++ b/ci/test/02_run_container.sh @@ -15,22 +15,12 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then python3 -c 'import os; [print(f"{key}={value}") for key, value in os.environ.items() if "\n" not in value and "HOME" != key and "PATH" != key and "USER" != key]' | tee "/tmp/env-$USER-$CONTAINER_NAME" # System-dependent env vars must be kept as is. So read them from the container. docker run --rm "${CI_IMAGE_NAME_TAG}" bash -c "env | grep --extended-regexp '^(HOME|PATH|USER)='" | tee --append "/tmp/env-$USER-$CONTAINER_NAME" - - # Env vars during the build can not be changed. For example, a modified - # $MAKEJOBS is ignored in the build process. Use --cpuset-cpus as an - # approximation to respect $MAKEJOBS somewhat, if cpuset is available. - MAYBE_CPUSET="" - if [ "$HAVE_CGROUP_CPUSET" ]; then - MAYBE_CPUSET="--cpuset-cpus=$( python3 -c "import random;P=$( nproc );M=min(P,int('$MAKEJOBS'.lstrip('-j')));print(','.join(map(str,sorted(random.sample(range(P),M)))))" )" - fi echo "Creating $CI_IMAGE_NAME_TAG container to run in" - # shellcheck disable=SC2086 DOCKER_BUILDKIT=1 docker build \ --file "${BASE_READ_ONLY_DIR}/ci/test_imagefile" \ --build-arg "CI_IMAGE_NAME_TAG=${CI_IMAGE_NAME_TAG}" \ --build-arg "FILE_ENV=${FILE_ENV}" \ - $MAYBE_CPUSET \ --label="${CI_IMAGE_LABEL}" \ --tag="${CONTAINER_NAME}" \ "${BASE_READ_ONLY_DIR}" @@ -58,19 +48,6 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then CI_PREVIOUS_RELEASES_MOUNT="type=bind,src=${PREVIOUS_RELEASES_DIR},dst=$PREVIOUS_RELEASES_DIR" fi - if [ "$DANGER_CI_ON_HOST_CCACHE_FOLDER" ]; then - # Temporary exclusion for https://github.com/bitcoin/bitcoin/issues/31108 - # to allow CI configs and envs generated in the past to work for a bit longer. - # Can be removed in March 2025. - if [ "${CCACHE_DIR}" != "/tmp/ccache_dir" ]; then - if [ ! -d "${CCACHE_DIR}" ]; then - echo "Error: Directory '${CCACHE_DIR}' must be created in advance." - exit 1 - fi - CI_CCACHE_MOUNT="type=bind,src=${CCACHE_DIR},dst=${CCACHE_DIR}" - fi # End temporary exclusion - fi - docker network create --ipv6 --subnet 1111:1111::/112 ci-ip6net || true if [ -n "${RESTART_CI_DOCKER_BEFORE_RUN}" ] ; then diff --git a/ci/test/Dockerfile.asan b/ci/test/Dockerfile.asan new file mode 100644 index 00000000000000..682ae30cf573a4 --- /dev/null +++ b/ci/test/Dockerfile.asan @@ -0,0 +1,41 @@ +FROM bitcoin-core-base:latest + +# Add any additional environment variables +RUN export BPFCC_PACKAGE="bpfcc-tools linux-headers-$(uname --kernel-release)" +ENV LLVM_VERSION="19" +ENV BITCOIN_CONFIG="\ + -DWITH_USDT=ON -DWITH_ZMQ=ON -DWITH_BDB=ON -DWARN_INCOMPATIBLE_BDB=OFF -DBUILD_GUI=ON \ + -DSANITIZERS=address,float-divide-by-zero,integer,undefined \ + -DCMAKE_C_COMPILER=clang-${LLVM_VERSION} \ + -DCMAKE_CXX_COMPILER=clang++-${LLVM_VERSION} \ + -DCMAKE_C_FLAGS='-ftrivial-auto-var-init=pattern' \ + -DCMAKE_CXX_FLAGS='-ftrivial-auto-var-init=pattern -Wno-error=deprecated-declarations' \ + -DAPPEND_CXXFLAGS='-std=c++23' \ + -DAPPEND_CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' \ +" + +# For LLVM 19 sources +RUN wget -qO- https://apt.llvm.org/llvm-snapshot.gpg.key | tee /etc/apt/trusted.gpg.d/apt.llvm.org.asc \ + && . /etc/os-release \ + && echo "deb http://apt.llvm.org/${VERSION_CODENAME}/ llvm-toolchain-${VERSION_CODENAME}-${LLVM_VERSION} main" > "/etc/apt/sources.list.d/llvm-toolchain-${VERSION_CODENAME}-${LLVM_VERSION}.list" + +# Install specific packages +RUN apt-get update && apt-get install --yes \ + "${BPFCC_PACKAGE}" \ + clang-${APT_LLVM_VERSION} \ + libboost-dev \ + libclang-rt-${LLVM_VERSION}-dev \ + libdb5.3++-dev \ + libevent-dev \ + libqrencode-dev \ + libsqlite3-dev \ + libzmq3-dev \ + llvm-${LLVM_VERSION} \ + python3-zmq \ + qtbase5-dev \ + qttools5-dev \ + qttools5-dev-tools \ + systemtap-sdt-dev \ + && rm -rf /var/lib/apt/lists/* + +CMD ["bash"] diff --git a/ci/test/Dockerfile.base b/ci/test/Dockerfile.base new file mode 100644 index 00000000000000..d4d43067a6d081 --- /dev/null +++ b/ci/test/Dockerfile.base @@ -0,0 +1,25 @@ +# ubuntu:noble-20241015 +FROM ubuntu:noble-20241015@sha256:278628f08d4979fb9af9ead44277dbc9c92c2465922310916ad0c46ec9999295 + +ENV DEBIAN_FRONTEND=noninteractive + +# CI Base Packages +RUN apt-get update && apt-get install --yes \ + bison \ + build-essential \ + ca-certificates \ + ccache \ + cmake \ + curl \ + e2fsprogs \ + git \ + ninja-build \ + pkg-config \ + procps \ + python3 \ + python3-pip \ + rsync \ + wget \ + && rm -rf /var/lib/apt/lists/* + +CMD ["bash"] diff --git a/ci/test/docker-bake.hcl b/ci/test/docker-bake.hcl new file mode 100644 index 00000000000000..23c26ae5cb3e83 --- /dev/null +++ b/ci/test/docker-bake.hcl @@ -0,0 +1,13 @@ +target "base" { + context = "." + dockerfile = "./Dockerfile.base" + platforms = ["linux/amd64"] + tags = ["bitcoin-core-base:latest"] +} + +target "asan" { + dockerfile = "./Dockerfile.asan" + context = "." + platforms = ["linux/amd64"] + tags = ["bitcoin-core-asan:latest"] +} diff --git a/ci/test/justfile b/ci/test/justfile new file mode 100644 index 00000000000000..8b918976f40297 --- /dev/null +++ b/ci/test/justfile @@ -0,0 +1,9 @@ +[private] +default: + @just --list + +base: + docker buildx bake base + +asan: + docker buildx bake asan