• 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/helm/subsystems/helm.py
1
# Copyright 2022 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

UNCOV
4
from __future__ import annotations
×
5

UNCOV
6
import os
×
UNCOV
7
from collections.abc import Iterable
×
UNCOV
8
from typing import Any
×
9

UNCOV
10
from pants.backend.helm.resolve.remotes import HelmRemotes
×
UNCOV
11
from pants.backend.helm.target_types import HelmChartTarget, HelmRegistriesField
×
UNCOV
12
from pants.core.util_rules.external_tool import TemplatedExternalTool
×
UNCOV
13
from pants.engine.env_vars import EXTRA_ENV_VARS_USAGE_HELP
×
UNCOV
14
from pants.engine.platform import Platform
×
UNCOV
15
from pants.option.option_types import (
×
16
    ArgsListOption,
17
    BoolOption,
18
    DictOption,
19
    StrListOption,
20
    StrOption,
21
)
UNCOV
22
from pants.util.memo import memoized_method
×
UNCOV
23
from pants.util.strutil import bullet_list, help_text, softwrap
×
24

UNCOV
25
_VALID_PASSTHROUGH_FLAGS = [
×
26
    "--atomic",
27
    "--cleanup-on-fail",
28
    "--create-namespace",
29
    "--debug",
30
    "--force",
31
    "--wait",
32
    "--wait-for-jobs",
33
]
34

UNCOV
35
_VALID_PASSTHROUGH_OPTS = [
×
36
    "--kubeconfig",
37
    "--kube-context",
38
    "--kube-apiserver",
39
    "--kube-as-group",
40
    "--kube-as-user",
41
    "--kube-ca-file",
42
    "--kube-token",
43
    "--timeout",
44
]
45

46

UNCOV
47
class InvalidHelmPassthroughArgs(Exception):
×
UNCOV
48
    def __init__(self, args: Iterable[str], *, extra_help: str = "") -> None:
×
49
        super().__init__(
×
50
            softwrap(
51
                f"""
52
                The following command line arguments are not valid: {" ".join(args)}.
53

54
                Only the following passthrough arguments are allowed:
55

56
                {bullet_list([*_VALID_PASSTHROUGH_FLAGS, *_VALID_PASSTHROUGH_OPTS])}
57

58
                {extra_help}
59
                """
60
            )
61
        )
62

63

64
registries_help = help_text(
65
    f"""
66
    Configure Helm OCI registries. The schema for a registry entry is as follows:
67

68
        {{
69
            "registry-alias": {{
70
                "address": "oci://registry-domain:port",
71
                "default": bool,
72
            }},
73
            ...
74
        }}
75

76
    If no registries are provided in either a `{HelmChartTarget.alias}` target, then all default
77
    addresses will be used, if any.
78

79
    The `{HelmChartTarget.alias}.{HelmRegistriesField.alias}` may be provided with a list of registry
80
    addresses and registry alias prefixed with `@` to be used instead of the defaults.
81

82
    A configured registry is marked as default either by setting `default = true`
83
    or with an alias of `"default"`.
84

85
    Registries also participate in resolving third party Helm charts uploaded to those registries.
86
    """
87
)
88

89

UNCOV
90
class HelmSubsystem(TemplatedExternalTool):
×
UNCOV
91
    options_scope = "helm"
×
UNCOV
92
    help = "The Helm command line (https://helm.sh)"
×
93

UNCOV
94
    default_version = "3.14.3"
