feat(plugins): add submodule boolean property to manifest schema

This commit is contained in:
Yassine Doghri 2025-03-14 13:02:55 +00:00
parent 94cea0ce91
commit 567d5e01a3
3 changed files with 25 additions and 1 deletions

View File

@ -50,14 +50,28 @@ The URL to the project homepage.
### license ### license
**Default:** `"UNLICENSED"`
Specify a license for your plugin so that people know how they are permitted to Specify a license for your plugin so that people know how they are permitted to
use it, and any restrictions you're placing on it. use it, and any restrictions you're placing on it.
### private ### private
**Default:** `false`
Whether or not to publish the plugin in public directories. If set to `true`, Whether or not to publish the plugin in public directories. If set to `true`,
directories should refuse to publish the plugin. directories should refuse to publish the plugin.
### submodule
**Default:** `false`
Indicates whether the plugin is part of a monorepo (a single Git repository
containing multiple plugins). If `true`, the plugin shares its repository with
other plugins. In this case, releases should be tagged using the format
`<plugin-name>@<version>` (eg. `acme/hello-world@1.0.0`) to ensure proper
version indexing by plugin repositories.
### keywords ### keywords
Array of strings to help your plugin get discovered when listed in repositories. Array of strings to help your plugin get discovered when listed in repositories.

View File

@ -15,6 +15,7 @@ use CodeIgniter\HTTP\URI;
* @property ?URI $homepage * @property ?URI $homepage
* @property ?string $license * @property ?string $license
* @property bool $private * @property bool $private
* @property bool $submodule
* @property list<string> $keywords * @property list<string> $keywords
* @property ?string $minCastopodVersion * @property ?string $minCastopodVersion
* @property list<string> $hooks * @property list<string> $hooks
@ -31,6 +32,7 @@ class Manifest extends ManifestObject
'homepage' => 'permit_empty|valid_url_strict', 'homepage' => 'permit_empty|valid_url_strict',
'license' => 'permit_empty|string', 'license' => 'permit_empty|string',
'private' => 'permit_empty|is_boolean', 'private' => 'permit_empty|is_boolean',
'submodule' => 'permit_empty|is_boolean',
'keywords.*' => 'permit_empty', 'keywords.*' => 'permit_empty',
'minCastopodVersion' => 'permit_empty|regex_match[/^(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/]', 'minCastopodVersion' => 'permit_empty|regex_match[/^(0|[1-9]\d*)\.(0|[1-9]\d*)(\.(0|[1-9]\d*))?(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/]',
'hooks.*' => 'permit_empty|in_list[rssBeforeChannel,rssAfterChannel,rssBeforeItem,rssAfterItem,siteHead]', 'hooks.*' => 'permit_empty|in_list[rssBeforeChannel,rssAfterChannel,rssBeforeItem,rssAfterItem,siteHead]',
@ -62,6 +64,8 @@ class Manifest extends ManifestObject
protected bool $private = false; protected bool $private = false;
protected bool $submodule = false;
/** /**
* @var list<string> * @var list<string>
*/ */

View File

@ -59,7 +59,13 @@
}, },
"private": { "private": {
"type": "boolean", "type": "boolean",
"description": "If set to true, then repositories should refuse to publish it." "description": "If set to true, then repositories should refuse to publish it.",
"default": false
},
"submodule": {
"type": "boolean",
"description": "Set to `true` if the plugin is part of a monorepo (i.e., in the same Git repository as other plugins). Releases should be tagged as `<plugin-name>@<version>` to ensure proper version indexing by plugin repositories.",
"default": false
}, },
"keywords": { "keywords": {
"description": "This helps people discover your plugin as it's listed in repositories", "description": "This helps people discover your plugin as it's listed in repositories",