Skip to content

fix(ci): keep catalog updates from releases that land together - #15

Merged
Quick104 merged 1 commit into
mainfrom
fix/catalog-update-concurrent-releases
Oct 2, 2026
Merged

Quick104 merged 1 commit into
mainfrom
fix/catalog-update-concurrent-releases

Conversation

@Quick104

@Quick104 Quick104 commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

Problem

Related issue: N/A
Validation tasks: none

When several plugins release at about the same time, the catalog keeps only some of them. The Trakt, Simkl, and MDBList v0.2.0 releases fired three plugin_release_published dispatches within a minute, and only Trakt reached manifest.json:

  • Every run shared one concurrency group. GitHub keeps a single pending run per group and cancels any older pending run, so Simkl's run was cancelled when MDBList's queued behind it.
  • A repository_dispatch run checks out main as it was when the release fired. MDBList's run started after Trakt's had pushed, edited the stale manifest.json, and then failed git pull --rebase with a conflict on the neighboring Trakt entry.

Approach

  • The concurrency group is now per plugin repository. A newer release of the same plugin still supersedes an older pending one. Different plugins no longer cancel each other.
  • The update and commit steps are now one loop. Each attempt fetches the current main, rebuilds the entry with cmd/update-catalog, commits, and pushes. A rejected push retries on the new main (up to five attempts) instead of rebasing a conflicting edit. An unchanged catalog still exits without a commit.

Validation

  • I ran the loop locally against a bare copy of this repository from two shallow clones at the same time, ingesting the real silo-plugin-watchprovider-mdblist and -simkl v0.2.0 releases. The Simkl run lost the first push, retried on top of the MDBList commit, and succeeded. The resulting catalog lists Floppy, MDBList, Simkl, and Trakt.
  • After merge, MDBList and Simkl get dispatched together through this workflow, both to add the two missing entries and to exercise the race on GitHub.

Risks

Low. Ingestion still runs the same cmd/update-catalog. The legacy update-manifest.yml keeps its own shared group.

Checklist

  • I read and can explain the complete diff.
  • This pull request addresses one concern.

AI Disclosure

  • Harness: Claude Code (in T3 Code)
  • Tool(s): Claude Code subagents
  • Model(s): claude-opus-5-5
  • Involvement: Fully AI-generated; the maintainer set scope and product decisions. Human review of the diff is pending.
  • Adversarial review: n/a (CI workflow change; exercised with a local concurrent run).

🤖 Generated with Claude Code

Note

Fix catalog-update workflow to handle releases landing together

  • Changes the concurrency group in update-catalog.yml from one global group to a per-plugin-repository group, so updates for different plugins no longer cancel each other
  • Merges catalog generation, commit, and push into a single step. Before each attempt, the job fetches and hard-resets to the current remote main, regenerates the entry, and exits successfully when no manifest change is needed
  • Retries failed pushes up to five times with increasing delays; fails the job only after all attempts fail

Macroscope summarized f4aa5c0.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@silo-kody

silo-kody Bot commented Oct 2, 2026 •

Copy link
Copy Markdown

Silo Kody — review complete

Review finished. Check the inline comments for findings and verify each suggestion against the code and tests.

Reviewing changes in Silo
  • Include the related issue, expected behavior, and validation steps in the PR description.
  • For API changes, describe the effect on Apple and Android clients and Jellyfin compatibility.
  • For plugin changes, identify the affected SDK contract, plugin, and catalog entry.
  • Follow this repository's AGENTS.md and CONTRIBUTING.md.
  • Request another review with @kody start-review in a PR comment.
  • React with 👍 or 👎 to give feedback on individual suggestions.
Review settings
Review Options

The following review options are enabled or disabled:

Options Enabled
Bug ✅
Performance ✅
Security ✅
Business Logic ❌

@coderabbitai

coderabbitai Bot commented Oct 2, 2026

Copy link
Copy Markdown

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 48 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used the included review currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: 8f6be044-fd9d-4d38-b134-25d39dd9ddc1

📥 Commits

Reviewing files that changed from the base of the PR and between 7840d55 and f4aa5c0.

📒 Files selected for processing (1)
  • .github/workflows/update-catalog.yml
  • Autopilot · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Autopilot is currently an internal CodeRabbit preview.


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.

@Quick104
Quick104 merged commit 9e93985 into main Oct 2, 2026
3 checks passed
@Quick104
Quick104 deleted the fix/catalog-update-concurrent-releases branch October 2, 2026 15:42

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: f4aa5c0d18

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

# the push loop below resolves their races.
concurrency:
group: plugin-catalog-update
group: plugin-catalog-update-${{ inputs.repo || github.event.client_payload.repo }}

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Coordinate the legacy updater with the new groups

When the manual Update Manifest workflow overlaps a repository dispatch, this new per-repository group no longer matches .github/workflows/update-manifest.yml's unchanged plugin-catalog-update group. Those workflows can now edit and push manifest.json concurrently, but the legacy workflow still uses a single git pull --rebase origin main at lines 54–67 rather than this retry loop; if the dispatch pushes first—especially when both update the same or adjacent entry—the rebase can conflict and the requested manual update fails. Put the legacy updater under the same coordination/retry strategy before allowing these groups to run independently.

Useful? React with 👍 / 👎.

@chatgpt-codex-connector

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-02T15:43:15.149538Z f4aa5c0 PR opened
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

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