• 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

77.78
/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
2✔
5

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

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

25
_VALID_PASSTHROUGH_FLAGS = [
2✔
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 = [
2✔
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):
2✔
48
    def __init__(self, args: Iterable[str], *, extra_help: str = "") -> None:
2✔
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):
2✔
91
    options_scope = "helm"
2✔
92
    help = "The Helm command line (https://helm.sh)"
2✔
93

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

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

155
            If no registry repository is given, charts will be pushed to the root of
156
            the OCI registry.
157
            """
158
        ),
159
    )
160
    extra_env_vars = StrListOption(
2✔
161
        help=softwrap(
162
            f"""
163
            Additional environment variables that would be made available to all Helm processes
164
            or during value interpolation.
165

166
            {EXTRA_ENV_VARS_USAGE_HELP}
167
            """
168
        ),
169
        advanced=True,
170
    )
171
    tailor_charts = BoolOption(
2✔
172
        default=True,
173
        help="If true, add `helm_chart` targets with the `tailor` goal.",
174
        advanced=True,
175
    )
176
    tailor_unittests = BoolOption(
2✔
177
        default=True,
178
        help="If true, add `helm_unittest_tests` targets with the `tailor` goal.",
179
        advanced=True,
180
    )
181

182
    args = ArgsListOption(
2✔
183
        example="--force",
184
        passthrough=True,
185
        extra_help=softwrap(
186
            f"""
187
            Additional arguments to pass to Helm command line.
188

189
            Only a subset of Helm arguments are considered valid as passthrough arguments as most of them
190
            have equivalents in the form of fields of the different target types.
191

192
            The list of valid arguments is as follows:
193

194
            {bullet_list([*_VALID_PASSTHROUGH_FLAGS, *_VALID_PASSTHROUGH_OPTS])}
195

196
            Before attempting to use passthrough arguments, check the reference of each of the available target types
197
            to see what fields are accepted in each of them.
198

199
            To pass `--dry-run`, use the `--experimental-deploy-dry-run` flag.
200
            """
201
        ),
202
    )
203

204
    @memoized_method
2✔
205
    def valid_args(self, *, extra_help: str = "") -> tuple[str, ...]:
2✔
206
        valid, invalid = _cleanup_passthrough_args(self.args)
2✔
207
        if invalid:
2✔
208
            raise InvalidHelmPassthroughArgs(invalid, extra_help=extra_help)
×
209
        return tuple(valid)
2✔
210

211
    def generate_exe(self, plat: Platform) -> str:
2✔
212
        mapped_plat = self.default_url_platform_mapping[plat.value]
2✔
213
        bin_path = os.path.join(mapped_plat, "helm")
2✔
214
        return bin_path
2✔
215

216
    @memoized_method
2✔
217
    def remotes(self) -> HelmRemotes:
2✔
218
        return HelmRemotes.from_dict(self._registries)
2✔
219

220

221
def _cleanup_passthrough_args(args: Iterable[str]) -> tuple[list[str], list[str]]:
2✔
222
    valid_args: list[str] = []
2✔
223
    removed_args: list[str] = []
2✔
224

225
    skip = False
2✔
226
    for arg in args:
2✔
227
        if skip:
×
228
            valid_args.append(arg)
×
229
            skip = False
×
230
            continue
×
231

232
        if arg in _VALID_PASSTHROUGH_FLAGS:
×
233
            valid_args.append(arg)
×
234
        elif "=" in arg and arg.split("=")[0] in _VALID_PASSTHROUGH_OPTS:
×
235
            valid_args.append(arg)
×
236
        elif arg in _VALID_PASSTHROUGH_OPTS:
×
237
            valid_args.append(arg)
×
238
            skip = True
×
239
        else:
240
            removed_args.append(arg)
×
241

242
    return (valid_args, removed_args)
2✔
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