Skip to content

Commit e8a9116

Browse files
authored
Merge pull request #51 from rabbitmq/source-archive-rule
Source archive rule
2 parents 31d4d3a + 203cfa7 commit e8a9116

File tree

10 files changed

+137
-9
lines changed

10 files changed

+137
-9
lines changed

MODULE.bazel

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ module(
44
compatibility_level = 3,
55
)
66

7+
bazel_dep(
8+
name = "rules_pkg",
9+
version = "0.5.1",
10+
)
11+
712
bazel_dep(
813
name = "bazel_skylib",
914
version = "1.2.0",

WORKSPACE.bazel

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
22

3+
http_archive(
4+
name = "rules_pkg",
5+
sha256 = "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d",
6+
urls = [
7+
"https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
8+
"https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
9+
],
10+
)
11+
12+
load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies")
13+
14+
rules_pkg_dependencies()
15+
316
http_archive(
417
name = "bazel_skylib",
518
sha256 = "af87959afe497dc8dfd4c6cb66e1279cb98ccc84284619ebfec27d9c09a903de",

erlang_app.bzl

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@ def erlang_app(
4444
deps = [],
4545
runtime_deps = [],
4646
stamp = -1):
47+
srcs = native.glob(["src/**/*.erl"]) + extra_srcs
48+
4749
erlang_bytecode(
4850
name = "beam_files",
4951
hdrs = native.glob(["include/**/*.hrl", "src/**/*.hrl"]) + extra_hdrs,
50-
srcs = native.glob(["src/**/*.erl"]) + extra_srcs,
52+
srcs = srcs,
5153
erlc_opts = erlc_opts,
5254
dest = "ebin",
5355
deps = build_deps + deps,
@@ -82,6 +84,7 @@ def erlang_app(
8284
beam = [":beam_files"],
8385
priv = native.glob(["priv/**/*"]) + extra_priv,
8486
license_files = native.glob(["LICENSE*"]) + extra_license_files,
87+
srcs = srcs,
8588
deps = deps + runtime_deps,
8689
visibility = ["//visibility:public"],
8790
)
@@ -103,10 +106,12 @@ def test_erlang_app(
103106
build_deps = [],
104107
deps = [],
105108
runtime_deps = []):
109+
srcs = native.glob(["src/**/*.erl"]) + extra_srcs
110+
106111
erlang_bytecode(
107112
name = "test_beam_files",
108113
hdrs = native.glob(["include/**/*.hrl", "src/**/*.hrl"]) + extra_hdrs,
109-
srcs = native.glob(["src/**/*.erl"]) + extra_srcs,
114+
srcs = srcs,
110115
erlc_opts = erlc_opts,
111116
dest = "test",
112117
deps = build_deps + deps,
@@ -126,6 +131,7 @@ def test_erlang_app(
126131
beam = [":test_beam_files"],
127132
priv = native.glob(["priv/**/*"]) + extra_priv,
128133
license_files = native.glob(["LICENSE*"]) + extra_license_files,
134+
srcs = srcs,
129135
deps = deps + runtime_deps,
130136
visibility = ["//visibility:public"],
131137
testonly = True,

erlang_app_info.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ ErlangAppInfo = provider(
66
"beam": "Compiled bytecode (.beam) files, or a single ebin directory",
77
"priv": "Additional files",
88
"license_files": "License files",
9+
"srcs": "Source files",
910
"deps": "Runtime dependencies of the compiled sources",
1011
},
1112
)
@@ -43,6 +44,7 @@ def _impl(ctx):
4344
beam = compiled_files,
4445
priv = ctx.files.priv,
4546
license_files = ctx.files.license_files,
47+
srcs = ctx.files.srcs,
4648
deps = deps,
4749
),
4850
DefaultInfo(
@@ -60,6 +62,7 @@ erlang_app_info = rule(
6062
"beam": attr.label_list(allow_files = [".beam", ".appup"]),
6163
"priv": attr.label_list(allow_files = True),
6264
"license_files": attr.label_list(allow_files = True),
65+
"srcs": attr.label_list(allow_files = True),
6366
"deps": attr.label_list(providers = [ErlangAppInfo]),
6467
},
6568
)

private/source_tree.bzl

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
load(
2+
"//:erlang_app_info.bzl",
3+
"ErlangAppInfo",
4+
"flat_deps",
5+
)
6+
load(
7+
"//:util.bzl",
8+
"path_join",
9+
)
10+
load(
11+
":util.bzl",
12+
"additional_file_dest_relative_path",
13+
)
14+
15+
def _impl(ctx):
16+
deps = flat_deps(ctx.attr.deps)
17+
18+
files = []
19+
for dep in deps:
20+
lib_info = dep[ErlangAppInfo]
21+
dep_path = path_join(ctx.label.name, lib_info.app_name)
22+
for src in lib_info.include + lib_info.srcs + lib_info.priv + lib_info.license_files:
23+
rp = additional_file_dest_relative_path(dep.label, src)
24+
dest = ctx.actions.declare_file(path_join(dep_path, rp))
25+
ctx.actions.symlink(output = dest, target_file = src)
26+
files.append(dest)
27+
28+
return [DefaultInfo(
29+
files = depset(files),
30+
)]
31+
32+
source_tree = rule(
33+
implementation = _impl,
34+
attrs = {
35+
"deps": attr.label_list(
36+
providers = [ErlangAppInfo],
37+
mandatory = True,
38+
),
39+
},
40+
)

source_archive.bzl

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
load("@rules_pkg//:pkg.bzl", "pkg_tar")
2+
load(
3+
"//private:source_tree.bzl",
4+
"source_tree",
5+
)
6+
7+
def source_archive():
8+
source_tree(
9+
name = "source_tree",
10+
deps = [":erlang_app"],
11+
)
12+
13+
pkg_tar(
14+
name = "source_archive",
15+
srcs = [":source_tree"],
16+
package_dir = "deps",
17+
strip_prefix = "source_tree",
18+
visibility = ["//visibility:public"],
19+
)

source_tree.bzl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
load(
2+
"//private:source_tree.bzl",
3+
_source_tree = "source_tree",
4+
)
5+
6+
def source_tree(**kwargs):
7+
_source_tree(**kwargs)

test/BUILD.bazel

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,7 @@ platform(
1212
constraint_values = [
1313
erlang_external_constraint,
1414
],
15-
parents = ["@rbe//config:platform"],
16-
# parents = ["@local_config_platform//:host"],
15+
parents = ["@local_config_platform//:host"],
1716
)
1817

1918
erlang_25_constraint = erlang_toolchain_from_github_release(

test/WORKSPACE.bazel

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
22

3+
http_archive(
4+
name = "rules_pkg",
5+
sha256 = "038f1caa773a7e35b3663865ffb003169c6a71dc995e39bf4815792f385d837d",
6+
urls = [
7+
"https://mirror.bazel.build/github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
8+
"https://github.com/bazelbuild/rules_pkg/releases/download/0.4.0/rules_pkg-0.4.0.tar.gz",
9+
],
10+
)
11+
12+
load("@rules_pkg//:deps.bzl", "rules_pkg_dependencies")
13+
14+
rules_pkg_dependencies()
15+
316
http_archive(
417
name = "bazel_skylib",
518
sha256 = "af87959afe497dc8dfd4c6cb66e1279cb98ccc84284619ebfec27d9c09a903de",

test/shard_suite/BUILD.bazel

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,38 @@
1-
load("@rules_erlang//:app_file.bzl", "app_file")
2-
load("@rules_erlang//:erlang_bytecode.bzl", "erlang_bytecode")
3-
load("@rules_erlang//:erlang_app_info.bzl", "erlang_app_info")
1+
load(
2+
"@rules_erlang//:app_file.bzl",
3+
"app_file",
4+
)
5+
load(
6+
"@rules_erlang//:erlang_bytecode.bzl",
7+
"erlang_bytecode",
8+
)
9+
load(
10+
"@rules_erlang//:erlang_app_info.bzl",
11+
"erlang_app_info",
12+
)
413
load(
514
"@rules_erlang//:erlang_app.bzl",
615
"DEFAULT_ERLC_OPTS",
716
"DEFAULT_TEST_ERLC_OPTS",
817
)
9-
load("@rules_erlang//:xref2.bzl", "xref")
18+
load(
19+
"@rules_erlang//:xref2.bzl",
20+
"xref",
21+
)
1022
load(
1123
"@rules_erlang//:dialyze.bzl",
1224
"DEFAULT_PLT_APPS",
1325
"dialyze",
1426
"plt",
1527
)
16-
load("@rules_erlang//:ct.bzl", "ct_suite")
28+
load(
29+
"@rules_erlang//:ct.bzl",
30+
"ct_suite",
31+
)
32+
load(
33+
"@rules_erlang//:source_archive.bzl",
34+
"source_archive",
35+
)
1736

1837
APP_NAME = "shard_suite"
1938

@@ -44,6 +63,7 @@ app_file(
4463

4564
erlang_app_info(
4665
name = "erlang_app",
66+
srcs = ["@rules_erlang//tools/shard_suite:src/shard_suite.erl"],
4767
app = ":app_file",
4868
app_name = APP_NAME,
4969
beam = [":beam_files"],
@@ -52,6 +72,7 @@ erlang_app_info(
5272
erlang_app_info(
5373
name = "test_erlang_app",
5474
testonly = True,
75+
srcs = ["@rules_erlang//tools/shard_suite:src/shard_suite.erl"],
5576
app = ":app_file",
5677
app_name = APP_NAME,
5778
beam = [":test_beam_files"],
@@ -77,3 +98,5 @@ ct_suite(
7798
"test/example_suite.erl",
7899
],
79100
)
101+
102+
source_archive()

0 commit comments

Comments
 (0)