manifest.h (1931B)
1 #ifndef KIT_DIST_MANIFEST_H 2 #define KIT_DIST_MANIFEST_H 3 4 #include <kit/core.h> 5 #include <stddef.h> 6 #include <stdint.h> 7 8 #include "dist.h" 9 10 /* The signed logical package object for distribution. The physical encodings 11 * (.tar.gz and .kpkg) both carry these literal bytes and the same detached 12 * minisign signature. */ 13 14 #define DIST_PACKAGE3_MAGIC "kit-package 3" 15 #define DIST_PACKAGE3_HASH "blake2b-256" 16 #define DIST_PACKAGE3_TREE_FORMAT "kit-tree-v1" 17 #define DIST_PACKAGE3_BLOB_FORMAT "kit-blob-v1" 18 19 typedef struct DistPackageOutput { 20 uint64_t id; 21 char name[DIST_NAME_MAX]; 22 char target[DIST_TRIPLE_MAX]; /* "" = target-independent */ 23 uint8_t tree[DIST_BLAKE2B_LEN]; 24 int is_default; 25 } DistPackageOutput; 26 27 typedef struct DistPackageArtifact { 28 uint64_t output_id; 29 char path[DIST_PATH_MAX + 1]; 30 char kind[DIST_KIND_MAX]; 31 int entry; 32 } DistPackageArtifact; 33 34 typedef struct DistPackageDependency { 35 char name[DIST_NAME_MAX]; 36 char version[DIST_PCONSTRAINT_MAX]; 37 uint8_t package[DIST_BLAKE2B_LEN]; 38 int has_package; 39 uint8_t keyid[DIST_KEYID_LEN]; 40 int has_keyid; 41 } DistPackageDependency; 42 43 typedef struct DistPackageManifest { 44 char name[DIST_NAME_MAX]; 45 char version[DIST_VERSION_MAX]; 46 char description[DIST_DESC_MAX]; /* "" = absent */ 47 DistPackageOutput outputs[DIST_MAX_OUTPUTS]; 48 size_t n_outputs; 49 DistPackageArtifact artifacts[DIST_MAX_ARTIFACTS]; 50 size_t n_artifacts; 51 DistPackageDependency deps[DIST_MAX_DEPS]; 52 size_t n_deps; 53 } DistPackageManifest; 54 55 int dist_manifest_path_valid(const char* path); 56 57 int dist_package_manifest_emit(const DistPackageManifest* m, KitWriter* out); 58 int dist_package_manifest_parse(const uint8_t* data, size_t len, 59 DistPackageManifest* m, char* err, 60 size_t errcap); 61 int dist_package_manifest_validate(const DistPackageManifest* m, char* err, 62 size_t errcap); 63 64 #endif