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

pantsbuild / pants / 19250292619

11 Nov 2025 12:09AM UTC coverage: 77.865% (-2.4%) from 80.298%
19250292619

push

github

web-flow
flag non-runnable targets used with `code_quality_tool` (#22875)

2 of 5 new or added lines in 2 files covered. (40.0%)

1487 existing lines in 72 files now uncovered.

71448 of 91759 relevant lines covered (77.86%)

3.22 hits per line

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

58.73
/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

4
from __future__ import annotations
9✔
5

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

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

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

35
_VALID_PASSTHROUGH_OPTS = [
9✔
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

47
class InvalidHelmPassthroughArgs(Exception):
9✔
48
    def __init__(self, args: Iterable[str], *, extra_help: str = "") -> None:
9✔
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

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

94
    default_version = "3.14.3"
9✔
95
    default_known_versions = [
9✔
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
    ]
133
    default_url_template = "https://get.helm.sh/helm-v{version}-{platform}.tar.gz"
9✔
134
    default_url_platform_mapping = {
9✔
135
        "linux_arm64": "linux-arm64",
136
        "linux_x86_64": "linux-amd64",
137
        "macos_arm64": "darwin-arm64",
138
        "macos_x86_64": "darwin-amd64",
139
    }
140

141
    _registries = DictOption[Any](help=registries_help, fromfile=True)
9✔
142
    lint_strict = BoolOption(default=False, help="Enables strict linting of Helm charts")
9✔
143
    lint_quiet = BoolOption(default=False, help="Only print warnings and errors for Helm charts")
9✔
144
    default_registry_repository = StrOption(
9✔
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
    )
156
    extra_env_vars = StrListOption(
9✔
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
    )
167
    tailor_charts = BoolOption(
9✔
168
        default=True,
169
        help="If true, add `helm_chart` targets with the `tailor` goal.",
170
        advanced=True,
171
    )
172
    tailor_unittests = BoolOption(
9✔
173
        default=True,
174
        help="If true, add `helm_unittest_tests` targets with the `tailor` goal.",
175
        advanced=True,
176
    )
177

178
    args = ArgsListOption(
9✔
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

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

207
    def generate_exe(self, plat: Platform) -> str:
9✔
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

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

216

217
def _cleanup_passthrough_args(args: Iterable[str]) -> tuple[list[str], list[str]]:
9✔
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