Skip to content

Commit d83b421

Browse files
authored
Bazel (#36)
* add files for building with bazel * fix dialyzer warnings * Add a github actions workflow
1 parent 07af0c0 commit d83b421

File tree

12 files changed

+544
-7
lines changed

12 files changed

+544
-7
lines changed

.bazelrc

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
build --enable_bzlmod
2+
# build --registry=https://raw.githubusercontent.com/rabbitmq/bazel-central-registry/dev/
3+
4+
build --incompatible_strict_action_env
5+
build --local_test_jobs=1
6+
7+
build --flag_alias=erlang_home=@rules_erlang//:erlang_home
8+
build --flag_alias=erlang_version=@rules_erlang//:erlang_version
9+
10+
build --extra_toolchains="@erlang_config//..."
11+
12+
build:buildbuddy --bes_results_url=https://app.buildbuddy.io/invocation/
13+
build:buildbuddy --bes_backend=grpcs://remote.buildbuddy.io
14+
build:buildbuddy --remote_cache=grpcs://remote.buildbuddy.io
15+
build:buildbuddy --remote_timeout=1200
16+
build:buildbuddy --grpc_keepalive_time=30s
17+
build:buildbuddy --build_metadata=REPO_URL=https://github.com/rabbitmq/rabbitmq-lvc-exchange.git
18+
build:buildbuddy --experimental_remote_cache_compression
19+
build:buildbuddy --experimental_remote_cache_async
20+
build:buildbuddy --noslim_profile
21+
build:buildbuddy --experimental_profile_include_target_label
22+
build:buildbuddy --experimental_profile_include_primary_output
23+
24+
build:rbe --config=buildbuddy
25+
26+
build:rbe --remote_executor=grpcs://remote.buildbuddy.io
27+
28+
build:rbe --spawn_strategy=remote
29+
build:rbe --test_strategy=""
30+
build:rbe --jobs=50
31+
32+
build:rbe --crosstool_top=@rbe//cc:toolchain
33+
build:rbe --extra_toolchains=@rbe//config:cc-toolchain
34+
35+
build:rbe --host_platform=@rabbitmq-server//bazel/platforms:erlang_internal_platform
36+
37+
build:rbe --host_cpu=k8
38+
build:rbe --cpu=k8
39+
40+
build:rbe-24 --config=rbe
41+
build:rbe-24 --platforms=@rabbitmq-server//bazel/platforms:erlang_linux_24_platform
42+
43+
build:rbe-25 --config=rbe
44+
build:rbe-25 --platforms=@rabbitmq-server//bazel/platforms:erlang_linux_25_1_platform
45+
46+
# Try importing a user specific .bazelrc
47+
# You can create your own by copying and editing the template-user.bazelrc template:
48+
# cp template-user.bazelrc user.bazelrc
49+
try-import %workspace%/user.bazelrc

.bazelversion

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
latest

.github/workflows/test.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Test
2+
on:
3+
push:
4+
branches:
5+
- main
6+
pull_request:
7+
jobs:
8+
test:
9+
runs-on: ubuntu-latest
10+
strategy:
11+
fail-fast: false
12+
matrix:
13+
bazel_otp_name:
14+
- "25"
15+
steps:
16+
- name: CHECKOUT
17+
uses: actions/checkout@v3
18+
- name: MOUNT BAZEL CACHE
19+
uses: actions/cache@v3.3.1
20+
with:
21+
path: "/home/runner/repo-cache/"
22+
key: ${{ runner.os }}-repo-cache-${{ hashFiles('MODULE.bazel','WORKSPACE.bazel') }}
23+
restore-keys: |
24+
${{ runner.os }}-repo-cache-
25+
- name: CONFIGURE BAZEL
26+
run: |
27+
if [ -n "${{ secrets.BUILDBUDDY_API_KEY }}" ]; then
28+
cat << EOF >> user.bazelrc
29+
build:buildbuddy --remote_header=x-buildbuddy-api-key=${{ secrets.BUILDBUDDY_API_KEY }}
30+
EOF
31+
fi
32+
cat << EOF >> user.bazelrc
33+
build:buildbuddy --build_metadata=ROLE=CI
34+
build:buildbuddy --build_metadata=VISIBILITY=PUBLIC
35+
build:buildbuddy --repository_cache=/home/runner/repo-cache/
36+
build:buildbuddy --color=yes
37+
build:buildbuddy --disk_cache=
38+
EOF
39+
40+
bazelisk info release
41+
- name: TEST
42+
run: |
43+
bazelisk test //... \
44+
--config=rbe-${{ matrix.bazel_otp_name }} \
45+
--verbose_failures
46+
summary:
47+
needs:
48+
- test
49+
runs-on: ubuntu-latest
50+
steps:
51+
- name: SUMMARY
52+
run: |
53+
echo "SUCCESS"

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,8 @@
1515
/sbin.lock
1616

1717
/rabbitmq_lvc_exchange.d
18+
19+
/user.bazelrc
20+
/bazel-*
21+
22+
/.vscode/

BUILD.bazel

Lines changed: 183 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,183 @@
1+
load("@bazel_gazelle//:def.bzl", "gazelle")
2+
load("@rules_erlang//gazelle:def.bzl", "GAZELLE_ERLANG_RUNTIME_DEPS")
3+
load("@rules_erlang//:erlang_bytecode2.bzl", "erlc_opts")
4+
load("@rules_erlang//:erlang_app.bzl", "erlang_app", "test_erlang_app")
5+
load("@rules_erlang//:xref2.bzl", "xref")
6+
load("@rules_erlang//:dialyze.bzl", "dialyze", "plt")
7+
load("@rules_erlang//:eunit2.bzl", "eunit")
8+
load("@rules_erlang//:ct.bzl", "assert_suites2")
9+
load("@rules_erlang//:ez.bzl", "ez")
10+
load(":app.bzl", "all_beam_files", "all_srcs", "all_test_beam_files", "test_suite_beam_files")
11+
load(":helpers.bzl", "rabbitmq_integration_suite")
12+
load("@rabbitmq-server//:rabbitmq_home.bzl", "rabbitmq_home")
13+
load("@rabbitmq-server//:rabbitmq_run.bzl", "rabbitmq_run", "rabbitmq_run_command")
14+
load("@rabbitmq-server//:rabbitmqctl.bzl", "rabbitmqctl")
15+
16+
# gazelle:exclude .github
17+
# gazelle:exclude .elixir_ls
18+
# gazelle:exclude .erlang.mk
19+
# gazelle:exclude .vscode
20+
# gazelle:exclude platforms
21+
22+
# gazelle:erlang_skip_rules ct_test
23+
24+
# gazelle:erlang_generate_beam_files_macro
25+
# gazelle:erlang_generate_fewer_bytecode_rules
26+
27+
# gazelle:erlang_resolve amqp_client @rabbitmq-server//deps/amqp_client:erlang_app
28+
# gazelle:erlang_resolve amqp10_client @rabbitmq-server//deps/amqp10_client:erlang_app
29+
# gazelle:erlang_resolve rabbit @rabbitmq-server//deps/rabbit:erlang_app
30+
# gazelle:erlang_resolve rabbit_common @rabbitmq-server//deps/rabbit_common:erlang_app
31+
# gazelle:erlang_resolve rabbitmq_amqp1_0 @rabbitmq-server//deps/rabbitmq_amqp1_0:erlang_app
32+
# gazelle:erlang_resolve rabbitmq_cli @rabbitmq-server//deps/rabbitmq_cli:erlang_app
33+
# gazelle:erlang_resolve rabbitmq_ct_helpers @rabbitmq-server//deps/rabbitmq_ct_helpers:erlang_app
34+
35+
gazelle(
36+
name = "gazelle",
37+
data = GAZELLE_ERLANG_RUNTIME_DEPS,
38+
extra_args = [
39+
"--verbose",
40+
],
41+
gazelle = "@rules_erlang//gazelle:gazelle_erlang_binary",
42+
)
43+
44+
erlc_opts(
45+
name = "erlc_opts",
46+
values = select({
47+
"@rules_erlang//:debug_build": [
48+
"+debug_info",
49+
],
50+
"//conditions:default": [
51+
"+debug_info",
52+
"+deterministic",
53+
],
54+
}),
55+
visibility = [":__subpackages__"],
56+
)
57+
58+
erlc_opts(
59+
name = "test_erlc_opts",
60+
values = select({
61+
"@rules_erlang//:debug_build": [
62+
"+debug_info",
63+
"-DTEST=1",
64+
],
65+
"//conditions:default": [
66+
"+debug_info",
67+
"+deterministic",
68+
"-DTEST=1",
69+
],
70+
}),
71+
visibility = [":__subpackages__"],
72+
)
73+
74+
plt(
75+
name = "base_plt",
76+
visibility = [":__subpackages__"],
77+
)
78+
79+
all_srcs(name = "all_srcs")
80+
81+
all_beam_files(name = "all_beam_files")
82+
83+
all_test_beam_files(name = "all_test_beam_files")
84+
85+
test_suite_beam_files(name = "test_suite_beam_files")
86+
87+
erlang_app(
88+
name = "erlang_app",
89+
srcs = [":all_srcs"],
90+
hdrs = [":public_hdrs"],
91+
app_description = "RabbitMQ Last Value Cache exchange",
92+
app_name = "rabbitmq-lvc-exchange",
93+
app_version = module_version(),
94+
beam_files = [":beam_files"],
95+
license_files = [":license_files"],
96+
priv = [":priv"],
97+
deps = [
98+
"@rabbitmq-server//deps/rabbit:erlang_app",
99+
"@rabbitmq-server//deps/rabbit_common:erlang_app",
100+
],
101+
)
102+
103+
alias(
104+
name = "rabbitmq-lvc-exchange",
105+
actual = ":erlang_app",
106+
visibility = ["//visibility:public"],
107+
)
108+
109+
test_erlang_app(
110+
name = "test_erlang_app",
111+
srcs = [":all_srcs"],
112+
hdrs = [":public_and_private_hdrs"],
113+
app_name = "rabbitmq-lvc-exchange",
114+
beam_files = [":test_beam_files"],
115+
license_files = [":license_files"],
116+
priv = [":priv"],
117+
deps = [
118+
"@rabbitmq-server//deps/rabbit:erlang_app",
119+
"@rabbitmq-server//deps/rabbit_common:erlang_app",
120+
],
121+
)
122+
123+
xref(
124+
name = "xref",
125+
target = ":erlang_app",
126+
)
127+
128+
plt(
129+
name = "deps_plt",
130+
apps = [
131+
"mnesia", # keep
132+
],
133+
for_target = ":erlang_app",
134+
plt = "//:base_plt",
135+
)
136+
137+
dialyze(
138+
name = "dialyze",
139+
plt = ":deps_plt",
140+
target = ":erlang_app",
141+
)
142+
143+
eunit(
144+
name = "eunit",
145+
target = ":test_erlang_app",
146+
)
147+
148+
rabbitmq_home(
149+
name = "broker-home",
150+
plugins = [
151+
"@rabbitmq-server//deps/rabbit:erlang_app",
152+
":erlang_app",
153+
],
154+
)
155+
156+
rabbitmq_run(
157+
name = "rabbitmq-run",
158+
home = ":broker-home",
159+
)
160+
161+
# `bazel run broker`
162+
rabbitmq_run_command(
163+
name = "broker",
164+
rabbitmq_run = ":rabbitmq-run",
165+
subcommand = "run-broker",
166+
)
167+
168+
# `bazel run rabbitmqctl -- export_definitons -`
169+
rabbitmqctl(
170+
name = "rabbitmqctl",
171+
home = ":broker-home",
172+
)
173+
174+
rabbitmq_integration_suite(
175+
name = "lvc_SUITE",
176+
)
177+
178+
assert_suites2()
179+
180+
ez(
181+
name = "ez",
182+
app = ":erlang_app",
183+
)

MODULE.bazel

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
module(
2+
name = "rabbitmq_lvc_exchange",
3+
version = "3.11.4",
4+
)
5+
6+
bazel_dep(
7+
name = "gazelle",
8+
version = "0.29.0",
9+
repo_name = "bazel_gazelle",
10+
)
11+
12+
bazel_dep(
13+
name = "rules_erlang",
14+
version = "3.10.6",
15+
)
16+
17+
erlang_config = use_extension(
18+
"@rules_erlang//bzlmod:extensions.bzl",
19+
"erlang_config",
20+
dev_dependency = True,
21+
)
22+
23+
use_repo(
24+
erlang_config,
25+
"erlang_config",
26+
)
27+
28+
bazel_dep(
29+
name = "rabbitmq-server",
30+
version = "3.11.17",
31+
)
32+
33+
archive_override(
34+
module_name = "rabbitmq-server",
35+
strip_prefix = "rabbitmq-server-3.11.17",
36+
urls = [
37+
"https://github.com/rabbitmq/rabbitmq-server/archive/refs/tags/v3.11.17.zip",
38+
],
39+
)
40+
41+
elixir_config = use_extension(
42+
"@rabbitmq-server//bazel/bzlmod:extensions.bzl",
43+
"elixir_config",
44+
dev_dependency = True,
45+
)
46+
47+
use_repo(
48+
elixir_config,
49+
"elixir_config",
50+
)
51+
52+
rbe = use_extension(
53+
"@rabbitmq-server//bazel/bzlmod:extensions.bzl",
54+
"rbe",
55+
)
56+
57+
use_repo(
58+
rbe,
59+
"rbe",
60+
)

WORKSPACE.bazel

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
workspace(name = "rabbitmq_lvc_exchange")
2+
3+
load(
4+
"@bazel_tools//tools/build_defs/repo:http.bzl",
5+
"http_archive",
6+
)
7+
load(
8+
"@bazel_tools//tools/build_defs/repo:git.bzl",
9+
"git_repository",
10+
)
11+
12+
http_archive(
13+
name = "io_buildbuddy_buildbuddy_toolchain",
14+
sha256 = "48546946879b1fd2dcba327ba15776c822f2ce9a9ef1077be9bf3ecadcc1564a",
15+
strip_prefix = "buildbuddy-toolchain-b2f5e7e3b126c6d7cf243227147478c0959bfc95",
16+
urls = ["https://github.com/buildbuddy-io/buildbuddy-toolchain/archive/b2f5e7e3b126c6d7cf243227147478c0959bfc95.zip"],
17+
)
18+
19+
load("@io_buildbuddy_buildbuddy_toolchain//:deps.bzl", "buildbuddy_deps")
20+
21+
buildbuddy_deps()
22+
23+
load("@io_buildbuddy_buildbuddy_toolchain//:rules.bzl", "buildbuddy")
24+
25+
buildbuddy(
26+
name = "buildbuddy_toolchain",
27+
llvm = True,
28+
)
29+
30+
git_repository(
31+
name = "rbe",
32+
branch = "linux-rbe",
33+
remote = "https://github.com/rabbitmq/rbe-erlang-platform.git",
34+
)

0 commit comments

Comments
 (0)