Skip to content

Conversation

@LNSD
Copy link
Contributor

@LNSD LNSD commented Nov 25, 2025

Generate release manifests from GitHub releases to enable per-component installation, allowing users to install specific components instead of complete releases.

  • Create ampup-gen-release-manifest binary for manifest generation
  • Add shared manifest types to ampup library
  • Parse GitHub release assets into component-target structure
  • Integrate manifest generation into CI pipeline

Note

Enables per-component installs by generating and publishing a distribution manifest derived from GitHub release assets.

  • New ampup-gen-release-manifest binary parses asset names into component/target entries, validates digests, and outputs manifest.json
  • Adds ampup::manifest types (Manifest, Component, Target, AssetName parsing with OS/ABI/arch normalization) and docs at crates/bin/ampup/docs/manifest.md
  • CI: new release-manifest job runs the generator for tagged releases and uploads release/manifest.json to the GitHub Release
  • Workspace updates: adds new crate to Cargo.toml, updates ampup deps, and includes the crate in monitoring AMP_CRATES

Written by Cursor Bugbot for commit 047bd41. This will update automatically on new commits. Configure here.

@LNSD LNSD requested a review from fubhy November 25, 2025 00:43
@LNSD LNSD self-assigned this Nov 25, 2025
@LNSD LNSD requested a review from leoyvens November 25, 2025 00:44
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR is being reviewed by Cursor Bugbot

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.

@LNSD LNSD force-pushed the feat-ampup-gen-release-manifest branch from 3537048 to e9d6547 Compare November 26, 2025 00:00
@LNSD LNSD force-pushed the feat-ampup-gen-release-manifest branch 2 times, most recently from 7caf649 to f2c03ba Compare December 17, 2025 09:17
/// Note: GitHub API provides this field automatically.
/// If missing, asset cannot be included in manifest.
#[serde(default)]
pub digest: Option<String>,
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: GitHub API doesn't provide digest field for assets

The Asset struct expects a digest field from the GitHub Releases API, but the standard GitHub API response for release assets does not include this field. The existing github.rs in the same codebase also doesn't expect it. Since digest is Option<String> with #[serde(default)], every asset will have digest: None, causing generate_manifest to fail with MissingDigest error for every asset. The manifest generator will never successfully produce a manifest.

Additional Locations (1)

Fix in Cursor Fix in Web

@fubhy
Copy link
Contributor

fubhy commented Dec 17, 2025

@LNSD related: Should we move the ampup crate into the ampup repo? The release cadence of that is somewhat unrealted to this once we seperate out the metadata & component handling?

@LNSD
Copy link
Contributor Author

LNSD commented Dec 17, 2025

@LNSD related: Should we move the ampup crate into the ampup repo? The release cadence of that is somewhat unrealted to this once we seperate out the metadata & component handling?

Makes sense to me 👍🏼

@LNSD LNSD force-pushed the feat-ampup-gen-release-manifest branch 8 times, most recently from d14759f to b229776 Compare December 19, 2025 08:36
// Validate digest field is present
let hash = asset.digest.as_ref().ok_or_else(|| Error::MissingDigest {
asset_name: asset.name.clone(),
})?;
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bug: No validation for empty digest string value

The digest validation only checks for None using as_ref().ok_or_else(), but doesn't validate that the digest is non-empty or follows the expected sha256:... format. If GitHub ever returns an empty string for the digest field, the manifest would be generated successfully with an empty hash value, causing integrity verification to fail when users try to install components.

Fix in Cursor Fix in Web

@LNSD LNSD force-pushed the feat-ampup-gen-release-manifest branch from b229776 to 0e5a950 Compare December 22, 2025 11:46
Generate release manifests from GitHub releases to enable per-component installation, allowing users to install specific components instead of complete releases.

- Create `ampup-gen-release-manifest` binary for manifest generation
- Add shared manifest types to `ampup` library
- Parse GitHub release assets into component-target structure
- Integrate manifest generation into CI pipeline

Signed-off-by: Lorenzo Delgado <lorenzo@edgeandnode.com>
@LNSD LNSD force-pushed the feat-ampup-gen-release-manifest branch from 0e5a950 to 047bd41 Compare December 23, 2025 14:36
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the final PR Bugbot will review for you during this billing cycle

Your free Bugbot reviews will reset on January 21

Details

Your team is on the Bugbot Free tier. On this plan, Bugbot will review limited PRs each billing cycle for each member of your team.

To receive Bugbot reviews on all of your PRs, visit the Cursor dashboard to activate Pro and start your 14-day free trial.


_ => Err(ParseAssetOsError(s.to_string())),
}
}
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bare windows OS not supported despite documentation claiming it

The documentation states that the standard 3-part asset naming format supports bare windows as an OS value (shown in the regex (linux|darwin|windows)). However, the AssetOs::from_str implementation only handles bare linux and darwin, not bare windows. Assets named like ampd-windows-x86_64 would silently fail to parse and be skipped as "non-binary assets" rather than being processed. Only the explicit 4-part formats windows-msvc-* and windows-gnu-* work correctly.

Additional Locations (1)

Fix in Cursor Fix in Web

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.

3 participants