• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

pantsbuild / pants / 19383812239

15 Nov 2025 03:34AM UTC coverage: 43.269% (-37.0%) from 80.284%
19383812239

Pull #22888

github

web-flow
Merge 2ffdbbb61 into cb4d9339a
Pull Request #22888: Bump the gha-deps group across 1 directory with 3 updates

25959 of 59995 relevant lines covered (43.27%)

0.87 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/src/python/pants/backend/terraform/goals/check.py
1
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3
from dataclasses import dataclass
×
4

5
from pants.backend.terraform.dependencies import (
×
6
    prepare_terraform_invocation,
7
    terraform_fieldset_to_init_request,
8
)
9
from pants.backend.terraform.target_types import (
×
10
    TerraformDeploymentTarget,
11
    TerraformFieldSet,
12
    TerraformModuleTarget,
13
)
14
from pants.backend.terraform.tool import TerraformCommand, TerraformProcess
×
15
from pants.core.goals.check import CheckRequest, CheckResult, CheckResults
×
16
from pants.engine.internals.native_engine import MergeDigests
×
17
from pants.engine.internals.selectors import concurrently
×
18
from pants.engine.intrinsics import execute_process, merge_digests
×
19
from pants.engine.rules import collect_rules, implicitly, rule
×
20
from pants.engine.target import BoolField, Target
×
21
from pants.engine.unions import UnionRule
×
22
from pants.option.option_types import SkipOption
×
23
from pants.option.subsystem import Subsystem
×
24
from pants.util.strutil import pluralize
×
25

26

27
class TerraformValidateSubsystem(Subsystem):
×
28
    options_scope = "terraform-validate"
×
29
    name = "`terraform validate`"
×
30
    help = """Terraform validate options."""
×
31

32
    skip = SkipOption("check")
×
33

34

35
class SkipTerraformValidateField(BoolField):
×
36
    alias = "skip_terraform_validate"
×
37
    default = False
×
38
    help = "If true, don't run `terraform validate` on this target's code. If this target is a module, `terraform validate might still be run on a `terraform_deployment that references this module."
×
39

40

41
@dataclass(frozen=True)
×
42
class TerraformValidateFieldSet(TerraformFieldSet):
×
43
    @classmethod
×
44
    def opt_out(cls, tgt: Target) -> bool:
×
45
        return tgt.get(SkipTerraformValidateField).value
×
46

47

48
class TerraformCheckRequest(CheckRequest):
×
49
    field_set_type = TerraformValidateFieldSet
×
50
    tool_name = TerraformValidateSubsystem.options_scope
×
51

52

53
@rule
×
54
async def terraform_check(
×
55
    request: TerraformCheckRequest, subsystem: TerraformValidateSubsystem
56
) -> CheckResults:
57
    if subsystem.skip:
×
58
        return CheckResults([], checker_name=request.tool_name)
×
59

60
    terraform_deployments = await concurrently(
×
61
        prepare_terraform_invocation(terraform_fieldset_to_init_request(deployment))
62
        for deployment in request.field_sets
63
    )
64

65
    all_sources_and_deps = await concurrently(
×
66
        merge_digests(
67
            MergeDigests(
68
                [
69
                    deployment.terraform_sources.snapshot.digest,
70
                    deployment.dependencies_files.snapshot.digest,
71
                ]
72
            )
73
        )
74
        for deployment in terraform_deployments
75
    )
76

77
    results = await concurrently(
×
78
        execute_process(
79
            **implicitly(
80
                TerraformProcess(
81
                    cmds=(
82
                        deployment.init_cmd.to_args(),
83
                        TerraformCommand(("validate",)),
84
                    ),
85
                    input_digest=sources_and_deps,
86
                    output_files=tuple(deployment.terraform_sources.files),
87
                    description=f"Run `terraform validate` on module {deployment.chdir} with {pluralize(len(deployment.terraform_sources.files), 'file')}.",
88
                    chdir=deployment.chdir,
89
                )
90
            )
91
        )
92
        for deployment, sources_and_deps in zip(terraform_deployments, all_sources_and_deps)
93
    )
94

95
    check_results = []
×
96
    for deployment, result, field_set in zip(terraform_deployments, results, request.field_sets):
×
97
        check_results.append(
×
98
            CheckResult.from_fallible_process_result(
99
                result, partition_description=f"`terraform validate` on `{field_set.address}`"
100
            )
101
        )
102

103
    return CheckResults(check_results, checker_name=request.tool_name)
×
104

105

106
def rules():
×
107
    return (
×
108
        *collect_rules(),
109
        TerraformDeploymentTarget.register_plugin_field(SkipTerraformValidateField),
110
        TerraformModuleTarget.register_plugin_field(SkipTerraformValidateField),
111
        UnionRule(CheckRequest, TerraformCheckRequest),
112
    )
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc