Skip to content

Commit 01551be

Browse files
eden/edenapi and mononoke integration tests: add edenapi/tools to getdeps and use them in tests (#51)
Summary: Pull Request resolved: facebook/sapling#51 This diff extends capabilities of CargoBuilder in getdeps so that individual manifests can be build even without workspaces. Thanks to that a build for edenapi/tools can be made and its artifacts can be used in mononoke integration tests. Reviewed By: StanislavGlebik Differential Revision: D23574887 fbshipit-source-id: 8a974a6b5235d36a44fe082aad55cd380d84dd09
1 parent 6b6f776 commit 01551be

File tree

4 files changed

+84
-13
lines changed

4 files changed

+84
-13
lines changed

build/fbcode_builder/getdeps/builder.py

Lines changed: 39 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -999,13 +999,15 @@ def __init__(
999999
inst_dir,
10001000
build_doc,
10011001
workspace_dir,
1002+
manifests_to_build,
10021003
loader,
10031004
):
10041005
super(CargoBuilder, self).__init__(
10051006
build_opts, ctx, manifest, src_dir, build_dir, inst_dir
10061007
)
10071008
self.build_doc = build_doc
10081009
self.ws_dir = workspace_dir
1010+
self.manifests_to_build = manifests_to_build and manifests_to_build.split(",")
10091011
self.loader = loader
10101012

10111013
def run_cargo(self, install_dirs, operation, args=None):
@@ -1026,7 +1028,10 @@ def build_source_dir(self):
10261028
return os.path.join(self.build_dir, "source")
10271029

10281030
def workspace_dir(self):
1029-
return os.path.join(self.build_source_dir(), self.ws_dir)
1031+
return os.path.join(self.build_source_dir(), self.ws_dir or "")
1032+
1033+
def manifest_dir(self, manifest):
1034+
return os.path.join(self.build_source_dir(), manifest)
10301035

10311036
def recreate_dir(self, src, dst):
10321037
if os.path.isdir(dst):
@@ -1058,7 +1063,8 @@ def _build(self, install_dirs, reconfigure):
10581063
)
10591064
)
10601065

1061-
self._patchup_workspace()
1066+
if self.ws_dir is not None:
1067+
self._patchup_workspace()
10621068

10631069
try:
10641070
from getdeps.facebook.rust import vendored_crates
@@ -1069,11 +1075,26 @@ def _build(self, install_dirs, reconfigure):
10691075
# so just rely on cargo downloading crates on it's own
10701076
pass
10711077

1072-
self.run_cargo(
1073-
install_dirs,
1074-
"build",
1075-
["--out-dir", os.path.join(self.inst_dir, "bin"), "-Zunstable-options"],
1076-
)
1078+
if self.manifests_to_build is None:
1079+
self.run_cargo(
1080+
install_dirs,
1081+
"build",
1082+
["--out-dir", os.path.join(self.inst_dir, "bin"), "-Zunstable-options"],
1083+
)
1084+
else:
1085+
for manifest in self.manifests_to_build:
1086+
self.run_cargo(
1087+
install_dirs,
1088+
"build",
1089+
[
1090+
"--out-dir",
1091+
os.path.join(self.inst_dir, "bin"),
1092+
"-Zunstable-options",
1093+
"--manifest-path",
1094+
self.manifest_dir(manifest),
1095+
],
1096+
)
1097+
10771098
self.recreate_dir(build_source_dir, os.path.join(self.inst_dir, "source"))
10781099

10791100
def run_tests(
@@ -1082,11 +1103,18 @@ def run_tests(
10821103
if test_filter:
10831104
args = ["--", test_filter]
10841105
else:
1085-
args = None
1106+
args = []
10861107

1087-
self.run_cargo(install_dirs, "test", args)
1088-
if self.build_doc:
1089-
self.run_cargo(install_dirs, "doc", ["--no-deps"])
1108+
if self.manifests_to_build is None:
1109+
self.run_cargo(install_dirs, "test", args)
1110+
if self.build_doc:
1111+
self.run_cargo(install_dirs, "doc", ["--no-deps"])
1112+
else:
1113+
for manifest in self.manifests_to_build:
1114+
margs = ["--manifest-path", self.manifest_dir(manifest)]
1115+
self.run_cargo(install_dirs, "test", args + margs)
1116+
if self.build_doc:
1117+
self.run_cargo(install_dirs, "doc", ["--no-deps"] + margs)
10901118

10911119
def _patchup_workspace(self):
10921120
"""

build/fbcode_builder/getdeps/manifest.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,11 @@
7474
"msbuild": {"optional_section": True, "fields": {"project": REQUIRED}},
7575
"cargo": {
7676
"optional_section": True,
77-
"fields": {"build_doc": OPTIONAL, "workspace_dir": OPTIONAL},
77+
"fields": {
78+
"build_doc": OPTIONAL,
79+
"workspace_dir": OPTIONAL,
80+
"manifests_to_build": OPTIONAL,
81+
},
7882
},
7983
"cmake.defines": {"optional_section": True},
8084
"autoconf.args": {"optional_section": True},
@@ -489,7 +493,8 @@ def create_builder( # noqa:C901
489493

490494
if builder == "cargo":
491495
build_doc = self.get("cargo", "build_doc", False, ctx)
492-
workspace_dir = self.get("cargo", "workspace_dir", "", ctx)
496+
workspace_dir = self.get("cargo", "workspace_dir", None, ctx)
497+
manifests_to_build = self.get("cargo", "manifests_to_build", None, ctx)
493498
return CargoBuilder(
494499
build_options,
495500
ctx,
@@ -499,6 +504,7 @@ def create_builder( # noqa:C901
499504
inst_dir,
500505
build_doc,
501506
workspace_dir,
507+
manifests_to_build,
502508
loader,
503509
)
504510

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
[manifest]
2+
name = eden_scm_lib_edenapi_tools
3+
fbsource_path = fbcode/eden
4+
shipit_project = eden
5+
shipit_fbcode_builder = true
6+
7+
[git]
8+
repo_url = https://github.com/facebookexperimental/eden.git
9+
10+
[build]
11+
builder = cargo
12+
13+
[cargo]
14+
build_doc = true
15+
manifests_to_build = eden/scm/lib/edenapi/tools/make_req/Cargo.toml,eden/scm/lib/edenapi/tools/read_res/Cargo.toml
16+
17+
[shipit.pathmap]
18+
fbcode/eden/oss = .
19+
fbcode/eden = eden
20+
fbcode/tools/lfs = tools/lfs
21+
fbcode/fboss/common = common
22+
23+
[shipit.strip]
24+
^fbcode/eden/fs/eden-config\.h$
25+
^fbcode/eden/fs/py/eden/config\.py$
26+
^fbcode/eden/hg/.*$
27+
^fbcode/eden/mononoke/(?!lfs_protocol)
28+
^fbcode/eden/scm/build/.*$
29+
^fbcode/eden/scm/lib/third-party/rust/.*/Cargo.toml$
30+
^fbcode/eden/.*/\.cargo/.*$
31+
^.*/fb/.*$
32+
/Cargo\.lock$
33+
\.pyc$
34+
35+
[dependencies.fb=on]
36+
rust

build/fbcode_builder/manifests/rust-shed

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ builder = cargo
1212

1313
[cargo]
1414
build_doc = true
15+
workspace_dir =
1516

1617
[shipit.pathmap]
1718
fbcode/common/rust/shed = shed

0 commit comments

Comments
 (0)