Rebar3 and erlang.mk dual support. (#1806)
* Rebar3 and erlang.mk dual support. There was only erlang.mk support prior to this change. The main reasons for this dual support are: * Cover report upload can only be done by rebar3 in travis.ci * We want to prepare for the future to build emqx releases using rebar3 * We do not want to stop supporting erlang.mk in one single step * Add depencency version consistency check between erlang.mk and rebar.config
This commit is contained in:
parent
3caa41f751
commit
0c39a7620e
|
@ -30,7 +30,8 @@ _build
|
||||||
.rebar3
|
.rebar3
|
||||||
rebar3.crashdump
|
rebar3.crashdump
|
||||||
.DS_Store
|
.DS_Store
|
||||||
rebar.config
|
|
||||||
emqx.iml
|
emqx.iml
|
||||||
bbmustache/
|
bbmustache/
|
||||||
etc/gen.emqx.conf
|
etc/gen.emqx.conf
|
||||||
|
compile_commands.json
|
||||||
|
cuttlefish
|
||||||
|
|
|
@ -1,10 +1,15 @@
|
||||||
language: erlang
|
language: erlang
|
||||||
|
|
||||||
otp_release:
|
otp_release:
|
||||||
- 21.0
|
|
||||||
- 21.0.4
|
- 21.0.4
|
||||||
|
|
||||||
|
before_install:
|
||||||
|
- git clone https://github.com/erlang/rebar3.git; cd rebar3; ./bootstrap; sudo mv rebar3 /usr/local/bin/; cd ..
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- make
|
- make dep-vsn-check
|
||||||
|
- make rebar-eunit
|
||||||
|
- make rebar-ct
|
||||||
|
- make coveralls
|
||||||
|
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
68
Makefile
68
Makefile
|
@ -9,11 +9,11 @@ DEPS = jsx gproc gen_rpc lager ekka esockd cowboy clique lager_syslog
|
||||||
dep_jsx = git https://github.com/talentdeficit/jsx 2.9.0
|
dep_jsx = git https://github.com/talentdeficit/jsx 2.9.0
|
||||||
dep_gproc = git https://github.com/uwiger/gproc 0.8.0
|
dep_gproc = git https://github.com/uwiger/gproc 0.8.0
|
||||||
dep_gen_rpc = git https://github.com/emqx/gen_rpc 2.2.0
|
dep_gen_rpc = git https://github.com/emqx/gen_rpc 2.2.0
|
||||||
dep_lager = git https://github.com/erlang-lager/lager 3.6.4
|
dep_lager = git https://github.com/erlang-lager/lager 3.6.5
|
||||||
dep_esockd = git https://github.com/emqx/esockd v5.4
|
dep_esockd = git https://github.com/emqx/esockd v5.4
|
||||||
dep_ekka = git https://github.com/emqx/ekka v0.4.1
|
dep_ekka = git https://github.com/emqx/ekka v0.4.1
|
||||||
dep_cowboy = git https://github.com/ninenines/cowboy 2.4.0
|
dep_cowboy = git https://github.com/ninenines/cowboy 2.4.0
|
||||||
dep_clique = git https://github.com/emqx/clique
|
dep_clique = git https://github.com/emqx/clique develop
|
||||||
dep_lager_syslog = git https://github.com/basho/lager_syslog 3.0.1
|
dep_lager_syslog = git https://github.com/basho/lager_syslog 3.0.1
|
||||||
|
|
||||||
NO_AUTOPATCH = cuttlefish
|
NO_AUTOPATCH = cuttlefish
|
||||||
|
@ -41,7 +41,8 @@ CT_SUITES = emqx emqx_zone emqx_banned emqx_connection emqx_session emqx_access
|
||||||
emqx_stats emqx_tables emqx_time emqx_topic emqx_trie emqx_vm \
|
emqx_stats emqx_tables emqx_time emqx_topic emqx_trie emqx_vm \
|
||||||
emqx_mountpoint emqx_listeners emqx_protocol
|
emqx_mountpoint emqx_listeners emqx_protocol
|
||||||
|
|
||||||
CT_OPTS = -cover test/ct.cover.spec -erl_args -name emqxct@127.0.0.1
|
CT_NODE_NAME = emqxct@127.0.0.1
|
||||||
|
CT_OPTS = -cover test/ct.cover.spec -erl_args -name $(CT_NODE_NAME)
|
||||||
|
|
||||||
COVER = true
|
COVER = true
|
||||||
|
|
||||||
|
@ -51,7 +52,7 @@ DIALYZER_OPTS := --verbose --statistics -Werror_handling -Wrace_conditions #-Wun
|
||||||
|
|
||||||
include erlang.mk
|
include erlang.mk
|
||||||
|
|
||||||
clean:: gen-clean
|
clean:: gen-clean rebar-clean
|
||||||
|
|
||||||
.PHONY: gen-clean
|
.PHONY: gen-clean
|
||||||
gen-clean:
|
gen-clean:
|
||||||
|
@ -73,7 +74,62 @@ etc/gen.emqx.conf: bbmustache etc/emqx.conf
|
||||||
halt(0)."
|
halt(0)."
|
||||||
|
|
||||||
app.config: etc/gen.emqx.conf
|
app.config: etc/gen.emqx.conf
|
||||||
$(verbose) ./deps/cuttlefish/cuttlefish -l info -e etc/ -c etc/gen.emqx.conf -i priv/emqx.schema -d data/
|
$(verbose) ./cuttlefish -l info -e etc/ -c etc/gen.emqx.conf -i priv/emqx.schema -d data/
|
||||||
|
|
||||||
ct: app.config
|
ct: cuttlefish app.config
|
||||||
|
|
||||||
|
coveralls:
|
||||||
|
@rebar3 coveralls send
|
||||||
|
|
||||||
|
cuttlefish: deps
|
||||||
|
@mv ./deps/cuttlefish/cuttlefish ./cuttlefish
|
||||||
|
|
||||||
|
rebar-cuttlefish: rebar-deps
|
||||||
|
@make -C _build/default/lib/cuttlefish
|
||||||
|
@mv _build/default/lib/cuttlefish/cuttlefish ./cuttlefish
|
||||||
|
|
||||||
|
rebar-deps:
|
||||||
|
@rebar3 get-deps
|
||||||
|
|
||||||
|
rebar-eunit:
|
||||||
|
@rebar3 eunit
|
||||||
|
|
||||||
|
rebar-compile:
|
||||||
|
@rebar3 compile
|
||||||
|
|
||||||
|
rebar-ct: rebar-cuttlefish app.config
|
||||||
|
@rebar3 as test compile
|
||||||
|
@ln -s -f '../../../../etc' _build/test/lib/emqx/
|
||||||
|
@ln -s -f '../../../../data' _build/test/lib/emqx/
|
||||||
|
@rebar3 ct -v --readable=false --name $(CT_NODE_NAME) --suite=$(shell echo $(foreach var,$(CT_SUITES),test/$(var)_SUITE) | tr ' ' ',')
|
||||||
|
|
||||||
|
rebar-clean:
|
||||||
|
@rebar3 clean
|
||||||
|
|
||||||
|
distclean:: rebar-clean
|
||||||
|
@rm -rf _build cover deps logs log data
|
||||||
|
@rm -f rebar.lock compile_commands.json cuttlefish
|
||||||
|
|
||||||
|
## Below are for version consistency check during erlang.mk and rebar3 dual mode support
|
||||||
|
none=
|
||||||
|
space = $(none) $(none)
|
||||||
|
comma = ,
|
||||||
|
quote = \"
|
||||||
|
curly_l = "{"
|
||||||
|
curly_r = "}"
|
||||||
|
dep-versions = [$(foreach dep,$(DEPS) $(BUILD_DEPS),$(curly_l)$(dep),$(quote)$(word 3,$(dep_$(dep)))$(quote)$(curly_r)$(comma))[]]
|
||||||
|
|
||||||
|
.PHONY: dep-vsn-check
|
||||||
|
dep-vsn-check:
|
||||||
|
$(verbose) erl -noshell -eval \
|
||||||
|
"MkVsns = lists:sort(lists:flatten($(dep-versions))), \
|
||||||
|
{ok, Conf} = file:consult('rebar.config'), \
|
||||||
|
{_, Deps1} = lists:keyfind(deps, 1, Conf), \
|
||||||
|
{_, Deps2} = lists:keyfind(github_emqx_deps, 1, Conf), \
|
||||||
|
F = fun({N, V}) when is_list(V) -> {N, V}; ({N, {git, _, {branch, V}}}) -> {N, V} end, \
|
||||||
|
RebarVsns = lists:sort(lists:map(F, Deps1 ++ Deps2)), \
|
||||||
|
case {RebarVsns -- MkVsns, MkVsns -- RebarVsns} of \
|
||||||
|
{[], []} -> halt(0); \
|
||||||
|
{Rebar, Mk} -> erlang:error({deps_version_discrepancy, [{rebar, Rebar}, {mk, Mk}]}) \
|
||||||
|
end."
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
{deps, [{jsx, "2.9.0"},
|
||||||
|
{gproc, "0.8.0"},
|
||||||
|
{lager, "3.6.5"},
|
||||||
|
{cowboy, "2.4.0"},
|
||||||
|
{lager_syslog, {git, "https://github.com/basho/lager_syslog", {branch, "3.0.1"}}}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
%% appended to deps in rebar.config.script
|
||||||
|
{github_emqx_deps,
|
||||||
|
[{gen_rpc, "2.2.0"},
|
||||||
|
{ekka, "v0.4.1"},
|
||||||
|
{clique, "develop"},
|
||||||
|
{esockd, "v5.4"},
|
||||||
|
{cuttlefish, "emqx30"}
|
||||||
|
]}.
|
||||||
|
|
||||||
|
{edoc_opts, [{preprocess, true}]}.
|
||||||
|
{erl_opts, [warn_unused_vars,
|
||||||
|
warn_shadow_vars,
|
||||||
|
warn_unused_import,
|
||||||
|
warn_obsolete_guard,
|
||||||
|
debug_info,
|
||||||
|
{parse_transform, lager_transform}]}.
|
||||||
|
{xref_checks, [undefined_function_calls, undefined_functions,
|
||||||
|
locals_not_used, deprecated_function_calls,
|
||||||
|
warnings_as_errors, deprecated_functions]}.
|
||||||
|
{cover_enabled, true}.
|
||||||
|
{cover_opts, [verbose]}.
|
||||||
|
{cover_export_enabled, true}.
|
||||||
|
|
||||||
|
%% rebar3_neotoma_plugin is needed to compile the .peg file for cuttlefish
|
||||||
|
{plugins, [rebar3_neotoma_plugin]}.
|
||||||
|
|
||||||
|
%% Do not include cuttlefish's dependencies as mine
|
||||||
|
%% its dependencies are only fetched to compile itself
|
||||||
|
%% they are however not needed by emqx
|
||||||
|
{overrides, [{override, cuttlefish, [{deps, []}]}
|
||||||
|
]}.
|
|
@ -0,0 +1,19 @@
|
||||||
|
|
||||||
|
CONFIG1 = case os:getenv("TRAVIS") of
|
||||||
|
"true" ->
|
||||||
|
JobId = os:getenv("TRAVIS_JOB_ID"),
|
||||||
|
[{coveralls_service_job_id, JobId},
|
||||||
|
{plugins, [coveralls]},
|
||||||
|
{coveralls_coverdata, "_build/test/cover/*.coverdata"},
|
||||||
|
{coveralls_service_name , "travis-ci"} | CONFIG];
|
||||||
|
_ ->
|
||||||
|
CONFIG
|
||||||
|
end,
|
||||||
|
|
||||||
|
{_, Deps} = lists:keyfind(deps, 1, CONFIG1),
|
||||||
|
{_, OurDeps} = lists:keyfind(github_emqx_deps, 1, CONFIG1),
|
||||||
|
UrlPrefix = "https://github.com/emqx/",
|
||||||
|
NewDeps = Deps ++ [{Name, {git, UrlPrefix ++ atom_to_list(Name), {branch, Branch}}} || {Name, Branch} <- OurDeps],
|
||||||
|
CONFIG2 = lists:keystore(deps, 1, CONFIG1, {deps, NewDeps}),
|
||||||
|
|
||||||
|
CONFIG2.
|
36
rebar.lock
36
rebar.lock
|
@ -1,36 +0,0 @@
|
||||||
[{<<"esockd">>,
|
|
||||||
{git,"https://github.com/emqtt/esockd",
|
|
||||||
{ref,"87d0d3b672e0f25e474f5f8298da568cbb6b168a"}},
|
|
||||||
0},
|
|
||||||
{<<"gen_logger">>,
|
|
||||||
{git,"https://github.com/emqtt/gen_logger.git",
|
|
||||||
{ref,"f6e9f2f373d99f41ffe0579ab5a5f3b19472c9c5"}},
|
|
||||||
1},
|
|
||||||
{<<"goldrush">>,
|
|
||||||
{git,"https://github.com/basho/goldrush.git",
|
|
||||||
{ref,"8f1b715d36b650ec1e1f5612c00e28af6ab0de82"}},
|
|
||||||
1},
|
|
||||||
{<<"gproc">>,
|
|
||||||
{git,"https://github.com/uwiger/gproc",
|
|
||||||
{ref,"01c8fbfdd5e4701e8e4b57b0c8279872f9574b0b"}},
|
|
||||||
0},
|
|
||||||
{<<"lager">>,
|
|
||||||
{git,"https://github.com/basho/lager",
|
|
||||||
{ref,"81eaef0ce98fdbf64ab95665e3bc2ec4b24c7dac"}},
|
|
||||||
0},
|
|
||||||
{<<"lager_syslog">>,
|
|
||||||
{git,"https://github.com/basho/lager_syslog",
|
|
||||||
{ref,"126dd0284fcac9b01613189a82facf8d803411a2"}},
|
|
||||||
0},
|
|
||||||
{<<"mochiweb">>,
|
|
||||||
{git,"https://github.com/emqtt/mochiweb",
|
|
||||||
{ref,"c75d88e451b4fe26580a58223f645d99482f51af"}},
|
|
||||||
0},
|
|
||||||
{<<"pbkdf2">>,
|
|
||||||
{git,"https://github.com/comtihon/erlang-pbkdf2.git",
|
|
||||||
{ref,"7076584f5377e98600a7e2cb81980b2992fb2f71"}},
|
|
||||||
0},
|
|
||||||
{<<"syslog">>,
|
|
||||||
{git,"git://github.com/Vagabond/erlang-syslog",
|
|
||||||
{ref,"0e4f0e95c361af298c5d1d17ceccfa831efc036d"}},
|
|
||||||
1}].
|
|
|
@ -654,7 +654,7 @@ check_pub_caps(#mqtt_packet{header = #mqtt_packet_header{qos = QoS, retain = Ret
|
||||||
#pstate{zone = Zone}) ->
|
#pstate{zone = Zone}) ->
|
||||||
emqx_mqtt_caps:check_pub(Zone, #{qos => QoS, retain => Retain, topic_alias => TopicAlias});
|
emqx_mqtt_caps:check_pub(Zone, #{qos => QoS, retain => Retain, topic_alias => TopicAlias});
|
||||||
check_pub_caps(#mqtt_packet{header = #mqtt_packet_header{qos = QoS, retain = Retain},
|
check_pub_caps(#mqtt_packet{header = #mqtt_packet_header{qos = QoS, retain = Retain},
|
||||||
variable = #mqtt_packet_publish{ properties = Properties}},
|
variable = #mqtt_packet_publish{ properties = _Properties}},
|
||||||
#pstate{zone = Zone}) ->
|
#pstate{zone = Zone}) ->
|
||||||
emqx_mqtt_caps:check_pub(Zone, #{qos => QoS, retain => Retain}).
|
emqx_mqtt_caps:check_pub(Zone, #{qos => QoS, retain => Retain}).
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue