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

pantsbuild / pants / 24457917360

15 Apr 2026 01:41PM UTC coverage: 78.644% (+8.4%) from 70.203%
24457917360

push

github

web-flow
upgrade to Trivy v0.69.2 (Cherry-pick of #23155) (#23257)

Update to Trivy v0.69.2. Prior releases were deleted as part of [an
attack they
suffered](https://github.com/aquasecurity/trivy/discussions/10265), so
our CI is broken while it is still references the prior version.

Co-authored-by: Tom Dyas <tom.dyas@gmail.com>

1 of 1 new or added line in 1 file covered. (100.0%)

1089 existing lines in 53 files now uncovered.

74199 of 94348 relevant lines covered (78.64%)

3.16 hits per line

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

90.91
/src/python/pants/core/goals/resolves.py
1
# Copyright 2024 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3
from __future__ import annotations
11✔
4

5
from enum import Enum
11✔
6
from typing import TypeVar
11✔
7

8
from pants.engine.unions import UnionMembership, union
11✔
9
from pants.util.strutil import softwrap
11✔
10

11
T = TypeVar("T", bound="ExportableTool")
11✔
12

13

14
class ExportMode(Enum):
11✔
15
    """How this tool should be exported.
16

17
    resolve: in a language-based resolve
18
    binary: as a single binary
19
    """
20

21
    resolve = "resolve"
11✔
22
    binary = "binary"
11✔
23

24

25
@union
11✔
26
class ExportableTool:
11✔
27
    """Mark a subsystem as exportable.
28

29
    Using this class has 2 parts:
30
    - The tool class should subclass this.
31
      This can be done at the language-backend level, for example, `PythonToolRequirementsBase`.
32
      The help message can be extended with instructions specific to that tool or language backend
33
    - Each exportable tool should have a `UnionRule` to `ExportableTool`.
34
      This `UnionRule` is what ties the class into the export machinery.
35
    """
36

37
    options_scope: str
11✔
38
    export_mode: ExportMode = ExportMode.resolve
11✔
39

40
    @classmethod
11✔
41
    def help_for_generate_lockfile_with_default_location(cls, resolve_name: str):
11✔
42
        """If this tool is configured to use the default lockfile, but a user requests to regenerate
43
        it, this help text will be shown to the user."""
44

UNCOV
45
        resolve = resolve_name
×
UNCOV
46
        return softwrap(
×
47
            f"""
48
            You requested to generate a lockfile for {resolve} because
49
            you included it in `--generate-lockfiles-resolve`, but
50
            {resolve} is a tool using its default lockfile.
51
        """
52
        )
53

54
    @staticmethod
11✔
55
    def filter_for_subclasses(
11✔
56
        union_membership: UnionMembership, parent_class: type[T]
57
    ) -> dict[str, type[T]]:
58
        """Find all ExportableTools that are members of `parent_class`.
59

60
        Language backends can use this to obtain all tools they can export.
61
        """
62
        exportable_tools = union_membership.get(ExportableTool)
1✔
63
        relevant_tools: dict[str, type[T]] = {
1✔
64
            e.options_scope: e  # type: ignore # mypy isn't narrowing with `issubclass`
65
            for e in exportable_tools
66
            if issubclass(e, parent_class)
67
        }
68
        return relevant_tools
1✔
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