Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

WIP: Initial Bazel integration #9777

Draft
wants to merge 18 commits into
base: develop
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 17 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .bazelignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# all node modules
node_modules
app/gui2/node_modules
app/ide-desktop/node_modules
app/ide-desktop/lib/assets/node_modules
app/ide-desktop/lib/client/node_modules
app/ide-desktop/lib/common/node_modules
app/ide-desktop/lib/content-config/node_modules
app/ide-desktop/lib/dashboard/node_modules
app/ide-desktop/lib/esbuild-plugin-copy-directories/node_modules
app/ide-desktop/lib/icons/node_modules
app/ide-desktop/lib/project-manager-shim/node_modules
app/ide-desktop/lib/ts-plugin-namespace-auto-import/node_modules

#
.bloop
bazel-enso
bazel-out
bazel-testlogs
build-cache
.idea
.vscode
.dist
target
build
13 changes: 13 additions & 0 deletions .bazelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# passes an argument `--skipLibCheck` to *every* spawn of tsc
common --@aspect_rules_ts//ts:skipLibCheck=always
common --@aspect_rules_ts//ts:default_to_tsc_transpiler

## GraalVM toolchain
build --extra_toolchains=@graalvm//:bootstrap_runtime_toolchain

## GraalVM versions
common --tool_java_runtime_version=graalvm_21
common --tool_java_language_version=21

common --java_runtime_version=graalvm_21
common --java_language_version=21
1 change: 1 addition & 0 deletions .bazelversion
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
7.1.1
8 changes: 6 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -116,13 +116,17 @@ bench-report*.xml
project/metals.sbt
/build.json
/app/ide-desktop/lib/client/electron-builder-config.json

*.config.ts.timestamp-*

#################
## Build Cache ##
#################

build-cache/
bazel-bin
bazel-enso
bazel-out
bazel-testlogs
build-cache

##################
## Native Image ##
Expand Down
1 change: 1 addition & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
hoist=false
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,6 @@
],
"files.watcherExclude": {
"**/target": true
}
},
"vitest.workspaceConfig": "vitest.workspace.ts"
}
2 changes: 2 additions & 0 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
load("@npm//:defs.bzl", "npm_link_all_packages")
npm_link_all_packages(name = "node_modules")
102 changes: 102 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
"enso-org/enso"

bazel_dep(name = "aspect_rules_js", version = "1.41.2")

####### Node.js version #########
bazel_dep(name = "rules_nodejs", version = "6.1.0")
node = use_extension("@rules_nodejs//nodejs:extensions.bzl", "node")
node.toolchain(node_version = "20.11.1")
#################################

npm = use_extension("@aspect_rules_js//npm:extensions.bzl", "npm", dev_dependency = True)
npm.npm_translate_lock(
name = "npm",
pnpm_lock = "//:pnpm-lock.yaml",
verify_node_modules_ignored = "//:.bazelignore",
)
use_repo(npm, "npm")

bazel_dep(name = "aspect_rules_ts", version = "2.2.0")

rules_ts_ext = use_extension(
"@aspect_rules_ts//ts:extensions.bzl",
"ext",
dev_dependency = True,
)

rules_ts_ext.deps()

use_repo(rules_ts_ext, "npm_typescript")

## JVM
bazel_dep(name = "rules_java", version = "7.5.0")
bazel_dep(name = "rules_graalvm", version = "0.11.1") ## upgrade to 0.11.2 once available in bazel central

gvm = use_extension("@rules_graalvm//:extensions.bzl", "graalvm")

gvm.graalvm(
name = "graalvm",
version = "23.1.0", # gvm sdk version format like `24.x.x` also supported
distribution = "ce", # `oracle`, `ce`, or `community`
java_version = "21", # `17`, `20`, `21`, or `22` as supported by the version provided
)
use_repo(gvm, "graalvm")
register_toolchains("@graalvm//:jvm")
register_toolchains("@graalvm//:sdk") ## Native-image
register_toolchains("@graalvm//:toolchain")

bazel_dep(name = "rules_jvm_external", version = "6.0")

scala_logging_version = "3.9.4"
scalatest_version = "3.3.0-SNAP4"
cats_version = "2.9.0"
circe_version = "0.14.5"
circe_libs = ["circe-core", "circe-generic", "circe-parser"]
circe = ["io.circe:%s_2.13:%s" % (x, circe_version) for x in circe_libs]
commons_text_version = "1.10.0"
http_components_version = "4.4.1"
jackson_version = "2.15.2"
commons_io_version = "2.12.0"
commons_compress_version = "1.23.0"
commons_lang_version = "3.12.0"
junit_version = "4.13.2"
hamcrest_version = "1.3"
picocli_version = "4.6.1"
minimal_json_version = "0.9.5"

## TODO: Consider replacing maven extension with
## https://github.com/bazeltools/bazel-deps
## The downside of the approach is that a number of other rules rely on it.
maven = use_extension("@rules_jvm_external//:extensions.bzl", "maven")
## After updating a list of artifacts run
## > bazel run @unpinned_maven//:pin
maven.install(
artifacts = [
"com.typesafe.scala-logging:scala-logging_2.13:%s" % scala_logging_version,
"org.scalatest:scalatest_2.13:%s" % scalatest_version,
"org.typelevel:cats-core_2.13:%s" % cats_version,
"org.apache.commons:commons-text:%s" % commons_text_version,
"org.apache.httpcomponents:httpclient:%s" % http_components_version,
"com.fasterxml.jackson.core:jackson-databind:%s" % jackson_version,
"commons-io:commons-io:%s" % commons_io_version,
"org.apache.commons:commons-compress:%s" % commons_compress_version,
"org.apache.commons:commons-lang3:%s" % commons_lang_version,
"junit:junit:%s" % junit_version,
"org.hamcrest:hamcrest-all:%s" % hamcrest_version,

## bazel-distribution dependencies
"info.picocli:picocli:%s" % picocli_version,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why do we need picocli? What does bazel-distribution dependencies mean?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As the comment says, it is a dependency of bazel-distribution rules which are used for generating pom.xml.
This doesn't mean that this dependency is added to any of subprojects. But it has to be listed for the rules so that the dependency (and its version) is discoverable.

"com.eclipsesource.minimal-json:minimal-json:%s" % minimal_json_version,
] + circe,
fail_if_repin_required = True,
lock_file = "//:maven_install.json",
repositories = [
"https://repo.maven.apache.org/maven2",
"https://repo1.maven.org/maven2",
],
)
use_repo(
maven,
"maven",
"unpinned_maven",
)
Loading