You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
The Packaging check reports "packaging workflow not detected" (-1) for many Rust repositories that publish multi-platform binaries (and often crates) via cargo-dist / the dist CLI in GitHub Actions. That is a false negative for a mainstream Rust packaging layout.
cargo-dist workflows typically do not put a bare cargo publish step in the same top-level workflow that builds and attaches release artifacts. They use dist plan / dist build (and sometimes a separate reusable workflow for crates.io).
Public Scorecard API historically reported Packaging -1 / "packaging workflow not detected" for this project even while:
Multi-arch binaries are built with dist plan / dist build and uploaded to GitHub Releases
crates.io publish runs via cargo publish --locked --package patchloom in a reusable workflow (.github/workflows/publish-crates.yml, on: workflow_call only)
Homebrew formula / Scoop / npm installer packages are published from the same release pipeline
cargo publish in workflow_call-only reusable workflows often never credits Packaging.
In checks/raw/github/packaging.go, after a workflow matches a packaging pattern, Scorecard requires:
runs, err:=c.RepoClient.ListSuccessfulWorkflowRuns(filepath.Base(fp))
// ...iflen(runs) >0 { /* success */ }
// else: "GitHub publishing workflow not used in runs: ..."
For patchloom:
Workflow file
Pattern match
Successful runs (API)
release.yml
cargo-dist dist plan/dist build (no matcher today); also may match npm if present
Many
publish-crates.yml
cargo publish matches
0 (on: workflow_call only; runs are attributed to the caller, not this file)
So pure "cargo-dist + reusable cargo publish" layouts can still fail Packaging even when crates and binaries are published on every release.
Observed behavior (live recheck)
Local scorecard --checks=Packaging on 2026-07-27 against github.com/patchloom/patchloom currently scores 10 because release.yml also has an npm publish job that matches the existing npm matcher (actions/setup-node + registry-url: https://registry.npmjs.org + npm.*publish) around job publish-npm (~line 706).
That does not mean cargo-dist is detected. A Rust-only cargo-dist project without npm (very common) still gets Packaging -1. Relying on npm as the only packaging signal for a Rust binary/crates release pipeline is incorrect.
Describe the solution you'd like
Primary: add cargo-dist packaging matchers in IsPackagingWorkflow (same family as goreleaser / cargo publish), for example:
Log text like: candidate rust publishing workflow using cargo-dist
Unit tests with fixture YAML modeled on cargo-dist-generated release.yml jobs
Secondary (related correctness): reusable workflow_call publish jobs
When a packaging pattern matches a workflow_call-only file with no standalone successful runs, either:
credit Packaging if a caller workflow with successful runs references that reusable workflow, or
document that cargo publish must appear in a workflow that has its own run history
Is your feature request related to a problem? Please describe.
The Packaging check reports "packaging workflow not detected" (
-1) for many Rust repositories that publish multi-platform binaries (and often crates) via cargo-dist / thedistCLI in GitHub Actions. That is a false negative for a mainstream Rust packaging layout.Scorecard already has a Rust matcher:
cargo-dist workflows typically do not put a bare
cargo publishstep in the same top-level workflow that builds and attaches release artifacts. They usedist plan/dist build(and sometimes a separate reusable workflow for crates.io).Concrete example
Repo: https://github.com/patchloom/patchloom
Workflow:
.github/workflows/release.yml(cargo-dist plan/build + GitHub Releases + Homebrew/Scoop/npm installers + crates publish)Public Scorecard API historically reported Packaging -1 / "packaging workflow not detected" for this project even while:
dist plan/dist buildand uploaded to GitHub Releasescargo publish --locked --package patchloomin a reusable workflow (.github/workflows/publish-crates.yml,on: workflow_callonly)Related project note: https://github.com/patchloom/patchloom/blob/main/SECURITY.md (section "OpenSSF Scorecard notes") documents Packaging as a known cargo-dist false negative.
Why current matchers miss cargo-dist
No matcher for cargo-dist /
distCLI.There is no
JobMatcherfor:dist plan/dist build/dist publish(orcargo dist ...)cargo publishinworkflow_call-only reusable workflows often never credits Packaging.In
checks/raw/github/packaging.go, after a workflow matches a packaging pattern, Scorecard requires:For patchloom:
release.ymldist plan/dist build(no matcher today); also may match npm if presentpublish-crates.ymlcargo publishmatcheson: workflow_callonly; runs are attributed to the caller, not this file)So pure "cargo-dist + reusable
cargo publish" layouts can still fail Packaging even when crates and binaries are published on every release.Observed behavior (live recheck)
Local
scorecard --checks=Packagingon 2026-07-27 againstgithub.com/patchloom/patchloomcurrently scores 10 becauserelease.ymlalso has an npm publish job that matches the existing npm matcher (actions/setup-node+registry-url: https://registry.npmjs.org+npm.*publish) around jobpublish-npm(~line 706).That does not mean cargo-dist is detected. A Rust-only cargo-dist project without npm (very common) still gets Packaging -1. Relying on npm as the only packaging signal for a Rust binary/crates release pipeline is incorrect.
Describe the solution you'd like
Primary: add cargo-dist packaging matchers in
IsPackagingWorkflow(same family as goreleaser / cargo publish), for example:Runregex coveringdist plan,dist build,dist publish(and optionallycargo dist ...)candidate rust publishing workflow using cargo-distrelease.ymljobsSecondary (related correctness): reusable
workflow_callpublish jobsWhen a packaging pattern matches a
workflow_call-only file with no standalone successful runs, either:cargo publishmust appear in a workflow that has its own run historyThis is the same class of gap as other "matcher exists but detector never sees reality" Packaging bugs (e.g. ko dual-setup issue BUG: Packaging check's ko matcher requires BOTH setup-ko spellings in one job, so ko publishing is never detected #5133, goreleaser fork Feature: Packaging check should detect step-security/goreleaser-action (maintained fork of goreleaser/goreleaser-action) #5131, changesets Feature: Support changesets for the Packaging check #5096).
Docs: mention cargo-dist under Packaging in
docs/checks.md/ beginner docs once matchers land.Default remains non-breaking
Adding matchers only expands detection; repos already scoring 10 stay 10.
Alternatives considered
cargo publishstep in a workflow that has standalone successful runs — fragile and dishonest packaging signal.Additional context
cargo publish: https://doc.rust-lang.org/cargo/reference/publishing.htmlScorecard viewer (may lag): https://securityscorecards.dev/viewer/?uri=github.com/patchloom/patchloom
Public API can still show Packaging −1 from older analysis dates even after partial npm detection on newer runs.
Happy to open a PR adding the cargo-dist
JobMatcher+ fixtures if maintainers agree on the regex / step shape.