diff --git a/Cargo.lock b/Cargo.lock index 74584512b..ae2b741b9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -232,7 +232,7 @@ dependencies = [ [[package]] name = "bootc-lib" -version = "1.6.0" +version = "1.7.0" dependencies = [ "anstream", "anstyle", diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index 29209b7fa..5dac61959 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -15,7 +15,7 @@ platforms = ["*-unknown-linux-gnu"] [dependencies] # Internal crates -bootc-lib = { version = "1.6", path = "../lib" } +bootc-lib = { version = "1.7", path = "../lib" } bootc-utils = { package = "bootc-internal-utils", path = "../utils", version = "0.0.0" } # Workspace dependencies diff --git a/crates/lib/Cargo.toml b/crates/lib/Cargo.toml index 76f8d0a57..81bee1097 100644 --- a/crates/lib/Cargo.toml +++ b/crates/lib/Cargo.toml @@ -6,7 +6,7 @@ name = "bootc-lib" repository = "https://github.com/bootc-dev/bootc" # The intention is we'll follow semver here, even though this # project isn't actually published as a crate. -version = "1.6.0" +version = "1.7.0" # In general we try to keep this pinned to what's in the latest RHEL9. # However right now, we bumped to 1.82 as that's what composefs-rs uses. rust-version = "1.82.0" diff --git a/docs/src/host-v1.schema.json b/docs/src/host-v1.schema.json index 1dd4dd069..909ba00a8 100644 --- a/docs/src/host-v1.schema.json +++ b/docs/src/host-v1.schema.json @@ -1,12 +1,8 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Host", "description": "The core host definition", "type": "object", - "required": [ - "apiVersion", - "kind" - ], "properties": { "apiVersion": { "type": "string" @@ -15,55 +11,43 @@ "type": "string" }, "metadata": { - "default": {}, - "allOf": [ - { - "$ref": "#/definitions/ObjectMeta" - } - ] + "$ref": "#/$defs/ObjectMeta", + "default": {} }, "spec": { "description": "The spec", + "$ref": "#/$defs/HostSpec", "default": { "bootOrder": "default", "image": null - }, - "allOf": [ - { - "$ref": "#/definitions/HostSpec" - } - ] + } }, "status": { "description": "The status", + "$ref": "#/$defs/HostStatus", "default": { "booted": null, "rollback": null, "rollbackQueued": false, "staged": null, "type": null - }, - "allOf": [ - { - "$ref": "#/definitions/HostStatus" - } - ] + } } }, - "definitions": { + "required": [ + "apiVersion", + "kind" + ], + "$defs": { "BootEntry": { "description": "A bootable entry", "type": "object", - "required": [ - "incompatible", - "pinned" - ], "properties": { "cachedUpdate": { "description": "The last fetched cached update metadata", "anyOf": [ { - "$ref": "#/definitions/ImageStatus" + "$ref": "#/$defs/ImageStatus" }, { "type": "null" @@ -74,7 +58,7 @@ "description": "The image reference", "anyOf": [ { - "$ref": "#/definitions/ImageStatus" + "$ref": "#/$defs/ImageStatus" }, { "type": "null" @@ -89,7 +73,7 @@ "description": "If this boot entry is ostree based, the corresponding state", "anyOf": [ { - "$ref": "#/definitions/BootEntryOstree" + "$ref": "#/$defs/BootEntryOstree" }, { "type": "null" @@ -100,28 +84,32 @@ "description": "Whether this entry will be subject to garbage collection", "type": "boolean" }, + "softRebootCapable": { + "description": "This is true if (relative to the booted system) this is a possible target for a soft reboot", + "type": "boolean", + "default": false + }, "store": { "description": "The container storage backend", - "default": null, "anyOf": [ { - "$ref": "#/definitions/Store" + "$ref": "#/$defs/Store" }, { "type": "null" } - ] + ], + "default": null } - } + }, + "required": [ + "incompatible", + "pinned" + ] }, "BootEntryOstree": { "description": "A bootable entry", "type": "object", - "required": [ - "checksum", - "deploySerial", - "stateroot" - ], "properties": { "checksum": { "description": "The ostree commit checksum", @@ -131,13 +119,18 @@ "description": "The deployment serial", "type": "integer", "format": "uint32", - "minimum": 0.0 + "minimum": 0 }, "stateroot": { "description": "The name of the storage for /etc and /var content", "type": "string" } - } + }, + "required": [ + "stateroot", + "checksum", + "deploySerial" + ] }, "BootOrder": { "description": "Configuration for system boot ordering.", @@ -145,16 +138,12 @@ { "description": "The staged or booted deployment will be booted next", "type": "string", - "enum": [ - "default" - ] + "const": "default" }, { "description": "The rollback deployment will be booted next", "type": "string", - "enum": [ - "rollback" - ] + "const": "rollback" } ] }, @@ -164,18 +153,14 @@ "properties": { "bootOrder": { "description": "If set, and there is a rollback deployment, it will be set for the next boot.", - "default": "default", - "allOf": [ - { - "$ref": "#/definitions/BootOrder" - } - ] + "$ref": "#/$defs/BootOrder", + "default": "default" }, "image": { "description": "The host image", "anyOf": [ { - "$ref": "#/definitions/ImageReference" + "$ref": "#/$defs/ImageReference" }, { "type": "null" @@ -192,7 +177,7 @@ "description": "The booted image; this will be unset if the host is not bootc compatible.", "anyOf": [ { - "$ref": "#/definitions/BootEntry" + "$ref": "#/$defs/BootEntry" }, { "type": "null" @@ -203,14 +188,14 @@ "description": "Other deployments (i.e. pinned)", "type": "array", "items": { - "$ref": "#/definitions/BootEntry" + "$ref": "#/$defs/BootEntry" } }, "rollback": { "description": "The previously booted image", "anyOf": [ { - "$ref": "#/definitions/BootEntry" + "$ref": "#/$defs/BootEntry" }, { "type": "null" @@ -219,14 +204,14 @@ }, "rollbackQueued": { "description": "Set to true if the rollback entry is queued for the next boot.", - "default": false, - "type": "boolean" + "type": "boolean", + "default": false }, "staged": { "description": "The staged image for the next boot", "anyOf": [ { - "$ref": "#/definitions/BootEntry" + "$ref": "#/$defs/BootEntry" }, { "type": "null" @@ -237,7 +222,7 @@ "description": "The detected type of system", "anyOf": [ { - "$ref": "#/definitions/HostType" + "$ref": "#/$defs/HostType" }, { "type": "null" @@ -247,24 +232,18 @@ } }, "HostType": { - "description": "The detected type of running system. Note that this is not exhaustive and new variants may be added in the future.", + "description": "The detected type of running system. Note that this is not exhaustive\nand new variants may be added in the future.", "oneOf": [ { "description": "The current system is deployed in a bootc compatible way.", "type": "string", - "enum": [ - "bootcHost" - ] + "const": "bootcHost" } ] }, "ImageReference": { "description": "A container image reference with attached transport and signature verification", "type": "object", - "required": [ - "image", - "transport" - ], "properties": { "image": { "description": "The container image reference", @@ -274,7 +253,7 @@ "description": "Signature verification type", "anyOf": [ { - "$ref": "#/definitions/ImageSignature" + "$ref": "#/$defs/ImageSignature" }, { "type": "null" @@ -285,7 +264,11 @@ "description": "The container image transport", "type": "string" } - } + }, + "required": [ + "image", + "transport" + ] }, "ImageSignature": { "description": "An image signature", @@ -293,40 +276,31 @@ { "description": "Fetches will use the named ostree remote for signature verification of the ostree commit.", "type": "object", - "required": [ - "ostreeRemote" - ], "properties": { "ostreeRemote": { "type": "string" } }, - "additionalProperties": false + "additionalProperties": false, + "required": [ + "ostreeRemote" + ] }, { "description": "Fetches will defer to the `containers-policy.json`, but we make a best effort to reject `default: insecureAcceptAnything` policy.", "type": "string", - "enum": [ - "containerPolicy" - ] + "const": "containerPolicy" }, { "description": "No signature verification will be performed", "type": "string", - "enum": [ - "insecure" - ] + "const": "insecure" } ] }, "ImageStatus": { "description": "The status of the booted image", "type": "object", - "required": [ - "architecture", - "image", - "imageDigest" - ], "properties": { "architecture": { "description": "The hardware architecture of this image", @@ -334,11 +308,7 @@ }, "image": { "description": "The currently booted image", - "allOf": [ - { - "$ref": "#/definitions/ImageReference" - } - ] + "$ref": "#/$defs/ImageReference" }, "imageDigest": { "description": "The digest of the fetched image (e.g. sha256:a0...);", @@ -359,7 +329,12 @@ "null" ] } - } + }, + "required": [ + "image", + "imageDigest", + "architecture" + ] }, "ObjectMeta": { "type": "object", @@ -402,9 +377,7 @@ { "description": "Use the ostree-container storage backend.", "type": "string", - "enum": [ - "ostreeContainer" - ] + "const": "ostreeContainer" } ] } diff --git a/docs/src/man/bootc-container-lint.md b/docs/src/man/bootc-container-lint.md index 98c027953..3ba46c839 100644 --- a/docs/src/man/bootc-container-lint.md +++ b/docs/src/man/bootc-container-lint.md @@ -19,7 +19,7 @@ part of a build process; it will error if any problems are detected. # OPTIONS -**\--rootfs**=*ROOTFS* \[default: /\] +**\--rootfs** *\* \[default: /\] : Operate on the provided rootfs @@ -34,7 +34,7 @@ part of a build process; it will error if any problems are detected. reasonably human friendly. However, there is no commitment to maintaining this exact format; do not parse it via code or scripts -**\--skip**=*SKIP* +**\--skip** *\* : Skip checking the targeted lints, by name. Use \`\--list\` to discover the set of available lints. @@ -53,4 +53,4 @@ part of a build process; it will error if any problems are detected. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-container.md b/docs/src/man/bootc-container.md index 898385f0f..9c4e6b167 100644 --- a/docs/src/man/bootc-container.md +++ b/docs/src/man/bootc-container.md @@ -30,4 +30,4 @@ bootc-container-help(8) # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-edit.md b/docs/src/man/bootc-edit.md index f12f25854..719e2950f 100644 --- a/docs/src/man/bootc-edit.md +++ b/docs/src/man/bootc-edit.md @@ -22,7 +22,7 @@ Only changes to the \`spec\` section are honored. # OPTIONS -**-f**, **\--filename**=*FILENAME* +**-f**, **\--filename** *\* : Use filename to edit system specification @@ -36,4 +36,4 @@ Only changes to the \`spec\` section are honored. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install-ensure-completion.md b/docs/src/man/bootc-install-ensure-completion.md index 35c24ce5a..d5f1a2d54 100644 --- a/docs/src/man/bootc-install-ensure-completion.md +++ b/docs/src/man/bootc-install-ensure-completion.md @@ -27,4 +27,4 @@ your code is using \`bootc install to-filesystem\` from the start. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install-finalize.md b/docs/src/man/bootc-install-finalize.md index 92602f4d5..f467c7eaf 100644 --- a/docs/src/man/bootc-install-finalize.md +++ b/docs/src/man/bootc-install-finalize.md @@ -24,4 +24,4 @@ to-filesystem\` # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install-print-configuration.md b/docs/src/man/bootc-install-print-configuration.md index b166da718..dc13667ff 100644 --- a/docs/src/man/bootc-install-print-configuration.md +++ b/docs/src/man/bootc-install-print-configuration.md @@ -27,4 +27,4 @@ string-valued filesystem name suitable for passing to \`mkfs.\$type\`. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install-to-disk.md b/docs/src/man/bootc-install-to-disk.md index 81eb22315..225e22290 100644 --- a/docs/src/man/bootc-install-to-disk.md +++ b/docs/src/man/bootc-install-to-disk.md @@ -32,7 +32,7 @@ more complex such as RAID, LVM, LUKS etc. : Automatically wipe all existing data on device -**\--block-setup**=*BLOCK_SETUP* +**\--block-setup** *\* : Target root block device setup. @@ -42,21 +42,21 @@ more complex such as RAID, LVM, LUKS etc. \ \[*possible values: *direct, tpm2-luks\] -**\--filesystem**=*FILESYSTEM* +**\--filesystem** *\* : Target root filesystem type\ \ \[*possible values: *xfs, ext4, btrfs\] -**\--root-size**=*ROOT_SIZE* +**\--root-size** *\* : Size of the root partition (default specifier: M). Allowed specifiers: M (mebibytes), G (gibibytes), T (tebibytes). By default, all remaining space on the disk will be used. -**\--source-imgref**=*SOURCE_IMGREF* +**\--source-imgref** *\* : Install the system from an explicitly given source. @@ -67,12 +67,12 @@ more complex such as RAID, LVM, LUKS etc. behaviour explained in the previous paragraph. See skopeo(1) for accepted formats. -**\--target-transport**=*TARGET_TRANSPORT* \[default: registry\] +**\--target-transport** *\* \[default: registry\] : The transport; e.g. oci, oci-archive, containers-storage. Defaults to \`registry\` -**\--target-imgref**=*TARGET_IMGREF* +**\--target-imgref** *\* : Specify the image to fetch for subsequent updates @@ -102,13 +102,13 @@ more complex such as RAID, LVM, LUKS etc. This is currently necessary to install \*from\* a system with SELinux disabled but where the target does have SELinux enabled. -**\--karg**=*KARG* +**\--karg** *\* : Add a kernel argument. This option can be provided multiple times. Example: \--karg=nosmt \--karg=console=ttyS0,114800n8 -**\--root-ssh-authorized-keys**=*ROOT_SSH_AUTHORIZED_KEYS* +**\--root-ssh-authorized-keys** *\* : The path to an \`authorized_keys\` that will be injected into the \`root\` account. @@ -128,7 +128,7 @@ more complex such as RAID, LVM, LUKS etc. \- All bootloader types will be installed - Changes to the system firmware will be skipped -**\--bound-images**=*BOUND_IMAGES* \[default: stored\] +**\--bound-images** *\* \[default: stored\] : How should logically bound images be retrieved\ @@ -141,7 +141,7 @@ more complex such as RAID, LVM, LUKS etc. - pull: Bound images will be pulled and stored directly in the target\'s bootc container storage -**\--stateroot**=*STATEROOT* +**\--stateroot** *\* : The stateroot name to use. Defaults to \`default\` @@ -160,4 +160,4 @@ more complex such as RAID, LVM, LUKS etc. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install-to-existing-root.md b/docs/src/man/bootc-install-to-existing-root.md index 94712e026..e42168ad5 100644 --- a/docs/src/man/bootc-install-to-existing-root.md +++ b/docs/src/man/bootc-install-to-existing-root.md @@ -26,7 +26,7 @@ to be cleaned up if desired when rebooted into the new root. # OPTIONS -**\--replace**=*REPLACE* \[default: alongside\] +**\--replace** *\* \[default: alongside\] : Configure how existing data is treated\ @@ -42,7 +42,7 @@ to be cleaned up if desired when rebooted into the new root. However, the running system (and all files) will remain in place until reboot -**\--source-imgref**=*SOURCE_IMGREF* +**\--source-imgref** *\* : Install the system from an explicitly given source. @@ -53,12 +53,12 @@ to be cleaned up if desired when rebooted into the new root. behaviour explained in the previous paragraph. See skopeo(1) for accepted formats. -**\--target-transport**=*TARGET_TRANSPORT* \[default: registry\] +**\--target-transport** *\* \[default: registry\] : The transport; e.g. oci, oci-archive, containers-storage. Defaults to \`registry\` -**\--target-imgref**=*TARGET_IMGREF* +**\--target-imgref** *\* : Specify the image to fetch for subsequent updates @@ -88,13 +88,13 @@ to be cleaned up if desired when rebooted into the new root. This is currently necessary to install \*from\* a system with SELinux disabled but where the target does have SELinux enabled. -**\--karg**=*KARG* +**\--karg** *\* : Add a kernel argument. This option can be provided multiple times. Example: \--karg=nosmt \--karg=console=ttyS0,114800n8 -**\--root-ssh-authorized-keys**=*ROOT_SSH_AUTHORIZED_KEYS* +**\--root-ssh-authorized-keys** *\* : The path to an \`authorized_keys\` that will be injected into the \`root\` account. @@ -114,7 +114,7 @@ to be cleaned up if desired when rebooted into the new root. \- All bootloader types will be installed - Changes to the system firmware will be skipped -**\--bound-images**=*BOUND_IMAGES* \[default: stored\] +**\--bound-images** *\* \[default: stored\] : How should logically bound images be retrieved\ @@ -127,7 +127,7 @@ to be cleaned up if desired when rebooted into the new root. - pull: Bound images will be pulled and stored directly in the target\'s bootc container storage -**\--stateroot**=*STATEROOT* +**\--stateroot** *\* : The stateroot name to use. Defaults to \`default\` @@ -152,4 +152,4 @@ to be cleaned up if desired when rebooted into the new root. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install-to-filesystem.md b/docs/src/man/bootc-install-to-filesystem.md index d60ab9c82..21ac3cc96 100644 --- a/docs/src/man/bootc-install-to-filesystem.md +++ b/docs/src/man/bootc-install-to-filesystem.md @@ -27,21 +27,21 @@ is currently expected to be empty by default. # OPTIONS -**\--root-mount-spec**=*ROOT_MOUNT_SPEC* +**\--root-mount-spec** *\* : Source device specification for the root filesystem. For example, UUID=2e9f4241-229b-4202-8429-62d2302382e1 If not provided, the UUID of the target filesystem will be used. -**\--boot-mount-spec**=*BOOT_MOUNT_SPEC* +**\--boot-mount-spec** *\* : Mount specification for the /boot filesystem. This is optional. If \`/boot\` is detected as a mounted partition, then its UUID will be used. -**\--replace**=*REPLACE* +**\--replace** *\* : Initialize the system in-place; at the moment, only one mode for this is implemented. In the future, it may also be supported to set @@ -71,7 +71,7 @@ is currently expected to be empty by default. readonly. This option skips those operations. It is then the responsibility of the invoking code to perform those operations -**\--source-imgref**=*SOURCE_IMGREF* +**\--source-imgref** *\* : Install the system from an explicitly given source. @@ -82,12 +82,12 @@ is currently expected to be empty by default. behaviour explained in the previous paragraph. See skopeo(1) for accepted formats. -**\--target-transport**=*TARGET_TRANSPORT* \[default: registry\] +**\--target-transport** *\* \[default: registry\] : The transport; e.g. oci, oci-archive, containers-storage. Defaults to \`registry\` -**\--target-imgref**=*TARGET_IMGREF* +**\--target-imgref** *\* : Specify the image to fetch for subsequent updates @@ -117,13 +117,13 @@ is currently expected to be empty by default. This is currently necessary to install \*from\* a system with SELinux disabled but where the target does have SELinux enabled. -**\--karg**=*KARG* +**\--karg** *\* : Add a kernel argument. This option can be provided multiple times. Example: \--karg=nosmt \--karg=console=ttyS0,114800n8 -**\--root-ssh-authorized-keys**=*ROOT_SSH_AUTHORIZED_KEYS* +**\--root-ssh-authorized-keys** *\* : The path to an \`authorized_keys\` that will be injected into the \`root\` account. @@ -143,7 +143,7 @@ is currently expected to be empty by default. \- All bootloader types will be installed - Changes to the system firmware will be skipped -**\--bound-images**=*BOUND_IMAGES* \[default: stored\] +**\--bound-images** *\* \[default: stored\] : How should logically bound images be retrieved\ @@ -156,7 +156,7 @@ is currently expected to be empty by default. - pull: Bound images will be pulled and stored directly in the target\'s bootc container storage -**\--stateroot**=*STATEROOT* +**\--stateroot** *\* : The stateroot name to use. Defaults to \`default\` @@ -173,4 +173,4 @@ is currently expected to be empty by default. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-install.md b/docs/src/man/bootc-install.md index 9ce04fea9..a0db07e9c 100644 --- a/docs/src/man/bootc-install.md +++ b/docs/src/man/bootc-install.md @@ -71,4 +71,4 @@ bootc-install-help(8) # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-rollback.md b/docs/src/man/bootc-rollback.md index de6dad184..ec9f38d2b 100644 --- a/docs/src/man/bootc-rollback.md +++ b/docs/src/man/bootc-rollback.md @@ -45,7 +45,7 @@ rollback invocation. Note on Rollbacks and the \`/etc\` Directory: When you perform a rollback (e.g., with \`bootc rollback\`), any changes -made to files in the \`/etc\` directory won't carry over to the +made to files in the \`/etc\` directory won\'t carry over to the rolled-back deployment. The \`/etc\` files will revert to their state from that previous deployment instead. @@ -55,4 +55,4 @@ happen when new deployments are created. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-status.md b/docs/src/man/bootc-status.md index 7b66fcd95..a884f535b 100644 --- a/docs/src/man/bootc-status.md +++ b/docs/src/man/bootc-status.md @@ -29,7 +29,7 @@ not \`null\`. # OPTIONS -**\--format**=*FORMAT* +**\--format** *\* : The output format\ @@ -42,7 +42,7 @@ not \`null\`. - json: Output in JSON format -**\--format-version**=*FORMAT_VERSION* +**\--format-version** *\* : The desired format version. There is currently one supported version, which is exposed as both \`0\` and \`1\`. Pass this option @@ -63,4 +63,4 @@ not \`null\`. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-switch.md b/docs/src/man/bootc-switch.md index 1f3ef68ed..957fc07d2 100644 --- a/docs/src/man/bootc-switch.md +++ b/docs/src/man/bootc-switch.md @@ -38,7 +38,7 @@ updates via container image tags; for example, will detect the case where no kernel changes are queued, and perform a userspace-only restart. -**\--transport**=*TRANSPORT* \[default: registry\] +**\--transport** *\* \[default: registry\] : The transport; e.g. oci, oci-archive, containers-storage. Defaults to \`registry\` @@ -65,4 +65,4 @@ updates via container image tags; for example, # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-upgrade.md b/docs/src/man/bootc-upgrade.md index 9836da58a..3fe5c5818 100644 --- a/docs/src/man/bootc-upgrade.md +++ b/docs/src/man/bootc-upgrade.md @@ -53,4 +53,4 @@ the update in addition. # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc-usr-overlay.md b/docs/src/man/bootc-usr-overlay.md index 03f49d8b5..96f3a8819 100644 --- a/docs/src/man/bootc-usr-overlay.md +++ b/docs/src/man/bootc-usr-overlay.md @@ -39,4 +39,4 @@ unmount\". # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/man/bootc.md b/docs/src/man/bootc.md index 1c4780efd..01583bd1b 100644 --- a/docs/src/man/bootc.md +++ b/docs/src/man/bootc.md @@ -72,4 +72,4 @@ bootc-help(8) # VERSION -v1.6.0 +v1.7.0 diff --git a/docs/src/progress-v0.schema.json b/docs/src/progress-v0.schema.json index d37473cf6..956f3ef16 100644 --- a/docs/src/progress-v0.schema.json +++ b/docs/src/progress-v0.schema.json @@ -1,239 +1,233 @@ { - "$schema": "http://json-schema.org/draft-07/schema#", + "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Event", "description": "An event emitted as JSON.", "oneOf": [ { "type": "object", - "required": [ - "type", - "version" - ], "properties": { "type": { "type": "string", - "enum": [ - "Start" - ] + "const": "Start" }, "version": { "description": "The semantic version of the progress protocol.", "type": "string" } - } + }, + "required": [ + "type", + "version" + ] }, { "description": "An incremental update to a container image layer download", "type": "object", - "required": [ - "bytes", - "bytes_cached", - "bytes_total", - "description", - "id", - "steps", - "steps_cached", - "steps_total", - "subtasks", - "task", - "type" - ], "properties": { "bytes": { "description": "The number of bytes already fetched.", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, - "bytes_cached": { + "bytesCached": { "description": "The number of bytes fetched by a previous run.", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, - "bytes_total": { + "bytesTotal": { "description": "Total number of bytes. If zero, then this should be considered \"unspecified\".", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, "description": { "description": "A human readable description of the task if i18n is not available.", "type": "string" }, "id": { - "description": "A human and machine readable unique identifier for the task (e.g., the image name). For tasks that only happen once, it can be set to the same value as task.", + "description": "A human and machine readable unique identifier for the task\n(e.g., the image name). For tasks that only happen once,\nit can be set to the same value as task.", "type": "string" }, "steps": { "description": "The initial position of progress.", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, - "steps_cached": { + "stepsCached": { "description": "The number of steps fetched by a previous run.", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, - "steps_total": { + "stepsTotal": { "description": "The total number of steps (e.g. container image layers, RPMs)", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, "subtasks": { "description": "The currently running subtasks.", "type": "array", "items": { - "$ref": "#/definitions/SubTaskBytes" + "$ref": "#/$defs/SubTaskBytes" } }, "task": { - "description": "A machine readable type (e.g., pulling) for the task (used for i18n and UI customization).", + "description": "A machine readable type (e.g., pulling) for the task (used for i18n\nand UI customization).", "type": "string" }, "type": { "type": "string", - "enum": [ - "ProgressBytes" - ] + "const": "ProgressBytes" } - } - }, - { - "description": "An incremental update with discrete steps", - "type": "object", + }, "required": [ + "type", + "task", "description", "id", + "bytesCached", + "bytes", + "bytesTotal", + "stepsCached", "steps", - "steps_cached", - "steps_total", - "subtasks", - "task", - "type" - ], + "stepsTotal", + "subtasks" + ] + }, + { + "description": "An incremental update with discrete steps", + "type": "object", "properties": { "description": { "description": "A human readable description of the task if i18n is not available.", "type": "string" }, "id": { - "description": "A human and machine readable unique identifier for the task (e.g., the image name). For tasks that only happen once, it can be set to the same value as task.", + "description": "A human and machine readable unique identifier for the task\n(e.g., the image name). For tasks that only happen once,\nit can be set to the same value as task.", "type": "string" }, "steps": { "description": "The initial position of progress.", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, - "steps_cached": { + "stepsCached": { "description": "The number of steps fetched by a previous run.", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, - "steps_total": { + "stepsTotal": { "description": "The total number of steps (e.g. container image layers, RPMs)", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, "subtasks": { "description": "The currently running subtasks.", "type": "array", "items": { - "$ref": "#/definitions/SubTaskStep" + "$ref": "#/$defs/SubTaskStep" } }, "task": { - "description": "A machine readable type (e.g., pulling) for the task (used for i18n and UI customization).", + "description": "A machine readable type (e.g., pulling) for the task (used for i18n\nand UI customization).", "type": "string" }, "type": { "type": "string", - "enum": [ - "ProgressSteps" - ] + "const": "ProgressSteps" } - } + }, + "required": [ + "type", + "task", + "description", + "id", + "stepsCached", + "steps", + "stepsTotal", + "subtasks" + ] } ], - "definitions": { + "$defs": { "SubTaskBytes": { - "description": "An incremental update to e.g. a container image layer download. The first time a given \"subtask\" name is seen, a new progress bar should be created. If bytes == bytes_total, then the subtask is considered complete.", + "description": "An incremental update to e.g. a container image layer download.\nThe first time a given \"subtask\" name is seen, a new progress bar should be created.\nIf bytes == bytes_total, then the subtask is considered complete.", "type": "object", - "required": [ - "bytes", - "bytesCached", - "bytesTotal", - "description", - "id", - "subtask" - ], "properties": { "bytes": { "description": "Updated byte level progress", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, "bytesCached": { "description": "The number of bytes fetched by a previous run (e.g., zstd_chunked).", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, "bytesTotal": { "description": "Total number of bytes", "type": "integer", "format": "uint64", - "minimum": 0.0 + "minimum": 0 }, "description": { - "description": "A human readable description of the task if i18n is not available. (e.g., \"OSTree Chunk:\", \"Derived Layer:\")", + "description": "A human readable description of the task if i18n is not available.\n(e.g., \"OSTree Chunk:\", \"Derived Layer:\")", "type": "string" }, "id": { - "description": "A human and machine readable identifier for the task (e.g., ostree chunk/layer hash).", + "description": "A human and machine readable identifier for the task\n(e.g., ostree chunk/layer hash).", "type": "string" }, "subtask": { - "description": "A machine readable type for the task (used for i18n). (e.g., \"ostree_chunk\", \"ostree_derived\")", + "description": "A machine readable type for the task (used for i18n).\n(e.g., \"ostree_chunk\", \"ostree_derived\")", "type": "string" } - } + }, + "required": [ + "subtask", + "description", + "id", + "bytesCached", + "bytes", + "bytesTotal" + ] }, "SubTaskStep": { "description": "Marks the beginning and end of a dictrete step", "type": "object", - "required": [ - "completed", - "description", - "id", - "subtask" - ], "properties": { "completed": { "description": "Starts as false when beginning to execute and turns true when completed.", "type": "boolean" }, "description": { - "description": "A human readable description of the task if i18n is not available. (e.g., \"OSTree Chunk:\", \"Derived Layer:\")", + "description": "A human readable description of the task if i18n is not available.\n(e.g., \"OSTree Chunk:\", \"Derived Layer:\")", "type": "string" }, "id": { - "description": "A human and machine readable identifier for the task (e.g., ostree chunk/layer hash).", + "description": "A human and machine readable identifier for the task\n(e.g., ostree chunk/layer hash).", "type": "string" }, "subtask": { - "description": "A machine readable type for the task (used for i18n). (e.g., \"ostree_chunk\", \"ostree_derived\")", + "description": "A machine readable type for the task (used for i18n).\n(e.g., \"ostree_chunk\", \"ostree_derived\")", "type": "string" } - } + }, + "required": [ + "subtask", + "description", + "id", + "completed" + ] } } } \ No newline at end of file