diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml index 025a56d96..f02262cfb 100644 --- a/.bazelci/presubmit.yml +++ b/.bazelci/presubmit.yml @@ -85,6 +85,12 @@ tasks: bazel: 6.3.0 shell_commands: - "./test_examples.sh" + cross_build_linux: + name: "./test_cross_build" + platform: ubuntu2004 + bazel: 6.3.0 + shell_commands: + - "./test_cross_build.sh" lint_linux: name: "bazel //tools:lint_check" platform: ubuntu2004 diff --git a/test/shell/test_cross_build.sh b/test/shell/test_cross_build.sh new file mode 100644 index 000000000..f9b6aeee3 --- /dev/null +++ b/test/shell/test_cross_build.sh @@ -0,0 +1,15 @@ +# shellcheck source=./test_runner.sh +dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) +. "${dir}"/test_runner.sh +. "${dir}"/test_helper.sh +runner=$(get_test_runner "${1:-local}") + +cd test_cross_build + +function test_cross_build() { + bazel test //... + bazel clean + bazel shutdown; +} + +$runner test_cross_build diff --git a/test_all.sh b/test_all.sh index eface54a9..e05440e00 100755 --- a/test_all.sh +++ b/test_all.sh @@ -5,5 +5,6 @@ set -euo pipefail dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) "${dir}"/test_rules_scala.sh "${dir}"/test_version.sh +"${dir}"/test_cross_build.sh "${dir}"/test_reproducibility.sh #"${dir}"/test_intellij_aspect.sh diff --git a/test_cross_build.sh b/test_cross_build.sh new file mode 100755 index 000000000..c3fd7124b --- /dev/null +++ b/test_cross_build.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -e + +test_dir=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )/test/shell + +. "${test_dir}"/test_cross_build.sh diff --git a/test_cross_build/WORKSPACE b/test_cross_build/WORKSPACE new file mode 100644 index 000000000..8af44482e --- /dev/null +++ b/test_cross_build/WORKSPACE @@ -0,0 +1,40 @@ +# WORKSPACE + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +http_archive( + name = "bazel_skylib", + sha256 = "d00f1389ee20b60018e92644e0948e16e350a7707219e7a390fb0a99b6ec9262", + urls = [ + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.7.0/bazel-skylib-1.7.0.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.7.0/bazel-skylib-1.7.0.tar.gz", + ], +) + +local_repository( + name = "io_bazel_rules_scala", + path = "..", +) + +load("@io_bazel_rules_scala//:scala_config.bzl", "scala_config") + +scala_config( + scala_version = "3.1.0", + scala_versions = [ + "2.11.12", + "2.12.18", + "2.13.12", + "3.1.0", + "3.2.1", + "3.3.1", + ], +) + +# loads other rules Rules Scala depends on +load("@io_bazel_rules_scala//scala:scala.bzl", "rules_scala_toolchain_deps_repositories") + +rules_scala_toolchain_deps_repositories() + +load("@io_bazel_rules_scala//scala:toolchains.bzl", "scala_register_toolchains") + +scala_register_toolchains() diff --git a/test_cross_build/version_specific/BUILD b/test_cross_build/version_specific/BUILD new file mode 100644 index 000000000..facf8dbda --- /dev/null +++ b/test_cross_build/version_specific/BUILD @@ -0,0 +1,67 @@ +load("@io_bazel_rules_scala//scala:scala.bzl", "scala_library") + +# A collection of arbitrarily chosen backward- and forward-incompatible code. +# This simply tests if the proper compiler is assigned, according to Scala version setting. + +# What's new in 3.3 +scala_library( + name = "since_3_3", + srcs = ["since_3_3.scala"], + scala_version = "3.3.1", +) + +scala_library( + name = "before_3_3", + srcs = ["before_3_3.scala"], + scala_version = "3.2.1", +) + +# What's new in 3.2 +scala_library( + name = "since_3_2", + srcs = ["since_3_2.scala"], + scala_version = "3.2.1", +) + +scala_library( + name = "before_3_2", + srcs = ["before_3_2.scala"], + scala_version = "3.1.0", +) + +# What's new in 3.1 +scala_library( + name = "since_3_1", + srcs = ["since_3_1.scala"], + scala_version = "3.1.0", +) + +scala_library( + name = "scala_3_3", + srcs = [ + "since_3_1.scala", + "since_3_2.scala", + "since_3_3.scala", + ], + scala_version = "3.3.1", +) + +scala_library( + name = "scala_3_2", + srcs = [ + "before_3_3.scala", + "since_3_1.scala", + "since_3_2.scala", + ], + scala_version = "3.2.1", +) + +scala_library( + name = "scala_3_1", + srcs = [ + "before_3_2.scala", + "before_3_3.scala", + "since_3_1.scala", + ], + scala_version = "3.1.0", +) diff --git a/test_cross_build/version_specific/before_3_2.scala b/test_cross_build/version_specific/before_3_2.scala new file mode 100644 index 000000000..f6d354a89 --- /dev/null +++ b/test_cross_build/version_specific/before_3_2.scala @@ -0,0 +1,3 @@ +class Example(using String)(i: Int) +given String = "something" +val instance = Example()(6) \ No newline at end of file diff --git a/test_cross_build/version_specific/before_3_3.scala b/test_cross_build/version_specific/before_3_3.scala new file mode 100644 index 000000000..5e42090c3 --- /dev/null +++ b/test_cross_build/version_specific/before_3_3.scala @@ -0,0 +1,4 @@ +class Outer: + type Inner + +inline def method(inline param: Outer): param.Inner = ??? \ No newline at end of file diff --git a/test_cross_build/version_specific/since_3_1.scala b/test_cross_build/version_specific/since_3_1.scala new file mode 100644 index 000000000..f685bd9ff --- /dev/null +++ b/test_cross_build/version_specific/since_3_1.scala @@ -0,0 +1 @@ +type Choice[A] = A match { case Int => Long ; case Long => Int } \ No newline at end of file diff --git a/test_cross_build/version_specific/since_3_2.scala b/test_cross_build/version_specific/since_3_2.scala new file mode 100644 index 000000000..6698b8922 --- /dev/null +++ b/test_cross_build/version_specific/since_3_2.scala @@ -0,0 +1,3 @@ +class Example(using String)(i: Int) +given String = "something" +val instance = Example(6) \ No newline at end of file diff --git a/test_cross_build/version_specific/since_3_3.scala b/test_cross_build/version_specific/since_3_3.scala new file mode 100644 index 000000000..8603d0011 --- /dev/null +++ b/test_cross_build/version_specific/since_3_3.scala @@ -0,0 +1 @@ +import util.boundary, boundary.break \ No newline at end of file