Skip to content

Commit c47bf8d

Browse files
zackwintermdbMongoDB Bot
authored and
MongoDB Bot
committed
SERVER-100116 Set up rules_lint with eslint (#32036)
GitOrigin-RevId: b358136eaef9eec27470065d6254112867b56245
1 parent 4863cb9 commit c47bf8d

25 files changed

+854
-481
lines changed

.github/CODEOWNERS

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,14 @@ OWNERS.yml @10gen/server-root-ownership @svc-auto-approve-bot
1414
.clang-format @10gen/server-programmability @svc-auto-approve-bot
1515
.clang-tidy.in @10gen/server-programmability @svc-auto-approve-bot
1616
.eslintignore @10gen/devprod-correctness @svc-auto-approve-bot
17-
.eslintrc.yml @10gen/devprod-correctness @svc-auto-approve-bot
1817
.gitignore @10gen/devprod-build @svc-auto-approve-bot
1918
.mypy.ini @10gen/devprod-build @10gen/devprod-correctness @svc-auto-approve-bot
2019
.prettierignore @10gen/devprod-correctness @svc-auto-approve-bot
2120
.prettierrc @10gen/devprod-correctness @svc-auto-approve-bot
2221
/BUILD.bazel @10gen/devprod-build @svc-auto-approve-bot
2322
copy.bara.sky @IamXander @smcclure15 @svc-auto-approve-bot
2423
copy.bara.staging.sky @10gen/devprod-correctness @svc-auto-approve-bot
24+
eslint.config.mjs @10gen/devprod-correctness @svc-auto-approve-bot
2525
jsconfig.json @10gen/devprod-correctness @svc-auto-approve-bot
2626
package.json @10gen/devprod-correctness @svc-auto-approve-bot
2727
pnpm-lock.yaml @10gen/devprod-correctness @svc-auto-approve-bot

.gitignore

+1-1
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ node_modules/
269269
package-lock.json
270270

271271
# jstestfuzz generated test directory
272-
jstestfuzz/
272+
/jstestfuzz/
273273

274274
# Bazel-related work
275275
# (Note that each string does NOT terminate with a '/' so that gitignore works properly)

.npmrc

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
hoist=false

BUILD.bazel

+24
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ load("@npm//:defs.bzl", "npm_link_all_packages")
22
load("//bazel/install_rules:install_rules.bzl", "mongo_install")
33
load("//bazel/toolchains:mongo_toolchain.bzl", "setup_mongo_toolchain_aliases")
44
load("//bazel/config:render_template.bzl", "render_template")
5+
load("@npm//:eslint/package_json.bzl", eslint_bin = "bin")
6+
load("@aspect_rules_js//js:defs.bzl", "js_library")
57

68
package(
79
default_visibility = ["//visibility:public"],
@@ -16,11 +18,33 @@ exports_files([
1618

1719
npm_link_all_packages(name = "node_modules")
1820

21+
js_library(
22+
name = "eslintrc",
23+
srcs = ["eslint.config.mjs"],
24+
deps = [
25+
":node_modules/@eslint/js",
26+
":node_modules/globals",
27+
"//:node_modules/@eslint/eslintrc",
28+
],
29+
)
30+
31+
eslint_bin.eslint_binary(
32+
name = "eslint",
33+
data = [
34+
"//:eslintrc",
35+
],
36+
)
37+
1938
alias(
2039
name = "format",
2140
actual = "//bazel/format",
2241
)
2342

43+
alias(
44+
name = "lint",
45+
actual = "//bazel:lint",
46+
)
47+
2448
alias(
2549
name = "codeowners",
2650
actual = "//buildscripts:codeowners",

OWNERS.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,6 @@ filters:
2424
- ".eslintignore":
2525
approvers:
2626
- 10gen/devprod-correctness
27-
- ".eslintrc.yml":
28-
approvers:
29-
- 10gen/devprod-correctness
3027
- ".gitignore":
3128
approvers:
3229
- 10gen/devprod-build
@@ -50,6 +47,9 @@ filters:
5047
- "copy.bara.staging.sky":
5148
approvers:
5249
- 10gen/devprod-correctness
50+
- "eslint.config.mjs":
51+
approvers:
52+
- 10gen/devprod-correctness
5353
- "jsconfig.json":
5454
approvers:
5555
- 10gen/devprod-correctness

WORKSPACE.bazel

+82-12
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,78 @@ http_archive(
3434
],
3535
)
3636

37+
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
38+
39+
http_archive(
40+
name = "aspect_rules_lint",
41+
sha256 = "f60e4a737a5e09402f5fa3bd182efa80dac5523ca4b9bc5c6fa8c06fbfb46630",
42+
strip_prefix = "rules_lint-1.1.0",
43+
url = "https://github.com/aspect-build/rules_lint/releases/download/v1.1.0/rules_lint-v1.1.0.tar.gz",
44+
)
45+
46+
# aspect_rules_lint depends on aspect_bazel_lib.
47+
http_archive(
48+
name = "aspect_bazel_lib",
49+
sha256 = "6d758a8f646ecee7a3e294fbe4386daafbe0e5966723009c290d493f227c390b",
50+
strip_prefix = "bazel-lib-2.7.7",
51+
url = "https://github.com/aspect-build/bazel-lib/releases/download/v2.7.7/bazel-lib-v2.7.7.tar.gz",
52+
)
53+
54+
load("@aspect_bazel_lib//lib:repositories.bzl", "aspect_bazel_lib_dependencies")
55+
56+
# aspect_bazel_lib depends on bazel_skylib
57+
aspect_bazel_lib_dependencies()
58+
59+
load(
60+
"@aspect_rules_lint//format:repositories.bzl",
61+
# Fetch additional formatter binaries you need:
62+
"fetch_java_format",
63+
"fetch_ktfmt",
64+
"fetch_swiftformat",
65+
"rules_lint_dependencies",
66+
)
67+
68+
rules_lint_dependencies()
69+
70+
fetch_java_format()
71+
72+
fetch_ktfmt()
73+
74+
fetch_swiftformat()
75+
76+
load("@aspect_rules_lint//lint:checkstyle.bzl", "fetch_checkstyle")
77+
78+
fetch_checkstyle()
79+
80+
load("@aspect_rules_lint//lint:pmd.bzl", "fetch_pmd")
81+
82+
fetch_pmd()
83+
84+
load("@aspect_rules_lint//lint:vale.bzl", "fetch_vale")
85+
86+
fetch_vale()
87+
88+
load("@aspect_rules_lint//lint:ktlint.bzl", "fetch_ktlint")
89+
90+
fetch_ktlint()
91+
92+
load("@aspect_rules_lint//lint:spotbugs.bzl", "fetch_spotbugs")
93+
94+
fetch_spotbugs()
95+
96+
########################
97+
# Optional: multitool provides defaults for some tools such as yamlfmt
98+
# If you do not set up multitool, you must provide these tools yourself
99+
load("@rules_multitool//multitool:multitool.bzl", "multitool")
100+
101+
multitool(
102+
name = "multitool",
103+
lockfiles = [
104+
"@aspect_rules_lint//format:multitool.lock.json",
105+
"@aspect_rules_lint//lint:multitool.lock.json",
106+
],
107+
)
108+
37109
load("//bazel/platforms:local_config_platform.bzl", "setup_local_config_platform")
38110
load("//bazel/toolchains:mongo_toolchain.bzl", "toolchain_download")
39111

@@ -165,34 +237,32 @@ poetry(
165237

166238
http_archive(
167239
name = "aspect_rules_js",
168-
sha256 = "630a71aba66c4023a5b16ab3efafaeed8b1a2865ccd168a34611eb73876b3fc4",
169-
strip_prefix = "rules_js-1.37.1",
240+
sha256 = "875b8d01af629dbf626eddc5cf239c9f0da20330f4d99ad956afc961096448dd",
241+
strip_prefix = "rules_js-2.1.3",
170242
urls = [
171243
# Implements retry by relisting each url multiple times to be used as a failover.
172244
# TODO(SERVER-86719): Re-implement http_archive to allow sleeping between retries
173-
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz",
174-
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz",
175-
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz",
176-
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz",
177-
"https://github.com/aspect-build/rules_js/releases/download/v1.37.1/rules_js-v1.37.1.tar.gz",
245+
"https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
246+
"https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
247+
"https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
248+
"https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
249+
"https://github.com/aspect-build/rules_js/releases/download/v2.1.3/rules_js-v2.1.3.tar.gz",
178250
],
179251
)
180252

181253
load("@aspect_rules_js//js:repositories.bzl", "rules_js_dependencies")
182254

183255
rules_js_dependencies()
184256

185-
load("@rules_nodejs//nodejs:repositories.bzl", "DEFAULT_NODE_VERSION", "nodejs_register_toolchains")
257+
load("@aspect_rules_js//js:toolchains.bzl", "DEFAULT_NODE_VERSION", "rules_js_register_toolchains")
186258

187-
nodejs_register_toolchains(
188-
name = "nodejs",
189-
node_version = DEFAULT_NODE_VERSION,
190-
)
259+
rules_js_register_toolchains(node_version = DEFAULT_NODE_VERSION)
191260

192261
load("@aspect_rules_js//npm:repositories.bzl", "npm_translate_lock")
193262

194263
npm_translate_lock(
195264
name = "npm",
265+
npmrc = "//:.npmrc",
196266
pnpm_lock = "//:pnpm-lock.yaml",
197267
verify_node_modules_ignored = "//:.bazelignore",
198268
)

bazel/BUILD.bazel

+7
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,10 @@ exports_files([
55
"scons_link_list.py",
66
"install_rules.py",
77
])
8+
9+
sh_binary(
10+
name = "lint",
11+
srcs = ["lint.sh"],
12+
args = ["//..."],
13+
visibility = ["//visibility:public"],
14+
)

bazel/lint.sh

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# placeholder for bazel/wrapper_hook/lint.py
2+
echo "No linter errors found!"

0 commit comments

Comments
 (0)