diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 00000000..8b619ef6 --- /dev/null +++ b/.tool-versions @@ -0,0 +1,11 @@ +## The Official Releases using OTP 26 since EMQX v5.5.0 +## See also +## https://github.com/emqx/emqx/releases/tag/v5.5.0 +# erlang 26.2.1-2 +# elixir 1.15.7-otp-26 + +## Keep using OTP 25.3.2 for docker image +## see also +## https://github.com/emqx/emqx/blob/v5.6.0/build#L400-L401 +erlang 25.3.2-2 +elixir 1.15.7-otp-25 diff --git a/Makefile b/Makefile index 5e850224..3129d25a 100644 --- a/Makefile +++ b/Makefile @@ -1,22 +1,25 @@ +export BUILD_WITHOUT_QUIC ?= true +export BUILD_WITHOUT_ROCKSDB ?= true + ## shallow clone for speed +export REBAR_GIT_CLONE_OPTIONS += --depth=1 -BUILD_WITHOUT_QUIC ?= true -export BUILD_WITHOUT_QUIC -BUILD_WITHOUT_ROCKSDB ?= true -export BUILD_WITHOUT_ROCKSDB +## Feature Used in rebar plugin emqx_plugrel +## The Feature have not enabled by default on OTP25 +export ERL_FLAGS ?= -enable-feature maybe_expr -REBAR ?= $(or $(shell which rebar3 2>/dev/null),$(CURDIR)/rebar3) -REBAR_VERSION ?= 3.19.0-emqx-1 +REBAR = $(CURDIR)/rebar3 +SCRIPTS = $(CURDIR)/scripts .PHONY: all all: compile -.PHONY: get-rebar3 -get-rebar3: - @$(CURDIR)/get-rebar3 $(REBAR_VERSION) +.PHONY: ensure-rebar3 +ensure-rebar3: + @$(SCRIPTS)/ensure-rebar3.sh $(REBAR): - $(MAKE) get-rebar3 + $(MAKE) ensure-rebar3 .PHONY: compile compile: $(REBAR) diff --git a/scripts/ensure-rebar3.sh b/scripts/ensure-rebar3.sh new file mode 100755 index 00000000..14b6ad7c --- /dev/null +++ b/scripts/ensure-rebar3.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -euo pipefail + +[ "${DEBUG:-0}" -eq 1 ] && set -x + +OTP_VSN="${OTP_VSN:-$(./scripts/get-otp-vsn.sh)}" +case ${OTP_VSN} in + 25*) + VERSION="3.19.0-emqx-9" + ;; + 26*) + VERSION="3.20.0-emqx-1" + ;; + *) + echo "Unsupported Erlang/OTP version $OTP_VSN" + exit 1 + ;; +esac + +# ensure dir +cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")/.." + +DOWNLOAD_URL='https://github.com/emqx/rebar3/releases/download' + +download() { + echo "downloading rebar3 ${VERSION}" + curl -f -L "${DOWNLOAD_URL}/${VERSION}/rebar3" -o ./rebar3 +} + +# get the version number from the second line of the escript +# because command `rebar3 -v` tries to load rebar.config +# which is slow and may print some logs +version() { + head -n 2 ./rebar3 | tail -n 1 | tr ' ' '\n' | grep -E '^.+-emqx-.+' +} + +if [ -f 'rebar3' ] && [ "$(version)" = "$VERSION" ]; then + exit 0 +fi + +download +chmod +x ./rebar3 diff --git a/scripts/get-otp-vsn.sh b/scripts/get-otp-vsn.sh new file mode 100755 index 00000000..d21e2c83 --- /dev/null +++ b/scripts/get-otp-vsn.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -euo pipefail + +erl -noshell -eval '{ok, Version} = file:read_file(filename:join([code:root_dir(), "releases", erlang:system_info(otp_release), "OTP_VERSION"])), io:fwrite(Version), halt().'