chore(build): refine packages builds
This commit merge packages.mk into Makefile with the complex part moved to shell script ./build.
This commit is contained in:
parent
ab57c19e7a
commit
1236c1934c
51
Makefile
51
Makefile
|
@ -1,12 +1,12 @@
|
||||||
REBAR_VERSION = 3.14.3-emqx-3
|
REBAR_VERSION = 3.14.3-emqx-3
|
||||||
REBAR = $(CURDIR)/rebar3
|
REBAR = $(CURDIR)/rebar3
|
||||||
export PKG_VSN ?= $(shell git describe --tags --match '[0-9]*' 2>/dev/null || git describe --always)
|
BUILD = $(CURDIR)/build
|
||||||
# comma separated versions
|
export PKG_VSN ?= $(shell $(CURDIR)/pkg-vsn.sh)
|
||||||
export RELUP_BASE_VERSIONS ?=
|
|
||||||
|
|
||||||
PROFILE ?= emqx
|
PROFILE ?= emqx
|
||||||
PROFILES := emqx emqx-edge check test
|
REL_PROFILES := emqx emqx-edge
|
||||||
PKG_PROFILES := emqx-pkg emqx-edge-pkg
|
PKG_PROFILES := emqx-pkg emqx-edge-pkg
|
||||||
|
PROFILES := $(REL_PROFILES) $(PKG_PROFILES)
|
||||||
|
|
||||||
export REBAR_GIT_CLONE_OPTIONS += --depth=1
|
export REBAR_GIT_CLONE_OPTIONS += --depth=1
|
||||||
|
|
||||||
|
@ -30,8 +30,8 @@ eunit: $(REBAR)
|
||||||
ct: $(REBAR)
|
ct: $(REBAR)
|
||||||
$(REBAR) ct
|
$(REBAR) ct
|
||||||
|
|
||||||
.PHONY: $(PROFILES)
|
.PHONY: $(REL_PROFILES)
|
||||||
$(PROFILES:%=%): $(REBAR)
|
$(REL_PROFILES:%=%): $(REBAR)
|
||||||
ifneq ($(shell echo $(@) |grep edge),)
|
ifneq ($(shell echo $(@) |grep edge),)
|
||||||
export EMQX_DESC="EMQ X Edge"
|
export EMQX_DESC="EMQ X Edge"
|
||||||
else
|
else
|
||||||
|
@ -39,10 +39,6 @@ else
|
||||||
endif
|
endif
|
||||||
$(REBAR) as $(@) release
|
$(REBAR) as $(@) release
|
||||||
|
|
||||||
.PHONY: $(PROFILES:%=build-%)
|
|
||||||
$(PROFILES:%=build-%): $(REBAR)
|
|
||||||
$(REBAR) as $(@:build-%=%) compile
|
|
||||||
|
|
||||||
# rebar clean
|
# rebar clean
|
||||||
.PHONY: clean $(PROFILES:%=clean-%)
|
.PHONY: clean $(PROFILES:%=clean-%)
|
||||||
clean: $(PROFILES:%=clean-%)
|
clean: $(PROFILES:%=clean-%)
|
||||||
|
@ -50,10 +46,10 @@ $(PROFILES:%=clean-%): $(REBAR)
|
||||||
$(REBAR) as $(@:clean-%=%) clean
|
$(REBAR) as $(@:clean-%=%) clean
|
||||||
|
|
||||||
.PHONY: deps-all
|
.PHONY: deps-all
|
||||||
deps-all: $(REBAR) $(PROFILES:%=deps-%) $(PKG_PROFILES:%=deps-%)
|
deps-all: $(REBAR) $(PROFILES:%=deps-%)
|
||||||
|
|
||||||
.PHONY: $(PROFILES:%=deps-%) $(PKG_PROFILES:%=deps-%)
|
.PHONY: $(PROFILES:%=deps-%)
|
||||||
$(PROFILES:%=deps-%) $(PKG_PROFILES:%=deps-%): $(REBAR)
|
$(PROFILES:%=deps-%): $(REBAR)
|
||||||
ifneq ($(shell echo $(@) |grep edge),)
|
ifneq ($(shell echo $(@) |grep edge),)
|
||||||
export EMQX_DESC="EMQ X Edge"
|
export EMQX_DESC="EMQ X Edge"
|
||||||
else
|
else
|
||||||
|
@ -69,5 +65,32 @@ xref: $(REBAR)
|
||||||
dialyzer: $(REBAR)
|
dialyzer: $(REBAR)
|
||||||
$(REBAR) as check dialyzer
|
$(REBAR) as check dialyzer
|
||||||
|
|
||||||
include packages.mk
|
.PHONY: $(REL_PROFILES:%=relup-%)
|
||||||
|
$(REL_PROFILES:%=relup-%): $(REBAR)
|
||||||
|
ifneq ($(OS),Windows_NT)
|
||||||
|
$(BUILD) $(@:relup-%=%) relup
|
||||||
|
endif
|
||||||
|
|
||||||
|
.PHONY: $(REL_PROFILES:%=%-tar) $(PKG_PROFILES:%=%-tar)
|
||||||
|
$(REL_PROFILES:%=%-tar) $(PKG_PROFILES:%=%-tar): $(REBAR)
|
||||||
|
$(BUILD) $(subst -tar,,$(@)) tar
|
||||||
|
|
||||||
|
## zip targets depend on the corresponding relup and tar artifacts
|
||||||
|
.PHONY: $(REL_PROFILES:%=%-zip)
|
||||||
|
define gen-zip-target
|
||||||
|
$1-zip: relup-$1 $1-tar
|
||||||
|
$(BUILD) $1 zip
|
||||||
|
endef
|
||||||
|
ALL_ZIPS = $(REL_PROFILES) $(PKG_PROFILES)
|
||||||
|
$(foreach zt,$(ALL_ZIPS),$(eval $(call gen-zip-target,$(zt))))
|
||||||
|
|
||||||
|
## A pkg target depend on a regular release profile zip to include relup,
|
||||||
|
## and also a -pkg suffixed profile tar (without relup) for making deb/rpm package
|
||||||
|
.PHONY: $(PKG_PROFILES)
|
||||||
|
define gen-pkg-target
|
||||||
|
$1: $(subst -pkg,,$1)-zip $1-tar
|
||||||
|
$(BUILD) $1 pkg
|
||||||
|
endef
|
||||||
|
$(foreach pt,$(PKG_PROFILES),$(eval $(call gen-pkg-target,$(pt))))
|
||||||
|
|
||||||
include docker.mk
|
include docker.mk
|
||||||
|
|
|
@ -0,0 +1,142 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script helps to build release artifacts.
|
||||||
|
# arg1: profile, e.g. emqx | emqx-edge | emqx-pkg | emqx-edge-pkg
|
||||||
|
# arg2: artifact, e.g. tar | relup | zip | pkg
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
PROFILE="$1"
|
||||||
|
ARTIFACT="$2"
|
||||||
|
|
||||||
|
# ensure dir
|
||||||
|
cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")"
|
||||||
|
|
||||||
|
case "$PROFILE" in
|
||||||
|
emqx-edge*)
|
||||||
|
export EMQX_DESC="EMQ X Edge"
|
||||||
|
;;
|
||||||
|
emqx*)
|
||||||
|
export EMQX_DESC="EMQ X Broker"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unknown profile $PROFILE"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
PKG_VSN="${PKG_VSN:-$(./pkg-vsn.sh)}"
|
||||||
|
export PKG_VSN
|
||||||
|
|
||||||
|
if [ "$(uname -s)" = 'Darwin' ]; then
|
||||||
|
SYSTEM=macos
|
||||||
|
elif [ "$(uname -s)" = 'Linux' ]; then
|
||||||
|
if grep -q -i 'centos' /etc/*-release; then
|
||||||
|
DIST='centos'
|
||||||
|
VERSION_ID="$(rpm --eval '%{centos_ver}')"
|
||||||
|
else
|
||||||
|
DIST="$(sed -n '/^ID=/p' /etc/os-release | sed -r 's/ID=(.*)/\1/g' | sed 's/"//g')"
|
||||||
|
VERSION_ID="$(sed -n '/^VERSION_ID=/p' /etc/os-release | sed -r 's/VERSION_ID=(.*)/\1/g' | sed 's/"//g')"
|
||||||
|
fi
|
||||||
|
SYSTEM="$(echo "${DIST}${VERSION_ID}" | sed -r 's/([a-zA-Z]*)-.*/\1/g')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
##
|
||||||
|
## Support RPM and Debian based linux systems
|
||||||
|
##
|
||||||
|
if [ "$(uname -s)" = 'Linux' ]; then
|
||||||
|
case "${DIST:-}" in
|
||||||
|
ubuntu|debian|raspbian)
|
||||||
|
PKGERDIR='deb'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
PKGERDIR='rpm'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
log() {
|
||||||
|
local msg="$1"
|
||||||
|
# rebar3 prints ===>, so we print ===<
|
||||||
|
echo "===< $msg"
|
||||||
|
}
|
||||||
|
|
||||||
|
make_tar() {
|
||||||
|
./rebar3 as "$PROFILE" tar
|
||||||
|
}
|
||||||
|
|
||||||
|
## unzip previous version .zip files to _build/$PROFILE/rel/emqx/releases before making relup
|
||||||
|
make_relup() {
|
||||||
|
local releases_dir="_build/$PROFILE/rel/emqx/releases"
|
||||||
|
local releases=()
|
||||||
|
if [ -d "$releases_dir" ]; then
|
||||||
|
while read -r dir; do
|
||||||
|
local version="$(basename "$dir")"
|
||||||
|
# skip current version
|
||||||
|
if [ "$version" != "$PKG_VSN" ]; then
|
||||||
|
releases+=( "$version" )
|
||||||
|
fi
|
||||||
|
done < <(find "_build/$PROFILE/rel/emqx/releases" -maxdepth 1 -name '*.*.*' -type d)
|
||||||
|
fi
|
||||||
|
if [ ${#releases[@]} -eq 0 ]; then
|
||||||
|
log "No previous release 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"
|
||||||
|
}
|
||||||
|
|
||||||
|
## 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() {
|
||||||
|
tard="/tmp/emqx_untar_${PKG_VSN}"
|
||||||
|
rm -rf "${tard}"
|
||||||
|
mkdir -p "${tard}/emqx"
|
||||||
|
local relpath="_build/${PROFILE}/rel/emqx"
|
||||||
|
local pkgpath="_packages/${PROFILE}"
|
||||||
|
mkdir -p "${pkgpath}"
|
||||||
|
local tarball="${relpath}/emqx-${PKG_VSN}.tar.gz"
|
||||||
|
if [ ! -f "$tarball" ]; then
|
||||||
|
log "ERROR: $tarball is not found"
|
||||||
|
fi
|
||||||
|
local zipball
|
||||||
|
zipball="${pkgpath}/${PROFILE}-${SYSTEM}-${PKG_VSN}-$(uname -m).zip"
|
||||||
|
tar zxf "${tarball}" -C "${tard}/emqx"
|
||||||
|
(cd "${tard}" && zip -qr - emqx) > "${zipball}"
|
||||||
|
}
|
||||||
|
|
||||||
|
log "building artifact=$ARTIFACT for profile=$PROFILE"
|
||||||
|
|
||||||
|
case "$ARTIFACT" in
|
||||||
|
tar)
|
||||||
|
make_tar
|
||||||
|
;;
|
||||||
|
relup)
|
||||||
|
make_relup
|
||||||
|
;;
|
||||||
|
zip)
|
||||||
|
make_zip
|
||||||
|
;;
|
||||||
|
pkg)
|
||||||
|
if [ -z "${PKGERDIR:-}" ]; then
|
||||||
|
# zip should have been built as a Makefile dependency
|
||||||
|
log "Skipped making deb/rpm package for $SYSTEM"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
# build the tar which is going to be used as the base of deb and rpm packages
|
||||||
|
make_tar
|
||||||
|
make -C "deploy/packages/${PKGERDIR}" clean
|
||||||
|
EMQX_REL="$(pwd)" EMQX_BUILD="${PROFILE}" SYSTEM="${SYSTEM}" make -C "deploy/packages/${PKGERDIR}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
log "Unknown artifact $ARTIFACT"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
|
@ -7,7 +7,7 @@ QEMU_ARCH ?= x86_64
|
||||||
ARCH ?= amd64
|
ARCH ?= amd64
|
||||||
QEMU_VERSION ?= v5.0.0-2
|
QEMU_VERSION ?= v5.0.0-2
|
||||||
OS ?= alpine
|
OS ?= alpine
|
||||||
PKG_VSN ?= $(shell git describe --tags --match '[0-9]*')
|
export PKG_VSN ?= $(shell $(CURDIR)/pkg-vsn.sh)
|
||||||
|
|
||||||
EMQX_NAME = $(subst emqx/,,$(TARGET))
|
EMQX_NAME = $(subst emqx/,,$(TARGET))
|
||||||
ARCH_LIST = amd64 arm64v8 arm32v7 i386 s390x
|
ARCH_LIST = amd64 arm64v8 arm32v7 i386 s390x
|
||||||
|
|
|
@ -5,6 +5,9 @@ set -eu
|
||||||
|
|
||||||
VERSION="$1"
|
VERSION="$1"
|
||||||
|
|
||||||
|
# ensure dir
|
||||||
|
cd -P -- "$(dirname -- "$0")"
|
||||||
|
|
||||||
DOWNLOAD_URL='https://github.com/emqx/rebar3/releases/download'
|
DOWNLOAD_URL='https://github.com/emqx/rebar3/releases/download'
|
||||||
|
|
||||||
download() {
|
download() {
|
||||||
|
|
81
packages.mk
81
packages.mk
|
@ -1,81 +0,0 @@
|
||||||
#!/usr/bin/make -f
|
|
||||||
# -*- makefile -*-
|
|
||||||
|
|
||||||
PROFILES := emqx emqx-edge
|
|
||||||
PKG_PROFILES := emqx-pkg emqx-edge-pkg
|
|
||||||
|
|
||||||
ifeq ($(shell uname -s),Darwin)
|
|
||||||
SYSTEM := macos
|
|
||||||
else ifeq ($(shell uname -s),Linux)
|
|
||||||
ifneq ($(shell cat /etc/*-release |grep -o -i centos),)
|
|
||||||
ID := centos
|
|
||||||
VERSION_ID := $(shell rpm --eval '%{centos_ver}')
|
|
||||||
else
|
|
||||||
ID := $(shell sed -n '/^ID=/p' /etc/os-release | sed -r 's/ID=(.*)/\1/g' | sed 's/"//g' )
|
|
||||||
VERSION_ID := $(shell sed -n '/^VERSION_ID=/p' /etc/os-release | sed -r 's/VERSION_ID=(.*)/\1/g' | sed 's/"//g')
|
|
||||||
endif
|
|
||||||
SYSTEM := $(shell echo $(ID)$(VERSION_ID) | sed -r "s/([a-zA-Z]*)-.*/\1/g")
|
|
||||||
##
|
|
||||||
## Support RPM and Debian based linux systems
|
|
||||||
##
|
|
||||||
ifeq ($(ID),ubuntu)
|
|
||||||
PKGERDIR := deb
|
|
||||||
else ifeq ($(ID),debian)
|
|
||||||
PKGERDIR := deb
|
|
||||||
else ifeq ($(ID),raspbian)
|
|
||||||
PKGERDIR := deb
|
|
||||||
else
|
|
||||||
PKGERDIR := rpm
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: $(PROFILES:%=relup-%)
|
|
||||||
$(PROFILES:%=relup-%): $(REBAR)
|
|
||||||
ifneq ($(RELUP_BASE_VERSIONS),)
|
|
||||||
ifneq ($(OS),Windows_NT)
|
|
||||||
@if [ ! -z $$(ls | grep -E "$(@:relup-%=%)-$(SYSTEM)-(.*)-$$(uname -m).zip" | head -1 ) ]; then \
|
|
||||||
mkdir -p tmp/relup_packages/$(@:relup-%=%); \
|
|
||||||
cp $(@:relup-%=%)-$(SYSTEM)-*-$$(uname -m).zip tmp/relup_packages/$(@:relup-%=%); \
|
|
||||||
fi
|
|
||||||
$(REBAR) as $(@:relup-%=%) relup --relname emqx --relvsn $(PKG_VSN) --upfrom $(RELUP_BASE_VERSIONS)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
.PHONY: $(PROFILES:%=%-tar) $(PKG_PROFILES:%=%-tar)
|
|
||||||
$(PROFILES:%=%-tar) $(PKG_PROFILES:%=%-tar): $(REBAR)
|
|
||||||
ifneq ($(shell echo $(@) |grep edge),)
|
|
||||||
export EMQX_DESC="EMQ X Edge"
|
|
||||||
else
|
|
||||||
export EMQX_DESC="EMQ X Broker"
|
|
||||||
endif
|
|
||||||
$(REBAR) as $(subst -tar,,$(@)) tar
|
|
||||||
|
|
||||||
.PHONY: $(PROFILES:%=%-zip)
|
|
||||||
$(PROFILES:%=%-zip): $(REBAR)
|
|
||||||
ifneq ($(shell echo $(PKG_VSN) | grep -oE "^[0-9]+\.[0-9]+\.[1-9]+?"),)
|
|
||||||
make relup-$(subst -zip,,$(@))
|
|
||||||
endif
|
|
||||||
make $(subst -zip,,$(@))-tar
|
|
||||||
|
|
||||||
@tard="/tmp/emqx_untar_$(PKG_VSN)" \
|
|
||||||
&& rm -rf "$${tard}" && mkdir -p "$${tard}/emqx" \
|
|
||||||
&& prof="$(subst -zip,,$(@))" \
|
|
||||||
&& relpath="$$(pwd)/_build/$${prof}/rel/emqx" \
|
|
||||||
&& pkgpath="$$(pwd)/_packages/$${prof}" \
|
|
||||||
&& mkdir -p $${pkgpath} \
|
|
||||||
&& tarball="$${relpath}/emqx-$(PKG_VSN).tar.gz" \
|
|
||||||
&& zipball="$${pkgpath}/$${prof}-$(SYSTEM)-$(PKG_VSN)-$$(uname -m).zip" \
|
|
||||||
&& tar zxf "$${tarball}" -C "$${tard}/emqx" \
|
|
||||||
&& cd "$${tard}" && zip -q -r "$${zipball}" ./emqx && cd -
|
|
||||||
|
|
||||||
.PHONY: $(PKG_PROFILES)
|
|
||||||
$(PKG_PROFILES:%=%): $(REBAR)
|
|
||||||
ifneq ($(PKGERDIR),)
|
|
||||||
make $(subst -pkg,,$(@))-zip
|
|
||||||
make $(@)-tar
|
|
||||||
make -C deploy/packages/$(PKGERDIR) clean
|
|
||||||
EMQX_REL=$$(pwd) EMQX_BUILD=$(@) PKG_VSN=$(PKG_VSN) SYSTEM=$(SYSTEM) make -C deploy/packages/$(PKGERDIR)
|
|
||||||
else
|
|
||||||
make $(subst -pkg,,$(@))-zip
|
|
||||||
endif
|
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# This script prints the release version for emqx
|
||||||
|
|
||||||
|
# ensure dir
|
||||||
|
cd -P -- "$(dirname -- "$0")"
|
||||||
|
|
||||||
|
# comment SUFFIX out when finalising RELEASE
|
||||||
|
RELEASE="4.3.0"
|
||||||
|
SUFFIX="-pre-$(git rev-parse HEAD | cut -b1-8)"
|
||||||
|
|
||||||
|
echo "${RELEASE}${SUFFIX:-}"
|
|
@ -232,7 +232,7 @@ env(Name, Default) ->
|
||||||
|
|
||||||
get_vsn() ->
|
get_vsn() ->
|
||||||
PkgVsn = case env("PKG_VSN", false) of
|
PkgVsn = case env("PKG_VSN", false) of
|
||||||
false -> os:cmd("git describe --tags --always");
|
false -> os:cmd("./pkg-vsn.sh");
|
||||||
Vsn -> Vsn
|
Vsn -> Vsn
|
||||||
end,
|
end,
|
||||||
Vsn2 = re:replace(PkgVsn, "v", "", [{return ,list}]),
|
Vsn2 = re:replace(PkgVsn, "v", "", [{return ,list}]),
|
||||||
|
|
Loading…
Reference in New Issue