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

pantsbuild / pants / 25441711719

06 May 2026 02:31PM UTC coverage: 92.915%. Remained the same
25441711719

push

github

web-flow
use sha pin (with comment) format for generated actions (#23312)

Per the GitHub Action best practices we recently enabled at #23249, we
should pin each action to a SHA so that the reference is actually
immutable.

This will -- I hope -- knock out a large chunk of the 421 alerts we
currently get from zizmor. The next followup would then be upgrades and
harmonizing the generated and none-generated pins.

Notice: This idea was suggested by Claude while going over pinact output
and I was surprised to see that post processing the yaml wasn't too
gross.

92206 of 99237 relevant lines covered (92.91%)

4.04 hits per line

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

94.23
/src/python/pants/core/goals/generate_snapshots.py
1
# Copyright 2023 Pants project contributors (see CONTRIBUTORS.md).
2
# Licensed under the Apache License, Version 2.0 (see LICENSE).
3

4
from __future__ import annotations
7✔
5

6
import logging
7✔
7
from abc import ABCMeta
7✔
8
from dataclasses import dataclass
7✔
9

10
from pants.core.environments.rules import EnvironmentNameRequest, resolve_environment_name
7✔
11
from pants.engine.environment import EnvironmentName
7✔
12
from pants.engine.fs import MergeDigests, Snapshot, Workspace
7✔
13
from pants.engine.goal import Goal, GoalSubsystem
7✔
14
from pants.engine.internals.specs_rules import find_valid_field_sets_for_target_roots
7✔
15
from pants.engine.intrinsics import digest_to_snapshot
7✔
16
from pants.engine.rules import collect_rules, concurrently, goal_rule, implicitly, rule
7✔
17
from pants.engine.target import FieldSet, NoApplicableTargetsBehavior, TargetRootsToFieldSetsRequest
7✔
18
from pants.engine.unions import UnionMembership, union
7✔
19

20
logger = logging.getLogger(__name__)
7✔
21

22

23
@union(in_scope_types=[EnvironmentName])
7✔
24
class GenerateSnapshotsFieldSet(FieldSet, metaclass=ABCMeta):
7✔
25
    """The fields necessary to generate snapshots from a target."""
26

27

28
@dataclass(frozen=True)
7✔
29
class GenerateSnapshotsResult:
7✔
30
    snapshot: Snapshot
7✔
31

32

33
@rule(polymorphic=True)
7✔
34
async def generate_snapshots(
7✔
35
    field_set: GenerateSnapshotsFieldSet, environment_name: EnvironmentName
36
) -> GenerateSnapshotsResult:
37
    raise NotImplementedError()
×
38

39

40
@dataclass(frozen=True)
7✔
41
class EnvironmentAwareGenerateSnapshotsRequest:
7✔
42
    """Request class to request a `GenerateSnapshotsResult` in an environment-aware fashion."""
43

44
    field_set: GenerateSnapshotsFieldSet
7✔
45

46

47
@rule
7✔
48
async def environment_aware_generate_snapshots(
7✔
49
    request: EnvironmentAwareGenerateSnapshotsRequest,
50
) -> GenerateSnapshotsResult:
51
    environment_name = await resolve_environment_name(
1✔
52
        EnvironmentNameRequest.from_field_set(request.field_set),
53
        **implicitly(),
54
    )
55
    result = await generate_snapshots(
1✔
56
        **implicitly(
57
            {request.field_set: GenerateSnapshotsFieldSet, environment_name: EnvironmentName}
58
        )
59
    )
60
    return result
1✔
61

62

63
class GenerateSnapshotsSubsystem(GoalSubsystem):
7✔
64
    name = "generate-snapshots"
7✔
65
    help = "Generate test snapshots."
7✔
66

67
    @classmethod
7✔
68
    def activated(cls, union_membership: UnionMembership) -> bool:
7✔
69
        return GenerateSnapshotsFieldSet in union_membership
×
70

71

72
class GenerateSnapshots(Goal):
7✔
73
    subsystem_cls = GenerateSnapshotsSubsystem
7✔
74
    environment_behavior = Goal.EnvironmentBehavior.USES_ENVIRONMENTS
7✔
75

76

77
@goal_rule
7✔
78
async def generate_snapshots_goal(workspace: Workspace) -> GenerateSnapshots:
7✔
79
    target_roots_to_field_sets = await find_valid_field_sets_for_target_roots(
1✔
80
        TargetRootsToFieldSetsRequest(
81
            GenerateSnapshotsFieldSet,
82
            goal_description=f"the `{GenerateSnapshotsSubsystem.name}` goal",
83
            no_applicable_targets_behavior=NoApplicableTargetsBehavior.error,
84
        ),
85
        **implicitly(),
86
    )
87

88
    if not target_roots_to_field_sets.field_sets:
1✔
89
        return GenerateSnapshots(exit_code=0)
×
90

91
    snapshot_results = await concurrently(
1✔
92
        environment_aware_generate_snapshots(EnvironmentAwareGenerateSnapshotsRequest(field_set))
93
        for field_set in target_roots_to_field_sets.field_sets
94
    )
95

96
    all_snapshots = await digest_to_snapshot(
1✔
97
        **implicitly(MergeDigests([result.snapshot.digest for result in snapshot_results]))
98
    )
99
    workspace.write_digest(all_snapshots.digest)
1✔
100
    for file in all_snapshots.files:
1✔
101
        logger.info(f"Generated {file}")
1✔
102
    return GenerateSnapshots(exit_code=0)
1✔
103

104

105
def rules():
7✔
106
    return collect_rules()
7✔
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