Browse Source

build(relup): update build script for support relup

zhanghongtong 4 years ago
parent
commit
6595d53962
4 changed files with 31 additions and 23 deletions
  1. 1 0
      .gitignore
  2. 5 3
      Makefile
  3. 24 18
      build
  4. 1 2
      rebar.config

+ 1 - 0
.gitignore

@@ -46,3 +46,4 @@ emqx_dialyzer_*_plt
 dist.zip
 scripts/git-token
 etc/*.seg
+_upgrade_base/

+ 5 - 3
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)

+ 24 - 18
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"

+ 1 - 2
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,[]}.