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

pantsbuild / pants / 19015773527

02 Nov 2025 05:33PM UTC coverage: 17.872% (-62.4%) from 80.3%
19015773527

Pull #22816

github

web-flow
Merge a12d75757 into 6c024e162
Pull Request #22816: Update Pants internal Python to 3.14

4 of 5 new or added lines in 3 files covered. (80.0%)

28452 existing lines in 683 files now uncovered.

9831 of 55007 relevant lines covered (17.87%)

0.18 hits per line

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

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

UNCOV
4
from __future__ import annotations
×
5

UNCOV
6
from dataclasses import dataclass, replace
×
UNCOV
7
from typing import cast
×
8

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

25

UNCOV
26
@dataclass(frozen=True)
×
UNCOV
27
class DockerRunFieldSet(RunFieldSet):
×
UNCOV
28
    required_fields = (DockerImageSourceField,)
×
UNCOV
29
    run_in_sandbox_behavior = RunInSandboxBehavior.RUN_REQUEST_HERMETIC
×
30

UNCOV
31
    extra_run_args: DockerImageRunExtraArgsField
×
32

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

36

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

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

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

78

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