Skip to content

Commit 86f1684

Browse files
mistickibanamachinetylersmalley
authored
chore(NA): manage npm dependencies within bazel (elastic#92864)
* chore(NA): full WORKSPACE.bazel logic plus manage yarn dependencies with Bazel * chore(NA): update BUILD.bazel files comments on root and packages * chore(NA): add workspace file with useful data * chore(NA): install deps through bazel * chore(NA): update workspace file * chore(NA): update into last rules nodejs * chore(NA): ensure bazel always run yarn install * chore(NA): support offline mode * chore(NA): remove elastic-datemath * chore(NA): restore bazel 4.0.0 * chore(NA): update kbn pm dist * chore(NA): introduce force-install command * docs(NA): update docs with new yarn kbn bootstrap flags * chore(NA): use path.resolve on kbn bootstrap integrity check verification * chore(NA): update .yarnrc Co-authored-by: Tyler Smalley <[email protected]> * chore(NA): change cli argument typo * chore(NA): fix spacing on kbn pm cli Co-authored-by: Kibana Machine <[email protected]> Co-authored-by: Tyler Smalley <[email protected]>
1 parent a8d45e7 commit 86f1684

File tree

13 files changed

+1186
-974
lines changed

13 files changed

+1186
-974
lines changed

.bazelrc

+9
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,12 @@ build --workspace_status_command="node ./src/dev/bazel_workspace_status.js"
1616
# build --build_metadata=VISIBILITY=PUBLIC
1717
build --build_metadata=TEST_GROUPS=//packages
1818

19+
###############################
20+
# Offline Support #
21+
# Turn on these settings with #
22+
# --config=offline #
23+
###############################
24+
25+
## Reset remote cache and backend support
26+
build:offline --bes_backend="" --remote_cache=""
27+
run:offline --bes_backend="" --remote_cache=""

.bazelrc.common

+3-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77

88
# Local Cache Settings
99
## Avoid cache results from being corrupt when changing source during build
10-
common --experimental_guard_against_concurrent_changes
10+
build --experimental_guard_against_concurrent_changes
11+
run --experimental_guard_against_concurrent_changes
12+
test --experimental_guard_against_concurrent_changes
1113

1214
## Cache action outputs on disk so they persist across output_base and bazel shutdown (eg. changing branches)
1315
build --disk_cache=~/.bazel-cache/disk-cache

.yarnrc

+6
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,9 @@ yarn-offline-mirror ".yarn-local-mirror"
33

44
# Always look into the cache first before fetching online
55
--install.prefer-offline true
6+
7+
# Disable interactive and progress logs as yarn install is now
8+
# managed by Bazel and we are piping the logs from the underlying
9+
# process running bazel into the parent one running kbn
10+
--install.non-interactive true
11+
--install.no-progress true

BUILD.bazel

+2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
# Expose those targets as they are required as part of
2+
# other packages builds and need to be included as inputs
13
exports_files(
24
[
35
"tsconfig.json",

WORKSPACE.bazel

+66-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,68 @@
1+
# Define the workspace base name and a managed directory by bazel
2+
# that will hold the node_modules called @npm
13
workspace(
2-
name = "kibana",
4+
name = "kibana",
5+
managed_directories = {"@npm": ["node_modules"]},
6+
)
7+
8+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
9+
10+
# Fetch Node.js rules
11+
http_archive(
12+
name = "build_bazel_rules_nodejs",
13+
sha256 = "bfacf15161d96a6a39510e7b3d3b522cf61cb8b82a31e79400a84c5abcab5347",
14+
urls = ["https://github.com/bazelbuild/rules_nodejs/releases/download/3.2.1/rules_nodejs-3.2.1.tar.gz"],
15+
)
16+
17+
# Now that we have the rules let's import from them to complete the work
18+
load("@build_bazel_rules_nodejs//:index.bzl", "check_rules_nodejs_version", "node_repositories", "yarn_install")
19+
20+
# Assure we have at least a given rules_nodejs version
21+
check_rules_nodejs_version(minimum_version_string = "3.2.1")
22+
23+
# Setup the Node.js toolchain for the architectures we want to support
24+
#
25+
# NOTE: darwin-arm64 is not being installed because bazel is not yet available on that architecture.
26+
# The PR for it was merged and should be available in the next release of bazel and bazelisk. As soon as they have it
27+
# we can update that rule.
28+
node_repositories(
29+
node_repositories = {
30+
"14.16.0-darwin_amd64": ("node-v14.16.0-darwin-x64.tar.gz", "node-v14.16.0-darwin-x64", "14ec767e376d1e2e668f997065926c5c0086ec46516d1d45918af8ae05bd4583"),
31+
"14.16.0-linux_arm64": ("node-v14.16.0-linux-arm64.tar.xz", "node-v14.16.0-linux-arm64", "440489a08bfd020e814c9e65017f58d692299ac3f150c8e78d01abb1104c878a"),
32+
"14.16.0-linux_s390x": ("node-v14.16.0-linux-s390x.tar.xz", "node-v14.16.0-linux-s390x", "335348e46f45284b6356416ef58f85602d2dee99094588b65900f6c8839df77e"),
33+
"14.16.0-linux_amd64": ("node-v14.16.0-linux-x64.tar.xz", "node-v14.16.0-linux-x64", "2e079cf638766fedd720d30ec8ffef5d6ceada4e8b441fc2a093cb9a865f4087"),
34+
"14.16.0-windows_amd64": ("node-v14.16.0-win-x64.zip", "node-v14.16.0-win-x64", "716045c2f16ea10ca97bd04cf2e5ef865f9c4d6d677a9bc25e2ea522b594af4f"),
35+
},
36+
node_version = "14.16.0",
37+
node_urls = [
38+
"https://nodejs.org/dist/v{version}/{filename}",
39+
],
40+
yarn_repositories = {
41+
"1.21.1": ("yarn-v1.21.1.tar.gz", "yarn-v1.21.1", "d1d9f4a0f16f5ed484e814afeb98f39b82d4728c6c8beaafb5abc99c02db6674"),
42+
},
43+
yarn_version = "1.21.1",
44+
yarn_urls = [
45+
"https://github.com/yarnpkg/yarn/releases/download/v{version}/{filename}",
46+
],
47+
package_json = ["//:package.json"],
48+
)
49+
50+
# Run yarn_install rule to take care of dependencies
51+
#
52+
# NOTE: FORCE_COLOR env var forces colors on non tty mode
53+
yarn_install(
54+
name = "npm",
55+
environment = {
56+
"FORCE_COLOR": "True",
57+
},
58+
package_json = "//:package.json",
59+
yarn_lock = "//:yarn.lock",
60+
data = [
61+
"//:.yarnrc",
62+
"//:preinstall_check.js",
63+
"//:node_modules/.yarn-integrity",
64+
],
65+
symlink_node_modules = True,
66+
quiet = False,
67+
frozen_lockfile = False,
368
)

docs/developer/getting-started/index.asciidoc

+17
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,23 @@ https://github.com/nodejs/node-gyp#installation[https://github.com/nodejs/node-g
4747
and follow the guide according your platform.
4848
____
4949

50+
In case you don't have an internet connection, the `yarn kbn bootstrap` command will
51+
fail. As it is likely you have the required node_modules in the
52+
offline mirror, you can try to run the step in offline mode by using:
53+
54+
[source,bash]
55+
----
56+
yarn kbn bootstrap --offline
57+
----
58+
59+
In any other circumstance where you want to force the node_modules install step
60+
you can use:
61+
62+
[source,bash]
63+
----
64+
yarn kbn bootstrap --force-install
65+
----
66+
5067
(You can also run `yarn kbn` to see the other available commands. For
5168
more info about this tool, see
5269
{kib-repo}tree/{branch}/packages/kbn-pm[{kib-repo}tree/{branch}/packages/kbn-pm].)

packages/BUILD.bazel

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
# Call each package final target
1+
# Grouping target to call all underlying packages build
2+
# targets so we can build them all at once
23
filegroup(
34
name = "build",
45
srcs = [],

0 commit comments

Comments
 (0)