-
Notifications
You must be signed in to change notification settings - Fork 160
Various updates for --progress-fd
#961
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
82ea2c5
deploy: Avoid cloning progress
cgwalters 38e59c5
cli: Rename --json-fd to --progress-fd
cgwalters 70133cc
cli: Make --progress-fd hide=true for now
cgwalters c2a7d60
docs: Describe `--progress-fd`, add rendered JSON schema
antheas 63d1199
progress: Emit a Start message with API version, drop from fields
cgwalters File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,32 @@ | ||
|
|
||
| # Interactive progress with `--progress-fd` | ||
|
|
||
| This is an experimental feature; tracking issue: <https://github.com/containers/bootc/issues/1016> | ||
|
|
||
| While the `bootc status` tooling allows a client to discover the state | ||
| of the system, during interactive changes such as `bootc upgrade` | ||
| or `bootc switch` it is possible to monitor the status of downloads | ||
| or other operations at a fine-grained level with `-progress-fd`. | ||
|
|
||
| The format of data output over `--progress-fd` is [JSON Lines](https://jsonlines.org) | ||
| which is a series of JSON objects separated by newlines (the intermediate | ||
| JSON content is guaranteed not to contain a literal newline). | ||
|
|
||
| You can find the JSON schema describing this version here: | ||
| [progress-v0.schema.json](progress-v0.schema.json). | ||
|
|
||
| Deploying a new image with either switch or upgrade consists | ||
| of three stages: `pulling`, `importing`, and `staging`. The `pulling` step | ||
| downloads the image from the registry, offering per-layer and progress in | ||
| each message. The `importing` step imports the image into storage and consists | ||
| of a single step. Finally, `staging` runs a variety of staging | ||
| tasks. Currently, they are staging the image to disk, pulling bound images, | ||
| and removing old images. | ||
|
|
||
| Note that new stages or fields may be added at any time. | ||
|
|
||
| Importing and staging are affected by disk speed and the total image size. Pulling | ||
| is affected by network speed and how many layers invalidate between pulls. | ||
| Therefore, a large image with a good caching strategy will have longer | ||
| importing and staging times, and a small bespoke container image will have | ||
| negligible importing and staging times. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,239 @@ | ||
| { | ||
| "$schema": "http://json-schema.org/draft-07/schema#", | ||
| "title": "Event", | ||
| "description": "An event emitted as JSON.", | ||
| "oneOf": [ | ||
| { | ||
| "type": "object", | ||
| "required": [ | ||
| "type", | ||
| "version" | ||
| ], | ||
| "properties": { | ||
| "type": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "Start" | ||
| ] | ||
| }, | ||
| "version": { | ||
| "description": "The semantic version of the progress protocol.", | ||
| "type": "string" | ||
| } | ||
| } | ||
| }, | ||
| { | ||
| "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 | ||
| }, | ||
| "bytes_cached": { | ||
| "description": "The number of bytes fetched by a previous run.", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "bytes_total": { | ||
| "description": "Total number of bytes. If zero, then this should be considered \"unspecified\".", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.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.", | ||
| "type": "string" | ||
| }, | ||
| "steps": { | ||
| "description": "The initial position of progress.", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "steps_cached": { | ||
| "description": "The number of steps fetched by a previous run.", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "steps_total": { | ||
| "description": "The total number of steps (e.g. container image layers, RPMs)", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "subtasks": { | ||
| "description": "The currently running subtasks.", | ||
| "type": "array", | ||
| "items": { | ||
| "$ref": "#/definitions/SubTaskBytes" | ||
| } | ||
| }, | ||
| "task": { | ||
| "description": "A machine readable type (e.g., pulling) for the task (used for i18n and UI customization).", | ||
| "type": "string" | ||
| }, | ||
| "type": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "ProgressBytes" | ||
| ] | ||
| } | ||
| } | ||
| }, | ||
| { | ||
| "description": "An incremental update with discrete steps", | ||
| "type": "object", | ||
| "required": [ | ||
| "description", | ||
| "id", | ||
| "steps", | ||
| "steps_cached", | ||
| "steps_total", | ||
| "subtasks", | ||
| "task", | ||
| "type" | ||
| ], | ||
| "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.", | ||
| "type": "string" | ||
| }, | ||
| "steps": { | ||
| "description": "The initial position of progress.", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "steps_cached": { | ||
| "description": "The number of steps fetched by a previous run.", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "steps_total": { | ||
| "description": "The total number of steps (e.g. container image layers, RPMs)", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "subtasks": { | ||
| "description": "The currently running subtasks.", | ||
| "type": "array", | ||
| "items": { | ||
| "$ref": "#/definitions/SubTaskStep" | ||
| } | ||
| }, | ||
| "task": { | ||
| "description": "A machine readable type (e.g., pulling) for the task (used for i18n and UI customization).", | ||
| "type": "string" | ||
| }, | ||
| "type": { | ||
| "type": "string", | ||
| "enum": [ | ||
| "ProgressSteps" | ||
| ] | ||
| } | ||
| } | ||
| } | ||
| ], | ||
| "definitions": { | ||
| "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.", | ||
| "type": "object", | ||
| "required": [ | ||
| "bytes", | ||
| "bytesCached", | ||
| "bytesTotal", | ||
| "description", | ||
| "id", | ||
| "subtask" | ||
| ], | ||
| "properties": { | ||
| "bytes": { | ||
| "description": "Updated byte level progress", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "bytesCached": { | ||
| "description": "The number of bytes fetched by a previous run (e.g., zstd_chunked).", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "bytesTotal": { | ||
| "description": "Total number of bytes", | ||
| "type": "integer", | ||
| "format": "uint64", | ||
| "minimum": 0.0 | ||
| }, | ||
| "description": { | ||
| "description": "A human readable description of the task if i18n is not available. (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).", | ||
| "type": "string" | ||
| }, | ||
| "subtask": { | ||
| "description": "A machine readable type for the task (used for i18n). (e.g., \"ostree_chunk\", \"ostree_derived\")", | ||
| "type": "string" | ||
| } | ||
| } | ||
| }, | ||
| "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:\")", | ||
| "type": "string" | ||
| }, | ||
| "id": { | ||
| "description": "A human and machine readable identifier for the task (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\")", | ||
| "type": "string" | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing a
-in--progress-fd