Skip to content

Commit 7d9e890

Browse files
authored
Reorganized sub-workspace dependencies (#398)
This pull request contains various cleanup/quality-of-life improvements for the repository by clearly grouping and defining dependencies for the docs and examples workspaces. Ultimately, the files that are created in here can be moved entirely into their neighboring WORKSPACE files once bazelbuild/bazel#1943 has been closed.
1 parent b798f14 commit 7d9e890

14 files changed

+509
-342
lines changed

.bazelignore

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Docs
2+
docs/bazel-bin
3+
docs/bazel-docs
4+
docs/bazel-out
5+
docs/bazel-testlogs
6+
7+
# Examples
8+
examples/bazel-bin
9+
examples/bazel-examples
10+
examples/bazel-out
11+
examples/bazel-testlogs

WORKSPACE

+43-37
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,18 @@ workspace(name = "io_bazel_rules_rust")
33
load("@bazel_tools//tools/build_defs/repo:git.bzl", "new_git_repository")
44
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
55

6-
local_repository(
7-
name = "examples",
8-
path = "examples",
9-
)
10-
11-
local_repository(
12-
name = "docs",
13-
path = "docs",
14-
)
15-
166
http_archive(
177
name = "bazel_skylib",
8+
sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
189
urls = [
1910
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
2011
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
2112
],
22-
sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
2313
)
2414

2515
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
26-
bazel_skylib_workspace()
2716

28-
# TODO: Move this to examples/WORKSPACE when recursive repositories are enabled.
29-
load("@io_bazel_rules_rust//rust:repositories.bzl", "rust_repositories")
30-
rust_repositories()
17+
bazel_skylib_workspace()
3118

3219
new_git_repository(
3320
name = "libc",
@@ -37,43 +24,26 @@ new_git_repository(
3724
)
3825

3926
load("@io_bazel_rules_rust//proto:repositories.bzl", "rust_proto_repositories")
27+
4028
rust_proto_repositories()
4129

4230
load("@io_bazel_rules_rust//bindgen:repositories.bzl", "rust_bindgen_repositories")
31+
4332
rust_bindgen_repositories()
4433

4534
load("@io_bazel_rules_rust//wasm_bindgen:repositories.bzl", "rust_wasm_bindgen_repositories")
46-
rust_wasm_bindgen_repositories()
47-
48-
http_archive(
49-
name = "build_bazel_rules_nodejs",
50-
sha256 = "e1a0d6eb40ec89f61a13a028e7113aa3630247253bcb1406281b627e44395145",
51-
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/1.0.1/rules_nodejs-1.0.1.tar.gz"],
52-
)
53-
54-
load("@build_bazel_rules_nodejs//:index.bzl", "node_repositories", "npm_install")
55-
node_repositories()
5635

57-
# Dependencies for the @examples//hello_world_wasm example.
58-
npm_install(
59-
name = "npm",
60-
package_json = "//:package.json",
61-
package_lock_json = "//:package-lock.json",
62-
)
63-
64-
# Install all Bazel dependencies needed for npm packages that supply Bazel rules
65-
load("@npm//:install_bazel_dependencies.bzl", "install_bazel_dependencies")
36+
rust_wasm_bindgen_repositories()
6637

67-
install_bazel_dependencies()
6838
# --- end stardoc
6939

7040
http_archive(
7141
name = "bazel_toolchains",
7242
sha256 = "d8c2f20deb2f6143bac792d210db1a4872102d81529fe0ea3476c1696addd7ff",
7343
strip_prefix = "bazel-toolchains-0.28.3",
7444
urls = [
75-
"https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz",
76-
"https://github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz",
45+
"https://mirror.bazel.build/github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz",
46+
"https://github.com/bazelbuild/bazel-toolchains/archive/0.28.3.tar.gz",
7747
],
7848
)
7949

@@ -86,7 +56,43 @@ rbe_autoconfig(
8656
)
8757

8858
load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version")
59+
8960
bazel_version(name = "bazel_version")
9061

62+
# Load all dependencies for examples
63+
64+
local_repository(
65+
name = "examples",
66+
path = "examples",
67+
)
68+
69+
load("@examples//:examples_repositories.bzl", examples_repositories = "repositories")
70+
71+
examples_repositories()
72+
73+
load("@examples//:examples_deps.bzl", examples_deps = "deps")
74+
75+
examples_deps()
76+
77+
load("@examples//:examples_extra_deps.bzl", examples_extra_deps = "extra_deps")
78+
79+
examples_extra_deps()
80+
9181
load("@examples//hello_sys:workspace.bzl", "remote_deps")
82+
9283
remote_deps()
84+
85+
# Load all dependencies for docs
86+
87+
local_repository(
88+
name = "docs",
89+
path = "docs",
90+
)
91+
92+
load("@docs//:docs_repositories.bzl", docs_repositories = "repositories")
93+
94+
docs_repositories()
95+
96+
load("@docs//:docs_deps.bzl", docs_deps = "deps")
97+
98+
docs_deps(is_top_level = True)

docs/BUILD

+39-16
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package(default_visibility = ["//visibility:private"])
2-
31
load("@io_bazel_stardoc//stardoc:stardoc.bzl", "stardoc")
42
load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
53

4+
package(default_visibility = ["//visibility:private"])
5+
66
bzl_library(
77
name = "all_deps",
88
srcs = [
@@ -21,11 +21,30 @@ bzl_library(
2121
)
2222

2323
PAGES = {
24-
"rust": ["rust_library", "rust_binary", "rust_benchmark", "rust_test"],
25-
"rust_doc": ["rust_doc", "rust_doc_test"],
26-
"rust_proto": ["rust_proto_toolchain","rust_proto_library", "rust_grpc_library"],
27-
"rust_bindgen": ["rust_bindgen_toolchain","rust_bindgen_library", "rust_bindgen"],
28-
"rust_wasm_bindgen": ["rust_wasm_bindgen_toolchain","rust_wasm_bindgen"],
24+
"rust": [
25+
"rust_library",
26+
"rust_binary",
27+
"rust_benchmark",
28+
"rust_test",
29+
],
30+
"rust_doc": [
31+
"rust_doc",
32+
"rust_doc_test",
33+
],
34+
"rust_proto": [
35+
"rust_proto_toolchain",
36+
"rust_proto_library",
37+
"rust_grpc_library",
38+
],
39+
"rust_bindgen": [
40+
"rust_bindgen_toolchain",
41+
"rust_bindgen_library",
42+
"rust_bindgen",
43+
],
44+
"rust_wasm_bindgen": [
45+
"rust_wasm_bindgen_toolchain",
46+
"rust_wasm_bindgen",
47+
],
2948
"cargo_build_script": ["cargo_build_script"],
3049
}
3150

@@ -34,7 +53,8 @@ PAGES = {
3453
name = "%s_header_vm" % k,
3554
outs = ["%s_header.vm" % k],
3655
cmd = ">$@ echo '# Rust rules\n%s'" % "\n".join(
37-
["* [{rule}](#{rule})".format(rule=v) for v in PAGES[k]]),
56+
["* [{rule}](#{rule})".format(rule = v) for v in PAGES[k]],
57+
),
3858
output_to_bindir = True,
3959
)
4060
for k in PAGES.keys()
@@ -44,25 +64,28 @@ PAGES = {
4464
stardoc(
4565
name = "%s_md" % k,
4666
out = "%s.md" % k,
67+
header_template = ":%s_header_vm" % k,
4768
input = ":all.bzl",
4869
symbol_names = PAGES[k],
49-
header_template = ":%s_header_vm" % k,
5070
deps = [":all_deps"],
5171
)
5272
for k in PAGES.keys()
5373
]
74+
5475
genrule(
55-
name = "flatten_header_vm",
56-
outs = ["flatten_header.vm"],
57-
cmd = ">$@ echo '# Rust rules\n\n%s\n'" % "\n".join(
58-
["* [{rule}](#{rule})".format(rule=v) for k in PAGES.keys() for v in PAGES[k]]),
59-
output_to_bindir = True,
76+
name = "flatten_header_vm",
77+
outs = ["flatten_header.vm"],
78+
cmd = ">$@ echo '# Rust rules\n\n%s\n'" % "\n".join(
79+
["* [{rule}](#{rule})".format(rule = v) for k in PAGES.keys() for v in PAGES[k]],
80+
),
81+
output_to_bindir = True,
6082
)
83+
6184
stardoc(
6285
name = "flatten_md",
63-
out = "flatten.md",
86+
out = "flatten.md",
6487
header_template = ":flatten_header_vm",
6588
input = ":all.bzl",
6689
symbol_names = [symbol for k in PAGES.keys() for symbol in PAGES[k]],
6790
deps = [":all_deps"],
68-
)
91+
)

docs/WORKSPACE

+4-40
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,9 @@
11
workspace(name = "io_bazel_rules_rust_docs")
2-
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
32

4-
local_repository(
5-
name = "io_bazel_rules_rust",
6-
path = "..",
7-
)
3+
load(":docs_repositories.bzl", "repositories")
84

9-
http_archive(
10-
name = "bazel_skylib",
11-
urls = [
12-
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
13-
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
14-
],
15-
sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
16-
)
5+
repositories()
176

18-
load("@bazel_skylib//:workspace.bzl", "bazel_skylib_workspace")
19-
bazel_skylib_workspace()
7+
load(":docs_deps.bzl", "deps")
208

21-
http_archive(
22-
name = "io_bazel_stardoc",
23-
urls = [
24-
"https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.zip",
25-
],
26-
sha256 = "5d7191bb0800434a9192d8ac80cba4909e96dbb087c5d51f168fedd7bde7b525",
27-
strip_prefix = "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
28-
)
29-
30-
load("@io_bazel_rules_rust//rust:repositories.bzl", "rust_repositories")
31-
load("@io_bazel_rules_rust//proto:repositories.bzl", "rust_proto_repositories")
32-
load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version")
33-
load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")
34-
35-
rust_repositories()
36-
rust_proto_repositories()
37-
bazel_version(name = "bazel_version")
38-
stardoc_repositories()
39-
40-
# Rules proto does not declare a bzl_library, we stub it there for now.
41-
# TODO: Remove this hack if/when rules_proto adds a bzl_library.
42-
local_repository(
43-
name = "rules_proto",
44-
path = "rules_proto_stub",
45-
)
9+
deps()

docs/docs_deps.bzl

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""Define dependencies for `rules_rust` docs"""
2+
3+
load("@io_bazel_rules_rust//rust:repositories.bzl", "rust_repositories")
4+
load("@io_bazel_rules_rust//proto:repositories.bzl", "rust_proto_repositories")
5+
load("@io_bazel_rules_rust//:workspace.bzl", "bazel_version")
6+
load("@io_bazel_stardoc//:setup.bzl", "stardoc_repositories")
7+
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
8+
9+
def deps(is_top_level = False):
10+
"""Define dependencies for `rules_rust` docs
11+
12+
Args:
13+
is_top_level (bool, optional): Indicates wheather or not this is being called
14+
from the root WORKSPACE file of `rules_rust`. Defaults to False.
15+
"""
16+
rust_repositories()
17+
rust_proto_repositories()
18+
bazel_version(name = "bazel_version")
19+
stardoc_repositories()
20+
21+
# Rules proto does not declare a bzl_library, we stub it there for now.
22+
# TODO: Remove this hack if/when rules_proto adds a bzl_library.
23+
if is_top_level:
24+
maybe(
25+
native.local_repository,
26+
name = "rules_proto",
27+
path = "docs/rules_proto_stub",
28+
)
29+
else:
30+
maybe(
31+
native.local_repository,
32+
name = "rules_proto",
33+
path = "rules_proto_stub",
34+
)

docs/docs_repositories.bzl

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
"""Define repository dependencies for `rules_rust` docs"""
2+
3+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
4+
load("@bazel_tools//tools/build_defs/repo:utils.bzl", "maybe")
5+
6+
def repositories(is_top_level = False):
7+
"""Define repository dependencies for `rules_rust` docs
8+
9+
Args:
10+
is_top_level (bool, optional): Indicates wheather or not this is being called
11+
from the root WORKSPACE file of `rules_rust`. Defaults to False.
12+
"""
13+
maybe(
14+
native.local_repository,
15+
name = "io_bazel_rules_rust",
16+
path = "..",
17+
)
18+
19+
maybe(
20+
http_archive,
21+
name = "bazel_skylib",
22+
sha256 = "1c531376ac7e5a180e0237938a2536de0c54d93f5c278634818e0efc952dd56c",
23+
urls = [
24+
"https://github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
25+
"https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.0.3/bazel-skylib-1.0.3.tar.gz",
26+
],
27+
)
28+
29+
maybe(
30+
http_archive,
31+
name = "io_bazel_stardoc",
32+
urls = [
33+
"https://github.com/bazelbuild/stardoc/archive/1ef781ced3b1443dca3ed05dec1989eca1a4e1cd.zip",
34+
],
35+
sha256 = "5d7191bb0800434a9192d8ac80cba4909e96dbb087c5d51f168fedd7bde7b525",
36+
strip_prefix = "stardoc-1ef781ced3b1443dca3ed05dec1989eca1a4e1cd",
37+
)

docs/update_docs.sh

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
11
#!/bin/bash
22

33
pushd ${0%/*}
4-
bazel build //... && cp bazel-bin/*.md . && chmod 0644 *.md && git add *.md && git commit -m "Regenerate documentation"
4+
# It's important to clean the workspace so we don't end up with unintended
5+
# docs artifacts in the new commit.
6+
bazel clean \
7+
&& bazel build //... \
8+
&& cp bazel-bin/*.md . \
9+
&& chmod 0644 *.md \
10+
&& git add *.md \
11+
&& git commit -m "Regenerate documentation"
512
popd
613

0 commit comments

Comments
 (0)