Skip to content

feat: verify GitHub release source attestations - #2721

Open
wolfv wants to merge 3 commits into
prefix-dev:mainfrom
wolfv:feat/github-release-source-attestations
Open

feat: verify GitHub release source attestations#2721
wolfv wants to merge 3 commits into
prefix-dev:mainfrom
wolfv:feat/github-release-source-attestations

Conversation

@wolfv

@wolfv wolfv commented Aug 4, 2026

Copy link
Copy Markdown
Member

Summary

  • discover immutable GitHub release attestations through the repository attestations API, filtered by the downloaded asset's SHA-256 and the release predicate
  • verify release bundles using GitHub's Sigstore trust root, timestamp evidence, release-service certificate identity, and signed pkg:github/owner/repo@version subject
  • reject dynamically generated GitHub source archives, whose bytes are not covered by the release attestation
  • document the uploaded source.tar.gz workflow and add a runnable uv recipe example

Motivation

GitHub release attestation download IDs are unstable and cannot be derived from a source URL. The repository attestations API avoids scraping those URLs. GitHub's generated "Source code" archives are only represented by the release commit SHA-1 and are not cryptographically bound to the downloaded archive bytes, while uploaded release assets are represented by SHA-256 and can be verified safely.

Testing

  • cargo test -p rattler_build_source_cache --features sigstore,rustls
  • cargo check -p rattler_build_core --features sigstore,rustls
  • cargo test -p rattler_build_recipe --test source_parsing_test test_parse_uv_attestation_example
  • end-to-end ignored network test against astral-sh/uv 0.12.1 source.tar.gz

@wolfv
wolfv force-pushed the feat/github-release-source-attestations branch from f67179b to e08c835 Compare August 5, 2026 09:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant