argoproj/argo-workflows · error
plugin %s has more than one server.* file
Error message
plugin %s has more than one server.* file
What it means
loadPluginManifest found more than one file matching server.* in the executor plugin directory. A plugin must ship exactly one server binary (e.g. server.go or a single server.<ext>), so the manifest load aborts.
Source
Thrown at cmd/argo/commands/executorplugin/io.go:31
)
func loadPluginManifest(pluginDir string) (*spec.Plugin, error) {
manifest, err := os.ReadFile(filepath.Join(pluginDir, "plugin.yaml"))
if err != nil {
return nil, err
}
p := &spec.Plugin{}
err = yaml.UnmarshalStrict(manifest, p)
if err != nil {
return nil, err
}
files, err := filepath.Glob(filepath.Join(pluginDir, "server.*"))
if err != nil {
return nil, err
}
if len(files) > 1 {
return nil, fmt.Errorf("plugin %s has more than one server.* file", p.Name)
}
if len(files) == 1 {
code, err := os.ReadFile(files[0])
if err != nil {
return nil, err
}
p.Spec.Sidecar.Container.Args = []string{string(code)}
}
return p, p.Validate()
}
func addHeader(x []byte, h string) []byte {
return fmt.Appendf(nil, "%s\n%s", h, string(x))
}
func addCodegenHeader(x []byte) []byte {
return addHeader(x, "# This is an auto-generated file. DO NOT EDIT")
}View on GitHub (pinned to 35bff19146)
Solutions
- Remove extra server.* files from the plugin directory so exactly one remains
- Repackage the plugin with a single server.* entrypoint
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at cmd/argo/commands/executorplugin/io.go:31 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/2690bab57c65e9e5.
Report an issue: GitHub.