Skip to content

release: enforce immutable published release assets #333

Description

@codeforester

Goal

Ensure a published base-cli release cannot have its artifact bytes silently replaced after publication.

Background

The package workflow currently uploads release assets with gh release upload --clobber. That can make a rerun convenient, but it conflicts with the immutable published-release policy used by base-demo and with the provenance model required for reproducible ecosystem releases. An existing release should either be proven identical or require a new version.

Scope

  • Remove unconditional --clobber behavior for published release assets.
  • Fail closed when an existing asset has different bytes, filename identity, or checksum.
  • Allow an idempotent rerun only when the existing asset is byte-for-byte identical and the release/tag identity matches.
  • Require a new patch version for corrections to published assets.
  • Update release documentation, workflow tests, and the cross-repository release policy.
  • Preserve trusted publishing, SBOM, checksum, and attestation behavior.

Acceptance Criteria

  • A release job cannot overwrite a different existing asset.
  • A rerun with identical assets succeeds without changing release history.
  • A mismatched asset produces a clear failure with the expected and observed checksums.
  • A tag, version, release, asset, SBOM, and provenance identity are checked together.
  • Negative fixtures cover changed bytes, changed filenames, changed tag target, and rerun behavior.
  • Release documentation states the correction path as a new patch release.

Validation

  • Run the package workflow contract and release metadata tests.
  • Rehearse first-publication, identical-rerun, and mismatched-rerun cases in a temporary release fixture.
  • Verify the resulting behavior matches base-demo and the ecosystem release BOM policy.
  • git diff --check.

Non-Goals

  • Do not replace trusted PyPI publishing or artifact attestations.
  • Do not block a safe pre-publication build retry that has not created a public release.
  • Do not alter already-published historical assets.

Project Fields

  • Status: Backlog
  • Priority: P1
  • Size: M
  • Area: Packaging
  • Initiative: v1.0 Readiness

Ownership

Related: #271, #307, and basefoundry/base#2115.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

ciContinuous integration, tests, automation, or release workflows

Type

No type

Projects

  • Status
    Backlog

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions