semaphoreui/semaphore · error
type not found
Error message
type %s not found
What it means
Returned by ExporterChain.getLoadedKeys in services/export/Exporter.go when the requested entity type name has no registered TypeExporter in the chain's exporters map. It is a generic lookup guard: the name string passed by the caller (e.g. 'project', 'user', a template or integration type) does not match any exporter registered on the chain, so the keys for that type cannot be enumerated.
Solutions
- Use an exporter type name that is actually registered in the chain (check the chain setup/registry)
- Verify spelling and casing of the name argument against the registered exporters
- Update the export/import code if the entity type was renamed in a newer version
Example fix
// before
keys, err := chain.getLoadedKeys("projectt", scope) // typo
// after
keys, err := chain.getLoadedKeys("project", scope) Defensive patterns
Strategy: try-catch
Validate before calling
if _, ok := chain.exporters[name]; !ok {
return fmt.Errorf("type %s is not registered", name)
} Try / catch
keys, err := chain.getLoadedKeys(name, scope)
if err != nil {
if strings.HasSuffix(err.Error(), "not found") {
return nil // type not part of this export run
}
return err
} Prevention
- Derive type names from a shared constant/registry, not string literals
- Keep export type lists generated from the registered chain
- Watch for renames when upgrading Semaphore versions
When it happens
Trigger: Calling ExporterChain.getLoadedKeys(name, scope) with a type name string that was never registered in the chain's exporters map (p.exporters[name] miss).
Common situations: Typo in the exporter type name; requesting keys for an entity type excluded from the current export configuration; version skew where a type was renamed between Semaphore versions.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
AI-assisted analysis of semaphoreui/semaphore@1774ccb71a (2026-09-07).
Data as JSON: /api/errors/75164a293c50d24a.
Report an issue: GitHub.
Appendix: source
Thrown at services/export/Exporter.go:326
}
}
return nil
}
type ExporterChain struct {
exporters map[string]TypeExporter
KeyMapper
}
func (p *ExporterChain) getTypeExporter(name string) TypeExporter {
return p.exporters[name]
}
func (p *ExporterChain) getLoadedKeys(name string, scope string) ([]EntityKey, error) {
exporter, ok := p.exporters[name]
if !ok {
return nil, fmt.Errorf("type %s not found", name)
}
return exporter.getLoadedKeys(scope)
}
func (p *ExporterChain) getLoadedKeysInt(name string, scope string) ([]int, error) {
exporter, ok := p.exporters[name]
if !ok {
return nil, fmt.Errorf("type %s not found", name)
}
keys, err := exporter.getLoadedKeys(scope)
if err != nil {
return nil, err
}
out := make([]int, len(keys))
for i, v := range keys {View on GitHub (pinned to 1774ccb71a)