Add check subcommand to manifest command

- Add 'check' case to manifest command that validates plugin manifest
  using manifest.IsValid()
- Return appropriate exit codes: 0 for valid, 1 for invalid manifests
- Update help text and error messages to include the new subcommand
- Log validation results using structured logging

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Felipe M 2025-07-14 17:53:10 +02:00
parent 873bf78c22
commit 6639dad2d6
No known key found for this signature in database
GPG key ID: 52E5D65FCF99808A
3 changed files with 12 additions and 5 deletions

View file

@ -9,7 +9,7 @@ all: check-style test dist
## Ensures the plugin manifest is valid
.PHONY: manifest-check
manifest-check:
./build/bin/manifest check
pluginctl manifest check
## Builds the server, if it exists, for all supported architectures, unless MM_SERVICESETTINGS_ENABLEDEVELOPER is set.
@ -55,7 +55,7 @@ endif
bundle:
rm -rf dist/
mkdir -p dist/$(PLUGIN_ID)
./build/bin/manifest dist
cp plugin.json dist/$(PLUGIN_ID)/plugin.json
ifneq ($(wildcard $(ASSETS_DIR)/.),)
cp -r $(ASSETS_DIR) dist/$(PLUGIN_ID)/
endif

View file

@ -118,7 +118,7 @@ Commands:
disable Disable plugin from current directory in Mattermost server
reset Reset plugin from current directory (disable then enable)
updateassets Update plugin files from embedded assets
manifest Get plugin manifest information (id, version, has_server, has_webapp)
manifest Get plugin manifest information (id, version, has_server, has_webapp, check)
logs View plugin logs (use --watch to follow logs in real-time)
help Show this help message
version Show version information
@ -134,6 +134,7 @@ Examples:
pluginctl manifest version # Get plugin version
pluginctl manifest has_server # Check if plugin has server code
pluginctl manifest has_webapp # Check if plugin has webapp code
pluginctl manifest check # Validate plugin manifest
pluginctl logs # View recent plugin logs
pluginctl logs --watch # Watch plugin logs in real-time
export PLUGINCTL_PLUGIN_PATH=/path/to/plugin

View file

@ -8,7 +8,7 @@ import (
// RunManifestCommand implements the 'manifest' command functionality with subcommands.
func RunManifestCommand(args []string, pluginPath string) error {
if len(args) == 0 {
return fmt.Errorf("manifest command requires a subcommand: id, version, has_server, has_webapp")
return fmt.Errorf("manifest command requires a subcommand: id, version, has_server, has_webapp, check")
}
// Convert to absolute path
@ -41,8 +41,14 @@ func RunManifestCommand(args []string, pluginPath string) error {
} else {
fmt.Println("false")
}
case "check":
if err := manifest.IsValid(); err != nil {
Logger.Error("Plugin manifest validation failed", "error", err)
return err
}
Logger.Info("Plugin manifest is valid")
default:
return fmt.Errorf("unknown subcommand: %s. Available subcommands: id, version, has_server, has_webapp",
return fmt.Errorf("unknown subcommand: %s. Available subcommands: id, version, has_server, has_webapp, check",
subcommand)
}