0008 - argocd-eda Uncoupling
Summary
Uncouple the argocd-eda monolith into focused repositories:
- Extract image-factory →
craigedmunds/image-factory - Extract backstage →
craigedmunds/backstage - Delete superseded ingress configs
- Rename argocd-eda →
eda-meshand promote mesh to top level
Problem Statement
The argocd-eda repository has grown into a monolith containing unrelated systems:
- Backstage developer portal
- Image factory lifecycle management
- EDA/mesh event-driven architecture
- Platform/ingress configuration
This coupling creates deployment dependencies, unclear ownership, and CI/CD complexity.
Goals
- Extract image-factory to standalone repo
- Extract backstage to standalone repo
- Delete superseded ingress configs (helm/traefik-ingress, platform/ingress)
- Rename argocd-eda → eda-mesh and restructure for clarity
- Update workspace configuration with new repos
- Move ArgoCD seeds to k8s-lab
Non-Goals
- Refactor internal code - pure extraction/restructure
- Change functionality - behavior remains identical
Technical Approach
Repository Mapping
| Source (argocd-eda) | Destination | Notes |
|---|---|---|
image-factory/ | image-factory:./ | Core image-factory |
.kiro/specs/image-factory/ | image-factory:.kiro/specs/ | Specs |
.github/workflows/image-factory-*.yml | image-factory:.github/workflows/ | CI/CD |
backstage/ | backstage:./ | Full Backstage app |
.kiro/specs/backstage/ | backstage:.kiro/specs/ | Specs |
helm/traefik-ingress/ | DELETE | Superseded |
platform/ingress/ | DELETE | Superseded |
platform/kustomize/seed/* | k8s-lab:other-seeds/ | ArgoCD seeds |
eda-mesh Structure (renamed from argocd-eda)
Promote mesh to top level, clean structure:
eda-mesh/
├── README.md
├── Taskfile.yaml
├── .github/workflows/
├── mesh/ # Promoted from eda/mesh/
│ ├── producers/
│ ├── consumers/
│ ├── services/
│ └── lobs/
├── helm/
│ ├── mesh-consumer/
│ ├── mesh-lob/
│ ├── mesh-lob-service/
│ └── uv-service/
├── kustomize/
│ ├── mesh/
│ ├── confluent/
│ └── camel-karavan/
├── services/ # From eda/services/
├── apps/
│ ├── e2e-test-runner/
│ └── uv/
├── libs/
│ └── workspace-shared/
└── .kiro/specs/
Removed from eda-mesh:
backstage/→ backstage repoimage-factory/→ image-factory repohelm/traefik-ingress/→ DELETE (superseded)platform/ingress/→ DELETE (superseded)platform/kustomize/seed/→ k8s-lab
image-factory Repo Structure
image-factory/
├── README.md
├── Taskfile.yaml
├── .github/workflows/
├── app/ # Analysis Tool
├── cdk8s/ # CDK8s manifests
├── config/
│ └── images.yaml
├── state/
├── scripts/
├── tests/
└── .kiro/specs/
backstage Repo Structure
backstage/
├── README.md
├── Taskfile.yaml
├── app-config.yaml
├── package.json
├── yarn.lock
├── .github/workflows/
├── app/
│ ├── packages/
│ └── plugins/
├── kustomize/
├── docs/
└── .kiro/specs/
k8s-lab Additions
k8s-lab/
└── other-seeds/
├── image-factory/
│ └── image-factory-app.yaml
├── backstage/
│ └── backstage-app.yaml
└── eda-mesh/
└── eda-mesh-app.yaml # Updated from argocd-eda
Phase Plan
Phase 1: Clone New Repos
cd repos
git clone git@github.com:craigedmunds/image-factory.git
git clone git@github.com:craigedmunds/image-factory-state.git
git clone git@github.com:craigedmunds/backstage.gitPhase 2: Migrate image-factory
- Copy files to new repo
- Move state out into its own repo
- Adapt workflows for new context
- Update paths in configs
Phase 3: Migrate backstage
- Copy files to new repo
- Adapt workflows
- Test build
Phase 4: Move seeds to k8s-lab
- ArgoCD seeds → k8s-lab/other-seeds/
- Delete superseded ingress configs (
helm/traefik-ingress/,platform/ingress/)
Phase 5: Restructure argocd-eda → eda-mesh
- Promote
eda/mesh/to top levelmesh/ - Remove extracted directories
- Update README, Taskfile
- Rename repo on GitHub
Phase 6: Update workspace
- Add new repos to
docs/workspace-projects.md - Update any cross-references
Multi-Repo Builder Configuration
5 repos involved:
| Repo | Action |
|---|---|
argocd-eda | Read source, restructure, rename |
image-factory | Write new structure |
backstage | Write new structure |
k8s-lab | Write seeds and infra |
| Workspace | Update docs |
Builder setup:
# Clone new repos
cd repos
git clone git@github.com:craigedmunds/image-factory.git
git clone git@github.com:craigedmunds/backstage.git
# Create builder worktrees
mkdir -p .builders/0008
git -C repos/argocd-eda worktree add ../../.builders/0008/argocd-eda -b builder/0008-restructure
git -C repos/image-factory worktree add ../../.builders/0008/image-factory -b builder/0008-init
git -C repos/backstage worktree add ../../.builders/0008/backstage -b builder/0008-init
git -C repos/k8s-lab worktree add ../../.builders/0008/k8s-lab -b builder/0008-seedsPRs created: 4 total (one per repo with changes)
Success Criteria
- image-factory repo functional with tests passing
- backstage repo functional with tests passing
- k8s-lab has all seeds and infra configs
- eda-mesh (renamed) is clean with mesh at top level
- ArgoCD syncs all apps from new locations
- GitHub repo renamed argocd-eda → eda-mesh
- Workspace docs updated
Risks
| Risk | Impact | Mitigation |
|---|---|---|
| Breaking ArgoCD sync | High | Update seeds before removing source |
| Backstage build failure | High | Test full build before cleanup |
| GitHub rename issues | Medium | Update all references after rename |
| Missing files | Medium | Diff before/after each extraction |