Skip to content

feat(release): operational periphery - resolve, record, healthcheck, cleanup-drafts - #337

Open
JulianRuiseco wants to merge 1 commit into
jrr/release-commandsfrom
jrr/release-commands-ops
Open

feat(release): operational periphery - resolve, record, healthcheck, cleanup-drafts#337
JulianRuiseco wants to merge 1 commit into
jrr/release-commandsfrom
jrr/release-commands-ops

Conversation

@JulianRuiseco

Copy link
Copy Markdown
Contributor

Objective

Stacks on #336 (the release pipeline core). The operational periphery:
nothing here gates a release shipping; these are the commands operators
and clients use around one.

Solution

Command Purpose
release resolve The client download-resolution contract in executable form: pointer lookup with no fallback, schema_version gates that refuse rather than guess, download with digest + detached-signature verification against the published key
release record Best-effort fsl_sling recorder by reference (never touches sling's channel routes); fixes the missing /api prefix
release healthcheck Credential-less verification of the published surface; deserializing into the contract types IS the schema validation; full report before failing
release cleanup-drafts Dry-run-first deletion of the legacy asset-free draft backlog

Also restores the ops-only shared helpers the core trimmed
(http::request/get_to_file/head_present, keyring::fingerprints).

Testing

  • cargo test: 324 passed (the core's 311 plus 13 here).
  • resolve proven end to end against a throwaway MinIO: promote a version,
    resolve --download, digest and GPG verification both green; the
    unpromoted-channel case fails with the exact contract wording.
  • healthcheck verified against both a healthy seeded store and a tampered
    artifact (names both digests).

Merge after #336; fsl_libs#4230's healthcheck workflow and the publish
job's record step invoke these commands, so the release that sets the
fsl_libs pin should include both PRs.

…cleanup-drafts

Stacks on the pipeline core. Nothing here gates a release shipping; these
are the commands operators and clients use around one:

- resolve: the client download-resolution contract in executable form -
  pointer lookup with no fallback, schema_version gates that refuse
  rather than guess, streamed download with incremental sha256, detached
  signature verified against the published key whose fingerprint must
  match the manifest's. Uses the shared keyring; proven end to end
  against a throwaway MinIO (digest and GPG verification both green, and
  the no-pointer case fails with the exact contract wording).
- record: best-effort fsl_sling recorder by reference (token mint,
  find-or-create release, per-artifact by-reference registration, draft
  flag cleared). Normalises the /api prefix the pre-fslabscli
  implementation missed; never touches sling's channel routes, whose
  alpha/beta/prod set membership cannot express a per-target pointer.
- healthcheck: credential-less verification of the published surface;
  deserializing into the contract types IS the schema validation;
  digest-verifies every pointed artifact; builds the full report before
  failing so one run names every problem.
- cleanup-drafts: dry-run by default over the legacy asset-free draft
  backlog; deletes only with --delete after review.

Also restores the ops-only shared helpers the core trimmed:
http::request/get_to_file/head_present and keyring::fingerprints.

cargo test: 324 passed. clippy: zero diagnostics.
@fslabs-bot

fslabs-bot Bot commented Aug 18, 2026

Copy link
Copy Markdown

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please ask for approval from julianruiseco. For more information see the Kubernetes Code Review Process.

The full list of commands accepted by this bot can be found here.

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@fslabs-bot fslabs-bot Bot added the size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files. label Aug 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size/XXL Denotes a PR that changes 1000+ lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant