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

pantsbuild / pants / 21552830208

31 Jan 2026 11:40PM UTC coverage: 80.277% (-0.05%) from 80.324%
21552830208

Pull #23062

github

web-flow
Merge 808a9786c into 2c4dcf9cf
Pull Request #23062: Remove support for Get

18 of 25 new or added lines in 4 files covered. (72.0%)

17119 existing lines in 541 files now uncovered.

78278 of 97510 relevant lines covered (80.28%)

3.36 hits per line

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

69.57
/src/python/pants/backend/terraform/goals/deploy.py
1
# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
UNCOV
3
from __future__ import annotations
3✔
4

UNCOV
5
import logging
3✔
UNCOV
6
from dataclasses import dataclass
3✔
7

UNCOV
8
from pants.backend.terraform.dependencies import TerraformInitRequest, prepare_terraform_invocation
3✔
UNCOV
9
from pants.backend.terraform.dependency_inference import (
3✔
10
    TerraformDeploymentInvocationFilesRequest,
11
    get_terraform_backend_and_vars,
12
)
UNCOV
13
from pants.backend.terraform.target_types import TerraformDeploymentFieldSet
3✔
UNCOV
14
from pants.backend.terraform.tool import (
3✔
15
    TerraformCommand,
16
    TerraformProcess,
17
    TerraformTool,
18
    setup_terraform_process,
19
)
UNCOV
20
from pants.backend.terraform.utils import terraform_arg, terraform_relpath
3✔
UNCOV
21
from pants.core.goals.deploy import DeployFieldSet, DeployProcess, DeploySubsystem
3✔
UNCOV
22
from pants.core.util_rules.source_files import SourceFilesRequest, determine_source_files
3✔
UNCOV
23
from pants.engine.engine_aware import EngineAwareParameter
3✔
UNCOV
24
from pants.engine.internals.native_engine import MergeDigests
3✔
UNCOV
25
from pants.engine.intrinsics import merge_digests
3✔
UNCOV
26
from pants.engine.process import InteractiveProcess
3✔
UNCOV
27
from pants.engine.rules import collect_rules, implicitly, rule
3✔
UNCOV
28
from pants.engine.target import SourcesField
3✔
UNCOV
29
from pants.engine.unions import UnionRule
3✔
UNCOV
30
from pants.option.global_options import KeepSandboxes
3✔
UNCOV
31
from pants.util.logging import LogLevel
3✔
32

UNCOV
33
logger = logging.getLogger(__name__)
3✔
34

35

UNCOV
36
@dataclass(frozen=True)
3✔
UNCOV
37
class DeployTerraformFieldSet(TerraformDeploymentFieldSet, DeployFieldSet):
3✔
UNCOV
38
    pass
3✔
39

40

UNCOV
41
@dataclass(frozen=True)
3✔
UNCOV
42
class TerraformDeploymentRequest(EngineAwareParameter):
3✔
UNCOV
43
    field_set: TerraformDeploymentFieldSet
3✔
44

45

UNCOV
46
@rule
3✔
UNCOV
47
async def prepare_terraform_deployment(
3✔
48
    request: TerraformDeploymentRequest,
49
    terraform_subsystem: TerraformTool,
50
    deploy_subsystem: DeploySubsystem,
51
    keep_sandboxes: KeepSandboxes,
52
) -> InteractiveProcess:
53
    deployment = await prepare_terraform_invocation(
×
54
        TerraformInitRequest(
55
            request.field_set.root_module,
56
            request.field_set.dependencies,
57
            initialise_backend=True,
58
        )
59
    )
60

61
    terraform_command = "plan" if deploy_subsystem.dry_run else "apply"
×
62
    args = [terraform_command]
×
63

64
    invocation_files = await get_terraform_backend_and_vars(
×
65
        TerraformDeploymentInvocationFilesRequest(
66
            request.field_set.dependencies.address, request.field_set.dependencies
67
        )
68
    )
69
    var_files = await determine_source_files(
×
70
        SourceFilesRequest(e.get(SourcesField) for e in invocation_files.vars_files)
71
    )
72
    for var_file in var_files.files:
×
73
        args.append(terraform_arg("-var-file", terraform_relpath(deployment.chdir, var_file)))
×
74

75
    with_vars = await merge_digests(
×
76
        MergeDigests(
77
            [
78
                var_files.snapshot.digest,
79
                deployment.terraform_sources.snapshot.digest,
80
                deployment.dependencies_files.snapshot.digest,
81
            ]
82
        )
83
    )
84

85
    if terraform_subsystem.args:
×
86
        args.extend(terraform_subsystem.args)
×
87

88
    process = await setup_terraform_process(
×
89
        TerraformProcess(
90
            cmds=(
91
                deployment.init_cmd.to_args(),
92
                TerraformCommand(tuple(args)),
93
            ),
94
            input_digest=with_vars,
95
            description=f"Terraform {terraform_command}",
96
            chdir=deployment.chdir,
97
        ),
98
        **implicitly(),
99
    )
100
    return InteractiveProcess.from_process(process, keep_sandboxes=keep_sandboxes)
×
101

102

UNCOV
103
@rule(desc="Run Terraform deploy process", level=LogLevel.DEBUG)
3✔
UNCOV
104
async def run_terraform_deploy(field_set: DeployTerraformFieldSet) -> DeployProcess:
3✔
105
    interactive_process = await prepare_terraform_deployment(
×
106
        TerraformDeploymentRequest(field_set=field_set), **implicitly()
107
    )
108

109
    return DeployProcess(
×
110
        name=field_set.address.spec,
111
        process=interactive_process,
112
    )
113

114

UNCOV
115
def rules():
3✔
UNCOV
116
    return [*collect_rules(), UnionRule(DeployFieldSet, DeployTerraformFieldSet)]
3✔
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