Skip to content

Introduce Scala config #1133

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

Merged
merged 5 commits into from
Nov 6, 2020
Merged
Show file tree
Hide file tree
Changes from 2 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
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,9 @@ http_archive(
sha256 = "8c48283aeb70e7165af48191b0e39b7434b0368718709d1bced5c3781787d8e7",
)

load("@io_bazel_rules_scala//:version.bzl", "bazel_version")
bazel_version(name = "bazel_version")
#
Copy link
Collaborator

Choose a reason for hiding this comment

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

Leftover?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Actually a mistake - I forgot to add documentation text here

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,
Copy link
Contributor

Choose a reason for hiding this comment

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

Why the change from method to const?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Is there a reason to wrap the const inside a function? The default version functions are removed, ant the stored version should be a single source of truth.

),
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")
36 changes: 36 additions & 0 deletions scala_config.bzl
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
load("@bazel_skylib//lib:versions.bzl", "versions")
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):
bazel_version = versions.get()
Copy link
Collaborator

Choose a reason for hiding this comment

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

Maybe replace versions.get() with native.bazel_version? This is what skylib does under the hood. As it is now it requires skylib to be declared before scala_config. Maybe not an issue though.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

Thanks, good point!

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='" + 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()):
Copy link
Collaborator

Choose a reason for hiding this comment

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

I'm not sure about scala_config naming. It contains only versions so maybe versions would be more appropriate. But as I understand it is a placeholder for other things as well. Maybe just config as it contains non scala related thing like BAZEL_VERSION? Either way I'm fine as it is currently. So you can just ignore this comment.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I have intentionally named it config to allow other configuration to be stored in the future.

_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