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.
19 lines
399 B
JSON
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"
|
|
}
|
|
]
|
|
}
|