@eventcatalog/core 4.10.12 → 4.10.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/analytics/analytics.cjs +1 -1
- package/dist/analytics/analytics.js +2 -2
- package/dist/analytics/log-build.cjs +1 -1
- package/dist/analytics/log-build.js +3 -3
- package/dist/{chunk-7URQ754Q.js → chunk-HERAHLM2.js} +1 -1
- package/dist/{chunk-Y5XU3YLT.js → chunk-LITOQH56.js} +1 -1
- package/dist/{chunk-S4LLGOO4.js → chunk-LUW6RDA7.js} +1 -1
- package/dist/{chunk-VFSEVDCQ.js → chunk-ONDFEA5R.js} +1 -1
- package/dist/{chunk-A53VCEEA.js → chunk-V2SKOQYF.js} +1 -1
- package/dist/constants.cjs +1 -1
- package/dist/constants.js +1 -1
- package/dist/docs/api/02-config.md +55 -1
- package/dist/docs/development/authentication/providers/03-setting-up-github.md +29 -0
- package/dist/docs/development/bring-your-own-documentation/custom-pages/02-adding-custom-docs.md +2 -2
- package/dist/docs/development/bring-your-own-documentation/custom-pages/03-components.md +17 -0
- package/dist/docs/development/components/07-resource-references.md +7 -1
- package/dist/docs/development/components/components/05-architecture-graph.md +65 -0
- package/dist/docs/development/components/components/{05-attachments.md → 06-attachments.md} +1 -1
- package/dist/docs/development/components/components/{06-channel-information.md → 07-channel-information.md} +1 -1
- package/dist/docs/development/components/components/{07-custom-properties.md → 08-custom-properties.md} +1 -1
- package/dist/docs/development/components/components/{08-design.md → 09-design.md} +1 -1
- package/dist/docs/development/components/components/{09-entitymap.md → 10-entitymap.md} +1 -1
- package/dist/docs/development/components/components/{10-flow.md → 11-flow.md} +1 -1
- package/dist/docs/development/components/components/{11-link.md → 12-link.md} +1 -1
- package/dist/docs/development/components/components/{12-mermaid-file-loader.md → 13-mermaid-file-loader.md} +1 -1
- package/dist/docs/development/components/components/{13-message-table.md → 14-message-table.md} +1 -1
- package/dist/docs/development/components/components/{14-nodegraph.md → 15-nodegraph.md} +1 -1
- package/dist/docs/development/components/components/{15-openapi.md → 16-openapi.md} +1 -1
- package/dist/docs/development/components/components/{16-prompt.md → 17-prompt.md} +1 -1
- package/dist/docs/development/components/components/{17-remote-schema.md → 18-remote-schema.md} +1 -1
- package/dist/docs/development/components/components/{18-resource-group-table.md → 19-resource-group-table.md} +1 -1
- package/dist/docs/development/components/components/{19-resource-link.md → 20-resource-link.md} +1 -1
- package/dist/docs/development/components/components/{20-schema.md → 21-schema.md} +1 -1
- package/dist/docs/development/components/components/{21-schema-viewer.md → 22-schema-viewer.md} +1 -1
- package/dist/docs/development/components/components/{22-steps.md → 23-steps.md} +1 -1
- package/dist/docs/development/components/components/{23-tabs.md → 24-tabs.md} +1 -1
- package/dist/docs/development/components/components/{24-tiles.md → 25-tiles.md} +1 -1
- package/dist/docs/development/components/components/{25-visibility.md → 26-visibility.md} +1 -1
- package/dist/docs/development/customization/04-documentation-sidebar.md +3 -3
- package/dist/docs/development/customization/05-resource-sidebar.md +235 -0
- package/dist/docs/development/customization/09-embed-eventcatalog.md +179 -0
- package/dist/docs/development/customization/_category_.json +1 -1
- package/dist/docs/development/deployment/build-and-deploy.md +4 -0
- package/dist/docs/development/deployment/hosting-options.md +1 -1
- package/dist/docs/development/deployment/link-validation.md +105 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/00-overview.md +76 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/01-setup.md +144 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/_category_.json +10 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/01-configure-rules.md +130 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/02-run-in-ci.md +93 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/03-use-custom-frontmatter.md +81 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/04-reference-external-catalogs.md +51 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/05-fix-common-problems.md +120 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/how-to/_category_.json +12 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/01-cli.md +109 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/02-configuration.md +120 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/03-rules.md +287 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/04-versions.md +77 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/05-supported-resources.md +75 -0
- package/dist/docs/development/developer-tools/eventcatalog-linter/reference/_category_.json +12 -0
- package/dist/docs/development/guides/97-architecture-graph.md +78 -0
- package/dist/docs/development/guides/domains/02-create-domain.md +1 -1
- package/dist/docs/development/guides/domains/03-ownership-and-language/02-adding-ubiquitous-language.md +29 -0
- package/dist/docs/development/guides/domains/09-reference.md +10 -0
- package/dist/docs/development/guides/resources/messages/04-message-channels/02-adding-channels.md +2 -2
- package/dist/docs/development/guides/resources/messages/04-message-channels/04-adding-messages-to-services.md +8 -0
- package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/01-add-openapi-specifications.md +2 -2
- package/dist/docs/development/guides/resources/schemas/03-add-specifications-to-services/02-add-asyncapi-specifications.md +3 -3
- package/dist/docs/development/guides/systems/05-system-context-maps.md +2 -0
- package/dist/docs/development/license-keys/license-validation.md +7 -3
- package/dist/docs/development/license-keys/overview.md +7 -3
- package/dist/docs/development/upgrading/upgrading.md +3 -3
- package/dist/docs/development/upgrading/v2.md +3 -3
- package/dist/docs/federation/00-overview.md +158 -0
- package/dist/docs/federation/01-first-federation.md +199 -0
- package/dist/docs/federation/_category_.json +12 -0
- package/dist/docs/federation/explanation/_category_.json +12 -0
- package/dist/docs/federation/explanation/how-it-works.md +129 -0
- package/dist/docs/federation/explanation/lockfile-and-cache.md +134 -0
- package/dist/docs/federation/explanation/mvp-status-and-feedback.md +86 -0
- package/dist/docs/federation/explanation/ownership-and-references.md +134 -0
- package/dist/docs/federation/how-to/_category_.json +12 -0
- package/dist/docs/federation/how-to/configure-github-sources.md +156 -0
- package/dist/docs/federation/how-to/configure-validation-rules.md +127 -0
- package/dist/docs/federation/how-to/run-in-ci.md +138 -0
- package/dist/docs/federation/how-to/share-assets-and-components.md +125 -0
- package/dist/docs/federation/how-to/use-local-sources.md +138 -0
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/00-introduction.md +11 -2
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/01-installation.md +11 -3
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/02-plugin-configuration.md +11 -2
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/03-examples.md +11 -1
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/04-configuration.md +11 -1
- package/dist/docs/{plugins/eventcatalog-federation → federation/legacy-federation}/05-setup-team-catalog.md +11 -2
- package/dist/docs/federation/legacy-federation/_category_.json +12 -0
- package/dist/docs/federation/reference/_category_.json +12 -0
- package/dist/docs/federation/reference/cli.md +122 -0
- package/dist/docs/federation/reference/configuration.md +192 -0
- package/dist/docs/federation/reference/diagnostic-rules.md +173 -0
- package/dist/docs/federation/reference/generated-output.md +118 -0
- package/dist/docs/federation/reference/supported-content.md +86 -0
- package/dist/docs/federation/reference/troubleshooting.md +208 -0
- package/dist/docs/plugins/01-intro.md +3 -3
- package/dist/docs/plugins/03-all-plugins.md +2 -2
- package/dist/docs/plugins/asyncapi/00-intro.md +4 -4
- package/dist/docs/plugins/asyncapi/02-plugin-configuration.md +4 -4
- package/dist/docs/plugins/backstage/00-overview.md +53 -0
- package/dist/docs/plugins/backstage/01-get-started.md +95 -0
- package/dist/docs/plugins/backstage/02-embed-entity-tabs.md +109 -0
- package/dist/docs/plugins/backstage/03-add-overview-cards.md +79 -0
- package/dist/docs/plugins/backstage/04-control-theme-and-size.md +54 -0
- package/dist/docs/plugins/backstage/05-migrate-to-annotations.md +49 -0
- package/dist/docs/plugins/backstage/06-configuration.md +85 -0
- package/dist/docs/plugins/backstage/07-components.md +129 -0
- package/dist/docs/plugins/backstage/08-how-embeds-work.md +52 -0
- package/dist/docs/plugins/backstage/_category_.json +4 -3
- package/dist/docs/plugins/eventbridge/00-intro.md +5 -5
- package/dist/docs/plugins/eventbridge/03-api.md +3 -3
- package/dist/docs/plugins/graphql/00-intro.md +2 -2
- package/dist/docs/plugins/graphql/02-plugin-configuration.md +2 -2
- package/dist/docs/plugins/hookdeck/01-intro.md +1 -1
- package/dist/docs/plugins/openapi/00-intro.md +1 -1
- package/dist/eventcatalog.cjs +1 -1
- package/dist/eventcatalog.js +5 -5
- package/dist/generate.cjs +1 -1
- package/dist/generate.js +3 -3
- package/dist/utils/cli-logger.cjs +1 -1
- package/dist/utils/cli-logger.js +2 -2
- package/eventcatalog/src/components/ChatPanel/ChatPanel.tsx +208 -119
- package/eventcatalog/src/components/ChatPanel/ChatPanelButton.tsx +28 -8
- package/eventcatalog/src/components/ChatPanel/OfflineReply.tsx +45 -0
- package/eventcatalog/src/components/Header.astro +11 -6
- package/eventcatalog/src/components/MDX/Design/Design.astro +2 -2
- package/eventcatalog/src/components/MDX/EntityMap/EntityMap.astro +2 -2
- package/eventcatalog/src/components/MDX/Flow/Flow.astro +2 -2
- package/eventcatalog/src/components/MDX/NodeGraph/NodeGraph.astro +2 -2
- package/eventcatalog/src/components/SchemaExplorer/AvroSchemaViewer.tsx +21 -19
- package/eventcatalog/src/components/SchemaExplorer/JSONSchemaViewer.tsx +79 -77
- package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.test.tsx +91 -0
- package/eventcatalog/src/components/SchemaExplorer/ProtobufSchemaViewer.tsx +115 -33
- package/eventcatalog/src/components/SchemaExplorer/SchemaViewerHover.test.tsx +33 -0
- package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.test.ts +84 -0
- package/eventcatalog/src/components/SchemaExplorer/protobuf-validation.ts +149 -0
- package/eventcatalog/src/components/Search/Search.astro +11 -4
- package/eventcatalog/src/components/Settings/AssistantSettingsForm.tsx +29 -24
- package/eventcatalog/src/enterprise/custom-documentation/pages/docs/custom/index.astro +3 -3
- package/eventcatalog/src/pages/diagrams/[id]/[version]/index.astro +2 -2
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/[docVersion]/index.astro +5 -3
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/[docType]/[docId]/index.astro +10 -4
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/asyncapi/[filename].astro +2 -2
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/index.astro +3 -3
- package/eventcatalog/src/pages/docs/[type]/[id]/[version]/spec/[filename].astro +2 -2
- package/eventcatalog/src/pages/visualiser/designs/[id]/index.astro +2 -2
- package/eventcatalog/src/utils/feature.ts +1 -0
- package/eventcatalog/src/utils/protobuf-schema.ts +211 -16
- package/package.json +3 -3
- package/dist/docs/cli/channels.md +0 -180
- package/dist/docs/cli/commands.md +0 -183
- package/dist/docs/cli/custom-docs.md +0 -78
- package/dist/docs/cli/data-products.md +0 -177
- package/dist/docs/cli/data-stores.md +0 -166
- package/dist/docs/cli/diagrams.md +0 -147
- package/dist/docs/cli/domains.md +0 -280
- package/dist/docs/cli/entities.md +0 -138
- package/dist/docs/cli/events.md +0 -186
- package/dist/docs/cli/export.md +0 -27
- package/dist/docs/cli/governance.md +0 -24
- package/dist/docs/cli/messages.md +0 -69
- package/dist/docs/cli/queries.md +0 -183
- package/dist/docs/cli/services.md +0 -266
- package/dist/docs/cli/snapshots.md +0 -44
- package/dist/docs/cli/teams.md +0 -75
- package/dist/docs/cli/users.md +0 -75
- package/dist/docs/cli/utilities.md +0 -43
- package/dist/docs/development/developer-tools/eventcatalog-linter.md +0 -732
- package/dist/docs/plugins/backstage/00-intro.md +0 -67
- package/dist/docs/plugins/backstage/01-installation.md +0 -242
- package/dist/docs/plugins/backstage/02-api.md +0 -51
- package/dist/docs/plugins/backstage/03-examples.md +0 -12
- package/dist/docs/plugins/eventcatalog-federation/_category_.json +0 -11
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 2
|
|
3
|
+
sidebar_label: First federation tutorial
|
|
4
|
+
title: Federate your first catalogs
|
|
5
|
+
description: Create two local EventCatalog projects and combine them into one organization catalog.
|
|
6
|
+
slug: /federation/first-federation
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
|
|
10
|
+
|
|
11
|
+
<EventCatalogEnterprise />
|
|
12
|
+
|
|
13
|
+
This tutorial takes you through the first successful Federation workflow:
|
|
14
|
+
|
|
15
|
+
1. Create a team catalog
|
|
16
|
+
2. Create an empty organization catalog
|
|
17
|
+
3. Configure the team catalog as a local source
|
|
18
|
+
4. Run Federation
|
|
19
|
+
5. Open the combined catalog
|
|
20
|
+
|
|
21
|
+
The goal is to learn the federation loop before introducing GitHub, CI, or organization-wide validation rules.
|
|
22
|
+
|
|
23
|
+
## What you will build
|
|
24
|
+
|
|
25
|
+
<div className="federation-mermaid">
|
|
26
|
+
|
|
27
|
+
```mermaid
|
|
28
|
+
flowchart LR
|
|
29
|
+
TEAM["`**team-catalog/**
|
|
30
|
+
Services · messages · docs`"]
|
|
31
|
+
FED["`**eventcatalog federate**
|
|
32
|
+
Fetch · validate · hydrate`"]
|
|
33
|
+
ORG["`**organization-catalog/**
|
|
34
|
+
Local + federated resources`"]
|
|
35
|
+
|
|
36
|
+
TEAM -->|local source| FED
|
|
37
|
+
FED --> ORG
|
|
38
|
+
|
|
39
|
+
classDef team fill:#eef2ff,stroke:#6366f1,color:#1e1b4b
|
|
40
|
+
classDef federation fill:#f5f3ff,stroke:#8b5cf6,color:#2e1065
|
|
41
|
+
classDef central fill:#ecfdf5,stroke:#10b981,color:#064e3b
|
|
42
|
+
class TEAM team
|
|
43
|
+
class FED federation
|
|
44
|
+
class ORG central
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
</div>
|
|
48
|
+
|
|
49
|
+
## Prerequisites
|
|
50
|
+
|
|
51
|
+
Before you start, make sure you have:
|
|
52
|
+
|
|
53
|
+
- [Node.js 22 or later](https://nodejs.org/en/download/)
|
|
54
|
+
- Git installed
|
|
55
|
+
- An EventCatalog Enterprise offline license. Email [hello@eventcatalog.dev](mailto:hello@eventcatalog.dev?subject=EventCatalog%20Federation%20Trial) to request a trial key.
|
|
56
|
+
- A terminal and text editor
|
|
57
|
+
|
|
58
|
+
Check Node and Git with:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
node -v
|
|
62
|
+
git --version
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Create the tutorial catalogs
|
|
66
|
+
|
|
67
|
+
Create a directory for the tutorial:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
mkdir federation-tutorial
|
|
71
|
+
cd federation-tutorial
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Create a team catalog with the sample resources included by the EventCatalog installer:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
npx @eventcatalog/create-eventcatalog@latest team-catalog
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Create an empty catalog that will become the organization view:
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npx @eventcatalog/create-eventcatalog@latest organization-catalog --empty
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
You now have two sibling projects:
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
federation-tutorial/
|
|
90
|
+
├── team-catalog/
|
|
91
|
+
└── organization-catalog/
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Add your Enterprise license
|
|
95
|
+
|
|
96
|
+
Federation uses an offline Enterprise license. Save the `license.jwt` file we send you in the root of the organization catalog:
|
|
97
|
+
|
|
98
|
+
```text
|
|
99
|
+
organization-catalog/
|
|
100
|
+
├── license.jwt
|
|
101
|
+
├── eventcatalog.config.js
|
|
102
|
+
└── package.json
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
To try Federation, email [hello@eventcatalog.dev](mailto:hello@eventcatalog.dev?subject=EventCatalog%20Federation%20Trial) and ask for an offline trial key. You can commit `license.jwt` with the central catalog so it is available locally and in CI/CD. If your organization prefers not to commit it, provide the file during your CI/CD job instead.
|
|
106
|
+
|
|
107
|
+
## Configure the local source
|
|
108
|
+
|
|
109
|
+
Open `organization-catalog/eventcatalog.config.js` and add `federation.sources` to the exported configuration:
|
|
110
|
+
|
|
111
|
+
```js title="organization-catalog/eventcatalog.config.js"
|
|
112
|
+
export default {
|
|
113
|
+
// Keep the settings created by the installer...
|
|
114
|
+
federation: {
|
|
115
|
+
sources: [
|
|
116
|
+
{
|
|
117
|
+
id: 'tutorial/team-catalog',
|
|
118
|
+
source: 'file:../team-catalog',
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
},
|
|
122
|
+
};
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The source path is relative to the organization catalog. The `id` is the stable identity Federation uses for ownership, generated paths, and diagnostics.
|
|
126
|
+
|
|
127
|
+
## Ignore generated output
|
|
128
|
+
|
|
129
|
+
Add the generated federation directory and cache to `organization-catalog/.gitignore`:
|
|
130
|
+
|
|
131
|
+
```gitignore title="organization-catalog/.gitignore"
|
|
132
|
+
federated/
|
|
133
|
+
.eventcatalog-cache/
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Do not edit files under `federated/`. Federation replaces that directory on a successful run.
|
|
137
|
+
|
|
138
|
+
## Run Federation
|
|
139
|
+
|
|
140
|
+
Move into the organization catalog and run the command:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
cd organization-catalog
|
|
144
|
+
|
|
145
|
+
# If this does not work, add federate script in your package.json "federate: eventcatalog federate"
|
|
146
|
+
npm run federate
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
A successful run ends with output similar to:
|
|
150
|
+
|
|
151
|
+
```text
|
|
152
|
+
[federation] Graph resolved: 20 remote resources, 28 relationships
|
|
153
|
+
[federation] Federation complete: 1 source, 20 remote resources, 35 files written
|
|
154
|
+
[federation] Recorded resolved source state in eventcatalog.lock
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The exact resource and file counts depend on the current starter catalog.
|
|
158
|
+
|
|
159
|
+
Federation has now created:
|
|
160
|
+
|
|
161
|
+
- `federated/` containing the team catalog resources
|
|
162
|
+
- `.eventcatalog-cache/federation/content/` containing verified reusable content
|
|
163
|
+
- `eventcatalog.lock` recording the source state resolved by this run
|
|
164
|
+
|
|
165
|
+
## Open the organization catalog
|
|
166
|
+
|
|
167
|
+
Start the organization catalog:
|
|
168
|
+
|
|
169
|
+
```bash
|
|
170
|
+
npm run dev
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Open [http://localhost:3000](http://localhost:3000). The resources from `team-catalog` now appear in the organization catalog.
|
|
174
|
+
|
|
175
|
+
## Make a source change
|
|
176
|
+
|
|
177
|
+
Stop the development server, then change the name or documentation of a resource in `team-catalog`.
|
|
178
|
+
|
|
179
|
+
Run Federation again from `organization-catalog`:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
npx eventcatalog federate
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Start the development server again. The organization view now contains the updated source content.
|
|
186
|
+
|
|
187
|
+
Local filesystem sources are one-shot inputs. You need to rerun `eventcatalog federate` after a source changes.
|
|
188
|
+
|
|
189
|
+
## What you learned
|
|
190
|
+
|
|
191
|
+
You have completed the core federation loop:
|
|
192
|
+
|
|
193
|
+
- A team catalog owns its source documentation
|
|
194
|
+
- The organization catalog selects it through configuration
|
|
195
|
+
- Federation indexes, validates, and materializes the source
|
|
196
|
+
- The normal EventCatalog application renders the combined view
|
|
197
|
+
- Rerunning Federation updates the generated output
|
|
198
|
+
|
|
199
|
+
Next, learn how to [configure GitHub sources](/docs/federation/how-to/configure-github-sources), [resolve relationships across catalogs](/docs/federation/explanation/ownership-and-references), or [run Federation in CI](/docs/federation/how-to/run-in-ci).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"label": "Federation",
|
|
3
|
+
"position": 3,
|
|
4
|
+
"collapsible": false,
|
|
5
|
+
"collapsed": false,
|
|
6
|
+
"link": {
|
|
7
|
+
"type": "generated-index",
|
|
8
|
+
"slug": "federation",
|
|
9
|
+
"title": "EventCatalog Federation",
|
|
10
|
+
"description": "Combine independently owned EventCatalogs into one validated organization-wide catalog."
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"label": "Explanation",
|
|
3
|
+
"position": 5,
|
|
4
|
+
"collapsible": true,
|
|
5
|
+
"collapsed": false,
|
|
6
|
+
"link": {
|
|
7
|
+
"type": "generated-index",
|
|
8
|
+
"slug": "federation/explanation",
|
|
9
|
+
"title": "Federation explanation",
|
|
10
|
+
"description": "Conceptual guides that explain composition, ownership, resolution, generated output, caching, and the federation lockfile."
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 1
|
|
3
|
+
sidebar_label: How Federation works
|
|
4
|
+
title: How EventCatalog Federation works
|
|
5
|
+
description: Understand how EventCatalog indexes, resolves, and materializes several catalogs into one organization view.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
|
|
9
|
+
|
|
10
|
+
<EventCatalogEnterprise />
|
|
11
|
+
|
|
12
|
+
EventCatalog Federation is a build-time composition process.
|
|
13
|
+
|
|
14
|
+
It reads independently owned catalogs, converts them into a common index, validates the combined graph, and writes generated catalog files that the normal EventCatalog application can render.
|
|
15
|
+
|
|
16
|
+
## The three-stage pipeline
|
|
17
|
+
|
|
18
|
+
<div className="federation-mermaid">
|
|
19
|
+
|
|
20
|
+
```mermaid
|
|
21
|
+
flowchart LR
|
|
22
|
+
A[Source catalogs] --> B[Index]
|
|
23
|
+
B --> C[Resolve]
|
|
24
|
+
C --> D{Blocking diagnostics?}
|
|
25
|
+
D -->|Yes| E[Keep previous output]
|
|
26
|
+
D -->|No| F[Hydrate]
|
|
27
|
+
F --> G[Generated organization view]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
### Index
|
|
33
|
+
|
|
34
|
+
Each source catalog is described as facts:
|
|
35
|
+
|
|
36
|
+
- Resource IDs, types, and versions
|
|
37
|
+
- Resource ownership and relationships
|
|
38
|
+
- Content paths and hashes
|
|
39
|
+
- Schemas and specifications
|
|
40
|
+
- Sidecar documentation
|
|
41
|
+
- Public assets and custom components
|
|
42
|
+
|
|
43
|
+
Federation operates on EventCatalog's existing files and frontmatter. Teams do not maintain a second federation-specific resource definition.
|
|
44
|
+
|
|
45
|
+
### Resolve
|
|
46
|
+
|
|
47
|
+
Federation combines the indexes into one graph. The resolver:
|
|
48
|
+
|
|
49
|
+
- Connects relationships across source boundaries
|
|
50
|
+
- Selects resource versions for relationship pointers
|
|
51
|
+
- Detects multiple owners for one resource ID
|
|
52
|
+
- Detects conflicting resource types
|
|
53
|
+
- Detects relationship type mismatches
|
|
54
|
+
- Identifies missing resources and unavailable versions
|
|
55
|
+
- Chooses a deterministic winner for remote asset collisions
|
|
56
|
+
|
|
57
|
+
The central catalog's local resources participate in ownership validation. A local flow or architecture decision can point to federated resources, while a local resource can also conflict with a remote owner.
|
|
58
|
+
|
|
59
|
+
### Hydrate
|
|
60
|
+
|
|
61
|
+
After validation succeeds, Federation fetches the selected resource files and writes them under `federated/`.
|
|
62
|
+
|
|
63
|
+
Schemas, specifications, sidecars, public assets, and custom components travel with their owning resources. Content hashes are checked before files are accepted.
|
|
64
|
+
|
|
65
|
+
The normal EventCatalog build then reads local and federated content together.
|
|
66
|
+
|
|
67
|
+
## How sources are acquired
|
|
68
|
+
|
|
69
|
+
Federation currently supports GitHub and local filesystem sources.
|
|
70
|
+
|
|
71
|
+
<div className="federation-mermaid">
|
|
72
|
+
|
|
73
|
+
```mermaid
|
|
74
|
+
flowchart TB
|
|
75
|
+
CFG[eventcatalog.config.js] --> ROUTE{Source locator}
|
|
76
|
+
ROUTE -->|github:| GH[Fetch published index or create one from checkout]
|
|
77
|
+
ROUTE -->|file:| FS[Index the current local directory]
|
|
78
|
+
GH --> IDX[Catalog index]
|
|
79
|
+
FS --> IDX
|
|
80
|
+
IDX --> RESOLVE[Shared resolver and hydration pipeline]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
</div>
|
|
84
|
+
|
|
85
|
+
A GitHub source can publish `catalog.index.json`. If the file exists, Federation checks its source ID and uses it. If the file does not exist, Federation creates an index from a temporary checkout.
|
|
86
|
+
|
|
87
|
+
A filesystem source is indexed directly. Its revision is derived from the indexed content so the completed run can record which local state it used.
|
|
88
|
+
|
|
89
|
+
After source acquisition, both source types use the same validation, hydration, caching, asset, and lockfile behavior.
|
|
90
|
+
|
|
91
|
+
## Federation materializes files
|
|
92
|
+
|
|
93
|
+
Federation does not make live requests to team catalogs when somebody opens the organization site.
|
|
94
|
+
|
|
95
|
+
The generated files are a local representation of the last successful federation run:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
central-catalog/
|
|
99
|
+
├── domains/ # centrally owned resources
|
|
100
|
+
├── federated/ # generated source resources
|
|
101
|
+
├── public/ # central and managed remote assets
|
|
102
|
+
├── eventcatalog.lock # completed-run receipt and managed asset state
|
|
103
|
+
└── .eventcatalog-cache/ # reusable verified content
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
This means the organization catalog can be built and deployed through the same process as any other EventCatalog after Federation completes.
|
|
107
|
+
|
|
108
|
+
## Failed updates preserve the previous view
|
|
109
|
+
|
|
110
|
+
Federation validates the graph before hydration. Output changes are staged, and the lockfile is written after the generated resources and public assets are composed.
|
|
111
|
+
|
|
112
|
+
If a normal update fails while installing new output, Federation attempts to restore the previous `federated/` directory and affected public assets. A bad source update should not replace the last successful organization view with partial output.
|
|
113
|
+
|
|
114
|
+
## Federation is explicit
|
|
115
|
+
|
|
116
|
+
The federation command and EventCatalog build are separate:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
npx eventcatalog federate
|
|
120
|
+
npm run build
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
This keeps source acquisition and graph validation visible in local workflows and CI. The current release does not automatically federate before `dev`, `build`, or `generate`.
|
|
124
|
+
|
|
125
|
+
## Related guides
|
|
126
|
+
|
|
127
|
+
- [Ownership and cross-catalog references](/docs/federation/explanation/ownership-and-references)
|
|
128
|
+
- [Lockfile and cache](/docs/federation/explanation/lockfile-and-cache)
|
|
129
|
+
- [Generated output reference](/docs/federation/reference/generated-output)
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 3
|
|
3
|
+
sidebar_label: Lockfile and cache
|
|
4
|
+
title: Federation lockfile and content cache
|
|
5
|
+
description: Understand what eventcatalog.lock records, what it does not pin, and how the Federation cache works.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
|
|
9
|
+
|
|
10
|
+
<EventCatalogEnterprise />
|
|
11
|
+
|
|
12
|
+
Federation writes two kinds of local state:
|
|
13
|
+
|
|
14
|
+
- `eventcatalog.lock` records the source state and managed public files from a completed run.
|
|
15
|
+
- `.eventcatalog-cache/` stores verified content that can be reused by later runs.
|
|
16
|
+
|
|
17
|
+
They solve different problems.
|
|
18
|
+
|
|
19
|
+
<div className="federation-mermaid">
|
|
20
|
+
|
|
21
|
+
```mermaid
|
|
22
|
+
flowchart LR
|
|
23
|
+
CFG[eventcatalog.config.js] -->|controls next run| RUN[eventcatalog federate]
|
|
24
|
+
CACHE[.eventcatalog-cache/] <--> |reuses verified content| RUN
|
|
25
|
+
RUN -->|records completed run| LOCK[eventcatalog.lock]
|
|
26
|
+
RUN --> OUT[federated/]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
## What the lockfile records
|
|
32
|
+
|
|
33
|
+
For each source, `eventcatalog.lock` records:
|
|
34
|
+
|
|
35
|
+
- The stable source ID
|
|
36
|
+
- The Git commit or content-derived local revision used by the run
|
|
37
|
+
- A digest of the resolved source index
|
|
38
|
+
- The time the source was resolved
|
|
39
|
+
|
|
40
|
+
It also records the hash and source of public files managed by Federation. This allows a later run to update or remove generated public files without deleting files owned or modified by the central catalog.
|
|
41
|
+
|
|
42
|
+
A simplified lockfile looks like:
|
|
43
|
+
|
|
44
|
+
```json title="eventcatalog.lock"
|
|
45
|
+
{
|
|
46
|
+
"lockVersion": 1,
|
|
47
|
+
"sources": [
|
|
48
|
+
{
|
|
49
|
+
"id": "acme/payments",
|
|
50
|
+
"digest": "sha256:...",
|
|
51
|
+
"commit": "4a1b7e23c79b4ef9f5f337c5e7655a5ec82a4761",
|
|
52
|
+
"resolvedAt": "2026-08-21T10:30:00.000Z"
|
|
53
|
+
}
|
|
54
|
+
],
|
|
55
|
+
"publicFiles": {
|
|
56
|
+
"payments/payment-flow.svg": {
|
|
57
|
+
"source": "acme/payments",
|
|
58
|
+
"hash": "sha256:..."
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## The lockfile does not control the next run
|
|
65
|
+
|
|
66
|
+
The current lockfile is a completed-run receipt and managed-output record. It is not read as a package-manager-style source lock.
|
|
67
|
+
|
|
68
|
+
Every Federation run:
|
|
69
|
+
|
|
70
|
+
- Resolves the configured GitHub `ref` again
|
|
71
|
+
- Re-indexes the current files for a `file:` source
|
|
72
|
+
- Writes a new lockfile after the update succeeds
|
|
73
|
+
|
|
74
|
+
If `ref` is `main`, a later run can select a newer commit. To make a source repeatable, configure `ref` as an exact commit SHA.
|
|
75
|
+
|
|
76
|
+
:::warning Do not describe the current lockfile as a pin
|
|
77
|
+
|
|
78
|
+
The commit in `eventcatalog.lock` tells you what the completed run used. It does not force the next run to use that commit.
|
|
79
|
+
|
|
80
|
+
:::
|
|
81
|
+
|
|
82
|
+
## Should the lockfile be committed?
|
|
83
|
+
|
|
84
|
+
It is safe to commit `eventcatalog.lock` when you want:
|
|
85
|
+
|
|
86
|
+
- An auditable record of the last completed federation run
|
|
87
|
+
- Managed public-file state shared between environments
|
|
88
|
+
- Source revisions visible during code review
|
|
89
|
+
|
|
90
|
+
Expect a moving branch or edited local source to update the lockfile. Committing it does not by itself make future builds repeatable.
|
|
91
|
+
|
|
92
|
+
## How the content cache works
|
|
93
|
+
|
|
94
|
+
Federation stores content under:
|
|
95
|
+
|
|
96
|
+
```text
|
|
97
|
+
.eventcatalog-cache/
|
|
98
|
+
└── federation/
|
|
99
|
+
└── content/
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Cache entries are addressed by SHA-256 content hashes. Before reusing an entry, Federation calculates its hash again. A corrupt or mismatched entry is discarded instead of being hydrated.
|
|
103
|
+
|
|
104
|
+
The cache avoids downloading identical resource files, schemas, specifications, sidecars, and assets on every run.
|
|
105
|
+
|
|
106
|
+
## Ignore or persist the cache
|
|
107
|
+
|
|
108
|
+
Add the cache to `.gitignore`:
|
|
109
|
+
|
|
110
|
+
```gitignore
|
|
111
|
+
.eventcatalog-cache/
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
The cache is disposable. You can remove it when you need to reclaim disk space; the next run downloads the required content again.
|
|
115
|
+
|
|
116
|
+
The current release does not prune old content automatically, so a long-lived cache can grow as source content changes.
|
|
117
|
+
|
|
118
|
+
Persisting `.eventcatalog-cache` in CI can improve repeat build times, but it is not required for correctness.
|
|
119
|
+
|
|
120
|
+
## Refresh cached content
|
|
121
|
+
|
|
122
|
+
Use `--no-cache` to disable cache reads for one run:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npx eventcatalog federate --no-cache
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
Federation fetches the required content and writes valid content back to the cache. The option refreshes cache entries; it does not permanently disable caching.
|
|
129
|
+
|
|
130
|
+
## Related guides
|
|
131
|
+
|
|
132
|
+
- [Run Federation in CI](/docs/federation/how-to/run-in-ci)
|
|
133
|
+
- [Generated output reference](/docs/federation/reference/generated-output)
|
|
134
|
+
- [CLI reference](/docs/federation/reference/cli)
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
---
|
|
2
|
+
sidebar_position: 4
|
|
3
|
+
sidebar_label: MVP status and feedback
|
|
4
|
+
title: Federation MVP status and feedback
|
|
5
|
+
description: Understand the current Federation release boundaries and how to share useful feedback.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
import EventCatalogEnterprise from '@site/src/components/MDX/EventCatalogEnterprise';
|
|
9
|
+
|
|
10
|
+
<EventCatalogEnterprise />
|
|
11
|
+
|
|
12
|
+
EventCatalog Federation is being introduced as an initial working release for feedback.
|
|
13
|
+
|
|
14
|
+
The core workflow is ready to combine real catalogs, validate ownership, and build an organization-wide view. The first release deliberately keeps source configuration and execution explicit while EventCatalog learns how teams want to operate Federation.
|
|
15
|
+
|
|
16
|
+
## What is included
|
|
17
|
+
|
|
18
|
+
The MVP includes:
|
|
19
|
+
|
|
20
|
+
- GitHub sources
|
|
21
|
+
- Local filesystem sources for development
|
|
22
|
+
- Indexing and hydration of EventCatalog resources
|
|
23
|
+
- Cross-catalog relationship and version resolution
|
|
24
|
+
- Central catalog ownership validation
|
|
25
|
+
- Schemas, specifications, sidecar files, public assets, and custom components
|
|
26
|
+
- Configurable `off`, `warn`, and `error` diagnostic rules
|
|
27
|
+
- Content hashing and a verified local cache
|
|
28
|
+
- Stale generated-output cleanup
|
|
29
|
+
- Restoration of previous output after a normal failed update
|
|
30
|
+
- A lockfile that records completed source and managed public-file state
|
|
31
|
+
|
|
32
|
+
## Current boundaries
|
|
33
|
+
|
|
34
|
+
The first release does not include:
|
|
35
|
+
|
|
36
|
+
- `add`, `status`, or `dry-run` source management commands
|
|
37
|
+
- Automatic Federation before `dev`, `build`, or `generate`
|
|
38
|
+
- Local source watcher integration
|
|
39
|
+
- A frozen mode that installs the commits recorded in `eventcatalog.lock`
|
|
40
|
+
- Graph diff commands
|
|
41
|
+
- Automatic cache pruning
|
|
42
|
+
- Parallel source fetching
|
|
43
|
+
- A command for publishing `catalog.index.json`
|
|
44
|
+
- Federation of top-level reusable `snippets/`
|
|
45
|
+
|
|
46
|
+
Sources are configured manually in `eventcatalog.config.js` and processed with:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npx eventcatalog federate
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
These constraints are intentional for the feedback release. They keep the contract small while the team observes which operational workflows matter in real organizations.
|
|
53
|
+
|
|
54
|
+
## Useful areas for feedback
|
|
55
|
+
|
|
56
|
+
When you try Federation, consider:
|
|
57
|
+
|
|
58
|
+
- Is editing `federation.sources` directly clear enough?
|
|
59
|
+
- Do you prefer moving branches or immutable commits?
|
|
60
|
+
- Which diagnostics should block your organization catalog?
|
|
61
|
+
- Does local filesystem Federation give you a useful development loop?
|
|
62
|
+
- How often do resource, asset, or component collisions occur?
|
|
63
|
+
- Should Federation run manually, in CI, or automatically before builds?
|
|
64
|
+
- Do your teams share custom components, reusable snippets, or npm dependencies?
|
|
65
|
+
- How large are your catalogs and how long does a Federation run take?
|
|
66
|
+
- What information would you expect from future `status` or diff commands?
|
|
67
|
+
|
|
68
|
+
## Share feedback
|
|
69
|
+
|
|
70
|
+
The most useful feedback includes:
|
|
71
|
+
|
|
72
|
+
- What you were trying to federate
|
|
73
|
+
- The number and approximate size of the source catalogs
|
|
74
|
+
- Whether the sources were GitHub or local
|
|
75
|
+
- What worked
|
|
76
|
+
- What was confusing
|
|
77
|
+
- The diagnostic or workflow that blocked you
|
|
78
|
+
- What you expected Federation to do
|
|
79
|
+
|
|
80
|
+
Share feedback in the [EventCatalog Discord](https://eventcatalog.dev/discord) or [open an issue in the EventCatalog repository](https://github.com/event-catalog/eventcatalog/issues).
|
|
81
|
+
|
|
82
|
+
## Related guides
|
|
83
|
+
|
|
84
|
+
- [EventCatalog Federation overview](/docs/federation/overview)
|
|
85
|
+
- [How Federation works](/docs/federation/explanation/how-it-works)
|
|
86
|
+
- [Troubleshooting Federation](/docs/federation/reference/troubleshooting)
|