Skip to content

Commit

Permalink
Introduce Scala config (#1133)
Browse files Browse the repository at this point in the history
* Add scala config repository to store global configuration options

* Fix example workspace

* Add docs

* Get bazel version directly

* Remove unused skylib load
  • Loading branch information
Vaidas Pilkauskas authored Nov 6, 2020
1 parent 09d6c74 commit 72c27ef
Show file tree
Hide file tree
Showing 19 changed files with 62 additions and 93 deletions.
7 changes: 5 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,11 @@ http_archive(
sha256 = "8c48283aeb70e7165af48191b0e39b7434b0368718709d1bced5c3781787d8e7",
)

load("@io_bazel_rules_scala//:version.bzl", "bazel_version")
bazel_version(name = "bazel_version")
# Stores Scala version and other configuration
# 2.12 is a default version, other versions can be use by passing them explicitly:
# scala_config(scala_version = "2.11.12")
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
scala_config()

load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains")
scala_register_toolchains()
Expand Down
17 changes: 5 additions & 12 deletions WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,16 @@ load("@com_github_bazelbuild_buildtools//buildifier:deps.bzl", "buildifier_depen

buildifier_dependencies()

load("@io_bazel_rules_scala//:version.bzl", "bazel_version")
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")

bazel_version(name = "bazel_version")
scala_config()

load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION")
load("//scala:scala.bzl", "scala_repositories")

scala_repositories(fetch_sources = True)

load("//scala:scala_cross_version.bzl", "default_maven_server_urls")
load("//scala:scala_cross_version.bzl", "default_maven_server_urls", "scala_mvn_artifact")
load("//scala:scala_maven_import_external.bzl", "scala_maven_import_external")
load("//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge")

Expand Down Expand Up @@ -64,13 +65,6 @@ scalafmt_default_config()

scalafmt_repositories()

load(
"//scala:scala_cross_version.bzl",
"default_scala_major_version",
"default_scala_version",
"scala_mvn_artifact",
)

MAVEN_SERVER_URLS = default_maven_server_urls()

# needed for the cross repo proto test
Expand Down Expand Up @@ -177,7 +171,7 @@ jvm_maven_import_external(
name = "org_typelevel__cats_core",
artifact = scala_mvn_artifact(
"org.typelevel:cats-core:0.9.0",
default_scala_major_version(),
SCALA_MAJOR_VERSION,
),
artifact_sha256 = "3ca705cba9dc0632e60477d80779006f8c636c0e2e229dda3410a0c314c1ea1d",
server_urls = MAVEN_SERVER_URLS,
Expand Down Expand Up @@ -207,5 +201,4 @@ repositories(
"org_spire_math_kind_projector",
],
maven_servers = MAVEN_SERVER_URLS,
scala_version = default_scala_version(),
)
4 changes: 2 additions & 2 deletions examples/testing/scalatest_repositories/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ local_repository(
path = "../../..",
)

load("@io_bazel_rules_scala//:version.bzl", "bazel_version")
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")

bazel_version(name = "bazel_version")
scala_config()

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")

Expand Down
3 changes: 0 additions & 3 deletions jmh/jmh.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@ load("//scala:scala.bzl", "scala_binary", "scala_library")
load(
"//scala:scala_cross_version.bzl",
"default_maven_server_urls",
"default_scala_version",
)
load("//third_party/repositories:repositories.bzl", "repositories")

def jmh_repositories(
scala_version = default_scala_version(),
maven_servers = default_maven_server_urls(),
overriden_artifacts = {}):
repositories(
Expand All @@ -21,7 +19,6 @@ def jmh_repositories(
"io_bazel_rules_scala_org_apache_commons_commons_math3",
],
fetch_sources = False,
scala_version = scala_version,
maven_servers = maven_servers,
overriden_artifacts = {},
)
Expand Down
3 changes: 0 additions & 3 deletions scala/private/macros/scala_repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
load(
"@io_bazel_rules_scala//scala:scala_cross_version.bzl",
_default_maven_server_urls = "default_maven_server_urls",
_default_scala_version = "default_scala_version",
)
load("//third_party/repositories:repositories.bzl", "repositories")

Expand Down Expand Up @@ -70,7 +69,6 @@ def rules_scala_setup():
)

def scala_repositories(
scala_version = _default_scala_version(),
maven_servers = _default_maven_server_urls(),
overriden_artifacts = {},
fetch_sources = False):
Expand All @@ -89,7 +87,6 @@ def scala_repositories(
maven_servers = _default_maven_server_urls(),
fetch_sources = fetch_sources,
overriden_artifacts = overriden_artifacts,
scala_version = scala_version,
)

native.bind(
Expand Down
2 changes: 1 addition & 1 deletion scala/private/rule_impls.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ load(
_collect_plugin_paths = "collect_plugin_paths",
)
load(":resources.bzl", _resource_paths = "paths")
load("@bazel_version//:def.bzl", "BAZEL_VERSION")
load("@io_bazel_rules_scala_config//:config.bzl", "BAZEL_VERSION")

def expand_location(ctx, flags):
if hasattr(ctx.attr, "data"):
Expand Down
9 changes: 1 addition & 8 deletions scala/scala_cross_version.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,6 @@
of abstracting over Scala major version (2.11, 2.12, etc) for dependency
resolution."""

def default_scala_version():
"""return the scala version for use in maven coordinates"""
return "2.12.11"

def default_maven_server_urls():
return [
"https://repo.maven.apache.org/maven2",
Expand All @@ -36,12 +32,9 @@ def extract_major_version_underscore(scala_version):
e.g. "2.11.11" -> "2_11" """
return extract_major_version(scala_version).replace(".", "_")

def default_scala_major_version():
return extract_major_version(default_scala_version())

def scala_mvn_artifact(
artifact,
major_scala_version = default_scala_major_version()):
major_scala_version):
"""Add scala version to maven artifact"""
gav = artifact.split(":")
groupid = gav[0]
Expand Down
3 changes: 0 additions & 3 deletions scala/scalafmt/scalafmt_repositories.bzl
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
load(
"//scala:scala_cross_version.bzl",
_default_maven_server_urls = "default_maven_server_urls",
_default_scala_version = "default_scala_version",
)
load("//third_party/repositories:repositories.bzl", "repositories")

Expand All @@ -15,7 +14,6 @@ def scalafmt_default_config(path = ".scalafmt.conf"):
native.new_local_repository(name = "scalafmt_default", build_file_content = "\n".join(build), path = "")

def scalafmt_repositories(
scala_version = _default_scala_version(),
maven_servers = _default_maven_server_urls(),
overriden_artifacts = {}):
repositories(
Expand Down Expand Up @@ -45,6 +43,5 @@ def scalafmt_repositories(
maven_servers = maven_servers,
fetch_sources = True,
overriden_artifacts = overriden_artifacts,
scala_version = scala_version,
)
native.register_toolchains("@io_bazel_rules_scala//scala/scalafmt:scalafmt_toolchain")
34 changes: 34 additions & 0 deletions scala_config.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
load("//scala:scala_cross_version.bzl", "extract_major_version")

def _default_scala_version():
"""return the scala version for use in maven coordinates"""
return "2.12.11"

def _store_config(repository_ctx):
repository_ctx.file("BUILD", "exports_files(['def.bzl'])")

scala_version = repository_ctx.attr.scala_version
scala_major_version = extract_major_version(scala_version)

config_file_content = "\n".join([
"BAZEL_VERSION='" + native.bazel_version + "'",
"SCALA_VERSION='" + scala_version + "'",
"SCALA_MAJOR_VERSION='" + scala_major_version + "'",
])

repository_ctx.file("config.bzl", config_file_content)

_config_repository = repository_rule(
implementation = _store_config,
attrs = {
"scala_version": attr.string(
mandatory = True,
),
},
)

def scala_config(scala_version = _default_scala_version()):
_config_repository(
name = "io_bazel_rules_scala_config",
scala_version = scala_version,
)
4 changes: 0 additions & 4 deletions scala_proto/private/scala_proto_default_repositories.bzl
Original file line number Diff line number Diff line change
@@ -1,13 +1,10 @@
load(
"//scala:scala_cross_version.bzl",
_default_maven_server_urls = "default_maven_server_urls",
_default_scala_version = "default_scala_version",
_scala_mvn_artifact = "scala_mvn_artifact",
)
load("//third_party/repositories:repositories.bzl", "repositories")

def scala_proto_default_repositories(
scala_version = _default_scala_version(),
maven_servers = _default_maven_server_urls(),
overriden_artifacts = {}):
repositories(
Expand Down Expand Up @@ -43,7 +40,6 @@ def scala_proto_default_repositories(
"scala_proto_rules_opencensus_impl_core",
"scala_proto_rules_opencensus_contrib_grpc_metrics",
],
scala_version = scala_version,
maven_servers = maven_servers,
fetch_sources = True,
overriden_artifacts = overriden_artifacts,
Expand Down
4 changes: 1 addition & 3 deletions scala_proto/scala_proto.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ load(
load(
"//scala:scala_cross_version.bzl",
_default_maven_server_urls = "default_maven_server_urls",
_default_scala_version = "default_scala_version",
)
load(
"//scala_proto/private:scala_proto_default_repositories.bzl",
Expand Down Expand Up @@ -33,9 +32,8 @@ def register_default_proto_dependencies():
)

def scala_proto_repositories(
scala_version = _default_scala_version(),
maven_servers = _default_maven_server_urls()):
ret = scala_proto_default_repositories(scala_version, maven_servers)
ret = scala_proto_default_repositories(maven_servers)
register_default_proto_dependencies()
return ret

Expand Down
4 changes: 0 additions & 4 deletions specs2/specs2.bzl
Original file line number Diff line number Diff line change
@@ -1,16 +1,13 @@
load(
"//scala:scala_cross_version.bzl",
_default_maven_server_urls = "default_maven_server_urls",
_default_scala_version = "default_scala_version",
_scala_mvn_artifact = "scala_mvn_artifact",
)
load("//third_party/repositories:repositories.bzl", "repositories")

def specs2_version():
return "4.4.1"

def specs2_repositories(
scala_version = _default_scala_version(),
maven_servers = _default_maven_server_urls(),
overriden_artifacts = {}):
repositories(
Expand All @@ -20,7 +17,6 @@ def specs2_repositories(
"io_bazel_rules_scala_org_specs2_specs2_fp",
"io_bazel_rules_scala_org_specs2_specs2_matcher",
],
scala_version = scala_version,
maven_servers = maven_servers,
fetch_sources = True,
overriden_artifacts = overriden_artifacts,
Expand Down
5 changes: 1 addition & 4 deletions specs2/specs2_junit.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,19 @@ load("//testing:junit.bzl", "junit_repositories")
load(
"//scala:scala_cross_version.bzl",
_default_maven_server_urls = "default_maven_server_urls",
_default_scala_version = "default_scala_version",
)
load("//third_party/repositories:repositories.bzl", "repositories")

def specs2_junit_repositories(
scala_version = _default_scala_version(),
maven_servers = _default_maven_server_urls(),
overriden_artifacts = {}):
specs2_repositories(scala_version, maven_servers)
specs2_repositories(maven_servers)
junit_repositories()

repositories(
for_artifact_ids = [
"io_bazel_rules_scala_org_specs2_specs2_junit",
],
scala_version = scala_version,
maven_servers = maven_servers,
fetch_sources = True,
overriden_artifacts = overriden_artifacts,
Expand Down
21 changes: 8 additions & 13 deletions test_version/WORKSPACE.template
Original file line number Diff line number Diff line change
Expand Up @@ -15,40 +15,35 @@ local_repository(
name = "io_bazel_rules_scala",
path = "../../"
)

load("@io_bazel_rules_scala//:version.bzl", "bazel_version")
bazel_version(name = "bazel_version")
scala_version = "${scala_version}"
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")
scala_config(scala_version = scala_version)

load("@io_bazel_rules_scala//scala:scala_cross_version.bzl", "extract_major_version")

scala_version = "${scala_version}"

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")

scala_repositories(
scala_version,
fetch_sources = True
)
scala_repositories(fetch_sources = True)

load("@io_bazel_rules_scala//twitter_scrooge:twitter_scrooge.bzl", "twitter_scrooge")
${twitter_scrooge_artifacts}
twitter_scrooge(scala_version, overriden_artifacts = twitter_scrooge_artifacts)
twitter_scrooge(overriden_artifacts = twitter_scrooge_artifacts)

load("@io_bazel_rules_scala//tut_rule:tut.bzl", "tut_repositories")

tut_repositories(scala_version)
tut_repositories()

load("@io_bazel_rules_scala//scala_proto:scala_proto.bzl", "scala_proto_repositories")

scala_proto_repositories(scala_version)
scala_proto_repositories()

load("@io_bazel_rules_scala//scala_proto:toolchains.bzl", "scala_proto_register_toolchains")

scala_proto_register_toolchains()

load("@io_bazel_rules_scala//specs2:specs2_junit.bzl", "specs2_junit_repositories")

specs2_junit_repositories(scala_version)
specs2_junit_repositories()

register_toolchains("@io_bazel_rules_scala//testing:testing_toolchain")

Expand Down
5 changes: 2 additions & 3 deletions third_party/repositories/repositories.bzl
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,25 @@ load("//third_party/repositories:scala_2_12.bzl", _artifacts_2_12 = "artifacts")
load(
"@io_bazel_rules_scala//scala:scala_cross_version.bzl",
"default_maven_server_urls",
"default_scala_version",
"extract_major_version",
)
load(
"@io_bazel_rules_scala//scala:scala_maven_import_external.bzl",
_scala_maven_import_external = "scala_maven_import_external",
)
load("@io_bazel_rules_scala_config//:config.bzl", "SCALA_MAJOR_VERSION")

artifacts_by_major_scala_version = {
"2.11": _artifacts_2_11,
"2.12": _artifacts_2_12,
}

def repositories(
scala_version = default_scala_version(),
for_artifact_ids = [],
maven_servers = default_maven_server_urls(),
overriden_artifacts = {},
fetch_sources = True):
major_scala_version = extract_major_version(scala_version)
major_scala_version = SCALA_MAJOR_VERSION
default_artifacts = artifacts_by_major_scala_version[major_scala_version]
artifacts = dict(default_artifacts.items() + overriden_artifacts.items())
for id in for_artifact_ids:
Expand Down
4 changes: 2 additions & 2 deletions third_party/test/proto/WORKSPACE
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ local_repository(
path = "../../../",
)

load("@io_bazel_rules_scala//:version.bzl", "bazel_version")
load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config")

bazel_version(name = "bazel_version")
scala_config()

load("@io_bazel_rules_scala//scala:scala.bzl", "scala_repositories")

Expand Down
Loading

0 comments on commit 72c27ef

Please sign in to comment.