mirror of
https://github.com/NixOS/nix.git
synced 2025-11-08 19:46:02 +01:00
The old string format is a holdover from the pre JSON days. It is not friendly to users who need to get the information out of it. Also introduce the sort of versioning we have for derivation for this format too.
258 lines
9.9 KiB
YAML
258 lines
9.9 KiB
YAML
"$schema": "http://json-schema.org/draft-04/schema"
|
|
"$id": "https://nix.dev/manual/nix/latest/protocols/json/schema/store-object-info-v2.json"
|
|
title: Store Object Info v2
|
|
description: |
|
|
Information about a [store object](@docroot@/store/store-object.md).
|
|
|
|
This schema describes the JSON representation of store object metadata as returned by commands like [`nix path-info --json`](@docroot@/command-ref/new-cli/nix3-path-info.md).
|
|
|
|
> **Warning**
|
|
>
|
|
> This JSON format is currently
|
|
> [**experimental**](@docroot@/development/experimental-features.md#xp-feature-nix-command)
|
|
> and subject to change.
|
|
|
|
### Field Categories
|
|
|
|
Store object information can come in a few different variations.
|
|
|
|
Firstly, "impure" fields, which contain non-intrinsic information about the store object, may or may not be included.
|
|
|
|
Second, binary cache stores have extra non-intrinsic infomation about the store objects they contain.
|
|
|
|
Thirdly, [`nix path-info --json --closure-size`](@docroot@/command-ref/new-cli/nix3-path-info.html#opt-closure-size) can compute some extra information about not just the single store object in question, but the store object and its [closure](@docroot@/glossary.md#gloss-closure).
|
|
|
|
The impure and NAR fields are grouped into separate variants below.
|
|
See their descriptions for additional information.
|
|
The closure fields however as just included as optional fields, to avoid a combinatorial explosion of variants.
|
|
|
|
oneOf:
|
|
- $ref: "#/$defs/base"
|
|
|
|
- $ref: "#/$defs/impure"
|
|
|
|
- $ref: "#/$defs/narInfo"
|
|
|
|
$defs:
|
|
base:
|
|
title: Store Object Info
|
|
description: |
|
|
Basic store object metadata containing only intrinsic properties.
|
|
This is the minimal set of fields that describe what a store object contains.
|
|
type: object
|
|
required:
|
|
- version
|
|
- narHash
|
|
- narSize
|
|
- references
|
|
- ca
|
|
properties:
|
|
version:
|
|
type: integer
|
|
const: 2
|
|
title: Format version (must be 2)
|
|
description: |
|
|
Must be `2`.
|
|
This is a guard that allows us to continue evolving this format.
|
|
Here is the rough version history:
|
|
|
|
- Version 0: `.narinfo` line-oriented format
|
|
|
|
- Version 1: Original JSON format, with ugly `"r:sha256"` inherited from `.narinfo` format.
|
|
|
|
- Version 2: Use structured JSON type for `ca`
|
|
|
|
path:
|
|
type: string
|
|
title: Store Path
|
|
description: |
|
|
[Store path](@docroot@/store/store-path.md) to the given store object.
|
|
|
|
Note: This field may not be present in all contexts, such as when the path is used as the key and the the store object info the value in map.
|
|
|
|
narHash:
|
|
type: string
|
|
title: NAR Hash
|
|
description: |
|
|
Hash of the [file system object](@docroot@/store/file-system-object.md) part of the store object when serialized as a [Nix Archive](@docroot@/store/file-system-object/content-address.md#serial-nix-archive).
|
|
|
|
narSize:
|
|
type: integer
|
|
minimum: 0
|
|
title: NAR Size
|
|
description: |
|
|
Size of the [file system object](@docroot@/store/file-system-object.md) part of the store object when serialized as a [Nix Archive](@docroot@/store/file-system-object/content-address.md#serial-nix-archive).
|
|
|
|
references:
|
|
type: array
|
|
title: References
|
|
description: |
|
|
An array of [store paths](@docroot@/store/store-path.md), possibly including this one.
|
|
items:
|
|
type: string
|
|
|
|
ca:
|
|
oneOf:
|
|
- type: "null"
|
|
const: null
|
|
- "$ref": "./content-address-v1.yaml"
|
|
title: Content Address
|
|
description: |
|
|
If the store object is [content-addressed](@docroot@/store/store-object/content-address.md),
|
|
this is the content address of this store object's file system object, used to compute its store path.
|
|
Otherwise (i.e. if it is [input-addressed](@docroot@/glossary.md#gloss-input-addressed-store-object)), this is `null`.
|
|
additionalProperties: false
|
|
|
|
impure:
|
|
title: Store Object Info with Impure Fields
|
|
description: |
|
|
Store object metadata including impure fields that are not *intrinsic* properties.
|
|
In other words, the same store object in different stores could have different values for these impure fields.
|
|
type: object
|
|
required:
|
|
- version
|
|
- narHash
|
|
- narSize
|
|
- references
|
|
- ca
|
|
# impure
|
|
- deriver
|
|
- registrationTime
|
|
- ultimate
|
|
- signatures
|
|
properties:
|
|
version: { $ref: "#/$defs/base/properties/version" }
|
|
path: { $ref: "#/$defs/base/properties/path" }
|
|
narHash: { $ref: "#/$defs/base/properties/narHash" }
|
|
narSize: { $ref: "#/$defs/base/properties/narSize" }
|
|
references: { $ref: "#/$defs/base/properties/references" }
|
|
ca: { $ref: "#/$defs/base/properties/ca" }
|
|
deriver:
|
|
type: ["string", "null"]
|
|
title: Deriver
|
|
description: |
|
|
If known, the path to the [store derivation](@docroot@/glossary.md#gloss-store-derivation) from which this store object was produced.
|
|
Otherwise `null`.
|
|
|
|
> This is an "impure" field that may not be included in certain contexts.
|
|
|
|
registrationTime:
|
|
type: ["integer", "null"]
|
|
title: Registration Time
|
|
description: |
|
|
If known, when this derivation was added to the store (Unix timestamp).
|
|
Otherwise `null`.
|
|
|
|
> This is an "impure" field that may not be included in certain contexts.
|
|
|
|
ultimate:
|
|
type: boolean
|
|
title: Ultimate
|
|
description: |
|
|
Whether this store object is trusted because we built it ourselves, rather than substituted a build product from elsewhere.
|
|
|
|
> This is an "impure" field that may not be included in certain contexts.
|
|
|
|
signatures:
|
|
type: array
|
|
title: Signatures
|
|
description: |
|
|
Signatures claiming that this store object is what it claims to be.
|
|
Not relevant for [content-addressed](@docroot@/store/store-object/content-address.md) store objects,
|
|
but useful for [input-addressed](@docroot@/glossary.md#gloss-input-addressed-store-object) store objects.
|
|
|
|
> This is an "impure" field that may not be included in certain contexts.
|
|
items:
|
|
type: string
|
|
|
|
# Computed closure fields
|
|
closureSize:
|
|
type: integer
|
|
minimum: 0
|
|
title: Closure Size
|
|
description: |
|
|
The total size of this store object and every other object in its [closure](@docroot@/glossary.md#gloss-closure).
|
|
|
|
> This field is not stored at all, but computed by traversing the other fields across all the store objects in a closure.
|
|
additionalProperties: false
|
|
|
|
narInfo:
|
|
title: Store Object Info with Impure fields and NAR Info
|
|
description: |
|
|
The store object info in the "binary cache" family of Nix store type contain extra information pertaining to *downloads* of the store object in question.
|
|
(This store info is called "NAR info", since the downloads take the form of [Nix Archives](@docroot@/store/file-system-object/content-address.md#serial-nix-archive, and the metadata is served in a file with a `.narinfo` extension.)
|
|
|
|
This download information, being specific to how the store object happens to be stored and transferred, is also considered to be non-intrinsic / impure.
|
|
type: object
|
|
required:
|
|
- version
|
|
- narHash
|
|
- narSize
|
|
- references
|
|
- ca
|
|
# impure
|
|
- deriver
|
|
- registrationTime
|
|
- ultimate
|
|
- signatures
|
|
# nar
|
|
- url
|
|
- compression
|
|
- downloadHash
|
|
- downloadSize
|
|
properties:
|
|
version: { $ref: "#/$defs/base/properties/version" }
|
|
path: { $ref: "#/$defs/base/properties/path" }
|
|
narHash: { $ref: "#/$defs/base/properties/narHash" }
|
|
narSize: { $ref: "#/$defs/base/properties/narSize" }
|
|
references: { $ref: "#/$defs/base/properties/references" }
|
|
ca: { $ref: "#/$defs/base/properties/ca" }
|
|
deriver: { $ref: "#/$defs/impure/properties/deriver" }
|
|
registrationTime: { $ref: "#/$defs/impure/properties/registrationTime" }
|
|
ultimate: { $ref: "#/$defs/impure/properties/ultimate" }
|
|
signatures: { $ref: "#/$defs/impure/properties/signatures" }
|
|
closureSize: { $ref: "#/$defs/impure/properties/closureSize" }
|
|
url:
|
|
type: string
|
|
title: URL
|
|
description: |
|
|
Where to download a compressed archive of the file system objects of this store object.
|
|
|
|
> This is an impure "`.narinfo`" field that may not be included in certain contexts.
|
|
|
|
compression:
|
|
type: string
|
|
title: Compression
|
|
description: |
|
|
The compression format that the archive is in.
|
|
|
|
> This is an impure "`.narinfo`" field that may not be included in certain contexts.
|
|
|
|
downloadHash:
|
|
type: string
|
|
title: Download Hash
|
|
description: |
|
|
A digest for the compressed archive itself, as opposed to the data contained within.
|
|
|
|
> This is an impure "`.narinfo`" field that may not be included in certain contexts.
|
|
|
|
downloadSize:
|
|
type: integer
|
|
minimum: 0
|
|
title: Download Size
|
|
description: |
|
|
The size of the compressed archive itself.
|
|
|
|
> This is an impure "`.narinfo`" field that may not be included in certain contexts.
|
|
|
|
closureDownloadSize:
|
|
type: integer
|
|
minimum: 0
|
|
title: Closure Download Size
|
|
description: |
|
|
The total size of the compressed archive itself for this object, and the compressed archive of every object in this object's [closure](@docroot@/glossary.md#gloss-closure).
|
|
|
|
> This is an impure "`.narinfo`" field that may not be included in certain contexts.
|
|
|
|
> This field is not stored at all, but computed by traversing the other fields across all the store objects in a closure.
|
|
additionalProperties: false
|