feat: add SOCI indexing plugin and bakery ci publish orchestrator#555
Draft
ianpittwood wants to merge 28 commits into
Draft
feat: add SOCI indexing plugin and bakery ci publish orchestrator#555ianpittwood wants to merge 28 commits into
ianpittwood wants to merge 28 commits into
Conversation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Walk candidate_namespaces in order, retrying ctr pull on the canonical "image not found" error and short-circuiting on any other failure. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When `standalone=True`, `SociConvertWorkflow.run()` skips the `ctr image pull` and `soci push` steps and only invokes `soci convert --standalone`; the caller is responsible for pushing the resulting OCI layout via ORAS. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the stub execute() with the full orchestration loop: resolves SociOptions per target, skips disabled targets with a skipped=True artifact, and runs SociConvertWorkflow for enabled ones. Introduces the module-level get_soci_options_for_target helper (merges variant-level over image-version-parent-level options). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replaces the stub register_cli() in SociPlugin with a full Typer command: bakery soci convert <metadata-file...>. Ingests build-metadata JSON files, resolves them into ImageTargets, builds a source_refs map from each target's latest build metadata, and invokes plugin.execute() + plugin.results(). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add OrasIndexCreateResult and OrasIndexCreateWorkflow alongside the existing OrasMergeWorkflow as the first composable primitive for the upcoming refactor (Tasks 13-16). OrasMergeWorkflow is unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Add OrasIndexCopyWorkflow and OrasIndexCopyResult alongside OrasIndexCreateWorkflow. The copy workflow fans out a temp-registry source ref to all configured destinations, grouping tags by destination repo (same logic as OrasMergeWorkflow.run step 2). OrasMergeWorkflow is unchanged. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace the inline create/copy/delete logic in OrasMergeWorkflow.run() with calls to OrasIndexCreateWorkflow, OrasIndexCopyWorkflow, and OrasIndexCleanupWorkflow, while preserving the existing public API. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds `bakery ci publish` which composes oras index-create → optional soci-convert → oras index-copy → cleanup phases. The existing `merge` command is untouched; Task 18 will make it a thin alias for publish. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Task 18: Convert the existing bakery ci merge command to a thin delegating alias for bakery ci publish with --no-enable-soci. This consolidates the merge/publish orchestration logic while preserving backward compatibility. Changes: - Replace merge function body with delegation to publish(enable_soci=False) - Keep merge signature unchanged for back-compat (same params as before) - Update publish to emit logging that merge tests expect - Update merge feature test to pass --temp-registry (required by publish) - Update merge test fixture to mock OrasIndexCreateWorkflow, etc. - Add new unit test verifying merge calls publish with enable_soci=False All 158 existing tests pass; new test validates the delegation. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Adds two regression tests asserting that when a user explicitly sets a field to its default value (scalar default False, list default empty), self still wins over `other` in `update()`. These guard the `model_fields_set`-based check introduced when the default_factory bug was fixed. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
db0ba57 to
e779f7d
Compare
Test Results1 623 tests 1 623 ✅ 7m 56s ⏱️ Results for commit 87e9953. ♻️ This comment has been updated with latest results. |
…MERGE) Temporary commit to make end-to-end CI testing of SOCI work. The new setup-soci composite action only exists on this branch, so any sibling-repo workflow that calls bakery-build-native.yml@feature/soci-images needs the internal setup-soci@main reference to resolve against this branch instead. Updates the other setup-* references for consistency so the test run exercises exactly the bakery + setup actions from this branch. Drop this commit (and the parallel commits in product repos) once testing is complete and before merging the PR.
The CI runner reports a fixed terminal width of 80 columns and emits rich-styled help output, which causes typer/rich to wrap long option names like \`--enable-soci/--no-enable-soci\` across rows with embedded ANSI escapes. That defeats substring assertions like \`"--enable-soci" in result.stdout\` even though the option is present. Pass \`COLUMNS=200\`, \`TERM=dumb\`, and \`NO_COLOR=1\` via the CliRunner's \`env\` argument so the rendered help is wide enough to keep flag names on a single line and unstyled enough that no escape codes get interleaved with the option text. Applied to all four help- output assertions in \`test_ci_publish.py\` and \`test_cli.py\`. Fixes the \`test_publish_command_flags_present\` failure on PR #555 CI.
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
socibuiltin plugin that wrapssoci convert/soci pushand an in-modulectr image pullhelper to materialize images in containerd. The plugin probes containerd namespaces (default→moby) and supports both non-standalone (default) and--standalonemodes viaSociOptionsinbakery.yaml.OrasMergeWorkflowinto three composable primitives (OrasIndexCreateWorkflow,OrasIndexCopyWorkflow,OrasIndexCleanupWorkflow) and rebuilds the existing merge workflow on top of them to preserve back-compat withbakery oras merge.bakery ci publish, which composes oras index-create → optional SOCI convert (gated by--enable-soci) → oras index-copy → cleanup.bakery ci mergeis preserved as a thin alias that delegates with--no-enable-soci.setup-socicomposite action and wires anenable-sociworkflow input +Publishstep intobakery-build-native.yml.bakery-build.yml(QEMU) is explicitly deferred with an in-file note since it has no merge phase to interleave SOCI into.The implementation follows the spec at
docs/superpowers/specs/2026-05-18-soci-indexing-design.md(local-only) and the task-by-task plan atdocs/superpowers/plans/2026-05-18-soci-indexing.md(local-only).Test plan
🤖 Generated with Claude Code