From 7929733978112ec7f98bfea5037513e1a1c4574b Mon Sep 17 00:00:00 2001 From: Jason Volk Date: Thu, 30 Mar 2023 23:46:29 +0000 Subject: [PATCH] docker: Refactor into build matrix. [ci skip] --- docker/alpine/{3.16 => }/base/Dockerfile | 5 +- docker/alpine/{3.16 => }/built/Dockerfile | 10 +- docker/alpine/{3.16 => }/full/Dockerfile | 5 +- docker/alpine/{3.16 => }/test/Dockerfile | 5 +- docker/build-and-push-images.sh | 293 ++++++++++-------- docker/ubuntu/20.04/base/Dockerfile | 60 ---- docker/ubuntu/20.04/clang-10/Dockerfile | 10 - docker/ubuntu/20.04/clang-11/Dockerfile | 10 - docker/ubuntu/20.04/clang-12/Dockerfile | 10 - docker/ubuntu/20.04/clang-9/Dockerfile | 10 - docker/ubuntu/20.04/gcc-10/Dockerfile | 11 - docker/ubuntu/20.04/gcc-8/Dockerfile | 9 - docker/ubuntu/20.04/gcc-9/Dockerfile | 11 - docker/ubuntu/22.04/build/Dockerfile | 37 --- docker/ubuntu/22.04/test/Dockerfile | 11 - docker/ubuntu/base/Dockerfile | 133 ++++++++ .../base/Dockerfile => base/Dockerfile.save} | 21 +- docker/ubuntu/{22.04 => }/built/Dockerfile | 9 +- docker/ubuntu/{22.04 => }/full/Dockerfile | 5 +- docker/ubuntu/test/Dockerfile | 14 + 20 files changed, 365 insertions(+), 314 deletions(-) rename docker/alpine/{3.16 => }/base/Dockerfile (78%) rename docker/alpine/{3.16 => }/built/Dockerfile (82%) rename docker/alpine/{3.16 => }/full/Dockerfile (66%) rename docker/alpine/{3.16 => }/test/Dockerfile (53%) delete mode 100644 docker/ubuntu/20.04/base/Dockerfile delete mode 100644 docker/ubuntu/20.04/clang-10/Dockerfile delete mode 100644 docker/ubuntu/20.04/clang-11/Dockerfile delete mode 100644 docker/ubuntu/20.04/clang-12/Dockerfile delete mode 100644 docker/ubuntu/20.04/clang-9/Dockerfile delete mode 100644 docker/ubuntu/20.04/gcc-10/Dockerfile delete mode 100644 docker/ubuntu/20.04/gcc-8/Dockerfile delete mode 100644 docker/ubuntu/20.04/gcc-9/Dockerfile delete mode 100644 docker/ubuntu/22.04/build/Dockerfile delete mode 100644 docker/ubuntu/22.04/test/Dockerfile create mode 100644 docker/ubuntu/base/Dockerfile rename docker/ubuntu/{22.04/base/Dockerfile => base/Dockerfile.save} (88%) rename docker/ubuntu/{22.04 => }/built/Dockerfile (78%) rename docker/ubuntu/{22.04 => }/full/Dockerfile (71%) create mode 100644 docker/ubuntu/test/Dockerfile diff --git a/docker/alpine/3.16/base/Dockerfile b/docker/alpine/base/Dockerfile similarity index 78% rename from docker/alpine/3.16/base/Dockerfile rename to docker/alpine/base/Dockerfile index 796c918ae..41f0c0b9d 100644 --- a/docker/alpine/3.16/base/Dockerfile +++ b/docker/alpine/base/Dockerfile @@ -1,4 +1,7 @@ -FROM --platform=$TARGETPLATFORM alpine:3.16.1 +ARG dist_name alpine +ARG dist_version 3.16 + +FROM --platform=$TARGETPLATFORM ${dist_name}:${dist_version} ENV packages="\ boost-chrono \ diff --git a/docker/alpine/3.16/built/Dockerfile b/docker/alpine/built/Dockerfile similarity index 82% rename from docker/alpine/3.16/built/Dockerfile rename to docker/alpine/built/Dockerfile index 5b6e2d652..5d1d127fe 100644 --- a/docker/alpine/3.16/built/Dockerfile +++ b/docker/alpine/built/Dockerfile @@ -1,8 +1,11 @@ ARG acct ARG repo +ARG dist_name +ARG dist_version ARG feature +ARG machine -FROM ${acct}/${repo}:alpine-3.16-${feature}-${TARGETARCH} +FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-${machine} ARG cc ARG cxx @@ -12,6 +15,7 @@ ARG extra_packages_dev2 ARG rocksdb_version 7.4.3 ARG rocksdb_url ARG ctor_url https://github.com/matrix-construct/construct +ARG machine_spec ENV CC ${cc} ENV CXX ${cxx} @@ -20,12 +24,12 @@ ENV CONFIG_SHELL bash ENV rocksdb_version ${rocksdb_version} ENV rocksdb_url https://codeload.github.com/facebook/rocksdb/tar.gz/refs/tags/v${rocksdb_version} ENV ctor_url ${ctor_url} +ENV machine_spec ${machine_spec} ENV packages_dev="\ ${packages_dev} \ autoconf \ autoconf-archive \ -autoconf2.13 \ automake \ bash \ binutils-gold \ @@ -50,7 +54,7 @@ RUN true \ && ln -sv /usr/src/rocksdb construct/deps/rocksdb \ && cd /usr/src/construct \ && ./autogen.sh \ -&& (./configure --disable-iou || (cat config.log; exit 1)) \ +&& (./configure --disable-iou --enable-generic --with-machine="${machine_spec}" || (cat config.log; exit 1)) \ && make -j `nproc` EXTRA_LDFLAGS="-Wl,--strip-all" install \ && rm -rf /usr/src/rocksdb \ && rm -rf /usr/src/construct \ diff --git a/docker/alpine/3.16/full/Dockerfile b/docker/alpine/full/Dockerfile similarity index 66% rename from docker/alpine/3.16/full/Dockerfile rename to docker/alpine/full/Dockerfile index 279343bf3..29c20389a 100644 --- a/docker/alpine/3.16/full/Dockerfile +++ b/docker/alpine/full/Dockerfile @@ -1,7 +1,10 @@ ARG acct ARG repo +ARG dist_name +ARG dist_version +ARG machine -FROM ${acct}/${repo}:alpine-3.16-base-${TARGETARCH} +FROM ${acct}/${repo}:${dist_name}-${dist_version}-base-${machine} ENV packages="\ freetype \ diff --git a/docker/alpine/3.16/test/Dockerfile b/docker/alpine/test/Dockerfile similarity index 53% rename from docker/alpine/3.16/test/Dockerfile rename to docker/alpine/test/Dockerfile index e3f886b1b..00cbb82c1 100644 --- a/docker/alpine/3.16/test/Dockerfile +++ b/docker/alpine/test/Dockerfile @@ -1,9 +1,12 @@ ARG acct ARG repo +ARG dist_name +ARG dist_version ARG feature ARG cc +ARG machine -FROM ${acct}/${repo}:alpine-3.16-${feature}-built-${cc}-${TARGETARCH} +FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-built-${cc}-${machine} ENV ircd_mods_unload_check=false WORKDIR /root diff --git a/docker/build-and-push-images.sh b/docker/build-and-push-images.sh index 06c389517..a83325143 100755 --- a/docker/build-and-push-images.sh +++ b/docker/build-and-push-images.sh @@ -3,144 +3,195 @@ BASEDIR=$(dirname "$0") ACCT=jevolk REPO=construct -ctor_url="https://github.com/matrix-construct/construct" -rocksdb_version=7.4.3 - -ARGS_="" -ARGS_="$ARGS_ --compress=true" -ARGS_="$ARGS_ --build-arg acct=$ACCT" -ARGS_="$ARGS_ --build-arg repo=$REPO" -ARGS_="$ARGS_ --build-arg ctor_url=$ctor_url" -ARGS_="$ARGS_ --build-arg rocksdb_version=$rocksdb_version" +CTOR_URL="https://github.com/matrix-construct/construct" export DOCKER_BUILDKIT=1 #export BUILDKIT_PROGRESS=plain -############################################################################### -# -# Alpine 3.16 -# +features="base full" +distros="ubuntu-22.04 ubuntu-22.10 alpine-3.16 alpine-3.17" +machines="arm64 amd64 amd64-avx amd64-avx2 amd64-avx512" +toolchains="gcc-10 gcc-11 gcc-12 clang-14 clang-15" +stages="built test" -# -# L0 - Base featured image -# +matrix() +{ + for feature_ in $features; do + for distro_ in $distros; do + for machine_ in $machines; do + for toolchain_ in $toolchains; do + for stage_ in $stages; do + build $feature_ $distro_ $machine_ $toolchain_ $stage_ + done + done + done + done + done +} -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-amd64 $BASEDIR/alpine/3.16/base +build() +{ + feature=$1 + distro=$2 + machine=$3 + toolchain=$4 + stage=$5 -# -# L1 - Fully featured image -# + dist_name=$(echo $distro | cut -d"-" -f1) + dist_version=$(echo $distro | cut -d"-" -f2) -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-amd64 $BASEDIR/alpine/3.16/full + args="" + args="$args --compress=true" + args="$args --build-arg acct=$ACCT" + args="$args --build-arg repo=$REPO" + args="$args --build-arg ctor_url=$CTOR_URL" + args="$args --build-arg dist_name=${dist_name}" + args="$args --build-arg dist_version=${dist_version}" + args="$args --build-arg feature=${feature}" + args="$args --build-arg machine=${machine}" -# -# L2/L3 - Built/Test images -# + args_dist $dist_name $dist_version + if test $? -ne 0; then return 1; fi -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=base" -ARGS="$ARGS --build-arg extra_packages_dev=gcc" -ARGS="$ARGS --build-arg extra_packages_dev1=g++" -ARGS="$ARGS --build-arg cc=gcc --build-arg cxx=g++" -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64 $BASEDIR/alpine/3.16/built -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-test-gcc-amd64 $BASEDIR/alpine/3.16/test -docker push $ACCT/$REPO:alpine-3.16-base-built-gcc-amd64 + args_toolchain $toolchain $dist_name $dist_version + if test $? -ne 0; then return 1; fi -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=base" -ARGS="$ARGS --build-arg extra_packages_dev=clang" -ARGS="$ARGS --build-arg extra_packages_dev1=llvm" -ARGS="$ARGS --build-arg extra_packages_dev2=llvm-dev" -ARGS="$ARGS --build-arg cc=clang --build-arg cxx=clang++" -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-built-clang-amd64 $BASEDIR/alpine/3.16/built -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-base-test-clang-amd64 $BASEDIR/alpine/3.16/test -docker push $ACCT/$REPO:alpine-3.16-base-built-clang-amd64 + args_machine $machine + if test $? -ne 0; then return 1; fi -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=full" -ARGS="$ARGS --build-arg extra_packages_dev=gcc" -ARGS="$ARGS --build-arg extra_packages_dev1=g++" -ARGS="$ARGS --build-arg cc=gcc --build-arg cxx=g++" -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64 $BASEDIR/alpine/3.16/built -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-test-gcc-amd64 $BASEDIR/alpine/3.16/test -docker push $ACCT/$REPO:alpine-3.16-full-built-gcc-amd64 + args_platform $machine + if test $? -ne 0; then return 1; fi -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=full" -ARGS="$ARGS --build-arg extra_packages_dev=clang" -ARGS="$ARGS --build-arg extra_packages_dev1=llvm" -ARGS="$ARGS --build-arg extra_packages_dev2=llvm-dev" -ARGS="$ARGS --build-arg cc=clang --build-arg cxx=clang++" -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-built-clang-amd64 $BASEDIR/alpine/3.16/built -docker build $ARGS -t $ACCT/$REPO:alpine-3.16-full-test-clang-amd64 $BASEDIR/alpine/3.16/test -docker push $ACCT/$REPO:alpine-3.16-full-built-clang-amd64 + # Intermediate stage build; usually cached from prior iteration. + tag="$ACCT/$REPO:${distro}-${feature}-${machine}" + cmd="$args -t $tag $BASEDIR/${dist_name}/${feature}" + docker build $cmd -############################################################################### -# -# Ubuntu 22.04 -# + # Leaf stage build; unique to each iteration. + tag="$ACCT/$REPO:${distro}-${feature}-${stage}-${toolchain}-${machine}" + cmd="$args -t $tag $BASEDIR/${dist_name}/${stage}" + docker build $cmd + return 0 +} -# -# L0 - Base featured image -# +args_dist() +{ + case $1 in + alpine) + case $2 in + 3.16) + args="$args --build-arg rocksdb_version=7.2.2" + return 0 + ;; + 3.17) + args="$args --build-arg rocksdb_version=7.7.3" + return 0 + ;; + esac + ;; + ubuntu) + case $2 in + 22.04) + args="$args --build-arg rocksdb_version=7.4.3" + args="$args --build-arg boost_version=1.74" + args="$args --build-arg icu_version=70" + return 0 + ;; + 22.10) + args="$args --build-arg rocksdb_version=7.10.2" + args="$args --build-arg boost_version=1.74" + args="$args --build-arg icu_version=71" + return 0 + ;; + esac + ;; + esac + return 1 +} -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-amd64 $BASEDIR/ubuntu/22.04/base +args_toolchain() +{ + _name=$(echo $1 | cut -d"-" -f1) + _version=$(echo $1 | cut -d"-" -f2) -# -# L1 - Fully featured image -# + case $2 in + alpine) + toolchain=$_name + case $1 in + gcc*) + args="$args --build-arg extra_packages_dev=gcc" + args="$args --build-arg extra_packages_dev1=g++" + args="$args --build-arg cc=gcc --build-arg cxx=g++" + return 0 + ;; + clang*) + args="$args --build-arg extra_packages_dev=clang" + args="$args --build-arg extra_packages_dev1=llvm" + args="$args --build-arg extra_packages_dev2=llvm-dev" + args="$args --build-arg cc=clang --build-arg cxx=clang++" + test $3 != "3.16" + return $? + ;; + esac + ;; + ubuntu) + case $1 in + gcc*) + args="$args --build-arg extra_packages_dev=gcc-${_version}" + args="$args --build-arg extra_packages_dev1=g++-${_version}" + args="$args --build-arg cc=gcc-${_version} --build-arg cxx=g++-${_version}" + return 0 + ;; + clang*) + args="$args --build-arg extra_packages_dev=clang-${_version}" + args="$args --build-arg extra_packages_dev1=llvm-${_version}-dev" + args="$args --build-arg extra_packages_dev2=llvm-spirv-${_version}" + args="$args --build-arg cc=clang-${_version} --build-arg cxx=clang++-${_version}" + return 0 + ;; + esac + ;; + esac + return 1 +} -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-amd64 $BASEDIR/ubuntu/22.04/full +args_machine() +{ + case $1 in + amd64) + args="$args --build-arg machine_spec=arch=amdfam10" + ;; + amd64-avx) + args="$args --build-arg machine_spec=arch=sandybridge" + args="$args --build-arg rocksdb_avx=1" + ;; + amd64-avx2) + args="$args --build-arg machine_spec=arch=haswell" + args="$args --build-arg rocksdb_avx2=1" + ;; + amd64-avx512) + args="$args --build-arg machine_spec=arch=skylake-avx512" + args="$args --build-arg rocksdb_avx2=1" + ;; + esac + return 0 +} -# -# L2/L3 - Build/Built/Test -# +args_platform() +{ + case $1 in + amd64*) + args="$args --platform linux/amd64" + test $(uname -m) = "x86_64" + return $? + ;; + arm64*) + args="$args --platform linux/arm64" + test $(uname -m) = "aarch64" + return $? + ;; + esac + return 1 +} -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=base" -ARGS="$ARGS --build-arg extra_packages_dev=gcc-10" -ARGS="$ARGS --build-arg extra_packages_dev1=g++-10" -ARGS="$ARGS --build-arg cc=gcc-10 --build-arg cxx=g++-10" -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-10-amd64 $BASEDIR/ubuntu/22.04/build -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-10-amd64 $BASEDIR/ubuntu/22.04/built -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-10-amd64 $BASEDIR/ubuntu/22.04/test -docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-10-amd64 -docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-10-amd64 - -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=base" -ARGS="$ARGS --build-arg extra_packages_dev=gcc-12" -ARGS="$ARGS --build-arg extra_packages_dev1=g++-12" -ARGS="$ARGS --build-arg cc=gcc-12 --build-arg cxx=g++-12" -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64 $BASEDIR/ubuntu/22.04/build -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64 $BASEDIR/ubuntu/22.04/built -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-base-test-gcc-12-amd64 $BASEDIR/ubuntu/22.04/test -docker push $ACCT/$REPO:ubuntu-22.04-base-build-gcc-12-amd64 -docker push $ACCT/$REPO:ubuntu-22.04-base-built-gcc-12-amd64 - -ARGS="$ARGS_" -ARGS="$ARGS --platform linux/amd64" -ARGS="$ARGS --build-arg feature=full" -ARGS="$ARGS --build-arg extra_packages_dev=clang-15" -ARGS="$ARGS --build-arg extra_packages_dev1=llvm-15-dev" -ARGS="$ARGS --build-arg extra_packages_dev2=llvm-spirv-15" -ARGS="$ARGS --build-arg cc=clang-15 --build-arg cxx=clang++-15" -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-build-clang-15-amd64 $BASEDIR/ubuntu/22.04/build -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-built-clang-15-amd64 $BASEDIR/ubuntu/22.04/built -docker build $ARGS -t $ACCT/$REPO:ubuntu-22.04-full-test-clang-15-amd64 $BASEDIR/ubuntu/22.04/test -docker push $ACCT/$REPO:ubuntu-22.04-full-build-clang-15-amd64 -docker push $ACCT/$REPO:ubuntu-22.04-full-built-clang-15-amd64 +matrix diff --git a/docker/ubuntu/20.04/base/Dockerfile b/docker/ubuntu/20.04/base/Dockerfile deleted file mode 100644 index 466d74a92..000000000 --- a/docker/ubuntu/20.04/base/Dockerfile +++ /dev/null @@ -1,60 +0,0 @@ -FROM ubuntu:20.04 - -ENV DEBIAN_FRONTEND=noninteractive - -RUN \ - apt-get update && \ - apt-get install --no-install-recommends -y software-properties-common && \ - apt-get update && \ - apt-get install --no-install-recommends -y \ - autoconf \ - autoconf-archive \ - autoconf2.13 \ - automake \ - autotools-dev \ - boost1.71 \ - build-essential \ - cmake \ - curl \ - git \ - libbz2-dev \ - liblz4-dev \ - libgraphicsmagick1-dev \ - libicu-dev \ - libjemalloc-dev \ - libmagic-dev \ - libnss-db \ - libsodium-dev \ - libssl-dev \ - libtool \ - libzstd-dev \ - shtool \ - xz-utils && \ - apt-get purge -y software-properties-common && \ - apt-get clean && \ - apt-get autoremove --purge -y && \ - rm -rf /var/lib/apt/lists/* - -ENV ROCKSDB_VERSION=6.6.4 - -RUN \ - cd /usr/src && \ - curl -sL https://github.com/facebook/rocksdb/archive/v${ROCKSDB_VERSION}.tar.gz -o rocksdb-${ROCKSDB_VERSION}.tar.gz && \ - tar xfvz rocksdb-${ROCKSDB_VERSION}.tar.gz && \ - rm rocksdb-${ROCKSDB_VERSION}.tar.gz && \ - ln -s /usr/src/rocksdb-${ROCKSDB_VERSION} /usr/src/rocksdb && \ - cd /usr/src/rocksdb-${ROCKSDB_VERSION} && \ - CFLAGS="-g0" \ - cmake -H. -Bbuild \ - -DCMAKE_BUILD_TYPE=Release \ - -DWITH_TESTS=0 \ - -DWITH_TOOLS=0 \ - -DUSE_RTTI=1 \ - -DWITH_LZ4=1 \ - -DWITH_GFLAGS=0 \ - -DBUILD_SHARED_LIBS=1 && \ - cmake --build build --target install && \ - rm -rf build - -RUN mkdir /build -WORKDIR /build diff --git a/docker/ubuntu/20.04/clang-10/Dockerfile b/docker/ubuntu/20.04/clang-10/Dockerfile deleted file mode 100644 index 0a670f78c..000000000 --- a/docker/ubuntu/20.04/clang-10/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CC clang-10 -ENV CXX clang++-10 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y clang-10 llvm-10-dev \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* - diff --git a/docker/ubuntu/20.04/clang-11/Dockerfile b/docker/ubuntu/20.04/clang-11/Dockerfile deleted file mode 100644 index 6b0fdb97c..000000000 --- a/docker/ubuntu/20.04/clang-11/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CC clang-11 -ENV CXX clang++-11 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y clang-11 llvm-11-dev \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* - diff --git a/docker/ubuntu/20.04/clang-12/Dockerfile b/docker/ubuntu/20.04/clang-12/Dockerfile deleted file mode 100644 index f1ff9f6ae..000000000 --- a/docker/ubuntu/20.04/clang-12/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CC clang-12 -ENV CXX clang++-12 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y clang-12 llvm-12-dev \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* - diff --git a/docker/ubuntu/20.04/clang-9/Dockerfile b/docker/ubuntu/20.04/clang-9/Dockerfile deleted file mode 100644 index 11dbbdc79..000000000 --- a/docker/ubuntu/20.04/clang-9/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CC clang-9 -ENV CXX clang++-9 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y clang-9 llvm-9-dev \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* - diff --git a/docker/ubuntu/20.04/gcc-10/Dockerfile b/docker/ubuntu/20.04/gcc-10/Dockerfile deleted file mode 100644 index f6677bc24..000000000 --- a/docker/ubuntu/20.04/gcc-10/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CXX g++-10 -ENV CC gcc-10 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y software-properties-common \ - && apt-get update \ - && apt-get install --no-install-recommends -y g++-10 gcc-10 \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* diff --git a/docker/ubuntu/20.04/gcc-8/Dockerfile b/docker/ubuntu/20.04/gcc-8/Dockerfile deleted file mode 100644 index c588e4e65..000000000 --- a/docker/ubuntu/20.04/gcc-8/Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CXX g++-8 -ENV CC gcc-8 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y g++-8 gcc-8 \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* diff --git a/docker/ubuntu/20.04/gcc-9/Dockerfile b/docker/ubuntu/20.04/gcc-9/Dockerfile deleted file mode 100644 index 05e0a695f..000000000 --- a/docker/ubuntu/20.04/gcc-9/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM jevolk/construct:ubuntu-20.04 - -ENV CXX g++-9 -ENV CC gcc-9 - -RUN apt-get update \ - && apt-get install --no-install-recommends -y software-properties-common \ - && apt-get update \ - && apt-get install --no-install-recommends -y g++-9 gcc-9 \ - && apt-get clean -y \ - && rm -rf /var/lib/apt/lists/* diff --git a/docker/ubuntu/22.04/build/Dockerfile b/docker/ubuntu/22.04/build/Dockerfile deleted file mode 100644 index ff6d9ec5a..000000000 --- a/docker/ubuntu/22.04/build/Dockerfile +++ /dev/null @@ -1,37 +0,0 @@ -ARG acct -ARG repo -ARG feature - -FROM ${acct}/${repo}:ubuntu-22.04-${feature}-${TARGETARCH} - -ARG cc -ARG cxx -ARG extra_packages_dev -ARG extra_packages_dev1 -ARG extra_packages_dev2 -ARG ctor_url https://github.com/matrix-construct/construct - -ENV CC ${cc} -ENV CXX ${cxx} -ENV ctor_url ${ctor_url} - -ENV packages_dev="\ -${packages_dev} \ -autoconf \ -autoconf-archive \ -autoconf2.13 \ -automake \ -autotools-dev \ -git \ -libtool \ -shtool \ -${extra_packages_dev} \ -${extra_packages_dev1} \ -${extra_packages_dev2} \ -" - -RUN true \ -&& eval ${do_install} ${packages_dev} \ -&& eval ${do_fetch_rocksdb} \ -&& eval ${do_clean} \ -&& true diff --git a/docker/ubuntu/22.04/test/Dockerfile b/docker/ubuntu/22.04/test/Dockerfile deleted file mode 100644 index f3a5ec19c..000000000 --- a/docker/ubuntu/22.04/test/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -ARG acct -ARG repo -ARG feature -ARG cc - -FROM ${acct}/${repo}:ubuntu-22.04-${feature}-built-${cc}-${TARGETARCH} - -WORKDIR /root -RUN true \ -&& construct -debug -smoketest localhost \ -&& true diff --git a/docker/ubuntu/base/Dockerfile b/docker/ubuntu/base/Dockerfile new file mode 100644 index 000000000..3a6dd393f --- /dev/null +++ b/docker/ubuntu/base/Dockerfile @@ -0,0 +1,133 @@ +ARG dist_name ubuntu +ARG dist_version 22.04 + +FROM --platform=$TARGETPLATFORM ${dist_name}:${dist_version} + +ARG skiprocks +ARG rocksdb_version 7.4.5 +ARG rocksdb_url +ARG rocksdb_avx 0 +ARG rocksdb_avx2 0 +ARG boost_version 1.74 +ARG icu_version 70 + +ENV rocksdb_version ${rocksdb_version} +ENV rocksdb_url https://codeload.github.com/facebook/rocksdb/tar.gz/refs/tags/v${rocksdb_version} +ENV rocksdb_avx ${rocksdb_avx} +ENV rocksdb_avx2 ${rocksdb_avx2} +ENV boost_version ${boost_version} +ENV icu_version ${icu_version} + +ENV packages="\ +ca-certificates \ +libatomic1 \ +libjemalloc2 \ +libboost-chrono${boost_version}.0 \ +libboost-context${boost_version}.0 \ +libboost-coroutine${boost_version}.0 \ +libboost-system${boost_version}.0 \ +libboost-thread${boost_version}.0 \ +libicu${icu_version} \ +libnss-db \ +libsodium23 \ +libssl3 \ +liblz4-1 \ +libmagic1 \ +libzstd1 \ +" + +ENV packages_rocksdb_dev="\ +build-essential \ +cmake \ +libjemalloc-dev \ +liblz4-dev \ +libzstd-dev \ +xz-utils \ +" + +ENV packages_dev="\ +${packages_rocksdb_dev} \ +libboost-chrono${boost_version}-dev \ +libboost-context${boost_version}-dev \ +libboost-coroutine${boost_version}-dev \ +libboost-system${boost_version}-dev \ +libboost-thread${boost_version}-dev \ +libicu-dev \ +libmagic-dev \ +libsodium-dev \ +libssl-dev \ +" + +ENV rocksdb_cmake="\ +-DCMAKE_RULE_MESSAGES:BOOL=OFF \ +-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ +-DCMAKE_BUILD_TYPE=Release \ +-DBUILD_SHARED_LIBS=1 \ +-DFAIL_ON_WARNINGS=0 \ +-DUSE_RTTI=1 \ +-DPORTABLE=1 \ +-DFORCE_AVX=${rocksdb_avx} \ +-DFORCE_AVX2=${rocksdb_avx2} \ +-DWITH_JNI=0 \ +-DWITH_TESTS=0 \ +-DWITH_BENCHMARK_TOOLS=0 \ +-DWITH_CORE_TOOLS=0 \ +-DWITH_GFLAGS=0 \ +-DWITH_LIBURING=0 \ +-DWITH_JEMALLOC=1 \ +-DWITH_LZ4=1 \ +-DWITH_ZSTD=1 \ +" + +ENV do_install true \ +&& export DEBIAN_FRONTEND=noninteractive \ +&& apt-get update \ +&& apt-get install --no-install-recommends -y -f + +ENV do_purge true \ +&& export DEBIAN_FRONTEND=noninteractive \ +&& apt-get purge -y + +ENV do_clean true \ +&& export DEBIAN_FRONTEND=noninteractive \ +&& apt-get clean \ +&& apt-get autoremove --purge -y \ +&& rm -rf /var/lib/apt/lists/* \ +&& true + +ENV do_fetch_rocksdb true \ +&& eval ${do_install} curl \ +&& cd /usr/src \ +&& curl -sL ${rocksdb_url} -o rocksdb-${rocksdb_version}.tar.gz \ +&& tar xfvz rocksdb-${rocksdb_version}.tar.gz \ +&& rm rocksdb-${rocksdb_version}.tar.gz \ +&& mv /usr/src/rocksdb-${rocksdb_version} /usr/src/rocksdb \ +&& cd - \ +&& eval ${do_purge} curl \ +&& true + +RUN true \ +&& eval ${do_install} ${packages} \ +&& update-ca-certificates \ +&& eval ${do_clean} \ +&& mkdir /build \ +&& true + +WORKDIR /build +RUN true \ +&& if test -n "$skiprocks"; then \ + exit 0; \ +fi \ +&& eval ${do_install} ${packages_rocksdb_dev} \ +&& eval ${do_fetch_rocksdb} \ +&& cd /usr/src/rocksdb \ +&& \ +CFLAGS="-g0 -ftls-model=initial-exec" \ +LDFLAGS="-Wl,--strip-all" \ +cmake -H. -Bbuild ${rocksdb_cmake} \ +&& cmake --build build --target install --parallel `nproc` \ +&& rm -rf /usr/lib/$(uname -m)-linux-gnu/librocksdb.a \ +&& rm -rf /usr/src/rocksdb \ +&& eval ${do_purge} ${packages_rocksdb_dev} \ +&& eval ${do_clean} \ +&& true diff --git a/docker/ubuntu/22.04/base/Dockerfile b/docker/ubuntu/base/Dockerfile.save similarity index 88% rename from docker/ubuntu/22.04/base/Dockerfile rename to docker/ubuntu/base/Dockerfile.save index 469217a8f..e1644b3f6 100644 --- a/docker/ubuntu/22.04/base/Dockerfile +++ b/docker/ubuntu/base/Dockerfile.save @@ -1,11 +1,19 @@ -FROM ubuntu:22.04 +ARG distribution + +FROM --platform=$TARGETPLATFORM $distribution ARG skiprocks ARG rocksdb_version 7.4.5 ARG rocksdb_url +ARG rocksdb_portable 1 +ARG rocksdb_avx 0 +ARG rocksdb_avx2 0 ENV rocksdb_version ${rocksdb_version} ENV rocksdb_url https://codeload.github.com/facebook/rocksdb/tar.gz/refs/tags/v${rocksdb_version} +ENV rocksdb_portable ${rocksdb_portable} +ENV rocksdb_avx ${rocksdb_avx} +ENV rocksdb_avx2 ${rocksdb_avx2} ENV packages="\ ca-certificates \ @@ -50,19 +58,22 @@ libssl-dev \ ENV rocksdb_cmake="\ -DCMAKE_RULE_MESSAGES:BOOL=OFF \ -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON \ +-DCMAKE_BUILD_TYPE=Release \ +-DBUILD_SHARED_LIBS=1 \ +-DFAIL_ON_WARNINGS=0 \ +-DUSE_RTTI=1 \ +-DPORTABLE=${rocksdb_portable} \ +-DFORCE_AVX=${rocksdb_avx} \ +-DFORCE_AVX2=${rocksdb_avx2} \ -DWITH_JNI=0 \ -DWITH_TESTS=0 \ -DWITH_BENCHMARK_TOOLS=0 \ -DWITH_CORE_TOOLS=0 \ --DFAIL_ON_WARNINGS=0 \ --DCMAKE_BUILD_TYPE=Release \ -DWITH_GFLAGS=0 \ -DWITH_LIBURING=0 \ -DWITH_JEMALLOC=1 \ -DWITH_LZ4=1 \ -DWITH_ZSTD=1 \ --DUSE_RTTI=1 \ --DBUILD_SHARED_LIBS=1 \ " ENV do_install true \ diff --git a/docker/ubuntu/22.04/built/Dockerfile b/docker/ubuntu/built/Dockerfile similarity index 78% rename from docker/ubuntu/22.04/built/Dockerfile rename to docker/ubuntu/built/Dockerfile index 70b28ccf3..c8d52feb9 100644 --- a/docker/ubuntu/22.04/built/Dockerfile +++ b/docker/ubuntu/built/Dockerfile @@ -1,8 +1,11 @@ ARG acct ARG repo +ARG dist_name +ARG dist_version ARG feature +ARG machine -FROM ${acct}/${repo}:ubuntu-22.04-${feature}-${TARGETARCH} +FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-${machine} ARG cc ARG cxx @@ -10,10 +13,12 @@ ARG extra_packages_dev ARG extra_packages_dev1 ARG extra_packages_dev2 ARG ctor_url https://github.com/matrix-construct/construct +ARG machine_spec ENV CC ${cc} ENV CXX ${cxx} ENV ctor_url ${ctor_url} +ENV machine_spec ${machine_spec} ENV packages_dev="\ ${packages_dev} \ @@ -38,7 +43,7 @@ RUN true \ && rmdir -v deps/rocksdb \ && ln -sv /usr/src/rocksdb deps \ && ./autogen.sh \ -&& ./configure \ +&& ./configure --enable-generic --with-machine="${machine_spec}" \ && make -j `nproc` \ && make install \ && cd .. \ diff --git a/docker/ubuntu/22.04/full/Dockerfile b/docker/ubuntu/full/Dockerfile similarity index 71% rename from docker/ubuntu/22.04/full/Dockerfile rename to docker/ubuntu/full/Dockerfile index 7083a316e..e8e9be169 100644 --- a/docker/ubuntu/22.04/full/Dockerfile +++ b/docker/ubuntu/full/Dockerfile @@ -1,7 +1,10 @@ ARG acct ARG repo +ARG dist_name +ARG dist_version +ARG machine -FROM ${acct}/${repo}:ubuntu-22.04-base-${TARGETARCH} +FROM ${acct}/${repo}:${dist_name}-${dist_version}-base-${machine} ENV packages="\ libgraphicsmagick-q16-3 \ diff --git a/docker/ubuntu/test/Dockerfile b/docker/ubuntu/test/Dockerfile new file mode 100644 index 000000000..92079b611 --- /dev/null +++ b/docker/ubuntu/test/Dockerfile @@ -0,0 +1,14 @@ +ARG acct +ARG repo +ARG dist_name +ARG dist_version +ARG feature +ARG cc +ARG machine + +FROM ${acct}/${repo}:${dist_name}-${dist_version}-${feature}-built-${cc}-${machine} + +WORKDIR /root +RUN true \ +&& construct -debug -smoketest localhost \ +&& true