Merge pull request #6918 from thalesmg/fix-mix-vsn

Currently, emqx_release.erl depends on the erl_opts option
compile_info being set by Rebar3 to include {emqx_vsn, $PKG_VSN}
to report the version, for instance, in emqx ctl status.

Since Mix does not provide a simple way to pass erl_opts to Rebar3
dependencies without creating a mix.exs file, the workaround is to
set the environment variable ERL_COMPILER_OPTIONS to include that
value before invoking the Erlang compiler on the Rebar3 dependencies.

Also, we set the `EMQX_ENTERPRISE` macro in the same way.
This commit is contained in:
Thales Macedo Garitezi 2022-02-04 16:12:26 -03:00 committed by GitHub
commit e4b14a34b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 22 additions and 0 deletions

22
build
View File

@ -224,6 +224,12 @@ make_docker_testing() {
-f "${DOCKERFILE_TESTING}" .
}
function join {
local IFS="$1"
shift
echo "$*"
}
# used to control the Elixir Mix Release output
# see docstring in `mix.exs`
export_release_vars() {
@ -240,6 +246,22 @@ export_release_vars() {
exit 1
esac
export MIX_ENV="$profile"
local erl_opts=()
if [[ "$profile" = *enterprise* ]]
then
erl_opts+=( "{d,'EMQX_ENTERPRISE'}" )
fi
# At this time, Mix provides no easy way to pass `erl_opts' to
# dependencies. The workaround is to set this variable before
# compiling the project, so that `emqx_release.erl' picks up
# `emqx_vsn' as if it was compiled by rebar3.
erl_opts+=( "{compile_info,[{emqx_vsn,\"${PKG_VSN}\"}]}" )
ERL_COMPILER_OPTIONS="[$(join , "${erl_opts[@]}")]"
export ERL_COMPILER_OPTIONS
}
log "building artifact=$ARTIFACT for profile=$PROFILE"