router-for-me/CLIProxyAPI · error
missing required field release-tag
Error message
missing required field release-tag
What it means
When a manifest's install type is "github-release", Validate() requires a non-empty, non-whitespace release-tag field. The tag is what the installer uses to locate the GitHub release, so a missing tag aborts validation before the plugin is even constructed.
Source
Thrown at internal/pluginstore/manifest.go:130
if m.SchemaVersion != 0 && m.SchemaVersion != SchemaVersionV2 {
return fmt.Errorf("unsupported schema-version %d", m.SchemaVersion)
}
if errID := validateManifestPluginID(m.ID); errID != nil {
return errID
}
plan := NormalizeInstallPlan(m.Install)
plan.Type = InstallTypeDirect
if len(plan.Artifacts) > 0 {
if errValidate := ValidateInstallPlan(plan); errValidate != nil {
return errValidate
}
return validatePinnedArtifactURLs(plan.Artifacts)
}
return validateManifestSourceURL(m.SourceURL)
case InstallTypeGitHubRelease:
releaseTag := strings.TrimSpace(m.ReleaseTag)
if releaseTag == "" {
return fmt.Errorf("missing required field release-tag")
}
plugin := m.Plugin()
plugin.Install = InstallPlan{Type: InstallTypeGitHubRelease}
if errValidate := ValidatePlugin(plugin); errValidate != nil {
return errValidate
}
releaseVersion, errVersion := ReleaseVersion(Release{TagName: releaseTag})
if errVersion != nil {
return errVersion
}
if releaseVersion != normalizeVersion(version) {
return fmt.Errorf("release-tag %q resolves version %q, want %q", releaseTag, releaseVersion, normalizeVersion(version))
}
return nil
default:
return fmt.Errorf("unsupported install type %q", m.Install.Type)
}
}View on GitHub (pinned to 78f0c4079e)
Solutions
- Add release-tag: v1.2.3 (the actual GitHub release tag) to the manifest's top level
- Verify the YAML/JSON key is exactly release-tag and correctly nested/unmarshaled into Manifest.ReleaseTag
- Ensure the tag also resolves to the same version as the version field, or error 683 follows
Example fix
# before install: type: github-release version: 1.2.3 # release-tag missing -> missing required field release-tag # after install: type: github-release release-tag: v1.2.3 version: 1.2.3
Defensive patterns
Strategy: validation
Validate before calling
if m.InstallType() == pluginstore.InstallTypeGitHubRelease && strings.TrimSpace(m.ReleaseTag) == "" {
return errors.New("github-release manifest needs release-tag")
}
_ = m.Validate() Type guard
func hasReleaseTag(m pluginstore.Manifest) bool { return strings.TrimSpace(m.ReleaseTag) != "" } Try / catch
if err := m.Validate(); err != nil && strings.Contains(err.Error(), "missing required field release-tag") { /* set release-tag from git describe --tags, re-validate */ } Prevention
- Generate release-tag and version together in the release job
- Assert required fields per install type in a manifest pre-flight helper
When it happens
Trigger: Manifest with install.type: github-release but release-tag omitted, empty, or containing only spaces/whitespace.
Common situations: Converting a direct-install manifest to github-release and forgetting the tag; YAML indentation puts release-tag under the wrong key so it never unmarshals; CI templating leaves release-tag empty until the release job runs.
Related errors
- github-release manifest requires a resolved release
- unsupported install type %q
- missing required field version
- invalid plugin version %q
- unsupported schema-version %d
AI-assisted analysis of router-for-me/CLIProxyAPI@78f0c4079e (2026-08-15).
Data as JSON: /api/errors/28a6a725bc591869.
Report an issue: GitHub.