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

pantsbuild / pants / 23177125175

17 Mar 2026 03:32AM UTC coverage: 52.677% (-40.3%) from 92.932%
23177125175

Pull #23177

github

web-flow
Merge 1824dfbf4 into 0b9fdfb0e
Pull Request #23177: Bump the gha-deps group across 1 directory with 4 updates

31687 of 60153 relevant lines covered (52.68%)

1.05 hits per line

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

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

4
from __future__ import annotations
×
5

6
import os.path
×
7
from dataclasses import dataclass
×
8

9
from pants.backend.terraform.target_types import (
×
10
    TerraformBackendTarget,
11
    TerraformModuleTarget,
12
    TerraformVarFileTarget,
13
)
14
from pants.backend.terraform.tool import TerraformTool
×
15
from pants.core.goals.tailor import (
×
16
    AllOwnedSources,
17
    PutativeTarget,
18
    PutativeTargets,
19
    PutativeTargetsRequest,
20
)
21
from pants.engine.intrinsics import path_globs_to_paths
×
22
from pants.engine.rules import collect_rules, rule
×
23
from pants.engine.unions import UnionRule
×
24
from pants.util.dirutil import group_by_dir
×
25
from pants.util.logging import LogLevel
×
26

27

28
@dataclass(frozen=True)
×
29
class PutativeTerraformTargetsRequest(PutativeTargetsRequest):
×
30
    pass
×
31

32

33
@rule(level=LogLevel.DEBUG, desc="Determine candidate Terraform targets to create")
×
34
async def find_putative_terraform_module_targets(
×
35
    request: PutativeTerraformTargetsRequest,
36
    terraform: TerraformTool,
37
    all_owned_sources: AllOwnedSources,
38
) -> PutativeTargets:
39
    if not terraform.tailor:
×
40
        return PutativeTargets()
×
41
    putative_targets: list[PutativeTarget] = []
×
42

43
    all_terraform_files = await path_globs_to_paths(request.path_globs("*.tf"))
×
44
    unowned_terraform_files = set(all_terraform_files.files) - set(all_owned_sources)
×
45

46
    putative_targets.extend(
×
47
        PutativeTarget.for_target_type(
48
            TerraformModuleTarget,
49
            path=dirname,
50
            name=None,
51
            triggering_sources=sorted(filenames),
52
        )
53
        for dirname, filenames in group_by_dir(unowned_terraform_files).items()
54
    )
55

56
    all_backend_files = await path_globs_to_paths(request.path_globs("*.tfbackend"))
×
57
    unowned_backend_files = set(all_backend_files.files) - set(all_owned_sources)
×
58
    for backend_file in unowned_backend_files:
×
59
        dirname, filename = os.path.split(backend_file)
×
60
        putative_targets.append(
×
61
            PutativeTarget.for_target_type(
62
                TerraformBackendTarget,
63
                path=dirname,
64
                name=filename,
65
                kwargs={"source": filename},
66
                triggering_sources=(filename,),
67
            )
68
        )
69

70
    # We generate separate targets for each var file,
71
    # to not make assumptions that they're all together.
72
    all_var_files = await path_globs_to_paths(request.path_globs("*.tfvars"))
×
73
    unowned_var_files = set(all_var_files.files) - set(all_owned_sources)
×
74
    for var_file in unowned_var_files:
×
75
        dirname, filename = os.path.split(var_file)
×
76
        putative_targets.append(
×
77
            PutativeTarget.for_target_type(
78
                TerraformVarFileTarget,
79
                path=dirname,
80
                name=filename,
81
                kwargs={"sources": (filename,)},
82
                triggering_sources=(filename,),
83
            )
84
        )
85

86
    return PutativeTargets(putative_targets)
×
87

88

89
def rules():
×
90
    return [*collect_rules(), UnionRule(PutativeTargetsRequest, PutativeTerraformTargetsRequest)]
×
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