×
UNCOV
95
    default_known_versions = [
×
96
        "3.14.3|linux_arm64|85e1573e76fa60af14ba7e9ec75db2129b6884203be866893fa0b3f7e41ccd5e|14558415",
97
        "3.14.3|linux_x86_64|3c90f24e180f8c207b8a18e5ec82cb0fa49858a7a0a86e4ed52a98398681e00b|16134525",
98
        "3.14.3|macos_arm64|dff794152b62b7c1a9ff615d510f8657bcd7a3727c668e0d9d4955f70d5f7573|16104367",
99
        "3.14.3|macos_x86_64|4d5d01a94c7d6b07e71690dc1988bf3229680284c87f4242d28c6f1cc99653be|16944220",
100
        "3.13.3|linux_arm64|44aaa094ae24d01e8c36e327e1837fd3377a0f9152626da088384c5bc6d94562|14495979",
101
        "3.13.3|linux_x86_64|bbb6e7c6201458b235f335280f35493950dcd856825ddcfd1d3b40ae757d5c7d|16188560",
102
        "3.13.3|macos_arm64|61ba210cd65c53be5c0021c8fc8e0b94f4c122aff32f5ed0e4ea81728108ea20|16172665",
103
        "3.13.3|macos_x86_64|da654c9e0fd4fcb50cc5dba051c1c9cf398e21ffa5064b47ac89a9697e139d39|16999788",
104
        "3.12.3|linux_arm64|79ef06935fb47e432c0c91bdefd140e5b543ec46376007ca14a52e5ed3023088|14355040",
105
        "3.12.3|linux_x86_64|1b2313cd198d45eab00cc37c38f6b1ca0a948ba279c29e322bdf426d406129b5|16028423",
106
        "3.12.3|macos_arm64|240b0a7da9cae208000eff3d3fb95e0fa1f4903d95be62c3f276f7630b12dae1|16019570",
107
        "3.12.3|macos_x86_64|1bdbbeec5a12dd0c1cd4efd8948a156d33e1e2f51140e2a51e1e5e7b11b81d47|16828211",
108
        "3.12.2|linux_arm64|cfafbae85c31afde88c69f0e5053610c8c455826081c1b2d665d9b44c31b3759|14350624",
109
        "3.12.2|linux_x86_64|2b6efaa009891d3703869f4be80ab86faa33fa83d9d5ff2f6492a8aebe97b219|16028750",
110
        "3.12.2|macos_arm64|b60ee16847e28879ae298a20ba4672fc84f741410f438e645277205824ddbf55|16021202",
111
        "3.12.2|macos_x86_64|6e8bfc84a640e0dc47cc49cfc2d0a482f011f4249e2dff2a7e23c7ef2df1b64e|16824814",
112
        "3.11.3|linux_arm64|0816db0efd033c78c3cc1c37506967947b01965b9c0739fe13ec2b1eea08f601|14475471",
113
        "3.11.3|linux_x86_64|ca2d5d40d4cdfb9a3a6205dd803b5bc8def00bd2f13e5526c127e9b667974a89|15489735",
114
        "3.11.3|macos_arm64|267e4d50b68e8854b9cc44517da9ab2f47dec39787fed9f7eba42080d61ac7f8|15451086",
115
        "3.11.3|macos_x86_64|9d029df37664b50e427442a600e4e065fa75fd74dac996c831ac68359654b2c4|16275303",
116
        "3.11.2|linux_arm64|444b65100e224beee0a3a3a54cb19dad37388fa9217ab2782ba63551c4a2e128|14090242",
117
        "3.11.2|linux_x86_64|781d826daec584f9d50a01f0f7dadfd25a3312217a14aa2fbb85107b014ac8ca|15026301",
118
        "3.11.2|macos_arm64|f61a3aa55827de2d8c64a2063fd744b618b443ed063871b79f52069e90813151|14932800",
119
        "3.11.2|macos_x86_64|404938fd2c6eff9e0dab830b0db943fca9e1572cd3d7ee40904705760faa390f|15759988",
120
        "3.11.1|linux_arm64 |919173e8fb7a3b54d76af9feb92e49e86d5a80c5185020bae8c393fa0f0de1e8|13484900",
121
        "3.11.1|linux_x86_64|0b1be96b66fab4770526f136f5f1a385a47c41923d33aab0dcb500e0f6c1bf7c|15023104",
122
        "3.11.1|macos_arm64 |43d0198a7a2ea2639caafa81bb0596c97bee2d4e40df50b36202343eb4d5c46b|14934852",
123
        "3.11.1|macos_x86_64|2548a90e5cc957ccc5016b47060665a9d2cd4d5b4d61dcc32f5de3144d103826|15757902",
124
        "3.10.0|linux_arm64 |3b72f5f8a60772fb156d0a4ab93272e8da7ef4d18e6421a7020d7c019f521fc1|13055719",
125
        "3.10.0|linux_x86_64|bf56beb418bb529b5e0d6d43d56654c5a03f89c98400b409d1013a33d9586474|14530566",
126
        "3.10.0|macos_arm64 |f7f6558ebc8211824032a7fdcf0d55ad064cb33ec1eeec3d18057b9fe2e04dbe|14446277",
127
        "3.10.0|macos_x86_64|1e7fd528482ac2ef2d79fe300724b3e07ff6f846a2a9b0b0fe6f5fa05691786b|15237557",
128
        "3.8.0|linux_arm64 |23e08035dc0106fe4e0bd85800fd795b2b9ecd9f32187aa16c49b0a917105161|12324642",
129
        "3.8.0|linux_x86_64|8408c91e846c5b9ba15eb6b1a5a79fc22dd4d33ac6ea63388e5698d1b2320c8b|13626774",
130
        "3.8.0|macos_arm64 |751348f1a4a876ffe089fd68df6aea310fd05fe3b163ab76aa62632e327122f3|14078604",
131
        "3.8.0|macos_x86_64|532ddd6213891084873e5c2dcafa577f425ca662a6594a3389e288fc48dc2089|14318316",
132
    ]
