Skip to content

fix(ci): bump iii to v0.11.6-next.1 and refetch annotated release tag#69

Merged
sergiofilhowz merged 2 commits intomainfrom
fix/publish-tag-refetch-and-worker-match
May 4, 2026
Merged

fix(ci): bump iii to v0.11.6-next.1 and refetch annotated release tag#69
sergiofilhowz merged 2 commits intomainfrom
fix/publish-tag-refetch-and-worker-match

Conversation

@guibeira
Copy link
Copy Markdown
Collaborator

@guibeira guibeira commented May 4, 2026

Summary

Three follow-ups from the second publish attempt (failing run on image-resize v0.1.6):

  • _publish-registry.yml — bump iii install to v0.11.6-next.1 + --next. The v0.11.5 pin (added in the CodeRabbit review fixes for feat: collect worker interface (request/response format) on publish #67) didn't surface engine builtin workers in engine::workers::list. fix(ci): pin engine worker publish to the release version iii#1598 traces the same symptom, with the underlying engine fix landing in Include engine workers in worker listings iii#1585 (v0.11.6+). External SDK workers were already returned in v0.11.5, but the bump is required for any worker matching pattern that needs the engine list to be authoritative.
  • release.yml — explicit annotated tag re-fetch. actions/checkout@v4 first fetches +refs/tags/*:refs/tags/*, then re-fetches the target SHA with --no-tags +<SHA>:refs/tags/<tag>, which silently overwrites the annotated tag with a lightweight one and drops the message. After that, git tag -l --format=%(contents) returns empty and Setup falls back to registry-tag=latest even when the create-tag dispatch wrote registry-tag: next into the annotation. Add an explicit git fetch origin +refs/tags/<tag>:refs/tags/<tag> so the annotation survives.
  • build_publish_payload.py — namespace fallback for worker matching. image-resize/src/main.rs:54 (and every other Rust worker on the cargo-run path) calls register_worker(url, opts) with no name, so the engine stores them with id=<UUID> and name=null. Matching name == worker_name always failed on those, raising ValueError: expected exactly one worker matching 'image-resize', found 0. Fall back to matching workers by registered function namespace (image-resizeimage_resize::*); the iii-add path (Node/Python workers with explicit names) still hits the direct match first.

Test plan

  • Re-dispatch create-tag.yml with worker=image-resize, bump=patch, tag=next
  • Setup notice prints registry-tag=next
  • Install iii CLI step logs installed iii v0.11.6-next.1
  • Collect worker interface matches image-resize via namespace fallback (no found 0)
  • POST /publish returns 200 with tag: "next" in the payload

- _publish-registry.yml: pin iii install to v0.11.6-next.1 with --next. The previous v0.11.5 pin (added in #67) didn't surface external workers correctly in `engine::workers::list`, so `collect_worker_interface.py` raised `ValueError: expected exactly one worker matching 'image-resize', found 0` even when the worker was alive and connected. iii-hq/iii#1598 traced the same symptom on engine workers to PR iii-hq/iii#1585 landing in 0.11.6.
- release.yml: actions/checkout@v4 fetches all tags first, then re-fetches the target SHA with `--no-tags +SHA:refs/tags/<tag>`, which silently overwrites the annotated tag with a lightweight one and drops the message. Add an explicit `git fetch origin +refs/tags/<tag>:refs/tags/<tag>` so `git tag -l --format=%(contents)` can still read the `registry-tag:` line and route the publish to next/latest as intended.
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

📝 Walkthrough

Walkthrough

Two independent workflow updates: the publish-registry workflow now installs III CLI version 0.11.6-next.1 with the --next flag, and the release workflow adds an explicit git fetch step to ensure annotated tags are available before message parsing.

Changes

III CLI Version Update

Layer / File(s) Summary
Version & Flag Update
.github/workflows/_publish-registry.yml
III CLI installation version changes from 0.11.5 to 0.11.6-next.1 and installer invocation adds --next flag to use the next release channel.

Annotated Tag Refetch

Layer / File(s) Summary
Tag Fetch Prerequisite
.github/workflows/release.yml
A new "Refetch annotated tag" step is added to the setup job that conditionally fetches the specified git tag from origin before the Python step reads the tag's annotated message.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Possibly related PRs

  • iii-hq/workers#68: Both PRs address annotated tag handling in release workflows, with this PR adding explicit tag fetch while the related PR enables fetch-tags.
  • iii-hq/workers#17: Both PRs modify release.yml setup and tag handling steps.

Poem

🐰 The workflows now hop with grace,
Fetching tags in the right place,
Next-gen CLI takes the stage,
Versions turn a shinier page!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately describes the two main changes: bumping iii CLI to v0.11.6-next.1 and refetching annotated release tags. It directly reflects the primary fixes in both modified workflow files.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/publish-tag-refetch-and-worker-match

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@guibeira guibeira marked this pull request as ready for review May 4, 2026 19:15
The Rust SDK's register_worker(url, opts) doesn't take a worker name, so external Rust workers (image-resize, mcp, proof, iii-lsp) register with id=<UUID> and name=null. Matching by `name == worker_name` always failed on these, even with the worker alive and connected.

Add a fallback that looks for a worker whose registered functions are namespaced under the worker dir's snake_case (image-resize → image_resize::*). If exactly one worker matches, use it. On failure, include the workers list summary in the error so future regressions are debuggable from the log.

Direct name/id match still wins so the iii-add path (Node/Python workers with explicit names) is unaffected.
@sergiofilhowz sergiofilhowz merged commit 090379e into main May 4, 2026
7 checks passed
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.

2 participants