feat: target the flat layout and the central marketplace

Three defects, all of which surfaced flattening the first repository.

The two reusable workflows described the same layout differently: CI left
codex_plugin_root and cursor_plugin_root empty while release defaulted both to
a scaffold path. A repository that stopped shipping a nested plugin therefore
passed CI and failed release, on a directory it had never had. Both now default
to the repository itself, with cursor validation off unless asked for.

claude_marketplace_file defaulted to a manifest that a plugin repository no
longer carries, because the marketplace is generated centrally from the package
registry rather than committed to each repo.

The installation notes documented the flow this replaces — a per-release
installer URL, or a marketplace add against the repo at a tag. With a central
marketplace the instructions no longer mention the version at all: the manifest
names the package and npm resolves the newest.

Adds a dispatch step so a newly published plugin reaches the marketplace
promptly. Gitea's registry_package event cannot serve here — it only fires for
packages linked to the repository, and these are published from GitHub — so the
generator is called over Gitea's API instead. The step never fails the release:
the package is already published, and the generator's schedule catches up.

Co-Authored-By: Claude Opus 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01MgsFmepr9FxbFkax5Y2h6z
This commit is contained in:
2026-08-23 19:59:20 -04:00
co-authored by Claude Opus 5
parent bf74e5bf65
commit c8c80f4133
2 changed files with 101 additions and 11 deletions
+14 -4
View File
@@ -9,23 +9,33 @@ on:
type: string
default: skills
claude_marketplace_file:
description: Claude marketplace manifest relative to the repository root.
description: >-
Claude marketplace manifest relative to the repository root. Empty by
default: a plugin repository no longer carries one, because the
central marketplace is generated from the package registry.
required: false
type: string
default: .claude-plugin/marketplace.json
default: ""
claude_plugin_file:
description: Claude plugin manifest relative to the repository root.
required: false
type: string
default: .claude-plugin/plugin.json
codex_plugin_root:
description: Codex plugin root relative to the repository root.
description: >-
Codex plugin root relative to the repository root. Defaults to the
repository itself, matching the release workflow — these two described
the same layout differently, so CI passed while release failed.
required: false
type: string
default: "."
cursor_plugin_root:
description: Cursor plugin root relative to the repository root.
description: >-
Cursor plugin root relative to the repository root. Empty disables
cursor validation.
required: false
type: string
default: ""
permissions:
contents: read