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

pantsbuild / pants / 26751910360

01 Jun 2026 11:24AM UTC coverage: 52.046% (-40.7%) from 92.792%
26751910360

Pull #23395

github

web-flow
Merge 41608d741 into c8127c1f4
Pull Request #23395: Bump the gha-deps group with 8 updates

31994 of 61473 relevant lines covered (52.05%)

1.04 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).
3
from __future__ import annotations
×
4

5
from collections.abc import Iterable
×
6
from dataclasses import dataclass
×
7

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

31

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

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

41

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

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

51

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

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

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

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

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

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

126
def rules() -> Iterable[Rule | UnionRule]:
×
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