Skip to content

Commit aaf77df

Browse files
authored
Merge pull request #62 from lucidsoftware/make-dependency-checking-a-validation-action
Do dependency checking via a validation action
2 parents 34a88a1 + ac07080 commit aaf77df

File tree

15 files changed

+89
-58
lines changed

15 files changed

+89
-58
lines changed

docs/newdocs/phases.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ def _scala_binary_implementation(ctx):
1515
("ijinfo", _phase_ijinfo),
1616
("binary_deployjar", _phase_binary_deployjar),
1717
("binary_launcher", _phase_binary_launcher),
18+
("outputgroupinfo", _phase_outputgroupinfo),
1819
("coda", _phase_coda),
1920
]).coda
2021
```

rules/common/private/utils.bzl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,6 @@ def action_singlejar(
162162
ctx,
163163
inputs,
164164
output,
165-
phantom_inputs = depset(),
166165
main_class = None,
167166
progress_message = None,
168167
resources = {},
@@ -174,8 +173,6 @@ def action_singlejar(
174173

175174
if type(inputs) == "list":
176175
inputs = depset(inputs)
177-
if type(phantom_inputs) == "list":
178-
phantom_inputs = depset(phantom_inputs)
179176

180177
args = ctx.actions.args()
181178
args.add("--exclude_build_data")
@@ -190,7 +187,7 @@ def action_singlejar(
190187
args.set_param_file_format("multiline")
191188
args.use_param_file("@%s", use_always = True)
192189

193-
all_inputs = depset(resources.values(), transitive = [inputs, phantom_inputs])
190+
all_inputs = depset(resources.values(), transitive = [inputs])
194191

195192
ctx.actions.run(
196193
arguments = [args],

rules/private/phases.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ load(":phases/phase_ijinfo.bzl", _phase_ijinfo = "phase_ijinfo")
99
load(":phases/phase_javainfo.bzl", _phase_javainfo = "phase_javainfo")
1010
load(":phases/phase_library_defaultinfo.bzl", _phase_library_defaultinfo = "phase_library_defaultinfo")
1111
load(":phases/phase_noop.bzl", _phase_noop = "phase_noop")
12+
load(":phases/phase_outputgroupinfo.bzl", _phase_outputgroupinfo = "phase_outputgroupinfo")
1213
load(":phases/phase_resources.bzl", _phase_resources = "phase_resources")
1314
load(":phases/phase_scalafmt_nondefault_outputs.bzl", _phase_scalafmt_nondefault_outputs = "phase_scalafmt_nondefault_outputs")
1415
load(":phases/phase_semanticdb.bzl", _phase_semanticdb = "phase_semanticdb")
@@ -41,6 +42,8 @@ phase_library_defaultinfo = _phase_library_defaultinfo
4142

4243
phase_noop = _phase_noop
4344

45+
phase_outputgroupinfo = _phase_outputgroupinfo
46+
4447
phase_resources = _phase_resources
4548

4649
phase_scalafmt_nondefault_outputs = _phase_scalafmt_nondefault_outputs

rules/private/phases/phase_binary_launcher.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def phase_binary_launcher(ctx, g):
3030

3131
g.out.providers.append(DefaultInfo(
3232
executable = ctx.outputs.bin,
33-
files = depset([ctx.outputs.bin, ctx.outputs.jar]),
33+
files = depset([ctx.outputs.bin, ctx.outputs.jar] + g.semanticdb.outputs),
3434
runfiles = ctx.runfiles(
3535
files = inputs + files,
3636
transitive_files = depset(

rules/private/phases/phase_javainfo.bzl

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ load(
1313
# PHASE: javainfo
1414
#
1515
# Builds up the JavaInfo provider. And the ScalaInfo, while we're at it.
16-
# And DefaultInfo.
1716
#
1817

1918
def phase_javainfo(ctx, g):
@@ -61,18 +60,10 @@ def phase_javainfo(ctx, g):
6160
scala_configuration = g.init.scala_configuration,
6261
)
6362

64-
output_group_info = OutputGroupInfo(
65-
**g.out.output_groups
66-
)
67-
68-
g.out.providers.extend([
69-
output_group_info,
70-
java_info,
71-
scala_info,
72-
])
63+
g.out.providers.append(java_info)
64+
g.out.providers.append(scala_info)
7365

7466
return struct(
7567
java_info = java_info,
76-
output_group_info = output_group_info,
7768
scala_info = scala_info,
7869
)

rules/private/phases/phase_library_defaultinfo.bzl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@
66

77
def phase_library_defaultinfo(ctx, g):
88
g.out.providers.append(DefaultInfo(
9-
files = depset([ctx.outputs.jar]),
9+
files = depset([ctx.outputs.jar] + g.semanticdb.outputs),
1010
))
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
#
2+
# PHASE: outputgroupinfo
3+
#
4+
# Generates the `OutputGroupInfo` provider.
5+
#
6+
7+
def phase_outputgroupinfo(ctx, g):
8+
g.out.providers.append(OutputGroupInfo(**g.out.output_groups))

rules/private/phases/phase_singlejar.bzl

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,9 @@ def phase_singlejar(ctx, g):
2121
# cause the build to fail, cleanly, if any declared outputs are
2222
# missing from previous phases.
2323
inputs = [f for f in ctx.files.resource_jars if f.extension.lower() in ["jar"]]
24-
phantom_inputs = []
2524
for v in [getattr(g, k) for k in dir(g) if k not in ["to_json", "to_proto"]]:
2625
if hasattr(v, "jar"):
2726
jar = getattr(v, "jar")
2827
inputs.append(jar)
29-
if hasattr(v, "outputs"):
30-
phantom_inputs.extend(getattr(v, "outputs"))
3128

32-
_action_singlejar(ctx, inputs, ctx.outputs.jar, phantom_inputs)
29+
_action_singlejar(ctx, inputs, ctx.outputs.jar)

rules/private/phases/phase_test_launcher.bzl

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@ load(
22
"@rules_scala_annex//rules/private:coverage_replacements_provider.bzl",
33
_coverage_replacements_provider = "coverage_replacements_provider",
44
)
5-
load(
6-
"//rules/common:private/utils.bzl",
7-
_action_singlejar = "action_singlejar",
8-
_collect = "collect",
9-
_write_launcher = "write_launcher",
10-
)
5+
load("//rules/common:private/utils.bzl", _collect = "collect", _write_launcher = "write_launcher")
116

127
#
138
# PHASE: test_launcher

rules/private/phases/phase_zinc_depscheck.bzl

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,10 @@ def phase_zinc_depscheck(ctx, g):
2020
return
2121

2222
deps_configuration = ctx.attr.scala[_DepsConfiguration]
23-
24-
deps_checks = {}
2523
labeled_jar_groups = depset(transitive = [dep[_LabeledJars].values for dep in ctx.attr.deps])
26-
2724
worker_inputs, _, worker_input_manifests = ctx.resolve_command(tools = [deps_configuration.worker])
25+
outputs = []
26+
2827
for name in ("direct", "used"):
2928
deps_check = ctx.actions.declare_file("{}/depscheck_{}.success".format(ctx.label.name, name))
3029
deps_args = ctx.actions.args()
@@ -61,21 +60,16 @@ def phase_zinc_depscheck(ctx, g):
6160
),
6261
arguments = [deps_args],
6362
)
64-
deps_checks[name] = deps_check
6563

66-
outputs = []
67-
if deps_configuration.direct == "error":
68-
outputs.append(deps_checks["direct"])
69-
if deps_configuration.used == "error":
70-
outputs.append(deps_checks["used"])
64+
if getattr(deps_configuration, name) == "error":
65+
outputs.append(deps_check)
7166

72-
g.out.output_groups["depscheck"] = depset(outputs)
67+
if "_validation" in g.out.output_groups:
68+
validation_transitive = [g.out.output_groups["_validation"]]
69+
else:
70+
validation_transitive = None
7371

74-
return struct(
75-
checks = deps_checks,
76-
outputs = outputs,
77-
toolchain = deps_configuration,
78-
)
72+
g.out.output_groups["_validation"] = depset(outputs, transitive = validation_transitive)
7973

8074
# If you use avoid using map_each, then labels are converted to their apparent repo name rather than
8175
# their canonical repo name. The apparent repo name is the human readable one that we want for use

0 commit comments

Comments
 (0)