diff --git a/src/rabbit_plugins.erl b/src/rabbit_plugins.erl index 262f20913fdb..994e027eacef 100644 --- a/src/rabbit_plugins.erl +++ b/src/rabbit_plugins.erl @@ -340,7 +340,10 @@ check_plugins_versions(PluginName, AllPlugins, RequiredVersions) -> is_version_supported("", _) -> true; is_version_supported("0.0.0", _) -> true; is_version_supported(_Version, []) -> true; -is_version_supported(Version, ExpectedVersions) -> +is_version_supported(VersionFull, ExpectedVersions) -> + %% Pre-release version should be supported in plugins, + %% therefore preview part should be removed + Version = remove_version_preview_part(VersionFull), case lists:any(fun(ExpectedVersion) -> rabbit_misc:version_minor_equivalent(ExpectedVersion, Version) andalso @@ -351,6 +354,10 @@ is_version_supported(Version, ExpectedVersions) -> false -> false end. +remove_version_preview_part(Version) -> + {Ver, _Preview} = rabbit_semver:parse(Version), + iolist_to_binary(rabbit_semver:format({Ver, {[], []}})). + clean_plugins(Plugins) -> {ok, ExpandDir} = application:get_env(rabbit, plugins_expand_dir), [clean_plugin(Plugin, ExpandDir) || Plugin <- Plugins]. diff --git a/test/plugin_versioning_SUITE.erl b/test/plugin_versioning_SUITE.erl index 9c000557b84b..e184aeac64d0 100644 --- a/test/plugin_versioning_SUITE.erl +++ b/test/plugin_versioning_SUITE.erl @@ -81,6 +81,8 @@ version_support(_Config) -> ,{["3.5.2", "3.6.1"], "3.6.2.999", true} %% x.y.z.p values are supported ,{["3.5.2", "3.6.2.333"], "3.6.2.999", true} %% x.y.z.p values are supported ,{["3.5.2", "3.6.2.333"], "3.6.2.222", false} %% x.y.z.p values are supported + ,{["3.6.0", "3.7.0"], "3.6.3-alpha.1", true} %% Pre-release versions handled like semver part + ,{["3.6.0", "3.7.0"], "3.7.0-alpha.89", true} ], lists:foreach(