UNCOV
133
    default_url_template = "https://get.helm.sh/helm-v{version}-{platform}.tar.gz"
×
UNCOV
134
    default_url_platform_mapping = {
×
135
        "linux_arm64": "linux-arm64",
136
        "linux_x86_64": "linux-amd64",
137
        "macos_arm64": "darwin-arm64",
138
        "macos_x86_64": "darwin-amd64",
139
    }
140

UNCOV
141
    _registries = DictOption[Any](help=registries_help, fromfile=True)
×
UNCOV
142
    lint_strict = BoolOption(default=False, help="Enables strict linting of Helm charts")
×
UNCOV
143
    lint_quiet = BoolOption(default=False, help="Only print warnings and errors for Helm charts")
×
UNCOV
144
    default_registry_repository = StrOption(
×
145
        default=None,
146
        help=softwrap(
147
            """
148
            Default location where to push Helm charts in the available registries
149
            when no specific one has been given.
150

151
            If no registry repository is given, charts will be pushed to the root of
152
            the OCI registry.
153
            """
154
        ),
155
    )
UNCOV
156
    extra_env_vars = StrListOption(
×
157
        help=softwrap(
158
            f"""
159
            Additional environment variables that would be made available to all Helm processes
160
            or during value interpolation.
161

162
            {EXTRA_ENV_VARS_USAGE_HELP}
163
            """
164
        ),
165
        advanced=True,
166
    )
UNCOV
167
    tailor_charts = BoolOption(
×
168
        default=True,
169
        help="If true, add `helm_chart` targets with the `tailor` goal.",
170
        advanced=True,
171
    )
UNCOV
172
    tailor_unittests = BoolOption(
×
173
        default=True,
174
        help="If true, add `helm_unittest_tests` targets with the `tailor` goal.",
175
        advanced=True,
176
    )
177

UNCOV
178
    args = ArgsListOption(
×
179
        example="--force",
180
        passthrough=True,
181
        extra_help=softwrap(
182
            f"""
183
            Additional arguments to pass to Helm command line.
184

185
            Only a subset of Helm arguments are considered valid as passthrough arguments as most of them
186
            have equivalents in the form of fields of the different target types.
187

188
            The list of valid arguments is as follows:
189

190
            {bullet_list([*_VALID_PASSTHROUGH_FLAGS, *_VALID_PASSTHROUGH_OPTS])}
191

192
            Before attempting to use passthrough arguments, check the reference of each of the available target types
193
            to see what fields are accepted in each of them.
194

195
            To pass `--dry-run`, use the `--experimental-deploy-dry-run` flag.
196
            """
197
        ),
198
    )
199

UNCOV
200
    @memoized_method
×
UNCOV
201
    def valid_args(self, *, extra_help: str = "") -> tuple[str, ...]:
×
202
        valid, invalid = _cleanup_passthrough_args(self.args)
×
203
        if invalid:
×
204
            raise InvalidHelmPassthroughArgs(invalid, extra_help=extra_help)
×
205
        return tuple(valid)
×
206

UNCOV
207
    def generate_exe(self, plat: Platform) -> str:
×
UNCOV
208
        mapped_plat = self.default_url_platform_mapping[plat.value]
×
UNCOV
209
        bin_path = os.path.join(mapped_plat, "helm")
×
UNCOV
210
        return bin_path
×
211

UNCOV
212
    @memoized_method
×
UNCOV
213
    def remotes(self) -> HelmRemotes:
×
214
        return HelmRemotes.from_dict(self._registries)
×
215

216

UNCOV
217
def _cleanup_passthrough_args(args: Iterable[str]) -> tuple[list[str], list[str]]:
×
218
    valid_args: list[str] = []
×
219
    removed_args: list[str] = []
×
220

221
    skip = False
×
222
    for arg in args:
×
223
        if skip:
×
224
            valid_args.append(arg)
×
225
            skip = False
×
226
            continue
×
227

228
        if arg in _VALID_PASSTHROUGH_FLAGS:
×
229
            valid_args.append(arg)
×
230
        elif "=" in arg and arg.split("=")[0] in _VALID_PASSTHROUGH_OPTS:
×
231
            valid_args.append(arg)
×
232
        elif arg in _VALID_PASSTHROUGH_OPTS:
×
233
            valid_args.append(arg)
×
234
            skip = True
×
235
        else:
236
            removed_args.append(arg)
×
237

238
    return (valid_args, removed_args)
×
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

© 2025 Coveralls, Inc