Skip to content

cli: Add tag-aware upgrade operations#2094

Open
gursewak1997 wants to merge 1 commit intobootc-dev:mainfrom
gursewak1997:add-tag-upgrade
Open

cli: Add tag-aware upgrade operations#2094
gursewak1997 wants to merge 1 commit intobootc-dev:mainfrom
gursewak1997:add-tag-upgrade

Conversation

@gursewak1997
Copy link
Contributor

Implement bootc upgrade --tag and --list-tags to simplify tag-based image version management for customers who version images using tags.

This adds:

  • bootc upgrade --tag : Upgrade to different tag of current image
  • bootc upgrade --list-tags: List available tags from registry
  • Automatic composition with --check for verification

The --tag option derives the target image by replacing the tag portion of the current booted image reference. Only works when booted from registry transport images.

Organizations version container images with tags (:latest, :dev, :test, :prod) and this allows them to upgrade between versions without retyping full registry paths or using switch (which is semantically about changing images, not versions).

Assisted-by: Claude Sonnet 4.5

@github-actions github-actions bot added the area/documentation Updates to the documentation label Mar 24, 2026
@bootc-bot bootc-bot bot requested a review from jmarrero March 24, 2026 22:57
Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces new bootc upgrade CLI options: --tag to specify a target image tag for an upgrade, and --list-tags to display available tags for the currently booted image's repository. It includes new helper functions derive_image_with_tag and list_tags_for_current_image to support this functionality, along with corresponding unit tests and documentation updates. A review comment suggests refactoring duplicated logic within the upgrade function for retrieving the current image and handling cases where it's not defined, as well as making error messages more specific.

anyhow::bail!("Failed to list tags: {}", stderr);
}

let stdout = String::from_utf8_lossy(&output.stdout);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For things like this it would be a lot cleaner to use skopeo inspect which outputs JSON. I think it's almost always wrong to use from_utf8_lossy.

Perhaps this might be best done with upgrade --check? We could also cache the latest available tags there.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've switched to skopeo inspect with JSON parsing (parsing the RepoTags field) instead of from_utf8_lossy. Also integrated it with upgrade --check as an optional --show-tags flag.
Caching the tags during check is a good idea. I can add that if you think it's worth the added complexity.

@gursewak1997 gursewak1997 force-pushed the add-tag-upgrade branch 2 times, most recently from 9b73097 to 4c5ca28 Compare March 25, 2026 19:15
Implements tag-based upgrades allowing users to switch between tags
of the current image without typing the full registry path.

Adds two new options to bootc upgrade:
- --tag <TAG>: Upgrade to a different tag of the current image
- --show-tags: Show available tags (requires --check)

The --tag option works with all transport types (registry,
containers-storage, oci, etc.) by using the proper OCI Reference
API for registry images and string replacement for others.

The --show-tags option integrates with --check as an optional
flag, using skopeo inspect to parse the RepoTags JSON field.
This keeps the default check operation fast while providing tag
discovery when needed.

Includes integration test using containers-storage transport to
verify full tag-switching workflow without registry dependency.

Signed-off-by: gursewak1997 <gursmangat@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area/documentation Updates to the documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants