Update Sigstore and Tuf to 1.0.0 - #19335
Conversation
Bump Sigstore and Tuf to 1.0.0-alpha.100.1.dd7cd33 to validate the tightened verification implementation before the packages are mirrored to the dnceng feeds. Temporarily points at nuget.org to acquire the alpha packages. This requires three changes because simply adding the source is not sufficient: - Add the nuget.org package source. - Add a packageSourceMapping entry. Source mapping is enabled repo-wide, so an unmapped source is never consulted. The exact-name Sigstore/Tuf patterns beat the "*" patterns on the dnceng feeds via longest-prefix-match, so only these two packages come from nuget.org. - Add <clear /> to disabledPackageSources. User/machine-level NuGet configs commonly disable nuget.org, and the existing <clear /> in <packageSources> does not affect that section. DO NOT MERGE: external feeds break the internal build pipeline. Revert the NuGet.config changes once Sigstore/Tuf are mirrored to dotnet-public. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
|
🚀 Dogfood this PR with:
curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19335Or
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 19335" |
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Pull request overview
Temporarily validates tightened Sigstore/Tuf verification using prerelease packages.
Changes:
- Bumps Sigstore and Tuf to alpha builds.
- Temporarily enables nuget.org with restricted source mappings.
- Clears inherited disabled-package sources.
Show a summary per file
| File | Description |
|---|---|
NuGet.config |
Temporarily enables and maps nuget.org. |
Directory.Packages.props |
Updates Sigstore and Tuf versions. |
Review details
- Files reviewed: 2/2 changed files
- Comments generated: 1
- Review effort level: Balanced
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
CI failed at restore on every job with NU1902/NU1903 for packages that have nothing to do with this change: Microsoft.OpenApi 3.5.3, SSH.NET 2024.2.0, MessagePack 2.5.198, SharpCompress 0.30.1 and Snappier 1.0.0. None are Sigstore or Tuf, none are in Directory.Packages.props, and all are pre-existing transitive dependencies untouched by this branch. Root cause is a side effect of adding nuget.org, not the alpha packages. NuGet audit is on by default, but it silently no-ops unless a configured source advertises a VulnerabilityInfo resource. The dnceng feeds expose none; nuget.org exposes VulnerabilityInfo/6.7.0. Adding nuget.org gave the restore a vulnerability database for the first time, so audit started flagging long-standing transitive packages, and TreatWarningsAsErrors promoted those warnings into restore-breaking errors repo-wide. Verified both directions locally on Aspire.Milvus.Client.Tests, a project with no Sigstore/Tuf reference: with NuGetAudit=true it reproduces the CI error exactly (NU1903 SSH.NET, GHSA-q939-rpr3-3284), and with the property below it restores cleanly. Aspire.Cli builds with 0 warnings and the full Aspire.Cli.Tests suite passes 4919/4919, including the SdkDumpCommandTests case that previously tripped on Microsoft.OpenApi. Revert this together with the nuget.org source in NuGet.config once the packages are mirrored to dotnet-public. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Review details
Suppressed comments (2)
NuGet.config:28
- This adds an unapproved external package source, which the repository's internal build cannot consume. This block must not merge; mirror Sigstore/Tuf to an approved dnceng feed, then remove the nuget.org source, mapping, and inherited-disable override together.
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
Directory.Packages.props:152
- The package upgrade changes the production cryptographic verification implementation, but the existing SigstoreNpmProvenanceChecker tests inject a handler that bypasses real Sigstore verification (tests/Aspire.Cli.Tests/Agents/SigstoreNpmProvenanceCheckerTests.cs:1210-1213). Before shipping this bump, add deterministic automated coverage that invokes the real verifier for a genuine bundle and rejects identity/digest tampering; the out-of-band harness cannot catch future regressions in CI.
<PackageVersion Include="Sigstore" Version="1.0.0-alpha.100.1.dd7cd33" />
<PackageVersion Include="Tuf" Version="1.0.0-alpha.100.1.dd7cd33" />
- Files reviewed: 3/3 changed files
- Comments generated: 1
- Review effort level: Balanced
There was a problem hiding this comment.
Review details
Suppressed comments (2)
NuGet.config:28
- This external source cannot ship: repository policy permits only the dnceng feed domains because public feeds break the internal build pipeline (
AGENTS.md:53-67). Mirror Sigstore/Tuf to an approved feed, then remove this source together with its mapping and inherited-disable override before approval.
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
Directory.Build.props:26
- This disables NuGet vulnerability auditing for every project in the repository, so restores will stop reporting NU1901-NU1904 advisories globally. It must be removed together with the temporary nuget.org source before this can be merged.
<NuGetAudit>false</NuGetAudit>
- Files reviewed: 3/3 changed files
- Comments generated: 0 new
- Review effort level: Balanced
This comment has been minimized.
This comment has been minimized.
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
Moves from the alpha to the newly published beta. Dependency shape is unchanged (BouncyCastle.Cryptography 2.7.0), and the CLI builds with no API breaks. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
This comment has been minimized.
This comment has been minimized.
Dependency shape is unchanged from the prereleases (BouncyCastle.Cryptography 2.7.0), and the CLI builds with no API breaks. The temporary NuGet.config and NuGetAudit changes are still required: dnceng dotnet-public still only carries up to 0.5.0 and does not upstream-fetch 1.0.0. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
This comment has been minimized.
This comment has been minimized.
There was a problem hiding this comment.
Review details
Suppressed comments (4)
Directory.Build.props:26
- This disables vulnerability auditing for every package restored anywhere in the repository, hiding NU1901–NU1904 advisories unrelated to this experiment. Remove this temporary global opt-out before merge; validation-only invocations should suppress audit locally rather than weakening the repository default.
<NuGetAudit>false</NuGetAudit>
NuGet.config:28
- This adds an unapproved external package source. Repository policy permits only dnceng feed domains because public feeds break the internal build pipeline. Before this can merge, mirror Sigstore/Tuf 1.0.0 to
dotnet-publicand remove this source together with its mapping anddisabledPackageSourcesoverride.
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
NuGet.config:63
- This still describes restoring an alpha, but the changed dependency is stable 1.0.0. Keep the temporary configuration comment aligned with the version under test.
drops inherited disable entries so the Sigstore/Tuf alpha can be restored from nuget.org.
NuGet.config:27
- This comment is stale: the package versions in
Directory.Packages.propsare stable 1.0.0, not 1.0.0-alpha. Update it so the temporary source's purpose matches the actual dependency being validated.
This issue also appears on line 63 of the same file.
<!-- TEMPORARY - DO NOT MERGE: nuget.org is added solely to test the Sigstore/Tuf 1.0.0-alpha
- Files reviewed: 3/3 changed files
- Comments generated: 0 new
- Review effort level: Balanced
Sigstore and Tuf 1.0.0 cleared CFS quarantine and are now available from the dnceng dotnet-public feed, so the temporary scaffolding added to test them ahead of mirroring is no longer needed. This removes: - the nuget.org package source and its Sigstore/Tuf source mapping - the <clear /> in <disabledPackageSources> that un-disabled nuget.org - NuGetAudit=false, which was only required because nuget.org was the sole configured source exposing a VulnerabilityInfo resource, which activated audit repo-wide and tripped TreatWarningsAsErrors Verified after reverting, with Sigstore/Tuf 1.0.0 purged from both the global packages folder and the HTTP cache, that restore resolves both packages from dotnet-public and that no NU190x diagnostics are emitted. NuGet.config and Directory.Build.props are now identical to main; this branch reduces to the Sigstore/Tuf version bump alone. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
…-fiesta # Conflicts: # Directory.Packages.props
This comment has been minimized.
This comment has been minimized.
Sigstore 1.0.0 swapped its cryptographic backend from NSec.Cryptography to BouncyCastle.Cryptography, so the transitive third-party binary that flows into Aspire.Cli changed. Update eng/Signing.props to match. Without an entry the Arcade SDK signs the third-party assembly with the Microsoft certificate and the internal build fails with SIGN004. This is the same failure #14915 fixed when Sigstore/Tuf were first introduced, which is why NSec.Cryptography had an entry at all. The NSec entry is removed rather than kept: no project in the repository resolves NSec.Cryptography any more, verified across all 432 restored project.assets.json files. Note that BouncyCastle.Cryptography was already present in the graph via test-only dependencies, but Aspire.Cli is the first shipping project to take it, which is what makes the signing entry newly necessary. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
The surrounding FileSignInfo entries carry no comments, so the added block was inconsistent with the file. The rationale is recorded in the commit message of 61aa027 and on PR #19335 instead. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 4bd5a7f6-724d-4043-acb5-4b792184658b
Tests selector (audit mode)The full test matrix and all jobs still run in audit mode. The tests and jobs below are what selective CI would run under enforcement. Runs the full test matrix + all jobs (ALL) — a rule matching 'Directory.Packages.props' selects ALL Selection computed for commit |
|
Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt. |
James Newton-King (JamesNK)
left a comment
There was a problem hiding this comment.
No issues found. Verified the repository restore completes without warnings or NU190x diagnostics, the focused Sigstore provenance suite passes (85/85), and the resolved Aspire.Cli graph contains Sigstore/Tuf 1.0.0 with BouncyCastle.Cryptography 2.7.0 and no NSec.Cryptography. Current CI has no failing or pending checks.
|
✅ No documentation update needed. Step 5 branch taken: Triggered signals: none (signal_count == 0, triggered_signals: []). Changed-file globs justifying the category: both changed files match build/dependency config: |
|
The CI build failed due to test failure(s) that appear unrelated to the PR changes. These may be flaky tests. Suspected flaky test(s):
Suggested actions:
You can re-run the failed jobs from the workflow run page. |
Description
Updates the
SigstoreandTufpackage references from0.5.0to1.0.0— the first stable releases of both libraries.Sigstoreis consumed byAspire.Clifor npm provenance verification (SigstoreNpmProvenanceChecker, used byPlaywrightCliInstaller) and for GitHub artifact attestation verification (GitHubArtifactAttestationVerifier).Two files change: the version bump in
Directory.Packages.props, and a corresponding third-party signing entry ineng/Signing.props(see below).Why now
1.0.0was published to nuget.org on 2026-08-14 and has since cleared CFS quarantine, so both packages are now served from thedotnet-publicdnceng feed. NoNuGet.configchanges are required.Earlier revisions of this PR temporarily added nuget.org as a package source in order to test the pre-release builds before they were mirrored. All of that scaffolding has been reverted —
NuGet.configandDirectory.Build.propsare now byte-identical tomain.Third-party signing
Sigstore 1.0.0swapped its cryptographic backend fromNSec.CryptographytoBouncyCastle.Cryptography, so the transitive third-party binary flowing intoAspire.Clichanged.eng/Signing.propsis updated to match.This matters because a missing entry does not fail quietly: the Arcade SDK would attempt to sign the third-party assembly with the Microsoft certificate and the internal build would fail with SIGN004. This is the same failure #14915 fixed when
Sigstore/Tufwere first introduced, which is whyNSec.Cryptographyhad an entry at all.Worth noting that
BouncyCastle.Cryptographywas already present in the repository's dependency graph, but only via test-only packages (Npgsql, MongoDB, RabbitMQ and others), which are never signed.Aspire.Cliis the first shipping project to take it, which is what makes the signing entry newly necessary.The
NSec.Cryptography.dllentry is removed rather than left in place, having verified that no project resolves NSec any more across all 432 restoredproject.assets.jsonfiles.Validation
Verified that both packages resolve from the internal feed, after purging
1.0.0from the global packages folder and deleting the stale nuget.org entries from the NuGet HTTP cache, so the restore could not pass on a previously downloaded copy:./restore.sh): 0 warnings, 0 errors, noNU190xaudit diagnostics.Aspire.Clibuild: 0 warnings, 0 errors.Aspire.Cli.Tests: 5293 passed, 0 failed, 35 Windows-only skips.eng/Signing.propsevaluated through MSBuild to confirm the manifest resolves as intended:Real cryptographic verification
The existing
SigstoreNpmProvenanceCheckerTestsinject a stub bundle-verification handler via an internal constructor, so they do not exercise real cryptography — passing unit tests alone would not demonstrate that verification still works.To confirm the tightened
1.0.0implementation behaves correctly, a temporary harness (not included in this PR) drove the realSigstoreVerifierthrough the public constructor against the live npm attestation for@playwright/cli, using the production constants fromPlaywrightCliInstaller:PackageDigestMismatchNotes
mainas of 6cee38d. The only conflict was an adjacentMicrosoft.DevTunnels.Connectionsbump, resolved in favour of main's1.3.51.Checklist
Aspire.Cli.Testssuite plus the out-of-band real-cryptography validation described above.<remarks />and<code />elements on your triple slash comments?1.0.0tightens that verification.