Skip to content

Commit 011def1

Browse files
authored
Merge pull request #246 from rabbitmq/enhance-erlang_package-resolution
Enhance erlang package resolution
2 parents 3162d3f + 4701f46 commit 011def1

File tree

8 files changed

+70
-63
lines changed

8 files changed

+70
-63
lines changed

BUILD.thoas

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,26 @@ erlc_opts(
1616
)
1717

1818
erlang_bytecode(
19-
name = "ebin_thoas_beam",
20-
srcs = ["src/thoas.erl"],
21-
outs = ["ebin/thoas.beam"],
22-
app_name = "thoas",
23-
erlc_opts = "//:erlc_opts",
24-
)
25-
26-
erlang_bytecode(
27-
name = "ebin_thoas_decode_beam",
28-
srcs = ["src/thoas_decode.erl"],
29-
outs = ["ebin/thoas_decode.beam"],
30-
app_name = "thoas",
31-
erlc_opts = "//:erlc_opts",
32-
)
33-
34-
erlang_bytecode(
35-
name = "ebin_thoas_encode_beam",
36-
srcs = ["src/thoas_encode.erl"],
37-
outs = ["ebin/thoas_encode.beam"],
19+
name = "other_beam",
20+
srcs = [
21+
"src/thoas.erl",
22+
"src/thoas_decode.erl",
23+
"src/thoas_encode.erl",
24+
],
25+
outs = [
26+
"ebin/thoas.beam",
27+
"ebin/thoas_decode.beam",
28+
"ebin/thoas_encode.beam",
29+
],
30+
hdrs = [],
3831
app_name = "thoas",
32+
beam = [],
3933
erlc_opts = "//:erlc_opts",
4034
)
4135

4236
filegroup(
4337
name = "beam_files",
44-
srcs = [
45-
"ebin/thoas.beam",
46-
"ebin/thoas_decode.beam",
47-
"ebin/thoas_encode.beam",
48-
],
38+
srcs = [":other_beam"],
4939
)
5040

5141
filegroup(

MODULE.bazel

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,17 @@ erlang_package = use_extension(
3333
"erlang_package",
3434
)
3535
erlang_package.hex_package(
36-
name = "thoas",
36+
name = "thoas_rules_erlang",
37+
pkg = "thoas",
3738
build_file = "@rules_erlang//:BUILD.thoas",
38-
sha256 = "442296847aca11db8d25180693d7ca3073d6d7179f66952f07b16415306513b6",
39-
version = "0.4.0",
39+
sha256 = "fc763185b932ecb32a554fb735ee03c3b6b1b31366077a2427d2a97f3bd26735",
40+
version = "1.0.0",
4041
)
4142
use_repo(
4243
erlang_package,
4344
"getopt_src",
4445
"xref_runner_src",
45-
"thoas",
46+
"thoas_rules_erlang",
4647
)
4748

4849
erlang_config_extension = use_extension(

bzlmod/extensions.bzl

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ load(
1313
)
1414
load(
1515
":semver.bzl",
16+
"compatible",
1617
"lt",
1718
"version_from_string",
1819
)
@@ -227,24 +228,45 @@ def _newest(a, b):
227228
b_version = b.version,
228229
b_module = b.module.name,
229230
))
230-
elif lt(a_version, b_version):
231+
if not compatible(a_version, b_version):
232+
fail("Version {dep_name}@{a_version} (required by {a_module}) & {dep_name}@{b_version} (required by {b_module}) cannot be resolved (major version mismatch)".format(
233+
dep_name = a.name,
234+
a_version = a.version,
235+
a_module = a.module.name,
236+
b_version = b.version,
237+
b_module = b.module.name,
238+
))
239+
if lt(a_version, b_version):
231240
return b
232241
else:
233242
return a
234243

235-
def _resolve_local(packages):
244+
def _dedupe_by_version(packages):
245+
by_version = {}
246+
for p in packages:
247+
by_version[p.version] = p
248+
return by_version.values()
249+
250+
def _resolve_local(ctx, packages):
236251
deduped = []
237252
packages_by_name = {}
238253
for p in packages:
239254
if p.name in packages_by_name:
240255
packages_by_name[p.name].append(p)
241256
else:
242257
packages_by_name[p.name] = [p]
243-
for (_, dupes) in packages_by_name.items():
258+
for (name, dupes) in packages_by_name.items():
244259
p = dupes[0]
245260
for dupe in dupes[1:]:
246261
p = _newest(p, dupe)
247262
deduped.append(p)
263+
filtered_dupes = _dedupe_by_version(dupes)
264+
if len(filtered_dupes) > 1:
265+
log(ctx, "Multiple versions of {} requested ({}), selecting {}".format(
266+
name,
267+
", ".join([p.version for p in filtered_dupes]),
268+
p.version,
269+
))
248270
return deduped
249271

