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

pantsbuild / pants / 26260209689

21 May 2026 11:59PM UTC coverage: 75.453% (-15.7%) from 91.156%
26260209689

Pull #23365

github

web-flow
Merge 5fe873b58 into 7ea655ba0
Pull Request #23365: uv.lock -> pex optimization

5 of 16 new or added lines in 1 file covered. (31.25%)

10118 existing lines in 378 files now uncovered.

54669 of 72454 relevant lines covered (75.45%)

2.31 hits per line

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

0.0
/src/python/pants/backend/javascript/run/rules.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
from collections.abc import Iterable
×
UNCOV
6
from dataclasses import dataclass
×
7

UNCOV
8
from pants.backend.javascript import install_node_package
×
UNCOV
9
from pants.backend.javascript.install_node_package import (
×
10
    InstalledNodePackageRequest,
11
    add_sources_to_installed_node_package,
12
)
UNCOV
13
from pants.backend.javascript.nodejs_project_environment import (
×
14
    NodeJsProjectEnvironmentProcess,
15
    setup_nodejs_project_environment_process,
16
)
UNCOV
17
from pants.backend.javascript.package_json import (
×
18
    NodeBuildScriptEntryPointField,
19
    NodeBuildScriptExtraEnvVarsField,
20
    NodePackageDependenciesField,
21
    NodeRunScriptEntryPointField,
22
    NodeRunScriptExtraEnvVarsField,
23
)
UNCOV
24
from pants.core.environments.target_types import EnvironmentField
×
UNCOV
25
from pants.core.goals.run import RunFieldSet, RunInSandboxBehavior, RunRequest
×
UNCOV
26
from pants.core.util_rules.env_vars import environment_vars_subset
×
UNCOV
27
from pants.engine.env_vars import EnvironmentVarsRequest
×
UNCOV
28
from pants.engine.rules import Rule, collect_rules, implicitly, rule
×
UNCOV
29
from pants.engine.unions import UnionRule
×
30

31

UNCOV
32
@dataclass(frozen=True)
×
UNCOV
33
class RunNodeBuildScriptFieldSet(RunFieldSet):
×
UNCOV
34
    required_fields = (NodeBuildScriptEntryPointField, NodePackageDependenciesField)
×
UNCOV
35
    run_in_sandbox_behavior = RunInSandboxBehavior.RUN_REQUEST_HERMETIC
×
36

UNCOV
37
    entry_point: NodeBuildScriptEntryPointField
×
UNCOV
38
    extra_env_vars: NodeBuildScriptExtraEnvVarsField
×
UNCOV
39
    environment: EnvironmentField
×
40

41

UNCOV
42
@dataclass(frozen=True)
×
UNCOV
43
class RunNodeScriptFieldSet(RunFieldSet):
×
UNCOV
44
    required_fields = (NodeRunScriptEntryPointField, NodePackageDependenciesField)
×
UNCOV
45
    run_in_sandbox_behavior = RunInSandboxBehavior.RUN_REQUEST_HERMETIC
×
46

UNCOV
47
    entry_point: NodeRunScriptEntryPointField
×
UNCOV
48
    extra_env_vars: NodeRunScriptExtraEnvVarsField
×
UNCOV
49
    environment: EnvironmentField
×
50

51

UNCOV
52
@rule
×
UNCOV
53
async def run_node_script(
×
54
    field_set: RunNodeScriptFieldSet,
55
) -> RunRequest:
UNCOV
56
    installation = await add_sources_to_installed_node_package(
×
57
        InstalledNodePackageRequest(field_set.address)
58
    )
UNCOV
59
    target_env_vars = await environment_vars_subset(
×
60
        EnvironmentVarsRequest(field_set.extra_env_vars.value or ()), **implicitly()
61
    )
UNCOV
62
    package_dir = "{chroot}" + "/" + installation.project_env.package_dir()
×
63

UNCOV
64
    process = await setup_nodejs_project_environment_process(
×
65
        NodeJsProjectEnvironmentProcess(
66
            installation.project_env,
67
            args=(
68
                *installation.package_manager.current_directory_args,
69
                package_dir,
70
                "run",
71
                str(field_set.entry_point.value),
72
            ),
73
            description=f"Running {str(field_set.entry_point.value)}.",
74
            input_digest=installation.digest,
75
            extra_env=target_env_vars,
76
        ),
77
        **implicitly(),
78
    )
79

UNCOV
80
    return RunRequest(
×
81
        digest=process.input_digest,
82
        args=process.argv,
83
        extra_env=process.env,
84
        immutable_input_digests=process.immutable_input_digests,
85
        append_only_caches=process.append_only_caches,
86
    )
87

88

UNCOV
89
@rule
×
UNCOV
90
async def run_node_build_script(
×
91
    field_set: RunNodeBuildScriptFieldSet,
92
) -> RunRequest:
UNCOV
93
    installation = await add_sources_to_installed_node_package(
×
94
        InstalledNodePackageRequest(field_set.address)
95
    )
UNCOV
96
    target_env_vars = await environment_vars_subset(
×
97
        EnvironmentVarsRequest(field_set.extra_env_vars.value or ()), **implicitly()
98
    )
UNCOV
99
    package_dir = "{chroot}" + "/" + installation.project_env.package_dir()
×
100

UNCOV
101
    process = await setup_nodejs_project_environment_process(
×
102
        NodeJsProjectEnvironmentProcess(
103
            installation.project_env,
104
            args=(
105
                *installation.package_manager.current_directory_args,
106
                package_dir,
107
                "run",
108
                str(field_set.entry_point.value),
109
            ),
110
            description=f"Running {str(field_set.entry_point.value)}.",
111
            input_digest=installation.digest,
112
            extra_env=target_env_vars,
113
        ),
114
        **implicitly(),
115
    )
116

UNCOV
117
    return RunRequest(
×
118
        digest=process.input_digest,
119
        args=process.argv,
120
        extra_env=process.env,
121
        immutable_input_digests=process.immutable_input_digests,
122
        append_only_caches=process.append_only_caches,
123
    )
124

125

UNCOV
126
def rules() -> Iterable[Rule | UnionRule]:
×
UNCOV
127
    return [
×
128
        *collect_rules(),
129
        *install_node_package.rules(),
130
        *RunNodeBuildScriptFieldSet.rules(),
131
        *RunNodeScriptFieldSet.rules(),
132
    ]
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