Files
distribution/examples/dist.json
agra 09853f8882 P3.2: manifest model + std.json parse + validate
Define the v0 publish manifest, parse it via std.json into a typed
struct, and validate it.

- src/manifest/manifest.sx: typed Manifest { app, version, channel,
  artifacts: List(ManifestArtifact) } + ManifestArtifact { platform,
  path, filename, content_type, metadata }. parse_manifest walks the
  std.json Value tree into the struct, surfacing every malformed/
  missing/wrong-type field as a distinct typed ManifestErr (BadJson,
  WrongType, MissingField, UnknownPlatform, MissingArtifact, Io) — never
  a silent default. Reuses P2.1 parse_platform for the platform id.
  validate_manifest checks each artifact path exists on disk (fs.exists),
  resolved relative to the manifest's directory. Strings are copied into
  the caller's allocator (long-lived-container rule).
- examples/dist.json: representative valid manifest (android_apk + ios).
- examples/fixtures/: tiny stand-in artifact byte files referenced by it.
- tests/manifest_parse.sx: parses dist.json and asserts fields; asserts
  the three failure classes surface distinct typed errors.
2026-06-06 03:46:39 +03:00

19 lines
399 B
JSON

{
"app": "acme-app",
"version": "1.2.3",
"channel": "stable",
"artifacts": [
{
"platform": "android_apk",
"path": "fixtures/acme-1.2.3-android.apk",
"filename": "acme.apk",
"content_type": "application/vnd.android.package-archive",
"metadata": "{\"min_sdk\":21}"
},
{
"platform": "ios",
"path": "fixtures/acme-1.2.3-ios.ipa"
}
]
}