Skip to content

ci: fail when the plugin's version manifests disagree - #28

Merged
Platonenkov merged 3 commits into
mainfrom
claude/ci-manifest-version-check-524a4
Aug 3, 2026
Merged

ci: fail when the plugin's version manifests disagree#28
Platonenkov merged 3 commits into
mainfrom
claude/ci-manifest-version-check-524a4

Conversation

@Platonenkov

Copy link
Copy Markdown
Collaborator

The plugin's version lives in three places a client reads independently, and nothing made them agree.

They drifted silently once already: .claude-plugin/marketplace.json stayed at 0.2.1 while plugins/code-index/.claude-plugin/plugin.json moved to 0.2.2 and then 0.2.3. The marketplace entry is what a client compares against to decide an update exists — it never moved, so two releases existed that no installed client was ever offered. That is what made #26's release land without reaching anyone until #27.

Checks:

against
marketplace.json metadata.version plugin.json version
marketplace.json code-index entry version plugin.json version
version named in bin/server.sha256 plugin.json serverVersion

The third has the same silent-failure shape: bump serverVersion without renaming the checksum line and every install refuses to run. Today that is only caught by the release workflow, after a tag has already been pushed.

The marketplace entry is selected by name, not index, so adding a second plugin later cannot silently start checking the wrong one.

Runs as its own job — no SDK, no restore, no matrix — so a mismatch appears on its own line in the checks list instead of inside a build log.

Not checked, and arguably worth adding later: that CHANGELOG.md's newest heading matches the version being shipped. Left out deliberately — it would fail on any branch that bumps the version before writing the entry, which is a normal order to work in.

The plugin's version is written in three places a client reads
independently, and nothing made them agree. They drifted silently once:
marketplace.json stayed at 0.2.1 while plugin.json moved to 0.2.2 and then
0.2.3, so two releases existed that no installed client was ever offered --
the marketplace entry is what a client compares against to decide an update
exists, and it never moved.

Checks marketplace metadata.version and the code-index entry's version
against plugin.json's version, and the version named in bin/server.sha256
against plugin.json's serverVersion. The latter has the same silent-failure
shape: bump serverVersion without renaming the checksum line and every
install refuses to run, which today is only caught by the release workflow
after a tag is already pushed.

Its own job rather than a step in build-and-test -- no SDK, no restore, no
matrix, and a mismatch reads better on its own line in the checks list than
buried in a build log.
@coderabbitai

coderabbitai Bot commented Aug 3, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 413157e4-20a0-4dce-938d-db48961872fc

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

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

@Platonenkov

Copy link
Copy Markdown
Collaborator Author

Проверил, что проверка действительно падает, а не только зеленеет: коммит 18ac55c намеренно рассинхронизирует обе пары версий, следующий за ним — revert.

##[error]marketplace metadata.version (0.2.1) does not match plugin.json version (0.2.3)
##[error]server.sha256 names version 0.2.0, but plugin.json serverVersion is 0.2.1

Запись в маркетплейсе я ломал только в metadata.version, не в записи плагина — вторая проверка при этом промолчала, то есть три условия независимы, а не срабатывают скопом.

@Platonenkov
Platonenkov merged commit 6b81cd4 into main Aug 3, 2026
4 checks passed
@Platonenkov
Platonenkov deleted the claude/ci-manifest-version-check-524a4 branch August 3, 2026 15:00
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