Example manifest files for testing Shoehorn's catalog functionality.
test-manifests/
├── .shoehorn/ # Shoehorn native manifests
│ ├── admin-dashboard.yml
│ ├── analytics-service.yml
│ ├── auth-service.yml
│ ├── data-pipeline.yml
│ ├── frontend-app.yml
│ ├── kafka-events.yml
│ ├── ml-recommendation-service.yml
│ ├── mobile-app.yml
│ ├── postgres-db.yml
│ └── user-api.yml
│
└── backstage/ # Backstage catalog-info.yaml examples
├── admin-dashboard-catalog-info.yaml
├── platform-team-catalog-info.yaml
├── postgres-db-catalog-info.yaml
├── user-api-catalog-info.yaml
├── user-management-system-catalog-info.yaml
└── user-service-catalog-info.yaml
This repository contains examples of both manifest formats supported by Shoehorn:
Native Shoehorn manifest format with simplified schema:
schemaVersion: 1
service:
id: user-api
name: User Management API
type: api
owner:
- type: team
id: platform-team
lifecycle: production
tags:
- api
- golang
links:
- name: Repository
url: https://github.com/company/user-api
interfaces:
http:
baseUrl: https://api.company.com/users
openapi: ./api/openapi.yaml
relations:
- type: depends_on
target: database:postgres-dbStandard Backstage catalog format - automatically converted by Shoehorn:
apiVersion: backstage.io/v1alpha1
kind: Component
metadata:
name: user-api
title: User Management API
tags:
- api
- golang
spec:
type: service
lifecycle: production
owner: platform-team
dependsOn:
- resource:postgres-dbShoehorn automatically detects and converts both formats:
# Validate a Shoehorn manifest
shoehorn validate .shoehorn/user-api.yml
# Validate a Backstage manifest
shoehorn validate backstage/user-service-catalog-info.yaml
# Convert Backstage to Shoehorn
shoehorn convert backstage/user-service-catalog-info.yaml
# Convert all Backstage manifests
shoehorn convert backstage/ -r --to shoehornUse the Shoehorn bridge to convert between formats:
import "github.com/imbabamba/shoehorn/internal/manifest"
parser := manifest.NewParser()
bridge := manifest.NewBackstageBridge()
// Parse any format (auto-detects)
manifest, _, err := parser.ParseAndValidate(yamlData)
// Convert to Backstage
backstage, err := bridge.ConvertToBackstage(manifest)- ✅ Multiple service types (api, service, frontend, database)
- ✅ Multiple owners per service
- ✅ Rich interface definitions (HTTP, gRPC)
- ✅ Detailed relations with notes
- ✅ Team extras (Slack channels, custom resources)
- ✅ Lifecycle stages
- ✅ Tags and links
- ✅ Standard Backstage kinds (Component, API, Resource, Group, System)
- ✅ Metadata with annotations
- ✅ Relations (dependsOn, consumesApis, providesApis)
- ✅ Links with icons
- ✅ API definitions (OpenAPI, gRPC, AsyncAPI)
- ✅ System and domain organization
These manifests are used for:
- Unit Tests: Validation and parsing tests
- Integration Tests: Catalog ingestion and search
- Manual Testing: UI and API testing
- Documentation: Examples and tutorials
To add new test manifests:
- Create manifests in the appropriate directory
- Follow naming conventions (
kebab-case.yml) - Include comprehensive metadata
- Document any special features or edge cases
MIT License - See LICENSE for details