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

pantsbuild / pants / 22206482340

20 Feb 2026 12:44AM UTC coverage: 80.376% (+0.05%) from 80.324%
22206482340

Pull #23066

github

web-flow
Merge ddfa8ddd7 into 56952304a
Pull Request #23066: Extract JavaScript backend test resources to files

73 of 73 new or added lines in 2 files covered. (100.0%)

1093 existing lines in 48 files now uncovered.

78880 of 98139 relevant lines covered (80.38%)

3.35 hits per line

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

67.57
/src/python/pants/backend/docker/goals/run_image.py
1
# Copyright 2021 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
5✔
5

6
from dataclasses import dataclass, replace
5✔
7
from typing import cast
5✔
8

9
from pants.backend.docker.goals.package_image import DockerPackageFieldSet
5✔
10
from pants.backend.docker.package_types import BuiltDockerImage
5✔
11
from pants.backend.docker.subsystems.docker_options import DockerOptions
5✔
12
from pants.backend.docker.target_types import (
5✔
13
    DockerImageRegistriesField,
14
    DockerImageRunExtraArgsField,
15
    DockerImageSourceField,
16
)
17
from pants.backend.docker.util_rules.docker_binary import DockerBinary
5✔
18
from pants.core.goals.package import PackageFieldSet, build_package
5✔
19
from pants.core.goals.run import RunFieldSet, RunInSandboxBehavior, RunRequest
5✔
20
from pants.core.util_rules.env_vars import environment_vars_subset
5✔
21
from pants.engine.env_vars import EnvironmentVarsRequest
5✔
22
from pants.engine.internals.graph import resolve_target
5✔
23
from pants.engine.rules import collect_rules, concurrently, implicitly, rule
5✔
24
from pants.engine.target import WrappedTargetRequest
5✔
25

26

27
@dataclass(frozen=True)
5✔
28
class DockerRunFieldSet(RunFieldSet):
5✔
29
    required_fields = (DockerImageSourceField,)
5✔
30
    run_in_sandbox_behavior = RunInSandboxBehavior.RUN_REQUEST_HERMETIC
5✔
31

32
    extra_run_args: DockerImageRunExtraArgsField
5✔
33

34
    def get_run_args(self, options: DockerOptions) -> tuple[str, ...]:
5✔
UNCOV
35
        return tuple(options.run_args + (self.extra_run_args.value or ()))
×
36

37

38
@rule
5✔
39
async def docker_image_run_request(
5✔
40
    field_set: DockerRunFieldSet,
41
    docker: DockerBinary,
42
    options: DockerOptions,
43
    options_env_aware: DockerOptions.EnvironmentAware,
44
) -> RunRequest:
UNCOV
45
    wrapped_target = await resolve_target(
×
46
        WrappedTargetRequest(field_set.address, description_of_origin="<infallible>"),
47
        **implicitly(),
48
    )
49
    build_request = DockerPackageFieldSet.create(wrapped_target.target)
×
50
    registries = options.registries()
×
51
    for registry in registries.get(*(build_request.registries.value or [])):
×
UNCOV
52
        if registry.use_local_alias:
×
53
            # We only need to tag a single image name for run requests if there is a registry with
54
            # `use_local_alias` as true.
UNCOV
55
            build_request = replace(
×
56
                build_request,
57
                registries=DockerImageRegistriesField((registry.alias,), field_set.address),
58
            )
59
            break
×
UNCOV
60
    env, image = await concurrently(
×
61
        environment_vars_subset(EnvironmentVarsRequest(options_env_aware.env_vars), **implicitly()),
62
        build_package(**implicitly({build_request: PackageFieldSet})),
63
    )
64

65
    tag = cast(BuiltDockerImage, image.artifacts[0]).tags[0]
×
UNCOV
66
    run = docker.run_image(
×
67
        tag,
68
        docker_run_args=field_set.get_run_args(options),
69
        env=env,
70
    )
71

UNCOV
72
    return RunRequest(
×
73
        digest=image.digest,
74
        args=run.argv,
75
        extra_env=run.env,
76
        immutable_input_digests=run.immutable_input_digests,
77
    )
78

79

80
def rules():
5✔
81
    return [
5✔
82
        *collect_rules(),
83
        *DockerRunFieldSet.rules(),
84
    ]
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