From 6595d53962de8749bfccfa0c2b17205a7949b5fe Mon Sep 17 00:00:00 2001 From: zhanghongtong Date: Fri, 7 May 2021 18:03:05 +0800 Subject: [PATCH] build(relup): update build script for support relup --- .gitignore | 1 + Makefile | 8 +++++--- build | 42 ++++++++++++++++++++++++------------------ rebar.config | 3 +-- 4 files changed, 31 insertions(+), 23 deletions(-) diff --git a/.gitignore b/.gitignore index c702d3955..218b22261 100644 --- a/.gitignore +++ b/.gitignore @@ -46,3 +46,4 @@ emqx_dialyzer_*_plt dist.zip scripts/git-token etc/*.seg +_upgrade_base/ diff --git a/Makefile b/Makefile index 80e35d099..01fc40435 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ $(shell $(CURDIR)/scripts/git-hooks-init.sh) -REBAR_VERSION = 3.14.3-emqx-6 +REBAR_VERSION = 3.14.3-emqx-7 REBAR = $(CURDIR)/rebar3 BUILD = $(CURDIR)/build SCRIPTS = $(CURDIR)/scripts @@ -111,15 +111,17 @@ xref: $(REBAR) dialyzer: $(REBAR) @$(REBAR) as check dialyzer +COMMON_DEPS := $(REBAR) get-dashboard $(CONF_SEGS) + ## rel target is to create release package without relup .PHONY: $(REL_PROFILES:%=%-rel) $(PKG_PROFILES:%=%-rel) -$(REL_PROFILES:%=%-rel) $(PKG_PROFILES:%=%-rel): $(REBAR) get-dashboard $(CONF_SEGS) +$(REL_PROFILES:%=%-rel) $(PKG_PROFILES:%=%-rel): $(COMMON_DEPS) @$(BUILD) $(subst -rel,,$(@)) rel ## relup target is to create relup instructions .PHONY: $(REL_PROFILES:%=%-relup) define gen-relup-target -$1-relup: $1-rel +$1-relup: $(COMMON_DEPS) @$(BUILD) $1 relup endef ALL_ZIPS = $(REL_PROFILES) diff --git a/build b/build index a794c90a4..af7ff9865 100755 --- a/build +++ b/build @@ -63,41 +63,47 @@ log() { } make_rel() { - ./rebar3 as "$PROFILE" tar + # shellcheck disable=SC1010 + ./rebar3 as "$PROFILE" do release,tar } ## unzip previous version .zip files to _build/$PROFILE/rel/emqx/releases before making relup make_relup() { + local lib_dir="_build/$PROFILE/rel/emqx/lib" local releases_dir="_build/$PROFILE/rel/emqx/releases" + mkdir -p "$lib_dir" "$releases_dir" local releases=() if [ -d "$releases_dir" ]; then - while read -r dir; do - local version - version="$(basename "$dir")" - # skip current version - if [ "$version" != "$PKG_VSN" ]; then - releases+=( "$version" ) + while read -r zip; do + local base_vsn + base_vsn="$(echo "$zip" | grep -oE "[0-9]+\.[0-9]+\.[0-9]+(-[0-9a-e]{8})?")" + if [ ! -d "$releases_dir/$base_vsn" ]; then + local tmp_dir + tmp_dir="$(mktemp -d -t emqx.XXXXXXX)" + unzip -q "$zip" "emqx/releases/*" -d "$tmp_dir" + unzip -q "$zip" "emqx/lib/*" -d "$tmp_dir" + cp -r -n "$tmp_dir/emqx/releases"/* "$releases_dir" + cp -r -n "$tmp_dir/emqx/lib"/* "$lib_dir" + rm -rf "$tmp_dir" fi - done < <(find "_build/$PROFILE/rel/emqx/releases" -maxdepth 1 -name '*.*.*' -type d) + releases+=( "$base_vsn" ) + done < <(find _upgrade_base -maxdepth 1 -name "*$PROFILE-$SYSTEM*-$ARCH.zip" -type f) fi if [ ${#releases[@]} -eq 0 ]; then - log "No previous release found, relup ignored" + log "No upgrade base found, relup ignored" return 0 fi - if [ ${#releases[@]} -gt 1 ]; then - log "Found more than one previous versions in $releases_dir:" - log "${releases[@]}" - log "ERROR: So far we can not support multi base-version relup creation" - return 1 - fi - local base_version="${releases[0]}" - # TODO: comma separate base-versions when supported - ./rebar3 as "$PROFILE" relup --relname emqx --relvsn "${PKG_VSN}" --upfrom "$base_version" + RELX_BASE_VERSIONS="$(IFS=, ; echo "${releases[*]}")" + export RELX_BASE_VERSIONS + ./rebar3 as "$PROFILE" relup --relname emqx --relvsn "${PKG_VSN}" } ## make_zip turns .tar.gz into a .zip with a slightly different name. ## It assumes the .tar.gz has been built -- relies on Makefile dependency make_zip() { + # build the tarball again to ensure relup is included + make_rel + tard="/tmp/emqx_untar_${PKG_VSN}" rm -rf "${tard}" mkdir -p "${tard}/emqx" diff --git a/rebar.config b/rebar.config index 5a1971b7e..90841fbfa 100644 --- a/rebar.config +++ b/rebar.config @@ -28,8 +28,7 @@ {cover_export_enabled, true}. {cover_excl_mods, [emqx_exproto_pb, emqx_exhook_pb]}. -{provider_hooks,[{pre, [{tar, {relup_helper,gen_appups}}]} - ]}. +{provider_hooks, [{pre, [{release, {relup_helper, gen_appups}}]}]}. {post_hooks,[]}.