From 194bc47a896f4b0300ee844c239ec6ecff8f4919 Mon Sep 17 00:00:00 2001 From: rafie Date: Tue, 2 Jun 2020 18:31:21 +0300 Subject: [PATCH 01/17] Multi-platform build --- Dockerfile | 25 ++++++-- Dockerfile.gpu | 30 +++++++--- opt/build/docker/Makefile | 116 ++++++-------------------------------- opt/readies | 2 +- opt/system-setup.py | 33 +++++++---- 5 files changed, 84 insertions(+), 122 deletions(-) diff --git a/Dockerfile b/Dockerfile index dbc7362fd..d730a5c1d 100755 --- a/Dockerfile +++ b/Dockerfile @@ -11,10 +11,20 @@ ARG OS=debian:buster-slim # ARCH=x64|arm64v8|arm32v7 ARG ARCH=x64 +ARG PACK=0 +ARG TEST=0 + #---------------------------------------------------------------------------------------------- FROM redisfab/redis:${REDIS_VER}-${ARCH}-${OSNICK} AS redis FROM ${OS} AS builder +ARG OSNICK +ARG OS +ARG ARCH +ARG REDIS_VER + +RUN echo "Building for ${OSNICK} (${OS}) for ${ARCH}" + WORKDIR /build COPY --from=redis /usr/local/ /usr/local/ @@ -32,16 +42,23 @@ ARG BUILD_ARGS="" ADD ./ /build RUN make -C opt build $BUILD_ARGS SHOW=1 -ARG PACK=0 -ARG TEST=0 +ARG PACK +ARG TEST RUN if [ "$PACK" = "1" ]; then make -C opt pack; fi -RUN if [ "$TEST" = "1" ]; then make -C opt test $BUILD_ARGS NO_LFS=1; fi +RUN if [ "$TEST" = "1" ]; then TEST= make -C opt test $BUILD_ARGS NO_LFS=1; fi #---------------------------------------------------------------------------------------------- FROM redisfab/redis:${REDIS_VER}-${ARCH}-${OSNICK} -RUN set -e; apt-get -qq update; apt-get -q install -y libgomp1 +ARG OSNICK +ARG OS +ARG ARCH +ARG REDIS_VER +ARG PACK + +RUN if [ ! -z $(command -v apt-get) ]; then apt-get -qq update; apt-get -q install -y libgomp1; fi +RUN if [ ! -z $(command -v yum) ]; then yum install -y libgomp; fi ENV REDIS_MODULES /usr/lib/redis/modules ENV LD_LIBRARY_PATH $REDIS_MODULES diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 7e8d73b27..8a3160b87 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -8,11 +8,24 @@ ARG OSNICK=bionic # ARCH=x64|arm64v8|arm32v7 ARG ARCH=x64 +# OS=ubuntu18.04|ubuntu16.04|centos7 +ARG OS=ubuntu18.04 + +ARG CUDA_VER=10.1-cudnn7 + +ARG PACK=0 +ARG TEST=0 + #---------------------------------------------------------------------------------------------- FROM redisfab/redis:${REDIS_VER}-${ARCH}-${OSNICK} AS redis -FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 AS builder +FROM nvidia/cuda:${CUDA_VER}-devel-${OS} AS builder + +ARG OSNICK +ARG OS +ARG CUDA_VER + +RUN echo "Building for ${OSNICK} (${OS})" -# ENV DEPS "git ca-certificates wget unzip cmake libgomp1 patchelf coreutils tcl libjemalloc-dev" ENV NVIDIA_VISIBLE_DEVICES all ENV NVIDIA_DRIVER_CAPABILITIES compute,utility @@ -33,16 +46,19 @@ ARG BUILD_ARGS="" ADD ./ /build RUN make -C opt build GPU=1 $BUILD_ARGS SHOW=1 -ARG PACK=0 -ARG TEST=0 +ARG PACK +ARG TEST RUN if [ "$PACK" = "1" ]; then make -C opt pack GPU=1; fi -RUN if [ "$TEST" = "1" ]; then TEST="" make -C opt test GPU=1 $BUILD_ARGS NO_LFS=1; fi +RUN if [ "$TEST" = "1" ]; then TEST= make -C opt test GPU=1 $BUILD_ARGS NO_LFS=1; fi #---------------------------------------------------------------------------------------------- -FROM nvidia/cuda:10.1-cudnn7-runtime-ubuntu18.04 +FROM nvidia/cuda:${CUDA_VER}-runtime-${OS} + +ARG OS -RUN set -e; apt-get -qq update; apt-get -q install -y libgomp1 +RUN if [ ! -z $(command -v apt-get) ]; then apt-get -qq update; apt-get -q install -y libgomp1; fi +RUN if [ ! -z $(command -v yum) ]; then yum install -y libgomp; fi ENV REDIS_MODULES /usr/lib/redis/modules RUN mkdir -p $REDIS_MODULES/ diff --git a/opt/build/docker/Makefile b/opt/build/docker/Makefile index 37401ee30..55ec70f45 100755 --- a/opt/build/docker/Makefile +++ b/opt/build/docker/Makefile @@ -1,22 +1,12 @@ -.NOTPARALLEL: - ROOT=../../.. +include $(ROOT)/opt/readies/mk/main -ifeq ($(VERSION),) -VERSION:=$(patsubst v%,%,$(shell git describe --tags `git rev-list --tags --max-count=1`)) -endif -ifeq ($(VERSION),) -$(error Cannot determine version. Aborting.) -endif - -# OSNICK=buster|stretch|bionic +# OSNICK=buster|stretch|bionic|xenial|centos7 OSNICK ?= buster REPO=redisfab -STEM=$(REPO)/redisai-cpu -BUILD_OPT=--rm -# --squash +STEM=$(REPO)/redisai FETCH_ARGS.arm64v8=WITH_ORT=0 WITH_PT=0 BUILD_ARGS.arm64v8=WITH_ORT=0 WITH_PT=0 @@ -24,95 +14,25 @@ BUILD_ARGS.arm64v8=WITH_ORT=0 WITH_PT=0 FETCH_ARGS.arm32v7=WITH_ORT=0 WITH_PT=0 BUILD_ARGS.arm32v7=WITH_ORT=0 WITH_PT=0 -PACK ?= 1 -TEST ?= 1 - -#---------------------------------------------------------------------------------------------- - -define targets # (1=OP, 2=op) -$(1)_TARGETS := -$(1)_TARGETS += $(if $(findstring $(X64),1),$(2)_x64) -$(1)_TARGETS += $(if $(findstring $(ARM7),1),$(2)_arm32v7) -$(1)_TARGETS += $(if $(findstring $(ARM8),1),$(2)_arm64v8) - -$(1)_TARGETS += $$(if $$(strip $$($(1)_TARGETS)),,$(2)_x64 $(2)_arm32v7 $(2)_arm64v8) -endef - -$(eval $(call targets,BUILD,build)) -$(eval $(call targets,PUSH,push)) - -#---------------------------------------------------------------------------------------------- - -define build_x64 # (1=arch) -build_$(1): - docker build $(BUILD_OPT) -t $(STEM)-$(OSNICK):$(VERSION)-x64 -f $(ROOT)/Dockerfile \ - --build-arg DEPS_ARGS="$(FETCH_ARGS.x64)" \ - --build-arg BUILD_ARGS="$(BUILD_ARGS.x64)" \ - --build-arg PACK="$(PACK)" \ - --build-arg TEST="$(TEST)" \ - $(ROOT) - -.PHONY: build_$(1) -endef +ifeq ($(CPU),1) +VAR=cpu -define build_arm # (1=arch) -build_$(1): - docker build $(BUILD_OPT) -t $(STEM)-$(OSNICK):$(VERSION)-$(1) -f $(ROOT)/Dockerfile.arm \ - --build-arg ARCH=$(1) \ - --build-arg DEPS_ARGS="$(FETCH_ARGS.$(1))" \ - --build-arg BUILD_ARGS="$(BUILD_ARGS.$(1))" \ - --build-arg PACK="$(PACK)" \ - --build-arg TEST="$(TEST)" \ - $(ROOT) +else ifeq ($(GPU),1) +VAR=gpu +DOCKERFILE_STEM ?= $(ROOT)/Dockerfile.gpu -.PHONY: build_$(1) -endef +OS.custom:=1 -define push # (1=arch) -push_$(1): - docker push $(STEM)-$(OSNICK):$(VERSION)-$(1) +OS.centos7=centos7 +OS.bionic=ubuntu18.04 +OS.xenial=ubuntu16.04 -.PHONY: push_$(1) -endef - -define create_manifest # (1=version) -docker manifest create -a $(STEM)-$(OSNICK):$(1) \ - -a $(STEM)-$(OSNICK):$(VERSION)-x64 \ - -a $(STEM)-$(OSNICK):$(VERSION)-arm64v8 \ - -a $(STEM)-$(OSNICK):$(VERSION)-arm32v7 -docker manifest annotate $(STEM)-$(OSNICK):$(1) $(STEM)-$(OSNICK):$(VERSION)-arm32v7 --os linux --arch arm --variant v7 -docker manifest annotate $(STEM)-$(OSNICK):$(1) $(STEM)-$(OSNICK):$(VERSION)-arm64v8 --os linux --arch arm64 --variant v8 -docker manifest push -p $(STEM)-$(OSNICK):$(1) -endef - -#---------------------------------------------------------------------------------------------- - -all: build publish - -$(eval $(call build_x64,x64)) -$(eval $(call build_arm,arm64v8)) -$(eval $(call build_arm,arm32v7)) - -$(eval $(call push,x64)) -$(eval $(call push,arm64v8)) -$(eval $(call push,arm32v7)) - -build: $(BUILD_TARGETS) - -ifneq ($(PUSH),0) -publish: $(PUSH_TARGETS) else -publish: -endif - $(call create_manifest,$(VERSION)) - $(call create_manifest,latest) - -show: - @echo "$(STEM)-$(OSNICK):" -ifeq ($(INSPECT),1) - @docker manifest inspect $(STEM)-$(OSNICK):$(VERSION) | jq -else - @curl -s -X "GET" https://cloud.docker.com/v2/repositories/$(STEM)-$(OSNICK)/tags/ | jq +VAR=cpu endif -.PHONY: build publish show +DOCKER_BUILD_ARGS += \ + DEPS_ARGS="$(FETCH_ARGS.$(ARCH))" \ + BUILD_ARGS="$(BUILD_ARGS.$(ARCH))" + +include $(MK)/docker diff --git a/opt/readies b/opt/readies index 73e76f5c4..a65964d33 160000 --- a/opt/readies +++ b/opt/readies @@ -1 +1 @@ -Subproject commit 73e76f5c42fcf70cbe2d181eb8f1ce8d348f7be7 +Subproject commit a65964d33d81440ca6f0df53deb725f3c22a4c8f diff --git a/opt/system-setup.py b/opt/system-setup.py index 26fe98ca7..523edfd95 100755 --- a/opt/system-setup.py +++ b/opt/system-setup.py @@ -2,10 +2,11 @@ import sys import os -from subprocess import Popen, PIPE import argparse -sys.path.insert(0, os.path.join(os.path.dirname(__file__), "readies")) +HERE = os.path.dirname(__file__) +ROOT = os.path.abspath(os.path.join(HERE, "..")) +sys.path.insert(0, os.path.join(HERE, "readies")) import paella #---------------------------------------------------------------------------------------------- @@ -22,53 +23,61 @@ def common_first(self): if self.os == 'linux': self.install("ca-certificates") - self.install("git cmake unzip wget patchelf awscli") + self.install("git unzip wget patchelf awscli") self.install("coreutils") # for realpath def debian_compat(self): - self.install("build-essential") + self.install("build-essential cmake") + self.install("python3-regex") self.install("python3-venv python3-psutil python3-networkx python3-numpy") # python3-skimage self.install_git_lfs_on_linux() def redhat_compat(self): self.group_install("'Development Tools'") + # self.install("cmake3") + # self.run("ln -s `command -v cmake3` /usr/local/bin/cmake") self.install("redhat-lsb-core") + self.install("centos-release-scl") + self.install("devtoolset-8") + self.run("cp /opt/rh/devtoolset-8/enable /etc/profile.d/scl-devtoolset-8.sh") if not self.dist == "amzn": self.install("epel-release") - self.install("python36 python36-pip") + # self.install("python36 python36-pip") + self.install("python3-devel libaec-devel") self.install("python36-psutil") else: self.run("amazon-linux-extras install epel", output_on_error=True) - self.install("python3 python3-devel") + self.install("python3-devel") self.pip3_install("psutil") self.install_git_lfs_on_linux() def fedora(self): self.group_install("'Development Tools'") + self.install("cmake") + self.run("ln -s `command -v cmake3` /usr/local/bin/cmake") self.install("python3-venv python3-psutil python3-networkx") self.install_git_lfs_on_linux() def macosx(self): - p = Popen('xcode-select -p', stdout=PIPE, close_fds=True, shell=True) - out, _ = p.communicate() - if out.splitlines() == []: + if sh('xcode-select -p') == '': fatal("Xcode tools are not installed. Please run xcode-select --install.") self.install_gnu_utils() + self.install("cmake") self.install("git-lfs") self.install("redis") def common_last(self): - self.run("python3 -m pip uninstall -y ramp-packer RLTest") + self.run("python3 -m pip uninstall -y ramp-packer RLTest || true") # redis-py-cluster should be installed from git due to redis-py dependency self.pip3_install("--no-cache-dir git+https://github.com/Grokzen/redis-py-cluster.git@master") self.pip3_install("--no-cache-dir git+https://github.com/RedisLabsModules/RLTest.git@master") self.pip3_install("--no-cache-dir git+https://github.com/RedisLabs/RAMP@master") - root = os.path.join(os.path.dirname(__file__), "..") - self.pip3_install("-r {}/test/test_requirements.txt".format(root)) + self.pip3_install("-r %s/readies/paella/requirements.txt" % HERE) + self.pip3_install("-r %s/test/test_requirements.txt" % ROOT) self.pip3_install("mkdocs mkdocs-material mkdocs-extensions") From 8b9105b8383467b809a6323e8d6f5389fde552e2 Mon Sep 17 00:00:00 2001 From: rafie Date: Tue, 2 Jun 2020 19:09:01 +0300 Subject: [PATCH 02/17] Added cmake3 --- opt/system-setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/opt/system-setup.py b/opt/system-setup.py index 523edfd95..97d0e0cbc 100755 --- a/opt/system-setup.py +++ b/opt/system-setup.py @@ -34,8 +34,8 @@ def debian_compat(self): def redhat_compat(self): self.group_install("'Development Tools'") - # self.install("cmake3") - # self.run("ln -s `command -v cmake3` /usr/local/bin/cmake") + self.install("cmake3") + self.run("ln -s `command -v cmake3` /usr/local/bin/cmake") self.install("redhat-lsb-core") self.install("centos-release-scl") self.install("devtoolset-8") From 618953447faff4d31486b88221005514a75d6a4c Mon Sep 17 00:00:00 2001 From: rafie Date: Tue, 2 Jun 2020 22:25:08 +0300 Subject: [PATCH 03/17] centos7: devtoolset-8 --- Dockerfile | 4 +++- opt/readies | 2 +- opt/system-setup.py | 2 ++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index d730a5c1d..f69aefa2f 100755 --- a/Dockerfile +++ b/Dockerfile @@ -40,7 +40,9 @@ RUN if [ "$DEPS_ARGS" = "" ]; then ./get_deps.sh cpu; else env $DEPS_ARGS ./get_ ARG BUILD_ARGS="" ADD ./ /build -RUN make -C opt build $BUILD_ARGS SHOW=1 +RUN set -e ;\ + . ./opt/readies/bin/sourced ./profile.d ;\ + make -C opt build $BUILD_ARGS SHOW=1 ARG PACK ARG TEST diff --git a/opt/readies b/opt/readies index a65964d33..80d698938 160000 --- a/opt/readies +++ b/opt/readies @@ -1 +1 @@ -Subproject commit a65964d33d81440ca6f0df53deb725f3c22a4c8f +Subproject commit 80d6989385c08430f49433d95e8510768aeafc78 diff --git a/opt/system-setup.py b/opt/system-setup.py index 97d0e0cbc..503e5e9e8 100755 --- a/opt/system-setup.py +++ b/opt/system-setup.py @@ -40,6 +40,8 @@ def redhat_compat(self): self.install("centos-release-scl") self.install("devtoolset-8") self.run("cp /opt/rh/devtoolset-8/enable /etc/profile.d/scl-devtoolset-8.sh") + paella.mkdir_p("%s/profile.d" % ROOT) + self.run("cp /opt/rh/devtoolset-8/enable %s/profile.d/scl-devtoolset-8.sh" % ROOT) if not self.dist == "amzn": self.install("epel-release") From a3ba45dd9251fdd4f444b7aa82f27a3dd658db53 Mon Sep 17 00:00:00 2001 From: rafie Date: Tue, 2 Jun 2020 22:45:33 +0300 Subject: [PATCH 04/17] enable utf8 in centos7 --- opt/pack.sh | 3 +-- opt/system-setup.py | 6 ++++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/opt/pack.sh b/opt/pack.sh index 9f2fe557f..6941841ae 100755 --- a/opt/pack.sh +++ b/opt/pack.sh @@ -18,8 +18,7 @@ REDIS_ENT_LIB_PATH=/opt/redislabs/lib BINDIR=$(realpath $BINDIR) INSTALL_DIR=$(realpath $INSTALL_DIR) -export LC_ALL=C.UTF-8 -export LANG=C.UTF-8 +. $ROOT/opt/readies/bin/enable-utf8 export ARCH=$($ROOT/opt/readies/bin/platform --arch) export OS=$($ROOT/opt/readies/bin/platform --os) diff --git a/opt/system-setup.py b/opt/system-setup.py index 503e5e9e8..c1a96b4fd 100755 --- a/opt/system-setup.py +++ b/opt/system-setup.py @@ -33,10 +33,13 @@ def debian_compat(self): self.install_git_lfs_on_linux() def redhat_compat(self): + self.install("redhat-lsb-core") + self.run("%s/readies/bin/enable-utf8" % HERE) + self.group_install("'Development Tools'") self.install("cmake3") self.run("ln -s `command -v cmake3` /usr/local/bin/cmake") - self.install("redhat-lsb-core") + self.install("centos-release-scl") self.install("devtoolset-8") self.run("cp /opt/rh/devtoolset-8/enable /etc/profile.d/scl-devtoolset-8.sh") @@ -45,7 +48,6 @@ def redhat_compat(self): if not self.dist == "amzn": self.install("epel-release") - # self.install("python36 python36-pip") self.install("python3-devel libaec-devel") self.install("python36-psutil") else: From ace645042bc24f10d9a59dad8931da227835bd77 Mon Sep 17 00:00:00 2001 From: rafie Date: Tue, 2 Jun 2020 22:55:19 +0300 Subject: [PATCH 05/17] Dockerfile-s changes --- Dockerfile | 2 +- Dockerfile.arm | 33 +++++++++++++++++++++++++++------ Dockerfile.gpu | 7 +++++-- Dockerfile.gpu-test | 15 +++++++++++---- 4 files changed, 44 insertions(+), 13 deletions(-) diff --git a/Dockerfile b/Dockerfile index f69aefa2f..c1933383e 100755 --- a/Dockerfile +++ b/Dockerfile @@ -23,7 +23,7 @@ ARG OS ARG ARCH ARG REDIS_VER -RUN echo "Building for ${OSNICK} (${OS}) for ${ARCH}" +RUN echo "Building for ${OSNICK} (${OS}) for ${ARCH} [with Redis ${REDIS_VER}]" WORKDIR /build COPY --from=redis /usr/local/ /usr/local/ diff --git a/Dockerfile.arm b/Dockerfile.arm index 64f9fbde3..dd08fc937 100755 --- a/Dockerfile.arm +++ b/Dockerfile.arm @@ -11,12 +11,24 @@ ARG OS=debian:buster-slim # ARCH=arm64v8|arm32v7 ARG ARCH=arm64v8 +ARG PACK=0 +ARG TEST=0 + #---------------------------------------------------------------------------------------------- -FROM redisfab/redis-xbuild:${REDIS_VER}-${ARCH}-${OSNICK} AS builder +FROM redisfab/redis:${REDIS_VER}-${ARCH}-${OSNICK} AS redis +FROM redisfab/xbuild:${ARCH}-${OS} AS builder + +ARG OSNICK +ARG OS +ARG ARCH +ARG REDIS_VER RUN [ "cross-build-start" ] +RUN echo "Building for ${OSNICK} (${OS}) for ${ARCH}" + WORKDIR /build +COPY --from=redis /usr/local/ /usr/local/ COPY ./opt/ opt/ COPY ./test/test_requirements.txt test/ @@ -30,13 +42,15 @@ RUN if [ "$DEPS_ARGS" = "" ]; then ./get_deps.sh cpu; else env $DEPS_ARGS ./get_ ARG BUILD_ARGS="" ADD ./ /build -RUN make -C opt build $BUILD_ARGS SHOW=1 +RUN set -e ;\ + . ./opt/readies/bin/sourced ./profile.d ;\ + make -C opt build $BUILD_ARGS SHOW=1 -ARG PACK=0 -ARG TEST=0 +ARG PACK +ARG TEST RUN if [ "$PACK" = "1" ]; then make -C opt pack; fi -RUN if [ "$TEST" = "1" ]; then make -C opt test $BUILD_ARGS NO_LFS=1; fi +RUN if [ "$TEST" = "1" ]; then TEST= make -C opt test $BUILD_ARGS NO_LFS=1; fi RUN [ "cross-build-end" ] @@ -45,7 +59,14 @@ FROM redisfab/redis-xbuild:${REDIS_VER}-${ARCH}-${OSNICK} RUN [ "cross-build-start" ] -RUN set -e; apt-get -qq update; apt-get -q install -y libgomp1 +ARG OSNICK +ARG OS +ARG ARCH +ARG REDIS_VER +ARG PACK + +RUN if [ ! -z $(command -v apt-get) ]; then apt-get -qq update; apt-get -q install -y libgomp1; fi +RUN if [ ! -z $(command -v yum) ]; then yum install -y libgomp; fi ENV REDIS_MODULES /usr/lib/redis/modules ENV LD_LIBRARY_PATH $REDIS_MODULES diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 8a3160b87..83b221282 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -22,9 +22,10 @@ FROM nvidia/cuda:${CUDA_VER}-devel-${OS} AS builder ARG OSNICK ARG OS +ARG REDIS_VER ARG CUDA_VER -RUN echo "Building for ${OSNICK} (${OS})" +RUN echo "Building for ${OSNICK} (${OS}) [with Redis ${REDIS_VER}]" ENV NVIDIA_VISIBLE_DEVICES all ENV NVIDIA_DRIVER_CAPABILITIES compute,utility @@ -44,7 +45,9 @@ RUN if [ "$DEPS_ARGS" = "" ]; then ./get_deps.sh gpu; else env $DEPS_ARGS ./get_ ARG BUILD_ARGS="" ADD ./ /build -RUN make -C opt build GPU=1 $BUILD_ARGS SHOW=1 +RUN set -e ;\ + . ./opt/readies/bin/sourced ./profile.d ;\ + make -C opt build GPU=1 $BUILD_ARGS SHOW=1 ARG PACK ARG TEST diff --git a/Dockerfile.gpu-test b/Dockerfile.gpu-test index 20dcf0a35..943a03bd0 100644 --- a/Dockerfile.gpu-test +++ b/Dockerfile.gpu-test @@ -8,9 +8,15 @@ ARG OSNICK=bionic # ARCH=x64|arm64v8|arm32v7 ARG ARCH=x64 +# OS=ubuntu18.04|ubuntu16.04|centos7 +ARG OS=ubuntu18.04 + +ARG CUDA_VER=10.1-cudnn7 + +ARG PACK=1 #---------------------------------------------------------------------------------------------- FROM redisfab/redis:${REDIS_VER}-${ARCH}-${OSNICK} AS redis -FROM nvidia/cuda:10.1-cudnn7-devel-ubuntu18.04 AS builder +FROM nvidia/cuda:${CUDA_VER}-devel-${OS} AS builder SHELL ["/bin/bash", "-c"] @@ -43,10 +49,11 @@ RUN set -e ;\ ARG BUILD_ARGS="" ADD ./ /build RUN set -e ;\ - . venv/bin/activate ;\ - make -C opt build GPU=1 $BUILD_ARGS SHOW=1 + . venv/bin/activate ;\ + . ./opt/readies/bin/sourced ./profile.d ;\ + make -C opt build GPU=1 $BUILD_ARGS SHOW=1 -ARG PACK=1 +ARG PACK RUN set -e ;\ if [[ $PACK == 1 ]]; then \ From 8f12d9d9dfee6358ffc41a9a667aef5098049790 Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 21:37:29 +0300 Subject: [PATCH 06/17] fixes 1 --- .circleci/config.yml | 230 +++++++++++++++++++++++++------------- Dockerfile | 2 + opt/Makefile | 5 +- opt/build/docker/Makefile | 3 + opt/pack.sh | 13 ++- opt/readies | 2 +- opt/system-setup.py | 2 +- 7 files changed, 168 insertions(+), 89 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index b9caa0c65..fe694d8c3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -1,7 +1,18 @@ version: 2.1 commands: - setup_steps: + setup-executor: + steps: + - run: + name: Setup executor + command: | + apt-get -qq update + apt-get -q install -y git openssh-client curl ca-certificates make tar gzip + bash <(curl -fsSL https://get.docker.com) + - setup_remote_docker: + docker_layer_caching: true + + build-steps: parameters: platform: type: string @@ -9,7 +20,7 @@ commands: - checkout - run: name: Submodule checkout - command: git submodule update --init --recursive + command: git submodule update --init --recursive - restore_cache: keys: - v1-dependencies-{{ checksum "get_deps.sh" }} @@ -19,7 +30,7 @@ commands: command: | ./opt/readies/bin/getpy3 BREW_NO_UPDATE=1 ./opt/system-setup.py - # git clone git://github.com/antirez/redis.git --branch 6.0.1; (cd redis; make malloc=libc -j $(nproc); make install); redis-server --version + # ./opt/readies/bin/getredis -v 6 --force ./get_deps.sh cpu - save_cache: paths: @@ -30,16 +41,6 @@ commands: command: | mkdir -p ~/workspace chown `whoami` ~/workspace - - test_steps: - parameters: - platform: - type: string - steps: - - checkout - - run: - name: Submodule checkout - command: git submodule update --init --recursive - run: name: Build command: make -C opt all SHOW=1 @@ -62,7 +63,34 @@ commands: - store_artifacts: path: test/logs - deploy: + platform-build-steps: + parameters: + platform: + type: string + steps: + - setup-executor + - checkout + - run: + name: Setup + command: | + git submodule update --init --recursive + ./deps/readies/bin/getpy2 + - run: + name: Build for platform + command: | + docker login -u redisfab -p $DOCKER_REDISFAB_PWD + cd build/docker + make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 + no_output_timeout: 40m + - persist_to_workspace: + root: bin/artifacts + paths: + - 'snapshot/*.zip' + - 'snapshot/*.tgz' + - 'release/*.zip' + - 'release/*.tgz' + + deploy-steps: parameters: from: type: string @@ -73,15 +101,23 @@ commands: aws s3 cp <>/ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" jobs: - build: + build-debian: docker: - image: redisfab/rmbuilder:6.0.1-x64-buster steps: - - setup_steps: - platform: debian - - test_steps: + - build-steps: platform: debian + platform-build: + parameters: + platform: + type: string + docker: + - image: debian:buster + steps: + - platform-build-steps: + platform: <> + coverage: docker: - image: redisfab/rmbuilder:6.0.1-x64-buster @@ -99,7 +135,7 @@ jobs: command: | ./opt/readies/bin/getpy3 ./opt/system-setup.py - # git clone git://github.com/antirez/redis.git --branch 6.0.1; cd redis; make malloc=libc -j $(nproc); make install; redis-server --version + # ./opt/readies/bin/getredis -v 6 --force ./get_deps.sh cpu - run: name: Set up workspace @@ -119,21 +155,19 @@ jobs: build-macos: macos: - xcode: 11.1.0 + xcode: 11.3.0 steps: - run: name: Fix macOS Python installation command: | brew reinstall -f python2 - - setup_steps: - platform: macosx - - test_steps: + - build-steps: platform: macosx build-multiarch-docker: machine: enabled: true - image: ubuntu-1604:201903-01 + image: cimg/base:2020.01 steps: - checkout - run: @@ -155,10 +189,11 @@ jobs: name: Build command: | sudo docker login -u redisfab -p $DOCKER_REDISFAB_PWD - make -C opt/build/docker build - sudo make -C opt/build/docker publish + cd opt/build/docker + make build + sudo make publish - build-gpu: + build-and-test-gpu: machine: enabled: true docker_layer_caching: true @@ -182,7 +217,7 @@ jobs: - store_artifacts: path: ~/workspace/tests - deploy_package: + deploy-artifacts: parameters: package: type: string @@ -196,62 +231,99 @@ jobs: - store_artifacts: path: ~/workspace/packages/<> + +on-any-branch: &on-any-branch + filters: + branches: + only: /.*/ + tags: + only: /.*/ + +never: &never + filters: + branches: + ignore: /.*/ + tags: + ignore: /.*/ + +on-master: &on-master + filters: + branches: + only: master + +on-version-tags: &on-version-tags + filters: + branches: + ignore: /.*/ + tags: + only: /^v[0-9].*/ + +on-master-and-version-tags: &on-master-and-version-tags + filters: + branches: + only: + - master + tags: + only: /^v[0-9].*/ + + +platform-build-defs: &platform-build-defs + requires: + - build-debian + #@@ <<: *on-master-and-version-tags + <<: *on-any-branch + +after-platform-builds: &after-platform-builds + requires: + - build-centos7 + - build-bionic + - build-xenial + + workflows: version: 2 build_and_package: jobs: - - build: - filters: - tags: - only: /.*/ + - build-debian: + <<: *on-any-branch + - platform-build: + name: build-centos7 + platform: centos7 + <<: *platform-build-defs + - platform-build: + name: build-bionic + platform: bionic + <<: *platform-build-defs + - platform-build: + name: build-xenial + platform: xenial + <<: *platform-build-defs - coverage: - filters: - branches: - only: /.*/ - tags: - only: /.*/ - # - build-macos: - # filters: - # branches: - # ignore: /.*/ - # tags: - # only: /^v[0-9].*/ - #- build-multiarch-docker: - # filters: - # tags: - # only: /^v[0-9].*/ - # branches: - # ignore: /.*/ - - build-gpu: - filters: - tags: - only: /.*/ - - deploy_package: - name: deploy_branch + <<: *on-any-branch + - build-and-test-gpu: + <<: *on-any-branch + - build-macos: + <<: *never + # <<: *on-version-tags + - build-multiarch-docker: + <<: *never + # <<: *on-version-tags + - deploy-artifacts: + name: deploy-branch package: branch - requires: - - build - filters: - branches: - only: master - - deploy_package: - name: deploy_release + <<: *after-platform-builds + <<: *on-any-branch + - deploy-artifacts: + name: deploy-release package: release - requires: - - build - filters: - branches: - ignore: /.*/ - tags: - only: '/^v[0-9].*/' + <<: *after-platform-builds + <<: *on-version-tags - #nightly: - # triggers: - # - schedule: - # cron: "20 17 * * *" - # filters: - # branches: - # only: - # - master - # jobs: - # - build-macos + nightly: + triggers: + - schedule: + cron: "20 17 * * *" + <<: *on-master + jobs: + - build-macos + <<: *never diff --git a/Dockerfile b/Dockerfile index c1933383e..204d76875 100755 --- a/Dockerfile +++ b/Dockerfile @@ -69,6 +69,8 @@ RUN mkdir -p $REDIS_MODULES/ COPY --from=builder /build/install-cpu/ $REDIS_MODULES/ +COPY --from=builder /build/bin/artifacts/ /var/opt/redislabs/artifacts + WORKDIR /data EXPOSE 6379 CMD ["--loadmodule", "/usr/lib/redis/modules/redisai.so"] diff --git a/opt/Makefile b/opt/Makefile index 47bfc81ff..d9dd53c17 100755 --- a/opt/Makefile +++ b/opt/Makefile @@ -178,10 +178,11 @@ fetch deps: pack: $(INSTALLED_TARGET) $(SHOW)find $(INSTALL_DIR) -name "*.so" -exec chmod +x {} \; + $(SHOW)mkdir -p $(ROOT)/bin/artifacts ifneq ($(PACK_DEPS),0) - $(SHOW)DEVICE=$(DEVICE) BINDIR=$(BINROOT) INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) INTO=$(INTO) DEPS=1 ./pack.sh + $(SHOW)DEVICE=$(DEVICE) BINDIR=$(ROOT)/bin/artifacts INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) INTO=$(INTO) DEPS=1 ./pack.sh else - $(SHOW)DEVICE=$(DEVICE) BINDIR=$(BINROOT) INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) INTO=$(INTO) DEPS=0 ./pack.sh + $(SHOW)DEVICE=$(DEVICE) BINDIR=$(ROOT)/bin/artifacts INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) INTO=$(INTO) DEPS=0 ./pack.sh endif #---------------------------------------------------------------------------------------------- diff --git a/opt/build/docker/Makefile b/opt/build/docker/Makefile index 55ec70f45..afff92f26 100755 --- a/opt/build/docker/Makefile +++ b/opt/build/docker/Makefile @@ -8,6 +8,9 @@ OSNICK ?= buster REPO=redisfab STEM=$(REPO)/redisai +ART_DIR=$(ROOT)/bin/artifacts +ART_INT_DIR=/var/opt/redislabs/artifacts + FETCH_ARGS.arm64v8=WITH_ORT=0 WITH_PT=0 BUILD_ARGS.arm64v8=WITH_ORT=0 WITH_PT=0 diff --git a/opt/pack.sh b/opt/pack.sh index 6941841ae..d0b740b2d 100755 --- a/opt/pack.sh +++ b/opt/pack.sh @@ -49,8 +49,8 @@ pack_ramp() { # [[ ! -z $BRANCH ]] && ln -sf $FQ_PACKAGE.zip $STEM.$BRANCH.zip export RELEASE_ARTIFACTS="$RELEASE_ARTIFACTS $STEM.$VERSION.zip $RAMP_STEM.latest.zip" - export DEV_ARTIFACTS="$DEV_ARTIFACTS $FQ_PACKAGE.zip $STEM.$BRANCH.zip" - # [[ ! -z $BRANCH ]] && export DEV_ARTIFACTS="$DEV_ARTIFACTS $DEPS.$BRANCH.tgz" + export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $FQ_PACKAGE.zip $STEM.$BRANCH.zip" + # [[ ! -z $BRANCH ]] && export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $DEPS.$BRANCH.tgz" echo "Done." } @@ -85,8 +85,8 @@ pack_deps() { # [[ ! -z $BRANCH ]] && ln -sf $FQ_PACKAGE.tgz $STEM.$BRANCH.tgz export RELEASE_ARTIFACTS="$RELEASE_ARTIFACTS $STEM.$VERSION.tgz $STEM.latest.tgz" - export DEV_ARTIFACTS="$DEV_ARTIFACTS $FQ_PACKAGE.tgz" - # [[ ! -z $BRANCH ]] && export DEV_ARTIFACTS="$DEV_ARTIFACTS $STEM.$BRANCH.tgz" + export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $FQ_PACKAGE.tgz" + # [[ ! -z $BRANCH ]] && export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $STEM.$BRANCH.tgz" echo "Done." } @@ -120,7 +120,8 @@ if [[ -d $ROOT/.git ]]; then GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) fi GIT_COMMIT=$(git describe --always --abbrev=7 --dirty="+") - GIT_VER="${GIT_BRANCH}-${GIT_COMMIT}" + # GIT_VER="${GIT_BRANCH}-${GIT_COMMIT}" + GIT_VER="${GIT_BRANCH}" else if [[ ! -z $BRANCH ]]; then GIT_BRANCH="$BRANCH" @@ -147,7 +148,7 @@ if [[ ! -z $INTO ]]; then [[ -f $BINDIR/$f ]] && cp $BINDIR/$f release/ done - for f in $DEV_ARTIFACTS; do + for f in $BRANCH_ARTIFACTS; do [[ -f $BINDIR/$f ]] && cp $BINDIR/$f branch/ done fi diff --git a/opt/readies b/opt/readies index 80d698938..6201a0857 160000 --- a/opt/readies +++ b/opt/readies @@ -1 +1 @@ -Subproject commit 80d6989385c08430f49433d95e8510768aeafc78 +Subproject commit 6201a0857014c318de37f357f1e96c8aa9cde94a diff --git a/opt/system-setup.py b/opt/system-setup.py index c1a96b4fd..c84aacaaf 100755 --- a/opt/system-setup.py +++ b/opt/system-setup.py @@ -4,7 +4,7 @@ import os import argparse -HERE = os.path.dirname(__file__) +HERE = os.path.abspath(os.path.dirname(__file__)) ROOT = os.path.abspath(os.path.join(HERE, "..")) sys.path.insert(0, os.path.join(HERE, "readies")) import paella From 73d8821ca70b2b0ae15865fc613b3d6a3484a141 Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 21:45:00 +0300 Subject: [PATCH 07/17] fixes 3 --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index fe694d8c3..2ef6ed1df 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -325,5 +325,5 @@ workflows: cron: "20 17 * * *" <<: *on-master jobs: - - build-macos + - build-macos: <<: *never From 8305cee7eae8540a8f2fb3867bc0de5356097ac5 Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 21:48:48 +0300 Subject: [PATCH 08/17] fixes 4 --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 2ef6ed1df..f7668f1e9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -226,7 +226,7 @@ jobs: steps: - attach_workspace: at: ~/workspace - - deploy: + - deploy-steps: from: ~/workspace/packages/<> - store_artifacts: path: ~/workspace/packages/<> From 78a13cf1891b3ae42734e2dffd6740e7ec9b6038 Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 22:03:20 +0300 Subject: [PATCH 09/17] fixes 5 --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index f7668f1e9..07ff90815 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -74,7 +74,7 @@ commands: name: Setup command: | git submodule update --init --recursive - ./deps/readies/bin/getpy2 + ./deps/readies/bin/getpy3 - run: name: Build for platform command: | From 3d499075a551795fe9d8684128e74bbbcb4d5bfa Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 22:25:56 +0300 Subject: [PATCH 10/17] fixes 6 --- .circleci/config.yml | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 07ff90815..62197823c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -48,7 +48,7 @@ commands: name: Test command: | mkdir -p ~/workspace/tests - make -C opt test SHOW=1 + #@@ make -C opt test SHOW=1 no_output_timeout: 20m - run: name: Package @@ -56,10 +56,8 @@ commands: - persist_to_workspace: root: ~/workspace paths: - - 'packages/release/*.zip' - - 'packages/release/*.tgz' - - 'packages/branch/*.zip' - - 'packages/branch/*.tgz' + - bin/artifacts/*.zip + - bin/artifacts/*.tgz - store_artifacts: path: test/logs @@ -74,21 +72,20 @@ commands: name: Setup command: | git submodule update --init --recursive - ./deps/readies/bin/getpy3 + ./opt/readies/bin/getpy3 - run: name: Build for platform command: | docker login -u redisfab -p $DOCKER_REDISFAB_PWD cd build/docker - make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 + #@@ make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 + make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 no_output_timeout: 40m - persist_to_workspace: - root: bin/artifacts + root: ~/workspace paths: - - 'snapshot/*.zip' - - 'snapshot/*.tgz' - - 'release/*.zip' - - 'release/*.tgz' + - bin/artifacts/*.zip + - bin/artifacts/*.tgz deploy-steps: parameters: @@ -98,7 +95,7 @@ commands: - run: name: Deploy to S3 command: | - aws s3 cp <>/ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" + aws s3 cp ./ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" jobs: build-debian: @@ -227,9 +224,9 @@ jobs: - attach_workspace: at: ~/workspace - deploy-steps: - from: ~/workspace/packages/<> + from: ~/workspace/bin/artifacts/ - store_artifacts: - path: ~/workspace/packages/<> + path: ~/workspace/bin/artifacts/ on-any-branch: &on-any-branch From 4a0477e4bcafb30100a4e4380cb40f361dd5a5e3 Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 22:42:38 +0300 Subject: [PATCH 11/17] fixes 7 --- .circleci/config.yml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 62197823c..124210ee1 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -54,10 +54,10 @@ commands: name: Package command: make -C opt pack BRANCH="${CIRCLE_BRANCH//[^A-Za-z0-9._-]/_}" INTO=~/workspace/packages SHOW=1 - persist_to_workspace: - root: ~/workspace + root: bin/ paths: - - bin/artifacts/*.zip - - bin/artifacts/*.tgz + - artifacts/*.zip + - artifacts/*.tgz - store_artifacts: path: test/logs @@ -82,10 +82,10 @@ commands: make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 no_output_timeout: 40m - persist_to_workspace: - root: ~/workspace + root: bin/ paths: - - bin/artifacts/*.zip - - bin/artifacts/*.tgz + - artifacts/*.zip + - artifacts/*.tgz deploy-steps: parameters: @@ -95,7 +95,7 @@ commands: - run: name: Deploy to S3 command: | - aws s3 cp ./ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" + aws s3 cp artifacts/ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" jobs: build-debian: From b52c79075260526ec9a17ed42c3748603abafa6e Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 22:48:53 +0300 Subject: [PATCH 12/17] fixes 8 --- .circleci/config.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 124210ee1..2bbfaedde 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -77,7 +77,7 @@ commands: name: Build for platform command: | docker login -u redisfab -p $DOCKER_REDISFAB_PWD - cd build/docker + cd opt/build/docker #@@ make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 no_output_timeout: 40m @@ -298,7 +298,8 @@ workflows: - coverage: <<: *on-any-branch - build-and-test-gpu: - <<: *on-any-branch + #@@ <<: *on-any-branch + <<: *never - build-macos: <<: *never # <<: *on-version-tags From 7d68e6c98ad1013e58c478b898478c2f57a2b77f Mon Sep 17 00:00:00 2001 From: rafie Date: Wed, 3 Jun 2020 23:44:32 +0300 Subject: [PATCH 13/17] fixes 9 --- .circleci/config.yml | 13 +++-- opt/Makefile | 5 +- opt/build/docker/version-params | 12 ++++ opt/pack.sh | 99 ++++++++++++++++----------------- 4 files changed, 70 insertions(+), 59 deletions(-) create mode 100755 opt/build/docker/version-params diff --git a/.circleci/config.yml b/.circleci/config.yml index 2bbfaedde..246b2d54f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,7 +52,8 @@ commands: no_output_timeout: 20m - run: name: Package - command: make -C opt pack BRANCH="${CIRCLE_BRANCH//[^A-Za-z0-9._-]/_}" INTO=~/workspace/packages SHOW=1 + # command: make -C opt pack BRANCH="${CIRCLE_BRANCH//[^A-Za-z0-9._-]/_}" INTO=~/workspace/packages SHOW=1 + command: make -C opt pack SHOW=1 - persist_to_workspace: root: bin/ paths: @@ -79,7 +80,8 @@ commands: docker login -u redisfab -p $DOCKER_REDISFAB_PWD cd opt/build/docker #@@ make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 - make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 + make build publish $(./version-params) CPU=1 OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 + make build publish $(./version-params) GPU=1 OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 no_output_timeout: 40m - persist_to_workspace: root: bin/ @@ -224,9 +226,9 @@ jobs: - attach_workspace: at: ~/workspace - deploy-steps: - from: ~/workspace/bin/artifacts/ + from: ~/workspace/artifacts/ - store_artifacts: - path: ~/workspace/bin/artifacts/ + path: ~/workspace/artifacts/ on-any-branch: &on-any-branch @@ -296,7 +298,8 @@ workflows: platform: xenial <<: *platform-build-defs - coverage: - <<: *on-any-branch + #@@ <<: *on-any-branch + <<: *never - build-and-test-gpu: #@@ <<: *on-any-branch <<: *never diff --git a/opt/Makefile b/opt/Makefile index d9dd53c17..ae638ab3f 100755 --- a/opt/Makefile +++ b/opt/Makefile @@ -47,7 +47,6 @@ make cov-upload # upload coverage data to codecov.io (requires CODECOV_TOKEN) make pack # create installation packages PACK_DEPS=0 # do not pack dependencies - INTO=dir # place artifacts in `dir` BRANCH=name # use `name` as branch name make deploy # copy packages to S3 make release # release a version @@ -180,9 +179,9 @@ pack: $(INSTALLED_TARGET) $(SHOW)find $(INSTALL_DIR) -name "*.so" -exec chmod +x {} \; $(SHOW)mkdir -p $(ROOT)/bin/artifacts ifneq ($(PACK_DEPS),0) - $(SHOW)DEVICE=$(DEVICE) BINDIR=$(ROOT)/bin/artifacts INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) INTO=$(INTO) DEPS=1 ./pack.sh + $(SHOW)DEVICE=$(DEVICE) BINDIR=$(ROOT)/bin/artifacts INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) DEPS=1 ./pack.sh else - $(SHOW)DEVICE=$(DEVICE) BINDIR=$(ROOT)/bin/artifacts INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) INTO=$(INTO) DEPS=0 ./pack.sh + $(SHOW)DEVICE=$(DEVICE) BINDIR=$(ROOT)/bin/artifacts INSTALL_DIR=$(INSTALL_DIR) BRANCH=$(BRANCH) DEPS=0 ./pack.sh endif #---------------------------------------------------------------------------------------------- diff --git a/opt/build/docker/version-params b/opt/build/docker/version-params new file mode 100755 index 000000000..a5b6bed07 --- /dev/null +++ b/opt/build/docker/version-params @@ -0,0 +1,12 @@ +#!/bin/bash + +HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +ROOT=$(cd $HERE/../..; pwd) + +tag=`git describe --abbrev=0 2> /dev/null | sed 's/^v\(.*\)/\1/'` +if [[ $? != 0 || -z $tag ]]; then + branch=`git rev-parse --abbrev-ref HEAD` + echo "VERSION=$branch" +else + echo "VERSION=$tag LATEST=1" +fi diff --git a/opt/pack.sh b/opt/pack.sh index d0b740b2d..4e8214099 100755 --- a/opt/pack.sh +++ b/opt/pack.sh @@ -6,7 +6,6 @@ [[ -z $DEVICE ]] && { echo DEVICE undefined; exit 1; } [[ -z $BINDIR ]] && { echo BINDIR undefined; exit 1; } [[ -z $INSTALL_DIR ]] && { echo INSTALL_DIR undefined; exit 1; } -[[ ! -z $INTO ]] && INTO=$(realpath $INTO) HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" . $HERE/readies/shibumi/functions @@ -29,7 +28,12 @@ pack_ramp() { cd $ROOT local STEM=$PRODUCT.$OS-$OSNICK-$ARCH - local FQ_VER=$GIT_VER + local FQ_VER + if [[ -z $BRANCH ]]; then + FQ_VER=$VERSION + else + FQ_VER=$BRANCH + fi local FQ_PACKAGE=$STEM.$FQ_VER # this is only to extract {semantic_version} into VERSION @@ -38,20 +42,16 @@ pack_ramp() { local rampfile=`realpath $(tail -1 $RAMPOUT)` rm -f $rampfile $RAMPOUT echo `basename $rampfile` | sed -e "s/[^.]*\.[^.]*\.\(.*\)\.zip/\1/" > $BINDIR/VERSION - export VERSION=$(cat $BINDIR/VERSION) + export SEMVER=$(cat $BINDIR/VERSION) $RAMP_PROG pack -m $ROOT/ramp.yml -o $BINDIR/$FQ_PACKAGE.zip \ - -c "BACKENDSPATH $REDIS_ENT_LIB_PATH/$PRODUCT-$DEVICE-$VERSION/backends" $INSTALL_DIR/$PRODUCT.so > /dev/null 2>&1 + -c "BACKENDSPATH $REDIS_ENT_LIB_PATH/$PRODUCT-$DEVICE-$SEMVER/backends" $INSTALL_DIR/$PRODUCT.so > /dev/null 2>&1 cd "$BINDIR" - ln -sf $FQ_PACKAGE.zip $STEM.$VERSION.zip - ln -sf $FQ_PACKAGE.zip $STEM.latest.zip - # [[ ! -z $BRANCH ]] && ln -sf $FQ_PACKAGE.zip $STEM.$BRANCH.zip + if [[ -z $BRANCH ]]; then + ln -sf $FQ_PACKAGE.zip $STEM.latest.zip + fi - export RELEASE_ARTIFACTS="$RELEASE_ARTIFACTS $STEM.$VERSION.zip $RAMP_STEM.latest.zip" - export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $FQ_PACKAGE.zip $STEM.$BRANCH.zip" - # [[ ! -z $BRANCH ]] && export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $DEPS.$BRANCH.tgz" - echo "Done." } @@ -60,15 +60,19 @@ pack_deps() { cd $ROOT - VERSION=$(cat $BINDIR/VERSION) - local VARIANT=$OS-$OSNICK-$ARCH.$GIT_VER + SEMVER=$(cat $BINDIR/VERSION) local STEM=$PRODUCT-$DEVICE-dependencies.$OS-$OSNICK-$ARCH - local FQ_VER=$GIT_VER + local FQ_VER + if [[ -z $BRANCH ]]; then + FQ_VER=$VERSION + else + FQ_VER=$BRANCH + fi local FQ_PACKAGE=$STEM.$FQ_VER cd $INSTALL_DIR - local BACKENDS_DIR=$PRODUCT-$DEVICE-$VERSION + local BACKENDS_DIR=$PRODUCT-$DEVICE-$SEMVER if [[ ! -h backends ]]; then [[ ! -d backends ]] && { echo "install-$DEVICE/backend directory not found." ; exit 1; } rm -rf $BACKENDS_DIR @@ -80,14 +84,10 @@ pack_deps() { find $BACKENDS_DIR -name "*.so*" | xargs tar pczf $BINDIR/$FQ_PACKAGE.tgz cd "$BINDIR" - ln -sf $FQ_PACKAGE.tgz $STEM.$VERSION.tgz - ln -sf $FQ_PACKAGE.tgz $STEM.latest.tgz - # [[ ! -z $BRANCH ]] && ln -sf $FQ_PACKAGE.tgz $STEM.$BRANCH.tgz + if [[ -z $BRANCH ]]; then + ln -sf $FQ_PACKAGE.tgz $STEM.latest.tgz + fi - export RELEASE_ARTIFACTS="$RELEASE_ARTIFACTS $STEM.$VERSION.tgz $STEM.latest.tgz" - export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $FQ_PACKAGE.tgz" - # [[ ! -z $BRANCH ]] && export BRANCH_ARTIFACTS="$BRANCH_ARTIFACTS $STEM.$BRANCH.tgz" - echo "Done." } @@ -100,7 +100,6 @@ if [[ $1 == --help || $1 == help ]]; then INSTALL_DIR=dir directory in which artifacts are found DEVICE=cpu|gpu BRANCH=branch branch names to serve as an exta package tag - INTO=dir package destination directory (optinal) RAMP=1 build RAMP file DEPS=1 build dependencies file RAMP_PROG path to RAMP program @@ -112,25 +111,37 @@ fi PRODUCT=redisai PRODUCT_LIB=$PRODUCT.so -GIT_VER="" -if [[ -d $ROOT/.git ]]; then - if [[ ! -z $BRANCH ]]; then - GIT_BRANCH="$BRANCH" +if [[ -z $BRANCH ]]; then + tag=`git describe --abbrev=0 2> /dev/null | sed 's/^v\(.*\)/\1/'` + if [[ $? != 0 || -z $tag ]]; then + BRANCH=`git rev-parse --abbrev-ref HEAD` + VERSION= else - GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) + VERSION=$tag fi - GIT_COMMIT=$(git describe --always --abbrev=7 --dirty="+") - # GIT_VER="${GIT_BRANCH}-${GIT_COMMIT}" - GIT_VER="${GIT_BRANCH}" else - if [[ ! -z $BRANCH ]]; then - GIT_BRANCH="$BRANCH" - else - GIT_BRANCH=unknown - fi - GIT_VER="$GIT_BRANCH" + VERSION= fi +# GIT_VER="" +# if [[ -d $ROOT/.git ]]; then +# if [[ ! -z $BRANCH ]]; then +# GIT_BRANCH="$BRANCH" +# else +# GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD) +# fi +# GIT_COMMIT=$(git describe --always --abbrev=7 --dirty="+") +# # GIT_VER="${GIT_BRANCH}-${GIT_COMMIT}" +# GIT_VER="${GIT_BRANCH}" +# else +# if [[ ! -z $BRANCH ]]; then +# GIT_BRANCH="$BRANCH" +# else +# GIT_BRANCH=unknown +# fi +# GIT_VER="$GIT_BRANCH" +# fi + if ! command -v redis-server > /dev/null; then echo "Cannot find redis-server. Aborting." exit 1 @@ -139,18 +150,4 @@ fi pack_ramp [[ $DEPS == 1 ]] && pack_deps -if [[ ! -z $INTO ]]; then - mkdir -p $INTO - cd $INTO - mkdir -p release branch - - for f in $RELEASE_ARTIFACTS; do - [[ -f $BINDIR/$f ]] && cp $BINDIR/$f release/ - done - - for f in $BRANCH_ARTIFACTS; do - [[ -f $BINDIR/$f ]] && cp $BINDIR/$f branch/ - done -fi - exit 0 From 0c8d4f47142e7f0a76d4b87cd074362e7dfc4c82 Mon Sep 17 00:00:00 2001 From: rafie Date: Thu, 4 Jun 2020 00:14:27 +0300 Subject: [PATCH 14/17] fixes 10 --- Dockerfile.gpu | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 83b221282..7c6c21ad8 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -68,6 +68,9 @@ RUN mkdir -p $REDIS_MODULES/ COPY --from=redis /usr/local/ /usr/local/ COPY --from=builder /build/install-gpu/ $REDIS_MODULES/ + +COPY --from=builder /build/bin/artifacts/ /var/opt/redislabs/artifacts + # COPY --from=builder /usr/local/etc/redis/redis.conf /usr/local/etc/redis/ WORKDIR /data From 82759abdba35d2a6c7d27e9faa6e97fa5f9a226d Mon Sep 17 00:00:00 2001 From: rafie Date: Thu, 4 Jun 2020 01:32:53 +0300 Subject: [PATCH 15/17] fixes 11 --- .circleci/config.yml | 44 +++++++++++++++++++++++--------------------- opt/pack.sh | 14 ++++++-------- opt/readies | 2 +- 3 files changed, 30 insertions(+), 30 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 246b2d54f..55459b3a3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,18 +36,18 @@ commands: paths: - deps key: build-dependencies-{{ checksum "get_deps.sh" }} - - run: - name: Set up workspace - command: | - mkdir -p ~/workspace - chown `whoami` ~/workspace + #- run: + # name: Set up workspace + # command: | + # mkdir -p ~/workspace + # chown `whoami` ~/workspace - run: name: Build command: make -C opt all SHOW=1 - run: name: Test command: | - mkdir -p ~/workspace/tests + # mkdir -p ~/workspace/tests #@@ make -C opt test SHOW=1 no_output_timeout: 20m - run: @@ -136,11 +136,11 @@ jobs: ./opt/system-setup.py # ./opt/readies/bin/getredis -v 6 --force ./get_deps.sh cpu - - run: - name: Set up workspace - command: | - mkdir -p ~/workspace - chown `whoami` ~/workspace + # - run: + # name: Set up workspace + # command: | + # mkdir -p ~/workspace + # chown `whoami` ~/workspace - run: name: Build for coverage command: | @@ -210,11 +210,11 @@ jobs: - run: name: Test command: | - mkdir -p ~/workspace/tests - docker run --gpus all -v $HOME/workspace/tests:/build/test/logs -it --rm redisai-gpu:latest-x64-bionic-test + mkdir -p $HOME/tests + docker run --gpus all -v $HOME/tests:/build/test/logs -it --rm redisai-gpu:latest-x64-bionic-test no_output_timeout: 30m - store_artifacts: - path: ~/workspace/tests + path: ~/tests deploy-artifacts: parameters: @@ -224,11 +224,11 @@ jobs: - image: redisfab/rmbuilder:6.0.1-x64-buster steps: - attach_workspace: - at: ~/workspace - - deploy-steps: - from: ~/workspace/artifacts/ - - store_artifacts: - path: ~/workspace/artifacts/ + at: artifacts + - run: + name: Deploy to S3 + command: | + aws s3 cp artifacts/ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" on-any-branch: &on-any-branch @@ -288,7 +288,8 @@ workflows: - platform-build: name: build-centos7 platform: centos7 - <<: *platform-build-defs + #@@ <<: *platform-build-defs + <<: *never - platform-build: name: build-bionic platform: bionic @@ -296,7 +297,8 @@ workflows: - platform-build: name: build-xenial platform: xenial - <<: *platform-build-defs + #@@ <<: *platform-build-defs + <<: *never - coverage: #@@ <<: *on-any-branch <<: *never diff --git a/opt/pack.sh b/opt/pack.sh index 4e8214099..12a88245d 100755 --- a/opt/pack.sh +++ b/opt/pack.sh @@ -28,13 +28,12 @@ pack_ramp() { cd $ROOT local STEM=$PRODUCT.$OS-$OSNICK-$ARCH - local FQ_VER + local FQ_PACKAGE if [[ -z $BRANCH ]]; then - FQ_VER=$VERSION + FQ_PACKAGE=$STEM.$VERSION else - FQ_VER=$BRANCH + FQ_PACKAGE=$STEM.$BRANCH fi - local FQ_PACKAGE=$STEM.$FQ_VER # this is only to extract {semantic_version} into VERSION RAMPOUT=$(mktemp /tmp/ramp.XXXXXX) @@ -63,13 +62,12 @@ pack_deps() { SEMVER=$(cat $BINDIR/VERSION) local STEM=$PRODUCT-$DEVICE-dependencies.$OS-$OSNICK-$ARCH - local FQ_VER + local FQ_PACKAGE if [[ -z $BRANCH ]]; then - FQ_VER=$VERSION + FQ_PACKAGE=$STEM.$VERSION else - FQ_VER=$BRANCH + FQ_PACKAGE=$STEM.$BRANCH fi - local FQ_PACKAGE=$STEM.$FQ_VER cd $INSTALL_DIR local BACKENDS_DIR=$PRODUCT-$DEVICE-$SEMVER diff --git a/opt/readies b/opt/readies index 6201a0857..14abdad48 160000 --- a/opt/readies +++ b/opt/readies @@ -1 +1 @@ -Subproject commit 6201a0857014c318de37f357f1e96c8aa9cde94a +Subproject commit 14abdad4868c9adb011942830ffe748d1c05f073 From 43146b44814292a6173525471bb4785cd10ab0f6 Mon Sep 17 00:00:00 2001 From: rafie Date: Thu, 4 Jun 2020 08:48:00 +0300 Subject: [PATCH 16/17] fixes 12 --- .circleci/config.yml | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 55459b3a3..1e643e56f 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,23 +36,16 @@ commands: paths: - deps key: build-dependencies-{{ checksum "get_deps.sh" }} - #- run: - # name: Set up workspace - # command: | - # mkdir -p ~/workspace - # chown `whoami` ~/workspace - run: name: Build command: make -C opt all SHOW=1 - run: name: Test command: | - # mkdir -p ~/workspace/tests - #@@ make -C opt test SHOW=1 + make -C opt test SHOW=1 no_output_timeout: 20m - run: name: Package - # command: make -C opt pack BRANCH="${CIRCLE_BRANCH//[^A-Za-z0-9._-]/_}" INTO=~/workspace/packages SHOW=1 command: make -C opt pack SHOW=1 - persist_to_workspace: root: bin/ @@ -79,7 +72,7 @@ commands: command: | docker login -u redisfab -p $DOCKER_REDISFAB_PWD cd opt/build/docker - #@@ make build publish $(./version-params) OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 + #@@ make build publish $(./version-params) CPU=1 OSNICK=<> X64=1 ARTIFACTS=1 TEST=1 VERBOSE=1 make build publish $(./version-params) CPU=1 OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 make build publish $(./version-params) GPU=1 OSNICK=<> X64=1 ARTIFACTS=1 VERBOSE=1 no_output_timeout: 40m @@ -136,11 +129,6 @@ jobs: ./opt/system-setup.py # ./opt/readies/bin/getredis -v 6 --force ./get_deps.sh cpu - # - run: - # name: Set up workspace - # command: | - # mkdir -p ~/workspace - # chown `whoami` ~/workspace - run: name: Build for coverage command: | @@ -214,7 +202,7 @@ jobs: docker run --gpus all -v $HOME/tests:/build/test/logs -it --rm redisai-gpu:latest-x64-bionic-test no_output_timeout: 30m - store_artifacts: - path: ~/tests + path: tests deploy-artifacts: parameters: @@ -224,10 +212,11 @@ jobs: - image: redisfab/rmbuilder:6.0.1-x64-buster steps: - attach_workspace: - at: artifacts + at: workspace - run: name: Deploy to S3 command: | + cd workspace aws s3 cp artifacts/ s3://redismodules/$PACKAGE_NAME/ --acl public-read --recursive --exclude "*" --include "*.zip" --include "*.tgz" @@ -288,8 +277,7 @@ workflows: - platform-build: name: build-centos7 platform: centos7 - #@@ <<: *platform-build-defs - <<: *never + <<: *platform-build-defs - platform-build: name: build-bionic platform: bionic @@ -297,8 +285,7 @@ workflows: - platform-build: name: build-xenial platform: xenial - #@@ <<: *platform-build-defs - <<: *never + <<: *platform-build-defs - coverage: #@@ <<: *on-any-branch <<: *never From 1333bfb184815420ef81abd64161f70edf5916eb Mon Sep 17 00:00:00 2001 From: rafie Date: Thu, 4 Jun 2020 11:19:02 +0300 Subject: [PATCH 17/17] fixes 13 --- .circleci/config.yml | 6 ++---- Dockerfile | 2 ++ Dockerfile.gpu | 2 ++ 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1e643e56f..7da263b68 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -287,11 +287,9 @@ workflows: platform: xenial <<: *platform-build-defs - coverage: - #@@ <<: *on-any-branch - <<: *never + <<: *on-any-branch - build-and-test-gpu: - #@@ <<: *on-any-branch - <<: *never + <<: *on-any-branch - build-macos: <<: *never # <<: *on-version-tags diff --git a/Dockerfile b/Dockerfile index 204d76875..7153708bf 100755 --- a/Dockerfile +++ b/Dockerfile @@ -47,7 +47,9 @@ RUN set -e ;\ ARG PACK ARG TEST +RUN mkdir -p bin/artifacts RUN if [ "$PACK" = "1" ]; then make -C opt pack; fi + RUN if [ "$TEST" = "1" ]; then TEST= make -C opt test $BUILD_ARGS NO_LFS=1; fi #---------------------------------------------------------------------------------------------- diff --git a/Dockerfile.gpu b/Dockerfile.gpu index 7c6c21ad8..87179c48b 100644 --- a/Dockerfile.gpu +++ b/Dockerfile.gpu @@ -52,7 +52,9 @@ RUN set -e ;\ ARG PACK ARG TEST +RUN mkdir -p bin/artifacts RUN if [ "$PACK" = "1" ]; then make -C opt pack GPU=1; fi + RUN if [ "$TEST" = "1" ]; then TEST= make -C opt test GPU=1 $BUILD_ARGS NO_LFS=1; fi #----------------------------------------------------------------------------------------------