Skip to content

Merge soci and oras plugins into imagetools plugin#619

Open
ianpittwood wants to merge 2 commits into
mainfrom
feat/merge-soci-oras-imagetools
Open

Merge soci and oras plugins into imagetools plugin#619
ianpittwood wants to merge 2 commits into
mainfrom
feat/merge-soci-oras-imagetools

Conversation

@ianpittwood

@ianpittwood ianpittwood commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

This change lays the groundwork to parallelize bakery ci publish calls on a per-target basis by merging soci and oras into imagetools and migrating the heavily CLI entrypoint driven logic to the same plugin. Future parallelized calls will need to be batched together in an order, this eases that future logic.


Summary

The SOCI and ORAS plugins are almost exclusively used together in CI (the bakery ci publish orchestration composes oras index-createsoci-convertoras index-copyverify), so this consolidates them into a single imagetools plugin and moves the publish orchestration out of the CLI layer and into the plugin.

Changes

  • New imagetools plugin (ImageToolsPlugin): execute/results drive SOCI conversion, merge_execute/merge_results drive ORAS merge, and publish holds the multi-phase orchestration migrated from cli/ci.py. oras.py, soci.py, and options.py moved (as renames) from the old plugins.
  • CLI structure (maintained): canonical bakery imagetools merge / bakery imagetools soci-convert, with bakery oras merge / bakery soci convert kept as hidden back-compat aliases. bakery ci publish / bakery ci merge are unchanged thin wrappers delegating to ImageToolsPlugin.publish.
  • pyproject: replaced the oras + soci entry points with a single imagetools entry point.
  • Config compatibility: SociOptions keeps its tool: soci literal, so existing bakery.yaml files in sibling repos parse unchanged.
  • Tests: consolidated under test/plugins/builtin/imagetools/ with updated import paths, patch targets, and the ci publish/merge delegation seams.

Notes

This branch was rebased on the latest main. All of main's recent additions to these files are preserved: the retry logic (RetryPolicy / retry_on_transient) on the ORAS/SOCI workflows, the OrasWaitForSourcesWorkflow GHCR eventual-consistency pre-flight, and the --dev-spec option + wait-for-sources block on ci publish (manually ported into the plugin's publish, since the orchestration moved files).

Verification

  • Full suite green (just test): 1875 passed
  • ruff check / ruff format --check clean
  • CLI smoke tests confirm bakery imagetools merge/soci-convert, the hidden oras/soci aliases, and bakery ci publish --dev-spec

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Jun 16, 2026

Copy link
Copy Markdown

Test Results

1 898 tests  +4   1 898 ✅ +4   7m 42s ⏱️ -21s
    1 suites ±0       0 💤 ±0 
    1 files   ±0       0 ❌ ±0 

Results for commit b48a30e. ± Comparison against base commit c57c4a3.

♻️ This comment has been updated with latest results.

ianpittwood and others added 2 commits June 16, 2026 14:29
The SOCI and ORAS plugins are almost exclusively used together in CI
(the `bakery ci publish` orchestration composes oras index-create →
soci-convert → oras index-copy → verify), so consolidate them into a
single `imagetools` plugin and move the publish orchestration logic out
of the CLI layer and into the plugin.

- New `imagetools` plugin (`ImageToolsPlugin`): `execute`/`results` drive
  SOCI conversion, `merge_execute`/`merge_results` drive ORAS merge, and
  `publish` holds the multi-phase orchestration migrated from
  `cli/ci.py`.
- CLI: canonical `bakery imagetools merge` / `bakery imagetools
  soci-convert`, with `bakery oras merge` / `bakery soci convert`
  preserved as hidden back-compat aliases. `bakery ci publish` /
  `bakery ci merge` are unchanged thin wrappers delegating to
  `ImageToolsPlugin.publish`.
- pyproject: replace the `oras` + `soci` entry points with `imagetools`.
- SociOptions keeps its `tool: soci` literal, so existing bakery.yaml
  files parse unchanged.
- Consolidate tests under test/plugins/builtin/imagetools/ and update
  import paths, patch targets, and the ci publish/merge delegation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@ianpittwood ianpittwood force-pushed the feat/merge-soci-oras-imagetools branch from 333aca4 to b48a30e Compare June 16, 2026 20:30
@ianpittwood ianpittwood marked this pull request as ready for review June 16, 2026 21:17
@ianpittwood ianpittwood requested a review from bschwedler as a code owner June 16, 2026 21:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant