diff --git a/java/private/BUILD.bazel b/java/private/BUILD.bazel index 861f05c8..405e50cb 100644 --- a/java/private/BUILD.bazel +++ b/java/private/BUILD.bazel @@ -13,7 +13,10 @@ bzl_library( name = "checkstyle", srcs = ["checkstyle.bzl"], visibility = ["//java:__subpackages__"], - deps = [":checkstyle_config"], + deps = [ + ":checkstyle_config", + "@bazel_skylib//lib:paths", + ], ) bzl_library( diff --git a/java/private/checkstyle.bzl b/java/private/checkstyle.bzl index 7bcdfab7..145bbb9a 100644 --- a/java/private/checkstyle.bzl +++ b/java/private/checkstyle.bzl @@ -1,5 +1,6 @@ load(":checkstyle_config.bzl", "CheckStyleInfo") load("@apple_rules_lint//lint:defs.bzl", "LinterInfo") +load("@bazel_skylib//lib:paths.bzl", "paths") """ Checkstyle rule implementation @@ -10,12 +11,15 @@ def _checkstyle_impl(ctx): config = info.config_file output_format = info.output_format + config_dir = paths.dirname(config.short_path) + maybe_cd_config_dir = ["cd {}".format(config_dir)] if config_dir else [] + script = "\n".join([ "#!/usr/bin/env bash", "set -o pipefail", "set -e", "OLDPWD=$PWD", - "cd {config_dir}".format(config_dir = config.dirname), + ] + maybe_cd_config_dir + [ "$OLDPWD/{lib} -f {output_format} -c {config} {srcs} |sed s:$OLDPWD/::g".format( lib = info.checkstyle.short_path, output_format = output_format, diff --git a/java/test/com/github/bazel_contrib/contrib_rules_jvm/checkstyle/BUILD.bazel b/java/test/com/github/bazel_contrib/contrib_rules_jvm/checkstyle/BUILD.bazel index fd47c9a4..ef84c32e 100644 --- a/java/test/com/github/bazel_contrib/contrib_rules_jvm/checkstyle/BUILD.bazel +++ b/java/test/com/github/bazel_contrib/contrib_rules_jvm/checkstyle/BUILD.bazel @@ -12,6 +12,12 @@ checkstyle_config( data = ["suppressions.xml"], ) +checkstyle_config( + name = "copied_checkstyle_with_suppressions", + config_file = "copied_checkstyle_with_suppressions.xml", + data = ["suppressions.xml"], +) + checkstyle_test( name = "this_should_fail_missing_file", srcs = ["Sample.java"], @@ -32,8 +38,21 @@ checkstyle_test( config = ":checkstyle_with_suppressions", ) +checkstyle_test( + name = "this_should_also_pass", + srcs = ["Sample.java"], + config = ":copied_checkstyle_with_suppressions", +) + java_library( name = "checkstyle", testonly = True, srcs = ["Sample.java"], ) + +genrule( + name = "copy_config_file", + srcs = ["checkstyle_with_suppressions.xml"], + outs = ["copied_checkstyle_with_suppressions.xml"], + cmd = "cp $< $@", +)