Skip to content

Workflow drift in derived single-target repos: action-pin lag + id-vs-pattern artifact handoff #203

Description

@ptr727

Surfaced during a template re-sync into a derived single-target (.NET NuGet-only) repo, per the AGENTS.md "Report drift upstream" rule. Two pieces of drift between the template and the derived repo's build-nugetlibrary-task.yml / build-release-task.yml. Neither blocks the re-sync; both will keep re-surfacing on every future sync until the template decides the canonical form.

1. Action pins: template is behind

The derived repo carries newer pins than the template for the same actions:

Action Template Derived repo
actions/setup-dotnet v5.2.0 v5.3.0
actions/checkout v6.0.2 v7.0.0
actions/upload-artifact v6.0.0 v7.0.1
actions/download-artifact v7.0.0 v8.0.1

If the template is meant to be the source of truth for pins, it should lead (or at least not trail) its derived repos. Suggest bumping the template to the current major/minor for these four.

2. Artifact handoff: id-based vs pattern-based (design fork)

The build → github-release handoff has diverged in a way that is internally consistent on each side but conflicts on every re-sync:

Template (multi-target — nuget + pypi + executable + docker feed one release):

  • upload: name: release-asset-<branch>-<target>, no workflow output
  • download: pattern: release-asset-<branch>-* + merge-multiple: true
  • A stable name pattern is the right abstraction here — the release job globs every target's asset without threading N separate output ids.

Derived repo (single-target):

  • upload: name: nugetlibrary-build-<branch>, exposes an artifact-id workflow output
  • download: artifact-ids: ${{ needs.build-nugetlibrary.outputs.artifact-id }}
  • For one target this is arguably cleaner: an exact 1:1 handle with no name-collision surface.

This is a real fork, not a placeholder substitution, so a verbatim re-sync can't reconcile it. The decision is the template's to make:

  • (a) Standardize all derived repos on the template's pattern-based handoff (uniformity; single-target repos carry slightly more machinery than they need), or
  • (b) Bless the id-based handoff as the sanctioned single-target variant and document it as a droppable/swappable block (like the .editorconfig [*.cs] block), so single-target repos stop drifting against it.

Happy to send a PR for whichever direction you pick. Holding the derived repo as-is (id-based, newer pins) until you weigh in.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions