mirror of
				https://gitea.com/Lydanne/buildx.git
				synced 2025-10-31 16:13:45 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Protocol Buffer
		
	
	
	
	
	
| syntax = "proto3";
 | |
| 
 | |
| package proto;
 | |
| 
 | |
| // Manifest specifies the entries in a container bundle, keyed and sorted by
 | |
| // path.
 | |
| message Manifest {
 | |
|     repeated Resource resource = 1;
 | |
| }
 | |
| 
 | |
| message Resource {
 | |
|     // Path specifies the path from the bundle root. If more than one
 | |
|     // path is present, the entry may represent a hardlink, rather than using
 | |
|     // a link target. The path format is operating system specific.
 | |
|     repeated string path = 1;
 | |
| 
 | |
|     // NOTE(stevvooe): Need to define clear precedence for user/group/uid/gid precedence.
 | |
| 
 | |
|     // Uid specifies the user id for the resource.
 | |
|     int64 uid = 2;
 | |
| 
 | |
|     // Gid specifies the group id for the resource.
 | |
|     int64 gid = 3;
 | |
| 
 | |
|     // user and group are not currently used but their field numbers have been
 | |
|     // reserved for future use. As such, they are marked as deprecated.
 | |
|     string user = 4 [deprecated=true]; // "deprecated" stands for "reserved" here
 | |
|     string group = 5 [deprecated=true]; // "deprecated" stands for "reserved" here
 | |
| 
 | |
|     // Mode defines the file mode and permissions. We've used the same
 | |
|     // bit-packing from Go's os package,
 | |
|     // http://golang.org/pkg/os/#FileMode, since they've done the work of
 | |
|     // creating a cross-platform layout.
 | |
|     uint32 mode = 6;
 | |
| 
 | |
|     // NOTE(stevvooe): Beyond here, we start defining type specific fields.
 | |
| 
 | |
|     // Size specifies the size in bytes of the resource. This is only valid
 | |
|     // for regular files.
 | |
|     uint64 size = 7;
 | |
| 
 | |
|     // Digest specifies the content digest of the target file. Only valid for
 | |
|     // regular files. The strings are formatted in OCI style, i.e. <alg>:<encoded>.
 | |
|     // For detailed information about the format, please refer to OCI Image Spec:
 | |
|     // https://github.com/opencontainers/image-spec/blob/master/descriptor.md#digests-and-verification
 | |
|     // The digests are sorted in lexical order and implementations may choose
 | |
|     // which algorithms they prefer.
 | |
|     repeated string digest = 8;
 | |
| 
 | |
|     // Target defines the target of a hard or soft link. Absolute links start
 | |
|     // with a slash and specify the resource relative to the bundle root.
 | |
|     // Relative links do not start with a slash and are relative to the
 | |
|     // resource path.
 | |
|     string target = 9;
 | |
| 
 | |
|     // Major specifies the major device number for character and block devices.
 | |
|     uint64 major = 10;
 | |
| 
 | |
|     // Minor specifies the minor device number for character and block devices.
 | |
|     uint64 minor = 11;
 | |
| 
 | |
|     // Xattr provides storage for extended attributes for the target resource.
 | |
|     repeated XAttr xattr = 12;
 | |
| 
 | |
|     // Ads stores one or more alternate data streams for the target resource.
 | |
|     repeated ADSEntry ads = 13;
 | |
| 
 | |
| }
 | |
| 
 | |
| // XAttr encodes extended attributes for a resource.
 | |
| message XAttr {
 | |
|     // Name specifies the attribute name.
 | |
|     string name = 1;
 | |
| 
 | |
|     // Data specifies the associated data for the attribute.
 | |
|     bytes data = 2;
 | |
| }
 | |
| 
 | |
| // ADSEntry encodes information for a Windows Alternate Data Stream.
 | |
| message ADSEntry {
 | |
|     // Name specifices the stream name.
 | |
|     string name = 1;
 | |
| 
 | |
|     // Data specifies the stream data.
 | |
|     // See also the description about the digest below.
 | |
|     bytes data = 2;
 | |
| 
 | |
|     // Digest is a CAS representation of the stream data.
 | |
|     //
 | |
|     // At least one of data or digest MUST be specified, and either one of them
 | |
|     // SHOULD be specified.
 | |
|     //
 | |
|     // How to access the actual data using the digest is implementation-specific,
 | |
|     // and implementations can choose not to implement digest.
 | |
|     // So, digest SHOULD be used only when the stream data is large.
 | |
|     string digest = 3;
 | |
| }
 | 
