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

pantsbuild / pants / 19015773527

02 Nov 2025 05:33PM UTC coverage: 17.872% (-62.4%) from 80.3%
19015773527

Pull #22816

github

web-flow
Merge a12d75757 into 6c024e162
Pull Request #22816: Update Pants internal Python to 3.14

4 of 5 new or added lines in 3 files covered. (80.0%)

28452 existing lines in 683 files now uncovered.

9831 of 55007 relevant lines covered (17.87%)

0.18 hits per line

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

0.0
/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
×
4

UNCOV
5
import logging
×
UNCOV
6
from dataclasses import dataclass
×
7

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

UNCOV
33
logger = logging.getLogger(__name__)
×
34

35

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

40

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

45

UNCOV
46
@rule
×
UNCOV
47
async def prepare_terraform_deployment(
×
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)
×
UNCOV
104
async def run_terraform_deploy(field_set: DeployTerraformFieldSet) -> DeployProcess:
×
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():
×
UNCOV
116
    return [*collect_rules(), UnionRule(DeployFieldSet, DeployTerraformFieldSet)]
×
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