diff --git a/Makefile b/Makefile index ffa5da854e24..f0a62971d91c 100644 --- a/Makefile +++ b/Makefile @@ -24,8 +24,7 @@ ADDITIONAL_PLUGINS ?= DEPS = rabbit_common rabbit $(PLUGINS) $(ADDITIONAL_PLUGINS) DEP_PLUGINS = rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-tools.mk + rabbit_common/mk/rabbitmq-run.mk DISABLE_DISTCLEAN = 1 @@ -61,6 +60,20 @@ include rabbitmq-components.mk # multiple times (including for release file names and whatnot). PROJECT_VERSION := $(PROJECT_VERSION) +# Fetch/build community plugins. +# +# To include community plugins in commands, use +# `make COMMUNITY_PLUGINS=1` or export the variable. +# They are not included otherwise. Note that only +# the top-level Makefile can do this. +# +# Note that the community plugins will be fetched using +# SSH and therefore may be subject to GH authentication. + +ifdef COMMUNITY_PLUGINS +DEPS += $(RABBITMQ_COMMUNITY) +endif + include erlang.mk include mk/github-actions.mk include mk/bazel.mk diff --git a/deps/amqp10_client/Makefile b/deps/amqp10_client/Makefile index 36c117c78ea1..c195a775dbf1 100644 --- a/deps/amqp10_client/Makefile +++ b/deps/amqp10_client/Makefile @@ -33,13 +33,10 @@ DEPS = amqp10_common credentials_obfuscation TEST_DEPS = rabbit rabbitmq_ct_helpers LOCAL_DEPS = ssl inets crypto public_key -DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-test.mk +DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk +# We do not depend on rabbit therefore can't run the broker. DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-hexpm.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-test.mk \ - rabbit_common/mk/rabbitmq-tools.mk + rabbit_common/mk/rabbitmq-hexpm.mk DEP_PLUGINS += elvis_mk dep_elvis_mk = git https://github.com/inaka/elvis.mk.git master diff --git a/deps/amqp10_common/Makefile b/deps/amqp10_common/Makefile index 6d1b124b817b..db36c18b9419 100644 --- a/deps/amqp10_common/Makefile +++ b/deps/amqp10_common/Makefile @@ -38,12 +38,10 @@ TEST_DEPS = rabbitmq_ct_helpers proper -include development.pre.mk -DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-test.mk +DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk +# We do not depend on rabbit therefore can't run the broker. DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-hexpm.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-test.mk \ - rabbit_common/mk/rabbitmq-tools.mk + rabbit_common/mk/rabbitmq-hexpm.mk PLT_APPS = eunit diff --git a/deps/amqp_client/Makefile b/deps/amqp_client/Makefile index c873f300e553..43dbb62901ad 100644 --- a/deps/amqp_client/Makefile +++ b/deps/amqp_client/Makefile @@ -43,13 +43,11 @@ LOCAL_DEPS = xmerl ssl public_key DEPS = rabbit_common credentials_obfuscation TEST_DEPS = rabbitmq_ct_helpers rabbit meck -DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-test.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-hexpm.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-test.mk \ - rabbit_common/mk/rabbitmq-tools.mk +DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk +# We do not depend on rabbit therefore can't run the broker; +# however we can run a test broker in the test suites. +DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk \ + rabbit_common/mk/rabbitmq-hexpm.mk PLT_APPS = ssl public_key diff --git a/deps/amqp_client/test/system_SUITE.erl b/deps/amqp_client/test/system_SUITE.erl index fe8309ce473a..2ff03e8d20a5 100644 --- a/deps/amqp_client/test/system_SUITE.erl +++ b/deps/amqp_client/test/system_SUITE.erl @@ -335,14 +335,16 @@ safe_call_timeouts_test(Params = #amqp_params_network{}) -> meck:unload(amqp_network_connection); safe_call_timeouts_test(Params = #amqp_params_direct{}) -> + %% We must mock net_kernel:get_net_ticktime/0 as changing + %% the tick time directly could lead to nodes disconnecting. + meck:new(net_kernel, [unstick, passthrough]), + TestCallTimeout = 30000, - NetTicktime0 = net_kernel:get_net_ticktime(), amqp_util:update_call_timeout(TestCallTimeout), %% 1. NetTicktime >= DIRECT_OPERATION_TIMEOUT (120s) NetTicktime1 = 140, - net_kernel:set_net_ticktime(NetTicktime1, 1), - wait_until_net_ticktime(NetTicktime1), + meck:expect(net_kernel, get_net_ticktime, fun() -> NetTicktime1 end), {ok, Connection1} = amqp_connection:start(Params), ?assertEqual((NetTicktime1 * 1000) + ?CALL_TIMEOUT_DEVIATION, @@ -356,15 +358,12 @@ safe_call_timeouts_test(Params = #amqp_params_direct{}) -> %% 2. Transitioning NetTicktime >= DIRECT_OPERATION_TIMEOUT (120s) NetTicktime2 = 120, - net_kernel:set_net_ticktime(NetTicktime2, 1), - ?assertEqual({ongoing_change_to, NetTicktime2}, net_kernel:get_net_ticktime()), + meck:expect(net_kernel, get_net_ticktime, fun() -> {ongoing_change_to, NetTicktime2} end), {ok, Connection2} = amqp_connection:start(Params), ?assertEqual((NetTicktime2 * 1000) + ?CALL_TIMEOUT_DEVIATION, amqp_util:call_timeout()), - wait_until_net_ticktime(NetTicktime2), - ?assertEqual(ok, amqp_connection:close(Connection2)), wait_for_death(Connection2), @@ -373,15 +372,14 @@ safe_call_timeouts_test(Params = #amqp_params_direct{}) -> %% 3. NetTicktime < DIRECT_OPERATION_TIMEOUT (120s) NetTicktime3 = 60, - net_kernel:set_net_ticktime(NetTicktime3, 1), - wait_until_net_ticktime(NetTicktime3), + meck:expect(net_kernel, get_net_ticktime, fun() -> NetTicktime3 end), {ok, Connection3} = amqp_connection:start(Params), ?assertEqual((?DIRECT_OPERATION_TIMEOUT + ?CALL_TIMEOUT_DEVIATION), amqp_util:call_timeout()), - net_kernel:set_net_ticktime(NetTicktime0, 1), - wait_until_net_ticktime(NetTicktime0), + meck:unload(net_kernel), + ?assertEqual(ok, amqp_connection:close(Connection3)), wait_for_death(Connection3), @@ -1578,16 +1576,6 @@ assert_down_with_error(MonitorRef, CodeAtom) -> exit(did_not_die) end. -wait_until_net_ticktime(NetTicktime) -> - case net_kernel:get_net_ticktime() of - NetTicktime -> ok; - {ongoing_change_to, NetTicktime} -> - timer:sleep(1000), - wait_until_net_ticktime(NetTicktime); - _ -> - throw({error, {net_ticktime_not_set, NetTicktime}}) - end. - set_resource_alarm(Resource, Config) when Resource =:= memory orelse Resource =:= disk -> SrcDir = ?config(amqp_client_srcdir, Config), diff --git a/deps/oauth2_client/Makefile b/deps/oauth2_client/Makefile index 2acf3a7c2d0d..6dcf2cbaf7c6 100644 --- a/deps/oauth2_client/Makefile +++ b/deps/oauth2_client/Makefile @@ -9,13 +9,8 @@ LOCAL_DEPS = ssl inets crypto public_key PLT_APPS = rabbit -DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-test.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-hexpm.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-test.mk \ - rabbit_common/mk/rabbitmq-tools.mk +DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk +DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk include rabbitmq-components.mk include erlang.mk diff --git a/deps/rabbit/.gitignore b/deps/rabbit/.gitignore index 7f6246dc7b9e..9e124a080135 100644 --- a/deps/rabbit/.gitignore +++ b/deps/rabbit/.gitignore @@ -2,7 +2,5 @@ /etc/ /test/config_schema_SUITE_data/schema/** -rabbit-rabbitmq-deps.mk - [Bb]in/ [Oo]bj/ diff --git a/deps/rabbit/Makefile b/deps/rabbit/Makefile index 35f2e6c3a3a0..debe7026d6d0 100644 --- a/deps/rabbit/Makefile +++ b/deps/rabbit/Makefile @@ -154,12 +154,8 @@ MANPAGES = $(wildcard $(DOCS_DIR)/*.[0-9]) WEB_MANPAGES = $(patsubst %,%.html,$(MANPAGES)) MD_MANPAGES = $(patsubst %,%.md,$(MANPAGES)) -DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-test.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-test.mk \ - rabbit_common/mk/rabbitmq-tools.mk +DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk +DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk include ../../rabbitmq-components.mk include ../../erlang.mk @@ -222,8 +218,43 @@ SLOW_CT_SUITES := backing_queue \ vhost FAST_CT_SUITES := $(filter-out $(sort $(SLOW_CT_SUITES)),$(CT_SUITES)) -ct-fast: CT_SUITES = $(FAST_CT_SUITES) -ct-slow: CT_SUITES = $(SLOW_CT_SUITES) +ct-fast: + $(MAKE) ct CT_SUITES='$(FAST_CT_SUITES)' + +ct-slow: + $(MAKE) ct CT_SUITES='$(SLOW_CT_SUITES)' + +CT_OPTS += -ct_hooks rabbit_ct_hook [] + +define ct_master.erl + StartOpts = #{ + host => "localhost", + connection => standard_io, + args => ["-hidden"] + }, + {ok, Pid1, _} = peer:start(StartOpts#{name => "rabbit_shard1"}), + {ok, Pid2, _} = peer:start(StartOpts#{name => "rabbit_shard2"}), + {ok, Pid3, _} = peer:start(StartOpts#{name => "rabbit_shard3"}), + {ok, Pid4, _} = peer:start(StartOpts#{name => "rabbit_shard4"}), + peer:call(Pid1, net_kernel, set_net_ticktime, [5]), + peer:call(Pid2, net_kernel, set_net_ticktime, [5]), + peer:call(Pid3, net_kernel, set_net_ticktime, [5]), + peer:call(Pid4, net_kernel, set_net_ticktime, [5]), + peer:call(Pid1, persistent_term, put, [rabbit_ct_tcp_port_base, 23000]), + peer:call(Pid2, persistent_term, put, [rabbit_ct_tcp_port_base, 25000]), + peer:call(Pid3, persistent_term, put, [rabbit_ct_tcp_port_base, 27000]), + peer:call(Pid4, persistent_term, put, [rabbit_ct_tcp_port_base, 29000]), + ct_master:run("ct.test.spec"), + peer:stop(Pid4), + peer:stop(Pid3), + peer:stop(Pid2), + peer:stop(Pid1), + halt() +endef + +ct-master: test-build + $(verbose) mkdir -p $(CT_LOGS_DIR) + $(call erlang,$(ct_master.erl),-sname rabbit_master@localhost -hidden -kernel net_ticktime 5) # -------------------------------------------------------------------- # Compilation. diff --git a/deps/rabbit/ct.test.spec b/deps/rabbit/ct.test.spec new file mode 100644 index 000000000000..8d662b8c1f3c --- /dev/null +++ b/deps/rabbit/ct.test.spec @@ -0,0 +1,186 @@ +{logdir, "logs/"}. +{logdir, master, "logs/"}. +{create_priv_dir, all_nodes, auto_per_run}. + +{node, shard1, 'rabbit_shard1@localhost'}. +{node, shard2, 'rabbit_shard2@localhost'}. +{node, shard3, 'rabbit_shard3@localhost'}. +{node, shard4, 'rabbit_shard4@localhost'}. + +%% +%% Sets of test suites that take around the same time to complete. +%% + +{define, 'Set1', [ + amqp_address_SUITE +, amqp_auth_SUITE +, amqp_client_SUITE +, amqp_credit_api_v2_SUITE +, amqp_proxy_protocol_SUITE +, amqp_system_SUITE +, amqpl_consumer_ack_SUITE +, amqpl_direct_reply_to_SUITE +, amqqueue_backward_compatibility_SUITE +, backing_queue_SUITE +, bindings_SUITE +, channel_interceptor_SUITE +, channel_operation_timeout_SUITE +, classic_queue_SUITE +, classic_queue_prop_SUITE +]}. + +{define, 'Set2', [ + cluster_SUITE +, config_schema_SUITE +, confirms_rejects_SUITE +, consumer_timeout_SUITE +, crashing_queues_SUITE +, deprecated_features_SUITE +, direct_exchange_routing_v2_SUITE +, disconnect_detected_during_alarm_SUITE +, disk_monitor_SUITE +, dynamic_qq_SUITE +, exchanges_SUITE +, rabbit_stream_queue_SUITE +]}. + +{define, 'Set3', [ + cli_forget_cluster_node_SUITE +, feature_flags_SUITE +, feature_flags_v2_SUITE +, feature_flags_with_unpriveleged_user_SUITE +, list_consumers_sanity_check_SUITE +, list_queues_online_and_offline_SUITE +, logging_SUITE +, lqueue_SUITE +, maintenance_mode_SUITE +, mc_unit_SUITE +, message_containers_deaths_v2_SUITE +, message_size_limit_SUITE +, metadata_store_migration_SUITE +, metadata_store_phase1_SUITE +, metrics_SUITE +, mirrored_supervisor_SUITE +, msg_store_SUITE +, peer_discovery_classic_config_SUITE +]}. + +{define, 'Set4', [ + peer_discovery_dns_SUITE +, peer_discovery_tmp_hidden_node_SUITE +, per_node_limit_SUITE +, per_user_connection_channel_limit_SUITE +, per_user_connection_channel_tracking_SUITE +, per_user_connection_tracking_SUITE +, per_vhost_connection_limit_SUITE +, per_vhost_msg_store_SUITE +, per_vhost_queue_limit_SUITE +, policy_SUITE +, priority_queue_SUITE +, priority_queue_recovery_SUITE +, product_info_SUITE +, proxy_protocol_SUITE +, publisher_confirms_parallel_SUITE +]}. + +{define, 'Set5', [ + clustering_recovery_SUITE +, metadata_store_clustering_SUITE +, queue_length_limits_SUITE +, queue_parallel_SUITE +, quorum_queue_SUITE +, rabbit_access_control_SUITE +, rabbit_confirms_SUITE +, rabbit_core_metrics_gc_SUITE +, rabbit_cuttlefish_SUITE +, rabbit_db_binding_SUITE +, rabbit_db_exchange_SUITE +, rabbit_db_maintenance_SUITE +, rabbit_db_msup_SUITE +, rabbit_db_policy_SUITE +, rabbit_db_queue_SUITE +, rabbit_db_topic_exchange_SUITE +, rabbit_direct_reply_to_prop_SUITE +]}. + +{define, 'Set6', [ + queue_type_SUITE +, quorum_queue_member_reconciliation_SUITE +, rabbit_fifo_SUITE +, rabbit_fifo_dlx_SUITE +, rabbit_fifo_dlx_integration_SUITE +, rabbit_fifo_int_SUITE +, rabbit_fifo_prop_SUITE +, rabbit_fifo_v0_SUITE +, rabbit_local_random_exchange_SUITE +, rabbit_message_interceptor_SUITE +, rabbit_stream_coordinator_SUITE +, rabbit_stream_sac_coordinator_SUITE +, rabbitmq_4_0_deprecations_SUITE +, rabbitmq_queues_cli_integration_SUITE +, rabbitmqctl_integration_SUITE +, rabbitmqctl_shutdown_SUITE +, routing_SUITE +, runtime_parameters_SUITE +]}. + +{define, 'Set7', [ + cluster_limit_SUITE +, cluster_minority_SUITE +, clustering_management_SUITE +, signal_handling_SUITE +, single_active_consumer_SUITE +, term_to_binary_compat_prop_SUITE +, topic_permission_SUITE +, transactions_SUITE +, unicode_SUITE +, unit_access_control_SUITE +, unit_access_control_authn_authz_context_propagation_SUITE +, unit_access_control_credential_validation_SUITE +, unit_amqp091_content_framing_SUITE +, unit_amqp091_server_properties_SUITE +, unit_app_management_SUITE +, unit_cluster_formation_locking_mocks_SUITE +, unit_cluster_formation_sort_nodes_SUITE +, unit_collections_SUITE +, unit_config_value_encryption_SUITE +, unit_connection_tracking_SUITE +]}. + +{define, 'Set8', [ + dead_lettering_SUITE +, definition_import_SUITE +, per_user_connection_channel_limit_partitions_SUITE +, per_vhost_connection_limit_partitions_SUITE +, unit_credit_flow_SUITE +, unit_disk_monitor_SUITE +, unit_file_handle_cache_SUITE +, unit_gen_server2_SUITE +, unit_log_management_SUITE +, unit_operator_policy_SUITE +, unit_pg_local_SUITE +, unit_plugin_directories_SUITE +, unit_plugin_versioning_SUITE +, unit_policy_validators_SUITE +, unit_priority_queue_SUITE +, unit_queue_consumers_SUITE +, unit_queue_location_SUITE +, unit_quorum_queue_SUITE +, unit_stats_and_metrics_SUITE +, unit_supervisor2_SUITE +, unit_vm_memory_monitor_SUITE +, upgrade_preparation_SUITE +, vhost_SUITE +]}. + +{suites, shard1, "test/", 'Set1'}. +{suites, shard1, "test/", 'Set2'}. + +{suites, shard2, "test/", 'Set3'}. +{suites, shard2, "test/", 'Set4'}. + +{suites, shard3, "test/", 'Set5'}. +{suites, shard3, "test/", 'Set6'}. + +{suites, shard4, "test/", 'Set7'}. +{suites, shard4, "test/", 'Set8'}. diff --git a/deps/rabbit/test/cluster_limit_SUITE.erl b/deps/rabbit/test/cluster_limit_SUITE.erl index c8aa31614587..22d5c24e0d65 100644 --- a/deps/rabbit/test/cluster_limit_SUITE.erl +++ b/deps/rabbit/test/cluster_limit_SUITE.erl @@ -54,8 +54,7 @@ init_per_group(Group, Config) -> [{rmq_nodes_count, ClusterSize}, {rmq_nodename_suffix, Group}, {tcp_ports_base}]), - Config1b = rabbit_ct_helpers:set_config(Config1, [{net_ticktime, 10}]), - rabbit_ct_helpers:run_steps(Config1b, + rabbit_ct_helpers:run_steps(Config1, [fun merge_app_env/1 ] ++ rabbit_ct_broker_helpers:setup_steps()) end. diff --git a/deps/rabbit/test/deprecated_features_SUITE.erl b/deps/rabbit/test/deprecated_features_SUITE.erl index 6d8ead9d371a..3f4ea21eba8c 100644 --- a/deps/rabbit/test/deprecated_features_SUITE.erl +++ b/deps/rabbit/test/deprecated_features_SUITE.erl @@ -85,9 +85,7 @@ groups() -> init_per_suite(Config) -> rabbit_ct_helpers:log_environment(), logger:set_primary_config(level, debug), - rabbit_ct_helpers:run_setup_steps( - Config, - [fun rabbit_ct_helpers:redirect_logger_to_ct_logs/1]). + rabbit_ct_helpers:run_setup_steps(Config, []). end_per_suite(Config) -> Config. diff --git a/deps/rabbit/test/feature_flags_SUITE.erl b/deps/rabbit/test/feature_flags_SUITE.erl index 55a469209202..23f690b32c29 100644 --- a/deps/rabbit/test/feature_flags_SUITE.erl +++ b/deps/rabbit/test/feature_flags_SUITE.erl @@ -122,9 +122,7 @@ end_per_suite(Config) -> init_per_group(registry, Config) -> logger:set_primary_config(level, debug), - rabbit_ct_helpers:run_steps( - Config, - [fun rabbit_ct_helpers:redirect_logger_to_ct_logs/1]); + rabbit_ct_helpers:run_steps(Config, []); init_per_group(feature_flags_v2, Config) -> %% `feature_flags_v2' is now required and won't work in mixed-version %% clusters if the other version doesn't support it. diff --git a/deps/rabbit/test/feature_flags_v2_SUITE.erl b/deps/rabbit/test/feature_flags_v2_SUITE.erl index 8678d7a2d877..37e881597153 100644 --- a/deps/rabbit/test/feature_flags_v2_SUITE.erl +++ b/deps/rabbit/test/feature_flags_v2_SUITE.erl @@ -114,9 +114,7 @@ groups() -> init_per_suite(Config) -> rabbit_ct_helpers:log_environment(), logger:set_primary_config(level, debug), - rabbit_ct_helpers:run_steps( - Config, - [fun rabbit_ct_helpers:redirect_logger_to_ct_logs/1]). + rabbit_ct_helpers:run_steps(Config, []). end_per_suite(Config) -> Config. @@ -169,7 +167,15 @@ start_slave_node(Parent, Config, Testcase, N) -> Name = list_to_atom( rabbit_misc:format("~ts-~b", [Testcase, N])), ct:pal("- Starting slave node `~ts@...`", [Name]), - {ok, Node} = slave:start(net_adm:localhost(), Name), + {ok, NodePid, Node} = peer:start(#{ + name => Name, + connection => standard_io, + shutdown => close + }), + peer:call(NodePid, net_kernel, set_net_ticktime, [5]), + + persistent_term:put({?MODULE, Node}, NodePid), + ct:pal("- Slave node `~ts` started", [Node]), TestCodePath = filename:dirname(code:which(?MODULE)), @@ -185,8 +191,16 @@ stop_slave_nodes(Config) -> rabbit_ct_helpers:delete_config(Config, nodes). stop_slave_node(Node) -> - ct:pal("- Stopping slave node `~ts`...", [Node]), - ok = slave:stop(Node). + case persistent_term:get({?MODULE, Node}, undefined) of + undefined -> + %% Node was already stopped (e.g. by the test case). + ok; + NodePid -> + persistent_term:erase({?MODULE, Node}), + + ct:pal("- Stopping slave node `~ts`...", [Node]), + ok = peer:stop(NodePid) + end. connect_nodes([FirstNode | OtherNodes] = Nodes) -> lists:foreach( diff --git a/deps/rabbit/test/metadata_store_clustering_SUITE.erl b/deps/rabbit/test/metadata_store_clustering_SUITE.erl index e9bf9584d56b..39f26fbfddff 100644 --- a/deps/rabbit/test/metadata_store_clustering_SUITE.erl +++ b/deps/rabbit/test/metadata_store_clustering_SUITE.erl @@ -73,8 +73,7 @@ end_per_suite(Config) -> init_per_group(unclustered, Config) -> rabbit_ct_helpers:set_config(Config, [{metadata_store, mnesia}, {rmq_nodes_clustered, false}, - {tcp_ports_base}, - {net_ticktime, 10}]); + {tcp_ports_base}]); init_per_group(cluster_size_2, Config) -> rabbit_ct_helpers:set_config(Config, [{rmq_nodes_count, 2}]); init_per_group(cluster_size_3, Config) -> diff --git a/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl b/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl index 1e18f808ceef..8862ddd3dd7a 100644 --- a/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl +++ b/deps/rabbit/test/per_vhost_connection_limit_SUITE.erl @@ -105,9 +105,8 @@ init_per_multinode_group(_Group, Config, NodeCount) -> rabbit_ct_broker_helpers:setup_steps() ++ rabbit_ct_client_helpers:setup_steps()). -end_per_group(Group, Config) when Group == tests; - Group == khepri_migration -> - % The broker is managed by {init,end}_per_testcase(). +end_per_group(Group, Config) when Group == tests -> + % The broker is managed by sub-groups. Config; end_per_group(_Group, Config) -> rabbit_ct_helpers:run_steps(Config, diff --git a/deps/rabbit/test/queue_parallel_SUITE.erl b/deps/rabbit/test/queue_parallel_SUITE.erl index 2b4c4735bcd6..5ee1c3232639 100644 --- a/deps/rabbit/test/queue_parallel_SUITE.erl +++ b/deps/rabbit/test/queue_parallel_SUITE.erl @@ -646,7 +646,11 @@ delete_immediately_by_resource(Config) -> ok. cc_header_non_array_should_close_channel(Config) -> - {C, Ch} = rabbit_ct_client_helpers:open_connection_and_channel(Config, 0), + %% We use an unmanaged connection to avoid issues with + %% tests running in parallel: in this test we expect the + %% channel to close, but that channel is reused in other tests. + C = rabbit_ct_client_helpers:open_unmanaged_connection(Config, 0), + {ok, Ch} = amqp_connection:open_channel(C), Name0 = ?FUNCTION_NAME, Name = atom_to_binary(Name0), QName = <<"queue_cc_header_non_array", Name/binary>>, diff --git a/deps/rabbit/test/queue_type_SUITE.erl b/deps/rabbit/test/queue_type_SUITE.erl index d89859e4703b..28352212dfb1 100644 --- a/deps/rabbit/test/queue_type_SUITE.erl +++ b/deps/rabbit/test/queue_type_SUITE.erl @@ -56,8 +56,7 @@ init_per_group(Group, Config) -> {tcp_ports_base, {skip_n_nodes, ClusterSize}} ]), Config1b = rabbit_ct_helpers:set_config(Config1, - [{queue_type, atom_to_binary(Group, utf8)}, - {net_ticktime, 5} + [{queue_type, atom_to_binary(Group, utf8)} ]), Config2 = rabbit_ct_helpers:run_steps(Config1b, [fun merge_app_env/1 ] ++ diff --git a/deps/rabbit/test/quorum_queue_member_reconciliation_SUITE.erl b/deps/rabbit/test/quorum_queue_member_reconciliation_SUITE.erl index 00ccb34402fe..85e5120ca037 100644 --- a/deps/rabbit/test/quorum_queue_member_reconciliation_SUITE.erl +++ b/deps/rabbit/test/quorum_queue_member_reconciliation_SUITE.erl @@ -51,8 +51,7 @@ init_per_group(Group, Config) -> [{rmq_nodes_count, ClusterSize}, {rmq_nodename_suffix, Group}, {tcp_ports_base}]), - Config1b = rabbit_ct_helpers:set_config(Config1, [{net_ticktime, 10}]), - rabbit_ct_helpers:run_steps(Config1b, + rabbit_ct_helpers:run_steps(Config1, [fun merge_app_env/1 ] ++ rabbit_ct_broker_helpers:setup_steps()). diff --git a/deps/rabbit/test/rabbit_ct_hook.erl b/deps/rabbit/test/rabbit_ct_hook.erl new file mode 100644 index 000000000000..07097a57e0fa --- /dev/null +++ b/deps/rabbit/test/rabbit_ct_hook.erl @@ -0,0 +1,7 @@ +-module(rabbit_ct_hook). + +-export([init/2]). + +init(_, _) -> + _ = rabbit_ct_helpers:redirect_logger_to_ct_logs([]), + {ok, undefined}. diff --git a/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl b/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl index 619fb4e06bdb..5d4c39958e1c 100644 --- a/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl +++ b/deps/rabbit/test/rabbit_fifo_dlx_integration_SUITE.erl @@ -95,8 +95,7 @@ init_per_group(Group, Config, NodesCount) -> Config1 = rabbit_ct_helpers:set_config(Config, [{rmq_nodes_count, NodesCount}, {rmq_nodename_suffix, Group}, - {tcp_ports_base}, - {net_ticktime, 10}]), + {tcp_ports_base}]), Config2 = rabbit_ct_helpers:run_steps(Config1, [fun merge_app_env/1 ] ++ rabbit_ct_broker_helpers:setup_steps()), diff --git a/deps/rabbit/test/rabbit_stream_queue_SUITE.erl b/deps/rabbit/test/rabbit_stream_queue_SUITE.erl index 3d09d901caf9..014c8b03875c 100644 --- a/deps/rabbit/test/rabbit_stream_queue_SUITE.erl +++ b/deps/rabbit/test/rabbit_stream_queue_SUITE.erl @@ -224,15 +224,14 @@ init_per_group1(Group, Config) -> {rmq_nodename_suffix, Group}, {tcp_ports_base}, {rmq_nodes_clustered, Clustered}]), - Config1b = rabbit_ct_helpers:set_config(Config1, [{net_ticktime, 10}]), - Config1c = case Group of + Config1b = case Group of unclustered_size_3_4 -> rabbit_ct_helpers:merge_app_env( - Config1b, {rabbit, [{stream_tick_interval, 5000}]}); + Config1, {rabbit, [{stream_tick_interval, 5000}]}); _ -> - Config1b + Config1 end, - Ret = rabbit_ct_helpers:run_steps(Config1c, + Ret = rabbit_ct_helpers:run_steps(Config1b, [fun merge_app_env/1 ] ++ rabbit_ct_broker_helpers:setup_steps()), case Ret of diff --git a/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl b/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl index f0e05e580e0d..d5f5f147782a 100644 --- a/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl +++ b/deps/rabbit/test/rabbitmq_4_0_deprecations_SUITE.erl @@ -75,9 +75,7 @@ groups() -> init_per_suite(Config) -> rabbit_ct_helpers:log_environment(), logger:set_primary_config(level, debug), - rabbit_ct_helpers:run_setup_steps( - Config, - [fun rabbit_ct_helpers:redirect_logger_to_ct_logs/1]). + rabbit_ct_helpers:run_setup_steps(Config, []). end_per_suite(Config) -> Config. diff --git a/deps/rabbit/test/unit_config_value_encryption_SUITE.erl b/deps/rabbit/test/unit_config_value_encryption_SUITE.erl index 72968c0b37ac..297da7493cbf 100644 --- a/deps/rabbit/test/unit_config_value_encryption_SUITE.erl +++ b/deps/rabbit/test/unit_config_value_encryption_SUITE.erl @@ -68,7 +68,10 @@ decrypt_config(_Config) -> ok. do_decrypt_config(Algo = {C, H, I, P}) -> - ok = application:load(rabbit), + case application:load(rabbit) of + ok -> ok; + {error, {already_loaded, rabbit}} -> ok + end, RabbitConfig = application:get_all_env(rabbit), %% Encrypt a few values in configuration. %% Common cases. diff --git a/deps/rabbit_common/Makefile b/deps/rabbit_common/Makefile index f4a56200f693..857cee1ade5d 100644 --- a/deps/rabbit_common/Makefile +++ b/deps/rabbit_common/Makefile @@ -38,12 +38,10 @@ DEPS = thoas ranch recon credentials_obfuscation -include development.pre.mk -DEP_EARLY_PLUGINS = $(PROJECT)/mk/rabbitmq-early-test.mk +DEP_EARLY_PLUGINS = $(PROJECT)/mk/rabbitmq-early-plugin.mk +# We do not depend on rabbit therefore can't run the broker. DEP_PLUGINS = $(PROJECT)/mk/rabbitmq-build.mk \ - $(PROJECT)/mk/rabbitmq-hexpm.mk \ - $(PROJECT)/mk/rabbitmq-dist.mk \ - $(PROJECT)/mk/rabbitmq-test.mk \ - $(PROJECT)/mk/rabbitmq-tools.mk + $(PROJECT)/mk/rabbitmq-hexpm.mk PLT_APPS += mnesia crypto ssl @@ -54,9 +52,7 @@ HEX_TARBALL_FILES += rabbitmq-components.mk \ git-revisions.txt \ mk/rabbitmq-build.mk \ mk/rabbitmq-dist.mk \ - mk/rabbitmq-early-test.mk \ - mk/rabbitmq-hexpm.mk \ - mk/rabbitmq-test.mk \ - mk/rabbitmq-tools.mk + mk/rabbitmq-early-plugin.mk \ + mk/rabbitmq-hexpm.mk -include development.post.mk diff --git a/deps/rabbit_common/mk/rabbitmq-components.hexpm.mk b/deps/rabbit_common/mk/rabbitmq-components.hexpm.mk index faf75872024e..e9a1ac0db080 100644 --- a/deps/rabbit_common/mk/rabbitmq-components.hexpm.mk +++ b/deps/rabbit_common/mk/rabbitmq-components.hexpm.mk @@ -6,25 +6,30 @@ ifeq ($(.DEFAULT_GOAL),) endif # PROJECT_VERSION defaults to: -# 1. the version exported by rabbitmq-server-release; +# 1. the version exported by environment; # 2. the version stored in `git-revisions.txt`, if it exists; # 3. a version based on git-describe(1), if it is a Git clone; # 4. 0.0.0 +# +# Note that in the case where git-describe(1) is used +# (e.g. during development), running "git gc" may help +# improve the performance. PROJECT_VERSION := $(RABBITMQ_VERSION) ifeq ($(PROJECT_VERSION),) -PROJECT_VERSION := $(shell \ -if test -f git-revisions.txt; then \ +ifneq ($(wildcard git-revisions.txt),) +PROJECT_VERSION = $(shell \ head -n1 git-revisions.txt | \ - awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}'; \ -else \ + awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}') +else +PROJECT_VERSION = $(shell \ (git describe --dirty --abbrev=7 --tags --always --first-parent \ - 2>/dev/null || echo rabbitmq_v0_0_0) | \ - sed -e 's/^rabbitmq_v//' -e 's/^v//' -e 's/_/./g' -e 's/-/+/' \ - -e 's/-/./g'; \ -fi) + 2>/dev/null || echo 0.0.0) | \ + sed -e 's/^v//' -e 's/_/./g' -e 's/-/+/' -e 's/-/./g') endif +endif + # -------------------------------------------------------------------- # RabbitMQ components. diff --git a/deps/rabbit_common/mk/rabbitmq-early-plugin.mk b/deps/rabbit_common/mk/rabbitmq-early-plugin.mk index 7b5f14b8f912..5fdc38754e5e 100644 --- a/deps/rabbit_common/mk/rabbitmq-early-plugin.mk +++ b/deps/rabbit_common/mk/rabbitmq-early-plugin.mk @@ -1,3 +1,61 @@ -ifeq ($(filter rabbitmq-early-test.mk,$(notdir $(MAKEFILE_LIST))),) -include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-early-test.mk +# -------------------------------------------------------------------- +# dialyzer +# -------------------------------------------------------------------- + +DIALYZER_OPTS ?= -Werror_handling -Wunmatched_returns -Wunknown + +dialyze: ERL_LIBS = $(APPS_DIR):$(DEPS_DIR):$(DEPS_DIR)/rabbitmq_cli/_build/dev/lib:$(dir $(shell elixir --eval ":io.format '~s~n', [:code.lib_dir :elixir ]")) + +# -------------------------------------------------------------------- +# Common Test flags. +# -------------------------------------------------------------------- + +# We start the common_test node as a hidden Erlang node. The benefit +# is that other Erlang nodes won't try to connect to each other after +# discovering the common_test node if they are not meant to. +# +# This helps when several unrelated RabbitMQ clusters are started in +# parallel. + +CT_OPTS += -hidden + +# We set a low tick time to deal with distribution failures quicker. + +CT_OPTS += -kernel net_ticktime 5 + +# Enable the following common_test hooks on GH and Concourse: +# +# cth_fail_fast +# This hook will make sure the first failure puts an end to the +# testsuites; ie. all remaining tests are skipped. +# +# cth_styledout +# This hook will change the output of common_test to something more +# concise and colored. + +CT_HOOKS ?= cth_styledout +TEST_DEPS += cth_styledout + +ifdef CONCOURSE +FAIL_FAST = 1 +SKIP_AS_ERROR = 1 +endif + +RMQ_CI_CT_HOOKS = cth_fail_fast +ifeq ($(FAIL_FAST),1) +CT_HOOKS += $(RMQ_CI_CT_HOOKS) +TEST_DEPS += $(RMQ_CI_CT_HOOKS) +endif + +dep_cth_fail_fast = git https://github.com/rabbitmq/cth_fail_fast.git master +dep_cth_styledout = git https://github.com/rabbitmq/cth_styledout.git master + +CT_HOOKS_PARAM_VALUE = $(patsubst %,and %,$(CT_HOOKS)) +CT_OPTS += -ct_hooks $(wordlist 2,$(words $(CT_HOOKS_PARAM_VALUE)),$(CT_HOOKS_PARAM_VALUE)) + +# On CI, set $RABBITMQ_CT_SKIP_AS_ERROR so that any skipped +# testsuite/testgroup/testcase is considered an error. + +ifeq ($(SKIP_AS_ERROR),1) +export RABBITMQ_CT_SKIP_AS_ERROR = true endif diff --git a/deps/rabbit_common/mk/rabbitmq-early-test.mk b/deps/rabbit_common/mk/rabbitmq-early-test.mk deleted file mode 100644 index 3779bd4a2fe7..000000000000 --- a/deps/rabbit_common/mk/rabbitmq-early-test.mk +++ /dev/null @@ -1,72 +0,0 @@ -# -------------------------------------------------------------------- -# dialyzer -# -------------------------------------------------------------------- - -DIALYZER_OPTS ?= -Werror_handling -Wunmatched_returns -Wunknown - -dialyze: ERL_LIBS = $(APPS_DIR):$(DEPS_DIR):$(DEPS_DIR)/rabbitmq_cli/_build/dev/lib:$(dir $(shell elixir --eval ":io.format '~s~n', [:code.lib_dir :elixir ]")) - -# -------------------------------------------------------------------- -# %-on-concourse dependencies. -# -------------------------------------------------------------------- - -ifneq ($(words $(filter %-on-concourse,$(MAKECMDGOALS))),0) -TEST_DEPS += ci $(RMQ_CI_CT_HOOKS) -NO_AUTOPATCH += ci $(RMQ_CI_CT_HOOKS) -dep_ci = git git@github.com:rabbitmq/rabbitmq-ci.git main -endif - -# -------------------------------------------------------------------- -# Common Test flags. -# -------------------------------------------------------------------- - -# We start the common_test node as a hidden Erlang node. The benefit -# is that other Erlang nodes won't try to connect to each other after -# discovering the common_test node if they are not meant to. -# -# This helps when several unrelated RabbitMQ clusters are started in -# parallel. - -CT_OPTS += -hidden - -# Enable the following common_test hooks on GH and Concourse: -# -# cth_fail_fast -# This hook will make sure the first failure puts an end to the -# testsuites; ie. all remaining tests are skipped. -# -# cth_styledout -# This hook will change the output of common_test to something more -# concise and colored. -# -# On Jenkins, in addition to those common_test hooks, enable JUnit-like -# report. Jenkins parses those reports so the results can be browsed -# from its UI. Furthermore, it displays a graph showing evolution of the -# results over time. - -CT_HOOKS ?= cth_styledout -TEST_DEPS += cth_styledout - -ifdef CONCOURSE -FAIL_FAST = 1 -SKIP_AS_ERROR = 1 -endif - -RMQ_CI_CT_HOOKS = cth_fail_fast -ifeq ($(FAIL_FAST),1) -CT_HOOKS += $(RMQ_CI_CT_HOOKS) -TEST_DEPS += $(RMQ_CI_CT_HOOKS) -endif - -dep_cth_fail_fast = git https://github.com/rabbitmq/cth_fail_fast.git master -dep_cth_styledout = git https://github.com/rabbitmq/cth_styledout.git master - -CT_HOOKS_PARAM_VALUE = $(patsubst %,and %,$(CT_HOOKS)) -CT_OPTS += -ct_hooks $(wordlist 2,$(words $(CT_HOOKS_PARAM_VALUE)),$(CT_HOOKS_PARAM_VALUE)) - -# On CI, set $RABBITMQ_CT_SKIP_AS_ERROR so that any skipped -# testsuite/testgroup/testcase is considered an error. - -ifeq ($(SKIP_AS_ERROR),1) -export RABBITMQ_CT_SKIP_AS_ERROR = true -endif diff --git a/deps/rabbit_common/mk/rabbitmq-hexpm.mk b/deps/rabbit_common/mk/rabbitmq-hexpm.mk index 4f314249bdf5..c4c62fdfa865 100644 --- a/deps/rabbit_common/mk/rabbitmq-hexpm.mk +++ b/deps/rabbit_common/mk/rabbitmq-hexpm.mk @@ -1,5 +1,8 @@ # -------------------------------------------------------------------- # Hex.pm. +# +# This Erlang.mk plugin should only be included by +# applications that produce an Hex.pm release. # -------------------------------------------------------------------- .PHONY: hex-publish hex-publish-docs diff --git a/deps/rabbit_common/mk/rabbitmq-plugin.mk b/deps/rabbit_common/mk/rabbitmq-plugin.mk index 29064a9a4f94..fd47b8beec21 100644 --- a/deps/rabbit_common/mk/rabbitmq-plugin.mk +++ b/deps/rabbit_common/mk/rabbitmq-plugin.mk @@ -2,10 +2,6 @@ ifeq ($(filter rabbitmq-build.mk,$(notdir $(MAKEFILE_LIST))),) include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-build.mk endif -ifeq ($(filter rabbitmq-hexpm.mk,$(notdir $(MAKEFILE_LIST))),) -include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-hexpm.mk -endif - ifeq ($(filter rabbitmq-dist.mk,$(notdir $(MAKEFILE_LIST))),) include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-dist.mk endif @@ -13,11 +9,3 @@ endif ifeq ($(filter rabbitmq-run.mk,$(notdir $(MAKEFILE_LIST))),) include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-run.mk endif - -ifeq ($(filter rabbitmq-test.mk,$(notdir $(MAKEFILE_LIST))),) -include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-test.mk -endif - -ifeq ($(filter rabbitmq-tools.mk,$(notdir $(MAKEFILE_LIST))),) -include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-tools.mk -endif diff --git a/deps/rabbit_common/mk/rabbitmq-test.mk b/deps/rabbit_common/mk/rabbitmq-test.mk deleted file mode 100644 index 16cf2dc8f6bc..000000000000 --- a/deps/rabbit_common/mk/rabbitmq-test.mk +++ /dev/null @@ -1,66 +0,0 @@ -.PHONY: ct-slow ct-fast - -ct-slow ct-fast: - $(MAKE) ct CT_SUITES='$(CT_SUITES)' - -# -------------------------------------------------------------------- -# Helpers to run Make targets on Concourse. -# -------------------------------------------------------------------- - -FLY ?= fly -FLY_TARGET ?= $(shell $(FLY) targets | awk '/ci\.rabbitmq\.com/ { print $$1; }') - -CONCOURSE_TASK = $(ERLANG_MK_TMP)/concourse-task.yaml - -CI_DIR ?= $(DEPS_DIR)/ci -PIPELINE_DIR = $(CI_DIR)/server-release -BRANCH_RELEASE = $(shell "$(PIPELINE_DIR)/scripts/map-branch-to-release.sh" "$(base_rmq_ref)") -PIPELINE_DATA = $(PIPELINE_DIR)/release-data-$(BRANCH_RELEASE).yaml -REPOSITORY_NAME = $(shell "$(PIPELINE_DIR)/scripts/map-erlang-app-and-repository-name.sh" "$(PIPELINE_DATA)" "$(PROJECT)") - -CONCOURSE_PLATFORM ?= linux -ERLANG_VERSION ?= $(shell "$(PIPELINE_DIR)/scripts/list-erlang-versions.sh" "$(PIPELINE_DATA)" | head -n 1) -TASK_INPUTS = $(shell "$(PIPELINE_DIR)/scripts/list-task-inputs.sh" "$(CONCOURSE_TASK)") - -.PHONY: $(CONCOURSE_TASK) -$(CONCOURSE_TASK): $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) - $(gen_verbose) echo 'platform: $(CONCOURSE_PLATFORM)' > "$@" - $(verbose) echo 'inputs:' >> "$@" - $(verbose) echo ' - name: $(PROJECT)' >> "$@" - $(verbose) cat $(ERLANG_MK_RECURSIVE_TEST_DEPS_LIST) | while read -r file; do \ - echo " - name: $$(basename "$$file")" >> "$@"; \ - done - $(verbose) echo 'outputs:' >> "$@" - $(verbose) echo ' - name: test-output' >> "$@" -ifeq ($(CONCOURSE_PLATFORM),linux) - $(verbose) echo 'image_resource:' >> "$@" - $(verbose) echo ' type: docker-image' >> "$@" - $(verbose) echo ' source:' >> "$@" - $(verbose) echo ' repository: pivotalrabbitmq/rabbitmq-server-buildenv' >> "$@" - $(verbose) echo ' tag: linux-erlang-$(ERLANG_VERSION)' >> "$@" -endif - $(verbose) echo 'run:' >> "$@" - $(verbose) echo ' path: ci/server-release/scripts/test-erlang-app.sh' >> "$@" - $(verbose) echo ' args:' >> "$@" - $(verbose) echo " - $(PROJECT)" >> "$@" -# This section must be the last because the `%-on-concourse` target -# appends other variables. - $(verbose) echo 'params:' >> "$@" -ifdef V - $(verbose) echo ' V: "$(V)"' >> "$@" -endif -ifdef t - $(verbose) echo ' t: "$(t)"' >> "$@" -endif - -%-on-concourse: $(CONCOURSE_TASK) - $(verbose) test -d "$(PIPELINE_DIR)" - $(verbose) echo ' MAKE_TARGET: "$*"' >> "$(CONCOURSE_TASK)" - $(FLY) -t $(FLY_TARGET) execute \ - --config="$(CONCOURSE_TASK)" \ - $(foreach input,$(TASK_INPUTS), \ - $(if $(filter $(PROJECT),$(input)), \ - --input="$(input)=.", \ - --input="$(input)=$(DEPS_DIR)/$(input)")) \ - --output="test-output=$(CT_LOGS_DIR)/on-concourse" - $(verbose) rm -f "$(CT_LOGS_DIR)/on-concourse/filename" diff --git a/deps/rabbit_common/mk/rabbitmq-tools.mk b/deps/rabbit_common/mk/rabbitmq-tools.mk deleted file mode 100644 index 0e5ca370a8e4..000000000000 --- a/deps/rabbit_common/mk/rabbitmq-tools.mk +++ /dev/null @@ -1,300 +0,0 @@ -ifeq ($(PLATFORM),msys2) -HOSTNAME = $(COMPUTERNAME) -else -ifeq ($(PLATFORM),solaris) -HOSTNAME = $(shell hostname | sed 's@\..*@@') -else -HOSTNAME = $(shell hostname -s) -endif -endif - -READY_DEPS = $(foreach DEP,\ - $(filter $(RABBITMQ_COMPONENTS),$(DEPS) $(BUILD_DEPS) $(TEST_DEPS)), \ - $(if $(wildcard $(DEPS_DIR)/$(DEP)),$(DEP),)) - -RELEASED_RMQ_DEPS = $(filter $(RABBITMQ_COMPONENTS),$(DEPS) $(BUILD_DEPS)) - -.PHONY: show-upstream-git-fetch-url show-upstream-git-push-url \ - show-current-git-fetch-url show-current-git-push-url - -show-upstream-git-fetch-url: - @echo $(RABBITMQ_UPSTREAM_FETCH_URL) - -show-upstream-git-push-url: - @echo $(RABBITMQ_UPSTREAM_PUSH_URL) - -show-current-git-fetch-url: - @echo $(RABBITMQ_CURRENT_FETCH_URL) - -show-current-git-push-url: - @echo $(RABBITMQ_CURRENT_PUSH_URL) - -update-contributor-code-of-conduct: - $(verbose) for repo in $(READY_DEPS:%=$(DEPS_DIR)/%); do \ - cp $(DEPS_DIR)/rabbit_common/CODE_OF_CONDUCT.md $$repo/CODE_OF_CONDUCT.md; \ - cp $(DEPS_DIR)/rabbit_common/CONTRIBUTING.md $$repo/CONTRIBUTING.md; \ - done - -ifneq ($(wildcard .git),) - -.PHONY: sync-gitremote sync-gituser - -sync-gitremote: $(READY_DEPS:%=$(DEPS_DIR)/%+sync-gitremote) - @: - -%+sync-gitremote: - $(exec_verbose) cd $* && \ - git remote set-url origin \ - '$(call dep_rmq_repo,$(RABBITMQ_CURRENT_FETCH_URL),$(notdir $*))' - $(verbose) cd $* && \ - git remote set-url --push origin \ - '$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),$(notdir $*))' - -ifeq ($(origin, RMQ_GIT_GLOBAL_USER_NAME),undefined) -RMQ_GIT_GLOBAL_USER_NAME := $(shell git config --global user.name) -export RMQ_GIT_GLOBAL_USER_NAME -endif -ifeq ($(origin RMQ_GIT_GLOBAL_USER_EMAIL),undefined) -RMQ_GIT_GLOBAL_USER_EMAIL := $(shell git config --global user.email) -export RMQ_GIT_GLOBAL_USER_EMAIL -endif -ifeq ($(origin RMQ_GIT_USER_NAME),undefined) -RMQ_GIT_USER_NAME := $(shell git config user.name) -export RMQ_GIT_USER_NAME -endif -ifeq ($(origin RMQ_GIT_USER_EMAIL),undefined) -RMQ_GIT_USER_EMAIL := $(shell git config user.email) -export RMQ_GIT_USER_EMAIL -endif - -sync-gituser: $(READY_DEPS:%=$(DEPS_DIR)/%+sync-gituser) - @: - -%+sync-gituser: -ifeq ($(RMQ_GIT_USER_NAME),$(RMQ_GIT_GLOBAL_USER_NAME)) - $(exec_verbose) cd $* && git config --unset user.name || : -else - $(exec_verbose) cd $* && git config user.name "$(RMQ_GIT_USER_NAME)" -endif -ifeq ($(RMQ_GIT_USER_EMAIL),$(RMQ_GIT_GLOBAL_USER_EMAIL)) - $(verbose) cd $* && git config --unset user.email || : -else - $(verbose) cd $* && git config user.email "$(RMQ_GIT_USER_EMAIL)" -endif - -.PHONY: sync-gitignore-from-main -sync-gitignore-from-main: $(READY_DEPS:%=$(DEPS_DIR)/%+sync-gitignore-from-main) - -%+sync-gitignore-from-main: - $(gen_verbose) cd $* && \ - if test -d .git; then \ - branch=$$(LANG=C git branch --list | awk '/^\* \(.*detached / {ref=$$0; sub(/.*detached [^ ]+ /, "", ref); sub(/\)$$/, "", ref); print ref; exit;} /^\* / {ref=$$0; sub(/^\* /, "", ref); print ref; exit}'); \ - ! test "$$branch" = 'main' || exit 0; \ - git show origin/main:.gitignore > .gitignore; \ - fi -ifeq ($(DO_COMMIT),yes) - $(verbose) cd $* && \ - if test -d .git; then \ - git diff --quiet .gitignore \ - || git commit -m 'Git: Sync .gitignore from main' .gitignore; \ - fi -endif - -.PHONY: show-branch - -show-branch: $(READY_DEPS:%=$(DEPS_DIR)/%+show-branch) - $(verbose) printf '%-34s %s\n' $(PROJECT): "$$(git symbolic-ref -q --short HEAD || git describe --tags --exact-match)" - -%+show-branch: - $(verbose) printf '%-34s %s\n' $(notdir $*): "$$(cd $* && (git symbolic-ref -q --short HEAD || git describe --tags --exact-match))" - -SINCE_TAG ?= last-release -COMMITS_LOG_OPTS ?= --oneline --decorate --no-merges -MARKDOWN ?= no - -define show_commits_since_tag -set -e; \ -if test "$1"; then \ - erlang_app=$(notdir $1); \ - repository=$(call rmq_cmp_repo_name,$(notdir $1)); \ - git_dir=-C\ "$1"; \ -else \ - erlang_app=$(PROJECT); \ - repository=$(call rmq_cmp_repo_name,$(PROJECT)); \ -fi; \ -case "$(SINCE_TAG)" in \ -last-release) \ - tags_count=$$(git $$git_dir tag -l 2>/dev/null | grep -E -v '(-beta|_milestone|[-_]rc)' | wc -l); \ - ;; \ -*) \ - tags_count=$$(git $$git_dir tag -l 2>/dev/null | wc -l); \ - ;; \ -esac; \ -if test "$$tags_count" -gt 0; then \ - case "$(SINCE_TAG)" in \ - last-release) \ - ref=$$(git $$git_dir describe --abbrev=0 --tags \ - --exclude "*-beta*" \ - --exclude "*_milestone*" \ - --exclude "*[-_]rc*"); \ - ;; \ - last-prerelease) \ - ref=$$(git $$git_dir describe --abbrev=0 --tags); \ - ;; \ - *) \ - git $$git_dir rev-parse "$(SINCE_TAG)" -- >/dev/null; \ - ref=$(SINCE_TAG); \ - ;; \ - esac; \ - commits_count=$$(git $$git_dir log --oneline "$$ref.." | wc -l); \ - if test "$$commits_count" -gt 0; then \ - if test "$(MARKDOWN)" = yes; then \ - printf "\n## [\`$$repository\`](https://github.com/rabbitmq/$$repository)\n\nCommits since \`$$ref\`:\n\n"; \ - git $$git_dir --no-pager log $(COMMITS_LOG_OPTS) \ - --format="format:* %s ([\`%h\`](https://github.com/rabbitmq/$$repository/commit/%H))" \ - "$$ref.."; \ - echo; \ - else \ - echo; \ - echo "# $$repository - Commits since $$ref"; \ - git $$git_dir log $(COMMITS_LOG_OPTS) "$$ref.."; \ - fi; \ - fi; \ -else \ - if test "$(MARKDOWN)" = yes; then \ - printf "\n## [\`$$repository\`](https://github.com/rabbitmq/$$repository)\n\n**New** since the last release!\n"; \ - else \ - echo; \ - echo "# $$repository - New since the last release!"; \ - fi; \ -fi -endef - -.PHONY: commits-since-release - -commits-since-release: commits-since-release-title \ - $(RELEASED_RMQ_DEPS:%=$(DEPS_DIR)/%+commits-since-release) - $(verbose) $(call show_commits_since_tag) - -commits-since-release-title: - $(verbose) set -e; \ - case "$(SINCE_TAG)" in \ - last-release) \ - tags_count=$$(git $$git_dir tag -l 2>/dev/null | grep -E -v '(-beta|_milestone|[-_]rc)' | wc -l); \ - ;; \ - *) \ - tags_count=$$(git $$git_dir tag -l 2>/dev/null | wc -l); \ - ;; \ - esac; \ - if test "$$tags_count" -gt 0; then \ - case "$(SINCE_TAG)" in \ - last-release) \ - ref=$$(git $$git_dir describe --abbrev=0 --tags \ - --exclude "*-beta*" \ - --exclude "*_milestone*" \ - --exclude "*[-_]rc*"); \ - ;; \ - last-prerelease) \ - ref=$$(git $$git_dir describe --abbrev=0 --tags); \ - ;; \ - *) \ - ref=$(SINCE_TAG); \ - ;; \ - esac; \ - version=$$(echo "$$ref" | sed -E \ - -e 's/rabbitmq_v([0-9]+)_([0-9]+)_([0-9]+)/v\1.\2.\3/' \ - -e 's/_milestone/-beta./' \ - -e 's/_rc/-rc./' \ - -e 's/^v//'); \ - echo "# Changes since RabbitMQ $$version"; \ - else \ - echo "# Changes since the beginning of time"; \ - fi - -%+commits-since-release: - $(verbose) $(call show_commits_since_tag,$*) - -endif # ($(wildcard .git),) - -# -------------------------------------------------------------------- -# erlang.mk query-deps* formatting. -# -------------------------------------------------------------------- - -# We need to provide a repo mapping for deps resolved via git_rmq fetch method -query_repo_git_rmq = https://github.com/rabbitmq/$(call rmq_cmp_repo_name,$(1)) - -# -------------------------------------------------------------------- -# Common test logs compression. -# -------------------------------------------------------------------- - -.PHONY: ct-logs-archive clean-ct-logs-archive - -ifneq ($(wildcard logs/*),) -TAR := tar -ifeq ($(PLATFORM),freebsd) -TAR := gtar -endif -ifeq ($(PLATFORM),darwin) -TAR := gtar -endif - -CT_LOGS_ARCHIVE ?= $(PROJECT)-ct-logs-$(subst _,-,$(subst -,,$(subst .,,$(patsubst ct_run.ct_$(PROJECT)@$(HOSTNAME).%,%,$(notdir $(lastword $(wildcard logs/ct_run.*))))))).tar.xz - -ifeq ($(patsubst %.tar.xz,%,$(CT_LOGS_ARCHIVE)),$(CT_LOGS_ARCHIVE)) -$(error CT_LOGS_ARCHIVE file must use '.tar.xz' as its filename extension) -endif - -ct-logs-archive: $(CT_LOGS_ARCHIVE) - @: - -$(CT_LOGS_ARCHIVE): - $(gen_verbose) \ - for file in logs/*; do \ - ! test -L "$$file" || rm "$$file"; \ - done - $(verbose) \ - $(TAR) -c \ - --exclude "*/mnesia" \ - --transform "s/^logs/$(patsubst %.tar.xz,%,$(notdir $(CT_LOGS_ARCHIVE)))/" \ - -f - logs | \ - xz > "$@" -else -ct-logs-archive: - @: -endif - -clean-ct-logs-archive:: - $(gen_verbose) rm -f $(PROJECT)-ct-logs-*.tar.xz - -clean:: clean-ct-logs-archive - -# -------------------------------------------------------------------- -# Generate a file listing RabbitMQ component dependencies and their -# Git commit hash. -# -------------------------------------------------------------------- - -.PHONY: rabbitmq-deps.mk clean-rabbitmq-deps.mk - -rabbitmq-deps.mk: $(PROJECT)-rabbitmq-deps.mk - @: - -closing_paren := ) - -define rmq_deps_mk_line -dep_$(1) := git $(dir $(RABBITMQ_UPSTREAM_FETCH_URL))$(call rmq_cmp_repo_name,$(1)).git $$(git -C "$(2)" rev-parse HEAD) -endef - -$(PROJECT)-rabbitmq-deps.mk: $(ERLANG_MK_RECURSIVE_DEPS_LIST) - $(gen_verbose) echo "# In $(PROJECT) - commit $$(git rev-parse HEAD)" > $@ - $(verbose) cat $(ERLANG_MK_RECURSIVE_DEPS_LIST) | \ - while read -r dir; do \ - component=$$(basename "$$dir"); \ - case "$$component" in \ - $(foreach component,$(RABBITMQ_COMPONENTS),$(component)$(closing_paren) echo "$(call rmq_deps_mk_line,$(component),$$dir)" ;;) \ - esac; \ - done >> $@ - -clean:: clean-rabbitmq-deps.mk - -clean-rabbitmq-deps.mk: - $(gen_verbose) rm -f $(PROJECT)-rabbitmq-deps.mk diff --git a/deps/rabbitmq_amqp1_0/Makefile b/deps/rabbitmq_amqp1_0/Makefile index 30dc3ed18824..f59aac6d7fa7 100644 --- a/deps/rabbitmq_amqp1_0/Makefile +++ b/deps/rabbitmq_amqp1_0/Makefile @@ -3,8 +3,7 @@ PROJECT_DESCRIPTION = Deprecated no-op AMQP 1.0 plugin LOCAL_DEPS = rabbit -DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk .DEFAULT_GOAL = all diff --git a/deps/rabbitmq_amqp_client/Makefile b/deps/rabbitmq_amqp_client/Makefile index 0a50069065e3..8ef32b4d4e89 100644 --- a/deps/rabbitmq_amqp_client/Makefile +++ b/deps/rabbitmq_amqp_client/Makefile @@ -8,12 +8,8 @@ BUILD_DEPS = rabbit_common DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk TEST_DEPS = rabbit rabbitmq_ct_helpers -DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-hexpm.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-test.mk \ - rabbit_common/mk/rabbitmq-tools.mk +# We do not depend on rabbit therefore can't run the broker. +DEP_PLUGINS = $(PROJECT)/mk/rabbitmq-build.mk .DEFAULT_GOAL = all diff --git a/deps/rabbitmq_aws/Makefile b/deps/rabbitmq_aws/Makefile index 29089276c9b1..3647e0dfd5c1 100644 --- a/deps/rabbitmq_aws/Makefile +++ b/deps/rabbitmq_aws/Makefile @@ -9,7 +9,8 @@ endef LOCAL_DEPS = crypto inets ssl xmerl public_key BUILD_DEPS = rabbit_common -DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk +# We do not depend on rabbit therefore can't run the broker. +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk TEST_DEPS = meck include ../../rabbitmq-components.mk diff --git a/deps/rabbitmq_cli/Makefile b/deps/rabbitmq_cli/Makefile index a76d414f08f0..75afb38acd18 100644 --- a/deps/rabbitmq_cli/Makefile +++ b/deps/rabbitmq_cli/Makefile @@ -11,7 +11,7 @@ dep_temp = hex 0.4.7 dep_x509 = hex 0.8.8 DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk VERBOSE_TEST ?= true MAX_CASES ?= 1 diff --git a/deps/rabbitmq_codegen/Makefile b/deps/rabbitmq_codegen/Makefile index 55d72ed88a1e..a2f6c0be813f 100644 --- a/deps/rabbitmq_codegen/Makefile +++ b/deps/rabbitmq_codegen/Makefile @@ -8,35 +8,3 @@ clean: distclean: clean find . -regex '.*\(~\|#\|\.swp\)' -exec rm {} \; - -# Upstream URL for the current project. -RABBITMQ_COMPONENT_REPO_NAME := rabbitmq-codegen -RABBITMQ_UPSTREAM_FETCH_URL ?= https://github.com/rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git -RABBITMQ_UPSTREAM_PUSH_URL ?= git@github.com:rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git - -# Current URL for the current project. If this is not a Git clone, -# default to the upstream Git repository. -ifneq ($(wildcard .git),) -git_origin_fetch_url := $(shell git config remote.origin.url) -git_origin_push_url := $(shell git config remote.origin.pushurl || git config remote.origin.url) -RABBITMQ_CURRENT_FETCH_URL ?= $(git_origin_fetch_url) -RABBITMQ_CURRENT_PUSH_URL ?= $(git_origin_push_url) -else -RABBITMQ_CURRENT_FETCH_URL ?= $(RABBITMQ_UPSTREAM_FETCH_URL) -RABBITMQ_CURRENT_PUSH_URL ?= $(RABBITMQ_UPSTREAM_PUSH_URL) -endif - -.PHONY: show-upstream-git-fetch-url show-upstream-git-push-url \ - show-current-git-fetch-url show-current-git-push-url - -show-upstream-git-fetch-url: - @echo $(RABBITMQ_UPSTREAM_FETCH_URL) - -show-upstream-git-push-url: - @echo $(RABBITMQ_UPSTREAM_PUSH_URL) - -show-current-git-fetch-url: - @echo $(RABBITMQ_CURRENT_FETCH_URL) - -show-current-git-push-url: - @echo $(RABBITMQ_CURRENT_PUSH_URL) diff --git a/deps/rabbitmq_ct_client_helpers/Makefile b/deps/rabbitmq_ct_client_helpers/Makefile index c61e87a82a34..84b5238fb08e 100644 --- a/deps/rabbitmq_ct_client_helpers/Makefile +++ b/deps/rabbitmq_ct_client_helpers/Makefile @@ -3,8 +3,7 @@ PROJECT_DESCRIPTION = Common Test helpers for RabbitMQ (client-side helpers) DEPS = rabbit_common rabbitmq_ct_helpers amqp_client -DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-tools.mk +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk PLT_APPS = common_test diff --git a/deps/rabbitmq_ct_helpers/Makefile b/deps/rabbitmq_ct_helpers/Makefile index 2e1f19839036..6b158bcbf1c6 100644 --- a/deps/rabbitmq_ct_helpers/Makefile +++ b/deps/rabbitmq_ct_helpers/Makefile @@ -10,10 +10,8 @@ XREF_IGNORE = [ \ dep_inet_tcp_proxy = git https://github.com/rabbitmq/inet_tcp_proxy master -DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk \ - rabbit_common/mk/rabbitmq-dist.mk \ - rabbit_common/mk/rabbitmq-run.mk \ - rabbit_common/mk/rabbitmq-tools.mk +# As this is a helper application we don't need other plugins. +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk include ../../rabbitmq-components.mk include ../../erlang.mk diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl index c230b63cf3a5..da48bbcca895 100644 --- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl +++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl @@ -489,11 +489,15 @@ init_tcp_port_numbers(Config, NodeConfig, I) -> update_tcp_ports_in_rmq_config(NodeConfig2, ?TCP_PORTS_LIST). tcp_port_base_for_broker(Config, I, PortsCount) -> + tcp_port_base_for_broker0(Config, I, PortsCount). + +tcp_port_base_for_broker0(Config, I, PortsCount) -> + Base0 = persistent_term:get(rabbit_ct_tcp_port_base, ?TCP_PORTS_BASE), Base = case rabbit_ct_helpers:get_config(Config, tcp_ports_base) of undefined -> - ?TCP_PORTS_BASE; + Base0; {skip_n_nodes, N} -> - tcp_port_base_for_broker1(?TCP_PORTS_BASE, N, PortsCount); + tcp_port_base_for_broker1(Base0, N, PortsCount); B -> B end, @@ -668,25 +672,9 @@ do_start_rabbitmq_node(Config, NodeConfig, I) -> DistArg = re:replace(DistModS, "_dist$", "", [{return, list}]), "-pa \"" ++ DistModPath ++ "\" -proto_dist " ++ DistArg end, - %% Set the net_ticktime. - CurrentTicktime = case net_kernel:get_net_ticktime() of - {ongoing_change_to, T} -> T; - T -> T - end, - StartArgs1 = case rabbit_ct_helpers:get_config(Config, net_ticktime) of - undefined -> - case CurrentTicktime of - 60 -> ok; - _ -> net_kernel:set_net_ticktime(60) - end, - StartArgs0; - Ticktime -> - case CurrentTicktime of - Ticktime -> ok; - _ -> net_kernel:set_net_ticktime(Ticktime) - end, - StartArgs0 ++ " -kernel net_ticktime " ++ integer_to_list(Ticktime) - end, + %% Set the net_ticktime to 5s for all nodes (including CT via CT_OPTS). + %% A lower tick time helps trigger distribution failures faster. + StartArgs1 = StartArgs0 ++ " -kernel net_ticktime 5", ExtraArgs0 = [], ExtraArgs1 = case rabbit_ct_helpers:get_config(Config, rmq_plugins_dir) of undefined -> @@ -769,6 +757,7 @@ do_start_rabbitmq_node(Config, NodeConfig, I) -> _ -> AbortCmd = ["stop-node" | MakeVars], _ = rabbit_ct_helpers:make(Config, SrcDir, AbortCmd), + %% @todo Need to stop all nodes in the cluster, not just the one node. {skip, "Failed to initialize RabbitMQ"} end; RunCmd -> diff --git a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl index c2f27226a1c5..07fcd86a7f10 100644 --- a/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl +++ b/deps/rabbitmq_prelaunch/src/rabbit_prelaunch_conf.erl @@ -11,9 +11,8 @@ generate_config_from_cuttlefish_files/3, decrypt_config/1]). --ifdef(TEST). +%% Only used in tests. -export([decrypt_config/2]). --endif. %% These can be removed when we only support OTP-26+. -ignore_xref([{user_drv, whereis_group, 0}, diff --git a/deps/rabbitmq_stream_common/Makefile b/deps/rabbitmq_stream_common/Makefile index 914a868f1c7c..c159f0eb5593 100644 --- a/deps/rabbitmq_stream_common/Makefile +++ b/deps/rabbitmq_stream_common/Makefile @@ -13,7 +13,8 @@ TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers PLT_APPS = osiris DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk +# We do not depend on rabbit therefore can't run the broker. +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk include ../../rabbitmq-components.mk include ../../erlang.mk diff --git a/deps/trust_store_http/Makefile b/deps/trust_store_http/Makefile index 341d187df719..fa7c17d9ac6e 100644 --- a/deps/trust_store_http/Makefile +++ b/deps/trust_store_http/Makefile @@ -10,7 +10,8 @@ LOCAL_DEPS = ssl DEPS = cowboy thoas DEP_EARLY_PLUGINS = rabbit_common/mk/rabbitmq-early-plugin.mk -DEP_PLUGINS = rabbit_common/mk/rabbitmq-plugin.mk +# We do not depend on rabbit therefore can't run the broker. +DEP_PLUGINS = rabbit_common/mk/rabbitmq-build.mk include ../../rabbitmq-components.mk include ../../erlang.mk diff --git a/rabbitmq-components.mk b/rabbitmq-components.mk index 161826f98acb..6d88fe932b1e 100644 --- a/rabbitmq-components.mk +++ b/rabbitmq-components.mk @@ -6,108 +6,34 @@ ifeq ($(.DEFAULT_GOAL),) endif # PROJECT_VERSION defaults to: -# 1. the version exported by rabbitmq-server-release; +# 1. the version exported by environment; # 2. the version stored in `git-revisions.txt`, if it exists; # 3. a version based on git-describe(1), if it is a Git clone; # 4. 0.0.0 +# +# Note that in the case where git-describe(1) is used +# (e.g. during development), running "git gc" may help +# improve the performance. PROJECT_VERSION := $(RABBITMQ_VERSION) ifeq ($(PROJECT_VERSION),) +ifneq ($(wildcard git-revisions.txt),) PROJECT_VERSION = $(shell \ -if test -f git-revisions.txt; then \ head -n1 git-revisions.txt | \ - awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}'; \ -else \ + awk '{print $$$(words $(PROJECT_DESCRIPTION) version);}') +else +PROJECT_VERSION = $(shell \ (git describe --dirty --abbrev=7 --tags --always --first-parent \ - 2>/dev/null || echo rabbitmq_v0_0_0) | \ - sed -e 's/^rabbitmq_v//' -e 's/^v//' -e 's/_/./g' -e 's/-/+/' \ - -e 's/-/./g'; \ -fi) + 2>/dev/null || echo 0.0.0) | \ + sed -e 's/^v//' -e 's/_/./g' -e 's/-/+/' -e 's/-/./g') +endif endif # -------------------------------------------------------------------- # RabbitMQ components. # -------------------------------------------------------------------- -# For RabbitMQ repositories, we want to checkout branches which match -# the parent project. For instance, if the parent project is on a -# release tag, dependencies must be on the same release tag. If the -# parent project is on a topic branch, dependencies must be on the same -# topic branch or fallback to `stable` or `main` whichever was the -# base of the topic branch. - -dep_amqp_client = git_rmq-subfolder rabbitmq-erlang-client $(current_rmq_ref) $(base_rmq_ref) main -dep_amqp10_client = git_rmq-subfolder rabbitmq-amqp1.0-client $(current_rmq_ref) $(base_rmq_ref) main -dep_oauth2_client = git_rmq-subfolder oauth2-client $(current_rmq_ref) $(base_rmq_ref) main -dep_amqp10_common = git_rmq-subfolder rabbitmq-amqp1.0-common $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbit = git_rmq-subfolder rabbitmq-server $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbit_common = git_rmq-subfolder rabbitmq-common $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_amqp1_0 = git_rmq-subfolder rabbitmq-amqp1.0 $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_auth_backend_amqp = git_rmq rabbitmq-auth-backend-amqp $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_auth_backend_cache = git_rmq-subfolder rabbitmq-auth-backend-cache $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_auth_backend_http = git_rmq-subfolder rabbitmq-auth-backend-http $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_auth_backend_ldap = git_rmq-subfolder rabbitmq-auth-backend-ldap $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_auth_backend_oauth2 = git_rmq-subfolder rabbitmq-auth-backend-oauth2 $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_auth_mechanism_ssl = git_rmq-subfolder rabbitmq-auth-mechanism-ssl $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_aws = git_rmq-subfolder rabbitmq-aws $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_boot_steps_visualiser = git_rmq rabbitmq-boot-steps-visualiser $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_cli = git_rmq-subfolder rabbitmq-cli $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_codegen = git_rmq-subfolder rabbitmq-codegen $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_consistent_hash_exchange = git_rmq-subfolder rabbitmq-consistent-hash-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_ct_client_helpers = git_rmq-subfolder rabbitmq-ct-client-helpers $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_ct_helpers = git_rmq-subfolder rabbitmq-ct-helpers $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_delayed_message_exchange = git_rmq rabbitmq-delayed-message-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_dotnet_client = git_rmq rabbitmq-dotnet-client $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_event_exchange = git_rmq-subfolder rabbitmq-event-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_federation = git_rmq-subfolder rabbitmq-federation $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_federation_management = git_rmq-subfolder rabbitmq-federation-management $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_federation_prometheus = git_rmq-subfolder rabbitmq-federation-prometheus $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_java_client = git_rmq rabbitmq-java-client $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_jms_client = git_rmq rabbitmq-jms-client $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_jms_cts = git_rmq rabbitmq-jms-cts $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_jms_topic_exchange = git_rmq-subfolder rabbitmq-jms-topic-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_lvc_exchange = git_rmq rabbitmq-lvc-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_management = git_rmq-subfolder rabbitmq-management $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_management_agent = git_rmq-subfolder rabbitmq-management-agent $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_management_exchange = git_rmq rabbitmq-management-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_management_themes = git_rmq rabbitmq-management-themes $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_message_timestamp = git_rmq rabbitmq-message-timestamp $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_metronome = git_rmq rabbitmq-metronome $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_mqtt = git_rmq-subfolder rabbitmq-mqtt $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_objc_client = git_rmq rabbitmq-objc-client $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_peer_discovery_aws = git_rmq-subfolder rabbitmq-peer-discovery-aws $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_peer_discovery_common = git_rmq-subfolder rabbitmq-peer-discovery-common $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_peer_discovery_consul = git_rmq-subfolder rabbitmq-peer-discovery-consul $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_peer_discovery_etcd = git_rmq-subfolder rabbitmq-peer-discovery-etcd $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_peer_discovery_k8s = git_rmq-subfolder rabbitmq-peer-discovery-k8s $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_prelaunch = git_rmq-subfolder rabbitmq-prelaunch $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_prometheus = git_rmq-subfolder rabbitmq-prometheus $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_random_exchange = git_rmq-subfolder rabbitmq-random-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_recent_history_exchange = git_rmq-subfolder rabbitmq-recent-history-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_routing_node_stamp = git_rmq rabbitmq-routing-node-stamp $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_rtopic_exchange = git_rmq rabbitmq-rtopic-exchange $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_sharding = git_rmq-subfolder rabbitmq-sharding $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_shovel = git_rmq-subfolder rabbitmq-shovel $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_shovel_management = git_rmq-subfolder rabbitmq-shovel-management $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_shovel_prometheus = git_rmq-subfolder rabbitmq-shovel-prometheus $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_stomp = git_rmq-subfolder rabbitmq-stomp $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_stream = git_rmq-subfolder rabbitmq-stream $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_stream_common = git_rmq-subfolder rabbitmq-stream-common $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_stream_management = git_rmq-subfolder rabbitmq-stream-management $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_toke = git_rmq rabbitmq-toke $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_top = git_rmq-subfolder rabbitmq-top $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_tracing = git_rmq-subfolder rabbitmq-tracing $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_trust_store = git_rmq-subfolder rabbitmq-trust-store $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_test = git_rmq rabbitmq-test $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_web_dispatch = git_rmq-subfolder rabbitmq-web-dispatch $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_web_stomp = git_rmq-subfolder rabbitmq-web-stomp $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_web_stomp_examples = git_rmq-subfolder rabbitmq-web-stomp-examples $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_web_mqtt = git_rmq-subfolder rabbitmq-web-mqtt $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_web_mqtt_examples = git_rmq-subfolder rabbitmq-web-mqtt-examples $(current_rmq_ref) $(base_rmq_ref) main -dep_rabbitmq_website = git_rmq rabbitmq-website $(current_rmq_ref) $(base_rmq_ref) live main -dep_toke = git_rmq toke $(current_rmq_ref) $(base_rmq_ref) master - # Third-party dependencies version pinning. # # We do that in this file, which is included by all projects, to ensure @@ -133,74 +59,95 @@ dep_seshat = git https://github.com/rabbitmq/seshat v0.6.1 dep_stdout_formatter = hex 0.2.4 dep_sysmon_handler = hex 1.3.0 -RABBITMQ_COMPONENTS = amqp_client \ - amqp10_common \ - amqp10_client \ - oauth2_client \ - rabbit \ - rabbit_common \ - rabbitmq_amqp1_0 \ - rabbitmq_auth_backend_amqp \ - rabbitmq_auth_backend_cache \ - rabbitmq_auth_backend_http \ - rabbitmq_auth_backend_ldap \ - rabbitmq_auth_backend_oauth2 \ - rabbitmq_auth_mechanism_ssl \ - rabbitmq_aws \ - rabbitmq_boot_steps_visualiser \ - rabbitmq_cli \ - rabbitmq_codegen \ - rabbitmq_consistent_hash_exchange \ - rabbitmq_ct_client_helpers \ - rabbitmq_ct_helpers \ - rabbitmq_delayed_message_exchange \ - rabbitmq_dotnet_client \ - rabbitmq_event_exchange \ - rabbitmq_federation \ - rabbitmq_federation_management \ - rabbitmq_federation_prometheus \ - rabbitmq_java_client \ - rabbitmq_jms_client \ - rabbitmq_jms_cts \ - rabbitmq_jms_topic_exchange \ - rabbitmq_lvc_exchange \ - rabbitmq_management \ - rabbitmq_management_agent \ - rabbitmq_management_exchange \ - rabbitmq_management_themes \ - rabbitmq_message_timestamp \ - rabbitmq_metronome \ - rabbitmq_mqtt \ - rabbitmq_objc_client \ - rabbitmq_peer_discovery_aws \ - rabbitmq_peer_discovery_common \ - rabbitmq_peer_discovery_consul \ - rabbitmq_peer_discovery_etcd \ - rabbitmq_peer_discovery_k8s \ - rabbitmq_prometheus \ - rabbitmq_random_exchange \ - rabbitmq_recent_history_exchange \ - rabbitmq_routing_node_stamp \ - rabbitmq_rtopic_exchange \ - rabbitmq_server_release \ - rabbitmq_sharding \ - rabbitmq_shovel \ - rabbitmq_shovel_management \ - rabbitmq_shovel_prometheus \ - rabbitmq_stomp \ - rabbitmq_stream \ - rabbitmq_stream_common \ - rabbitmq_stream_management \ - rabbitmq_toke \ - rabbitmq_top \ - rabbitmq_tracing \ - rabbitmq_trust_store \ - rabbitmq_web_dispatch \ - rabbitmq_web_mqtt \ - rabbitmq_web_mqtt_examples \ - rabbitmq_web_stomp \ - rabbitmq_web_stomp_examples \ - rabbitmq_website +# RabbitMQ applications found in the monorepo. +# +# Note that rabbitmq_server_release is not a real application +# but is the name used in the top-level Makefile. + +RABBITMQ_BUILTIN = \ + amqp10_client \ + amqp10_common \ + amqp_client \ + oauth2_client \ + rabbit \ + rabbit_common \ + rabbitmq_amqp1_0 \ + rabbitmq_amqp_client \ + rabbitmq_auth_backend_cache \ + rabbitmq_auth_backend_http \ + rabbitmq_auth_backend_ldap \ + rabbitmq_auth_backend_oauth2 \ + rabbitmq_auth_mechanism_ssl \ + rabbitmq_aws \ + rabbitmq_cli \ + rabbitmq_codegen \ + rabbitmq_consistent_hash_exchange \ + rabbitmq_ct_client_helpers \ + rabbitmq_ct_helpers \ + rabbitmq_event_exchange \ + rabbitmq_federation \ + rabbitmq_federation_management \ + rabbitmq_federation_prometheus \ + rabbitmq_jms_topic_exchange \ + rabbitmq_management \ + rabbitmq_management_agent \ + rabbitmq_mqtt \ + rabbitmq_peer_discovery_aws \ + rabbitmq_peer_discovery_common \ + rabbitmq_peer_discovery_consul \ + rabbitmq_peer_discovery_etcd \ + rabbitmq_peer_discovery_k8s \ + rabbitmq_prelaunch \ + rabbitmq_prometheus \ + rabbitmq_random_exchange \ + rabbitmq_recent_history_exchange \ + rabbitmq_server_release \ + rabbitmq_sharding \ + rabbitmq_shovel \ + rabbitmq_shovel_management \ + rabbitmq_stomp \ + rabbitmq_stream \ + rabbitmq_stream_common \ + rabbitmq_stream_management \ + rabbitmq_top \ + rabbitmq_tracing \ + rabbitmq_trust_store \ + rabbitmq_web_dispatch \ + rabbitmq_web_mqtt \ + rabbitmq_web_mqtt_examples \ + rabbitmq_web_stomp \ + rabbitmq_web_stomp_examples \ + trust_store_http + +# Applications outside of the monorepo maintained by Team RabbitMQ. + +RABBITMQ_COMMUNITY = \ + rabbitmq_auth_backend_amqp \ + rabbitmq_boot_steps_visualiser \ + rabbitmq_delayed_message_exchange \ + rabbitmq_lvc_exchange \ + rabbitmq_management_exchange \ + rabbitmq_management_themes \ + rabbitmq_message_timestamp \ + rabbitmq_metronome \ + rabbitmq_routing_node_stamp \ + rabbitmq_rtopic_exchange + +community_dep = git git@github.com:rabbitmq/$1.git $(if $2,$2,main) +dep_rabbitmq_auth_backend_amqp = $(call community_dep,rabbitmq-auth-backend-amqp) +dep_rabbitmq_boot_steps_visualiser = $(call community_dep,rabbitmq-boot-steps-visualiser,master) +dep_rabbitmq_delayed_message_exchange = $(call community_dep,rabbitmq-delayed-message-exchange) +dep_rabbitmq_lvc_exchange = $(call community_dep,rabbitmq-lvc-exchange) +dep_rabbitmq_management_exchange = $(call community_dep,rabbitmq-management-exchange) +dep_rabbitmq_management_themes = $(call community_dep,rabbitmq-management-themes,master) +dep_rabbitmq_message_timestamp = $(call community_dep,rabbitmq-message-timestamp) +dep_rabbitmq_metronome = $(call community_dep,rabbitmq-metronome,master) +dep_rabbitmq_routing_node_stamp = $(call community_dep,rabbitmq-routing-node-stamp) +dep_rabbitmq_rtopic_exchange = $(call community_dep,rabbitmq-rtopic-exchange) + +# All RabbitMQ applications. + +RABBITMQ_COMPONENTS = $(RABBITMQ_BUILTIN) $(RABBITMQ_COMMUNITY) # Erlang.mk does not rebuild dependencies by default, once they were # compiled once, except for those listed in the `$(FORCE_REBUILD)` @@ -211,137 +158,10 @@ RABBITMQ_COMPONENTS = amqp_client \ FORCE_REBUILD = $(RABBITMQ_COMPONENTS) -# Several components have a custom erlang.mk/build.config, mainly -# to disable eunit. Therefore, we can't use the top-level project's -# erlang.mk copy. -NO_AUTOPATCH += $(RABBITMQ_COMPONENTS) - -ifeq ($(origin current_rmq_ref),undefined) -ifneq ($(wildcard .git),) -current_rmq_ref := $(shell (\ - ref=$$(LANG=C git branch --list | awk '/^\* \(.*detached / {ref=$$0; sub(/.*detached [^ ]+ /, "", ref); sub(/\)$$/, "", ref); print ref; exit;} /^\* / {ref=$$0; sub(/^\* /, "", ref); print ref; exit}');\ - if test "$$(git rev-parse --short HEAD)" != "$$ref"; then echo "$$ref"; fi)) -else -current_rmq_ref := main -endif -endif -export current_rmq_ref - -ifeq ($(origin base_rmq_ref),undefined) -ifneq ($(wildcard .git),) -possible_base_rmq_ref := main -ifeq ($(possible_base_rmq_ref),$(current_rmq_ref)) -base_rmq_ref := $(current_rmq_ref) -else -base_rmq_ref := $(shell \ - (git rev-parse --verify -q main >/dev/null && \ - git rev-parse --verify -q $(possible_base_rmq_ref) >/dev/null && \ - git merge-base --is-ancestor $$(git merge-base main HEAD) $(possible_base_rmq_ref) && \ - echo $(possible_base_rmq_ref)) || \ - echo main) -endif -else -base_rmq_ref := main -endif -endif -export base_rmq_ref - -# Repository URL selection. -# -# First, we infer other components' location from the current project -# repository URL, if it's a Git repository: -# - We take the "origin" remote URL as the base -# - The current project name and repository name is replaced by the -# target's properties: -# eg. rabbitmq-common is replaced by rabbitmq-codegen -# eg. rabbit_common is replaced by rabbitmq_codegen -# -# If cloning from this computed location fails, we fallback to RabbitMQ -# upstream which is GitHub. - -# Macro to transform eg. "rabbit_common" to "rabbitmq-common". -rmq_cmp_repo_name = $(word 2,$(dep_$(1))) - -# Upstream URL for the current project. -RABBITMQ_COMPONENT_REPO_NAME := $(call rmq_cmp_repo_name,$(PROJECT)) -RABBITMQ_UPSTREAM_FETCH_URL ?= https://github.com/rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git -RABBITMQ_UPSTREAM_PUSH_URL ?= git@github.com:rabbitmq/$(RABBITMQ_COMPONENT_REPO_NAME).git - -# Current URL for the current project. If this is not a Git clone, -# default to the upstream Git repository. -ifneq ($(wildcard .git),) -git_origin_fetch_url := $(shell git config remote.origin.url) -git_origin_push_url := $(shell git config remote.origin.pushurl || git config remote.origin.url) -RABBITMQ_CURRENT_FETCH_URL ?= $(git_origin_fetch_url) -RABBITMQ_CURRENT_PUSH_URL ?= $(git_origin_push_url) -else -RABBITMQ_CURRENT_FETCH_URL ?= $(RABBITMQ_UPSTREAM_FETCH_URL) -RABBITMQ_CURRENT_PUSH_URL ?= $(RABBITMQ_UPSTREAM_PUSH_URL) -endif - -# Macro to replace the following pattern: -# 1. /foo.git -> /bar.git -# 2. /foo -> /bar -# 3. /foo/ -> /bar/ -subst_repo_name = $(patsubst %/$(1)/%,%/$(2)/%,$(patsubst %/$(1),%/$(2),$(patsubst %/$(1).git,%/$(2).git,$(3)))) - -# Macro to replace both the project's name (eg. "rabbit_common") and -# repository name (eg. "rabbitmq-common") by the target's equivalent. -# -# This macro is kept on one line because we don't want whitespaces in -# the returned value, as it's used in $(dep_fetch_git_rmq) in a shell -# single-quoted string. -dep_rmq_repo = $(if $(dep_$(2)),$(call subst_repo_name,$(PROJECT),$(2),$(call subst_repo_name,$(RABBITMQ_COMPONENT_REPO_NAME),$(call rmq_cmp_repo_name,$(2)),$(1))),$(pkg_$(1)_repo)) - -dep_rmq_commits = $(if $(dep_$(1)), \ - $(wordlist 3,$(words $(dep_$(1))),$(dep_$(1))), \ - $(pkg_$(1)_commit)) - -define dep_fetch_git_rmq - fetch_url1='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_FETCH_URL),$(1))'; \ - fetch_url2='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_FETCH_URL),$(1))'; \ - if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \ - git clone -q -n -- "$$$$fetch_url1" $(DEPS_DIR)/$(call dep_name,$(1)); then \ - fetch_url="$$$$fetch_url1"; \ - push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),$(1))'; \ - elif git clone -q -n -- "$$$$fetch_url2" $(DEPS_DIR)/$(call dep_name,$(1)); then \ - fetch_url="$$$$fetch_url2"; \ - push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),$(1))'; \ - fi; \ - cd $(DEPS_DIR)/$(call dep_name,$(1)) && ( \ - $(foreach ref,$(call dep_rmq_commits,$(1)), \ - git checkout -q $(ref) >/dev/null 2>&1 || \ - ) \ - (echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \ - 1>&2 && false) ) && \ - (test "$$$$fetch_url" = "$$$$push_url" || \ - git remote set-url --push origin "$$$$push_url") -endef - -define dep_fetch_git_rmq-subfolder - fetch_url1='https://github.com/rabbitmq/rabbitmq-server.git'; \ - fetch_url2='git@github.com:rabbitmq/rabbitmq-server.git'; \ - if [ ! -d $(ERLANG_MK_TMP)/rabbitmq-server ]; then \ - if test "$$$$fetch_url1" != '$(RABBITMQ_CURRENT_FETCH_URL)' && \ - git clone -q -n -- "$$$$fetch_url1" $(ERLANG_MK_TMP)/rabbitmq-server; then \ - fetch_url="$$$$fetch_url1"; \ - push_url='$(call dep_rmq_repo,$(RABBITMQ_CURRENT_PUSH_URL),rabbitmq-server)'; \ - elif git clone -q -n -- "$$$$fetch_url2" $(ERLANG_MK_TMP)/rabbitmq-server; then \ - fetch_url="$$$$fetch_url2"; \ - push_url='$(call dep_rmq_repo,$(RABBITMQ_UPSTREAM_PUSH_URL),rabbitmq-server)'; \ - fi; \ - fi; \ - cd $(ERLANG_MK_TMP)/rabbitmq-server && ( \ - $(foreach ref,$(call dep_rmq_commits,$(1)), \ - git checkout -q $(ref) >/dev/null 2>&1 || \ - ) \ - (echo "error: no valid pathspec among: $(call dep_rmq_commits,$(1))" \ - 1>&2 && false) ) && \ - (test "$$$$fetch_url" = "$$$$push_url" || \ - git remote set-url --push origin "$$$$push_url") - ln -s $(ERLANG_MK_TMP)/rabbitmq-server/deps/$(call dep_name,$(1)) \ - $(DEPS_DIR)/$(call dep_name,$(1)); -endef +# We disable autopatching for community plugins as they sit in +# their own repository and we want to avoid polluting the git +# status with changes that should not be committed. +NO_AUTOPATCH += $(RABBITMQ_COMMUNITY) # -------------------------------------------------------------------- # Component distribution. @@ -354,7 +174,7 @@ prepare-dist:: @: # -------------------------------------------------------------------- -# Monorepo-specific settings. +# RabbitMQ-specific settings. # -------------------------------------------------------------------- # If the top-level project is a RabbitMQ component, we override diff --git a/rabbitmq.bzl b/rabbitmq.bzl index 56d2bfa22484..d0a5b52405fc 100644 --- a/rabbitmq.bzl +++ b/rabbitmq.bzl @@ -191,6 +191,7 @@ def rabbitmq_suite( "COVERDATA_TO_LCOV_APPS_DIRS": "deps:deps/rabbit/apps", }.items() + test_env.items()), deps = [":test_erlang_app"] + deps + runtime_deps, + ct_run_extra_args = ["-kernel net_ticktime 5"], **kwargs ) return name @@ -261,6 +262,7 @@ def rabbitmq_integration_suite( ":rabbitmq-for-tests-run", ] + tools, deps = assumed_deps + deps + runtime_deps, + ct_run_extra_args = ["-kernel net_ticktime 5"], **kwargs ) @@ -296,6 +298,7 @@ def rabbitmq_integration_suite( "@rabbitmq-server-generic-unix-3.13//:rabbitmq-run", ] + tools, deps = assumed_deps + deps + runtime_deps, + ct_run_extra_args = ["-kernel net_ticktime 5"], **kwargs )