250272
def _erlang_package(ctx):
@@ -290,7 +312,7 @@ def _erlang_package(ctx):
290312
dep = dep,
291313
))
292314

293-
deduped = _resolve_local(packages)
315+
deduped = _resolve_local(ctx, packages)
294316

295317
resolved = _resolve_hex_pm(ctx, deduped)
296318

bzlmod/semver.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ def lt(a, b):
4545

4646
def eq(a, b):
4747
return a.major == b.major and a.minor == b.minor and a.patch == b.patch
48+
49+
def compatible(a, b):
50+
return a.major == b.major

gazelle/erl_attrs_to_json/BUILD.bazel

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ load("//:escript.bzl", "escript_archive")
44
APP_NAME = "erl_attrs_to_json"
55
APP_VERSION = "1.0.0"
66

7-
DEPS = ["@thoas//:erlang_app"]
7+
DEPS = ["@thoas_rules_erlang//:erlang_app"]
88

99
erlang_app(
1010
name = "erlang_app",

internal_deps.bzl

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,9 @@ filegroup(
6868
""",
6969
)
7070
hex_archive(
71-
name = "thoas",
72-
version = "0.4.0",
73-
sha256 = "442296847aca11db8d25180693d7ca3073d6d7179f66952f07b16415306513b6",
71+
name = "thoas_rules_erlang",
72+
package_name = "thoas",
73+
version = "1.0.0",
74+
sha256 = "fc763185b932ecb32a554fb735ee03c3b6b1b31366077a2427d2a97f3bd26735",
7475
build_file = "@rules_erlang//:BUILD.thoas",
7576
)

test/BUILD.thoas

Lines changed: 14 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -16,36 +16,26 @@ erlc_opts(
1616
)
1717

1818
erlang_bytecode(
19-
name = "ebin_thoas_beam",
20-
srcs = ["src/thoas.erl"],
21-
outs = ["ebin/thoas.beam"],
22-
app_name = "thoas",
23-
erlc_opts = "//:erlc_opts",
24-
)
25-
26-
erlang_bytecode(
27-
name = "ebin_thoas_decode_beam",
28-
srcs = ["src/thoas_decode.erl"],
29-
outs = ["ebin/thoas_decode.beam"],
30-
app_name = "thoas",
31-
erlc_opts = "//:erlc_opts",
32-
)
33-
34-
erlang_bytecode(
35-
name = "ebin_thoas_encode_beam",
36-
srcs = ["src/thoas_encode.erl"],
37-
outs = ["ebin/thoas_encode.beam"],
19+
name = "other_beam",
20+
srcs = [
21+
"src/thoas.erl",
22+
"src/thoas_decode.erl",
23+
"src/thoas_encode.erl",
24+
],
25+
outs = [
26+
"ebin/thoas.beam",
27+
"ebin/thoas_decode.beam",
28+
"ebin/thoas_encode.beam",
29+
],
30+
hdrs = [],
3831
app_name = "thoas",
32+
beam = [],
3933
erlc_opts = "//:erlc_opts",
4034
)
4135

4236
filegroup(
4337
name = "beam_files",
44-
srcs = [
45-
"ebin/thoas.beam",
46-
"ebin/thoas_decode.beam",
47-
"ebin/thoas_encode.beam",
48-
],
38+
srcs = [":other_beam"],
4939
)
5040

5141
filegroup(

test/MODULE.bazel

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ module(
55

66
bazel_dep(
77
name = "platforms",
8-
version = "0.0.6",
8+
version = "0.0.7",
99
)
1010
bazel_dep(
1111
name = "rules_go",
@@ -61,8 +61,8 @@ erlang_package = use_extension(
6161
erlang_package.hex_package(
6262
name = "thoas",
6363
build_file = "@//:BUILD.thoas",
64-
sha256 = "442296847aca11db8d25180693d7ca3073d6d7179f66952f07b16415306513b6",
65-
version = "0.4.0",
64+
sha256 = "fc763185b932ecb32a554fb735ee03c3b6b1b31366077a2427d2a97f3bd26735",
65+
version = "1.0.0",
6666
)
6767
use_repo(
6868
erlang_package,

0 commit comments

Comments
 (0)