Skip to content

Commit 1373d30

Browse files
authored
Validate repository Scala version against scala_config (#1436)
* Validate repository Scala version against scala_config In case there are no overrides, we fail the build if Scala version in scala_config does not match available version in default repositories. Additionally, macros `rules_scala_toolchain_deps_repositories` and `rules_scala_setup` are exported for easier setup of Rules Scala dependencies * Fix tests
1 parent 887c9be commit 1373d30

File tree

10 files changed

+94
-30
lines changed

10 files changed

+94
-30
lines changed

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,14 @@ http_archive(
6161
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
6262
scala_config()
6363

64-
load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")
65-
scala_repositories()
64+
load("//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories")
65+
66+
# loads other rules Rules Scala depends on
67+
rules_scala_setup()
68+
69+
# loads Maven deps like Scala compiler and standard libs, on production projects you should consider
70+
# defining a custom deps toolchains to use your project libs instead
71+
rules_scala_toolchain_deps_repositories(fetch_sources = True)
6672

6773
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
6874
rules_proto_dependencies()

WORKSPACE

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@ load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
2424

2525
scala_config()
2626

27-
load("//scala:scala.bzl", "scala_repositories")
27+
load("//scala:scala.bzl", "rules_scala_setup", "rules_scala_toolchain_deps_repositories")
2828

29-
scala_repositories(fetch_sources = True)
29+
rules_scala_setup()
30+
31+
rules_scala_toolchain_deps_repositories(fetch_sources = True)
3032

3133
load("@rules_proto//proto:repositories.bzl", "rules_proto_dependencies", "rules_proto_toolchains")
3234

scala/private/macros/scala_repositories.bzl

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@ ARTIFACT_IDS = [
5959
"io_bazel_rules_scala_scala_library_2",
6060
]
6161

62+
def rules_scala_toolchain_deps_repositories(
63+
maven_servers = _default_maven_server_urls(),
64+
overriden_artifacts = {},
65+
fetch_sources = False):
66+
repositories(
67+
for_artifact_ids = ARTIFACT_IDS,
68+
maven_servers = maven_servers,
69+
fetch_sources = fetch_sources,
70+
overriden_artifacts = overriden_artifacts,
71+
validate_scala_version = True,
72+
)
73+
6274
def scala_repositories(
6375
maven_servers = _default_maven_server_urls(),
6476
overriden_artifacts = {},
@@ -69,9 +81,8 @@ def scala_repositories(
6981
rules_scala_setup()
7082

7183
if load_jar_deps:
72-
repositories(
73-
for_artifact_ids = ARTIFACT_IDS,
74-
maven_servers = maven_servers,
75-
fetch_sources = fetch_sources,
76-
overriden_artifacts = overriden_artifacts,
84+
rules_scala_toolchain_deps_repositories(
85+
maven_servers,
86+
overriden_artifacts,
87+
fetch_sources,
7788
)

scala/scala.bzl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ load(
44
)
55
load(
66
"@io_bazel_rules_scala//scala/private:macros/scala_repositories.bzl",
7+
_rules_scala_setup = "rules_scala_setup",
8+
_rules_scala_toolchain_deps_repositories = "rules_scala_toolchain_deps_repositories",
79
_scala_repositories = "scala_repositories",
810
)
911
load(
@@ -65,5 +67,7 @@ scala_library_suite = _scala_library_suite
6567
scala_macro_library = _scala_macro_library
6668
scala_repl = _scala_repl
6769
scala_repositories = _scala_repositories
70+
rules_scala_setup = _rules_scala_setup
71+
rules_scala_toolchain_deps_repositories = _rules_scala_toolchain_deps_repositories
6872
scala_test = _scala_test
6973
scala_test_suite = _scala_test_suite

test/shell/test_scala_config.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ runner=$(get_test_runner "${1:-local}")
66

77
test_classpath_contains_2_12() {
88
bazel aquery 'mnemonic("Javac", //src/java/io/bazel/rulesscala/scalac:scalac)' \
9-
--repo_env=SCALA_VERSION=2.12.x \
9+
--repo_env=SCALA_VERSION=2.12.14 \
1010
| grep scala-library-2.12
1111
}
1212

1313
test_classpath_contains_2_13() {
1414
bazel aquery 'mnemonic("Javac", //src/java/io/bazel/rulesscala/scalac:scalac)' \
15-
--repo_env=SCALA_VERSION=2.13.x \
15+
--repo_env=SCALA_VERSION=2.13.6 \
1616
| grep scala-library-2.13
1717
}
1818

third_party/repositories/repositories.bzl

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,23 @@
1-
load("//third_party/repositories:scala_2_11.bzl", _artifacts_2_11 = "artifacts")
2-
load("//third_party/repositories:scala_2_12.bzl", _artifacts_2_12 = "artifacts")
3-
load("//third_party/repositories:scala_2_13.bzl", _artifacts_2_13 = "artifacts")
4-
load("//third_party/repositories:scala_3_1.bzl", _artifacts_3_1 = "artifacts")
1+
load(
2+
"//third_party/repositories:scala_2_11.bzl",
3+
_artifacts_2_11 = "artifacts",
4+
_scala_version_2_11 = "scala_version",
5+
)
6+
load(
7+
"//third_party/repositories:scala_2_12.bzl",
8+
_artifacts_2_12 = "artifacts",
9+
_scala_version_2_12 = "scala_version",
10+
)
11+
load(
12+
"//third_party/repositories:scala_2_13.bzl",
13+
_artifacts_2_13 = "artifacts",
14+
_scala_version_2_13 = "scala_version",
15+
)
16+
load(
17+
"//third_party/repositories:scala_3_1.bzl",
18+
_artifacts_3_1 = "artifacts",
19+
_scala_version_3_1 = "scala_version",
20+
)
521
load(
622
"@io_bazel_rules_scala//scala:scala_cross_version.bzl",
723
"default_maven_server_urls",
@@ -10,7 +26,7 @@ load(
1026
"@io_bazel_rules_scala//scala:scala_maven_import_external.bzl",
1127
_scala_maven_import_external = "scala_maven_import_external",
1228
)
13-
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION")
29+
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION", "SCALA_VERSION")
1430

1531
artifacts_by_major_scala_version = {
1632
"2.11": _artifacts_2_11,
@@ -19,12 +35,29 @@ artifacts_by_major_scala_version = {
1935
"3.1": _artifacts_3_1,
2036
}
2137

38+
scala_version_by_major_scala_version = {
39+
"2.11": _scala_version_2_11,
40+
"2.12": _scala_version_2_12,
41+
"2.13": _scala_version_2_13,
42+
"3.1": _scala_version_3_1,
43+
}
44+
2245
def repositories(
2346
for_artifact_ids = [],
2447
maven_servers = default_maven_server_urls(),
2548
overriden_artifacts = {},
26-
fetch_sources = True):
49+
fetch_sources = True,
50+
validate_scala_version = False):
2751
major_scala_version = SCALA_MAJOR_VERSION
52+
53+
if validate_scala_version:
54+
repository_scala_version = scala_version_by_major_scala_version[SCALA_MAJOR_VERSION]
55+
default_version_matches = SCALA_VERSION == repository_scala_version
56+
57+
if not default_version_matches and len(overriden_artifacts) == 0:
58+
version_message = "Scala config (%s) version does not match repository version (%s)"
59+
fail(version_message % (SCALA_VERSION, repository_scala_version))
60+
2861
default_artifacts = artifacts_by_major_scala_version[major_scala_version]
2962
artifacts = dict(default_artifacts.items() + overriden_artifacts.items())
3063
for id in for_artifact_ids:

third_party/repositories/scala_2_11.bzl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
scala_version = "2.11.12"
2+
13
artifacts = {
24
"io_bazel_rules_scala_scala_library": {
3-
"artifact": "org.scala-lang:scala-library:2.11.12",
5+
"artifact": "org.scala-lang:scala-library:%s" % scala_version,
46
"sha256": "0b3d6fd42958ee98715ba2ec5fe221f4ca1e694d7c981b0ae0cd68e97baf6dce",
57
},
68
"io_bazel_rules_scala_scala_compiler": {
7-
"artifact": "org.scala-lang:scala-compiler:2.11.12",
9+
"artifact": "org.scala-lang:scala-compiler:%s" % scala_version,
810
"sha256": "3e892546b72ab547cb77de4d840bcfd05c853e73390fed7370a8f19acb0735a0",
911
},
1012
"io_bazel_rules_scala_scala_reflect": {
11-
"artifact": "org.scala-lang:scala-reflect:2.11.12",
13+
"artifact": "org.scala-lang:scala-reflect:%s" % scala_version,
1214
"sha256": "6ba385b450a6311a15c918cf8688b9af9327c6104f0ecbd35933cfcd3095fe04",
1315
},
1416
"io_bazel_rules_scala_scalatest": {

third_party/repositories/scala_2_12.bzl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
scala_version = "2.12.14"
2+
13
artifacts = {
24
"io_bazel_rules_scala_scala_library": {
3-
"artifact": "org.scala-lang:scala-library:2.12.14",
5+
"artifact": "org.scala-lang:scala-library:%s" % scala_version,
46
"sha256": "0451dce8322903a6c2aa7d31232b54daa72a61ced8ade0b4c5022442a3f6cb57",
57
},
68
"io_bazel_rules_scala_scala_compiler": {
7-
"artifact": "org.scala-lang:scala-compiler:2.12.14",
9+
"artifact": "org.scala-lang:scala-compiler:%s" % scala_version,
810
"sha256": "2a1b3fbf9c956073c8c5374098a6f987e3b8d76e34756ab985fc7d2ca37ee113",
911
},
1012
"io_bazel_rules_scala_scala_reflect": {
11-
"artifact": "org.scala-lang:scala-reflect:2.12.14",
13+
"artifact": "org.scala-lang:scala-reflect:%s" % scala_version,
1214
"sha256": "497f4603e9d19dc4fa591cd467de5e32238d240bbd955d3dac6390b270889522",
1315
},
1416
"io_bazel_rules_scala_scalatest": {

third_party/repositories/scala_2_13.bzl

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,16 @@
1+
scala_version = "2.13.6"
2+
13
artifacts = {
24
"io_bazel_rules_scala_scala_library": {
3-
"artifact": "org.scala-lang:scala-library:2.13.6",
5+
"artifact": "org.scala-lang:scala-library:%s" % scala_version,
46
"sha256": "f19ed732e150d3537794fd3fe42ee18470a3f707efd499ecd05a99e727ff6c8a",
57
},
68
"io_bazel_rules_scala_scala_compiler": {
7-
"artifact": "org.scala-lang:scala-compiler:2.13.6",
9+
"artifact": "org.scala-lang:scala-compiler:%s" % scala_version,
810
"sha256": "310d263d622a3d016913e94ee00b119d270573a5ceaa6b21312d69637fd9eec1",
911
},
1012
"io_bazel_rules_scala_scala_reflect": {
11-
"artifact": "org.scala-lang:scala-reflect:2.13.6",
13+
"artifact": "org.scala-lang:scala-reflect:%s" % scala_version,
1214
"sha256": "f713593809b387c60935bb9a940dfcea53bd0dbf8fdc8d10739a2896f8ac56fa",
1315
},
1416
"io_bazel_rules_scala_scala_parallel_collections": {

third_party/repositories/scala_3_1.bzl

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,27 @@
1+
scala_version = "3.1.0"
2+
13
artifacts = {
24
"io_bazel_rules_scala_scala_library_2": {
35
"artifact": "org.scala-lang:scala-library:2.13.5",
46
"sha256": "52aafeef8e0d104433329b1bc31463d1b4a9e2b8f24f85432c8cfaed9fad2587",
57
},
68
"io_bazel_rules_scala_scala_library": {
7-
"artifact": "org.scala-lang:scala3-library_3:3.1.0",
9+
"artifact": "org.scala-lang:scala3-library_3:%s" % scala_version,
810
"sha256": "5b513c97181d22c393cf32a51902fce27b9f698d246c7a92df7775f0bb04bec0",
911
"deps": [
1012
"@io_bazel_rules_scala_scala_library_2",
1113
],
1214
},
1315
"io_bazel_rules_scala_scala_compiler": {
14-
"artifact": "org.scala-lang:scala3-compiler_3:3.1.0",
16+
"artifact": "org.scala-lang:scala3-compiler_3:%s" % scala_version,
1517
"sha256": "9a76c166c97db534afb51861d234430a732158bdb413d8e12425e8c72457db60",
1618
},
1719
"io_bazel_rules_scala_scala_interfaces": {
18-
"artifact": "org.scala-lang:scala3-interfaces:3.1.0",
20+
"artifact": "org.scala-lang:scala3-interfaces:%s" % scala_version,
1921
"sha256": "0e344029ace7b1a846aa77e5cd452b7c8a28726b12b7c2baec0a70a038a686e9",
2022
},
2123
"io_bazel_rules_scala_scala_tasty_core": {
22-
"artifact": "org.scala-lang:tasty-core_3:3.1.0",
24+
"artifact": "org.scala-lang:tasty-core_3:%s" % scala_version,
2325
"sha256": "80c9d1ac1630a22b3b62e0d482f91552397be22eac3ea0e61104c5ca67287647",
2426
},
2527
"io_bazel_rules_scala_scala_asm": {

0 commit comments

Comments
 (0)