0008 - argocd-eda Uncoupling

Summary

Uncouple the argocd-eda monolith into focused repositories:

  1. Extract image-factorycraigedmunds/image-factory
  2. Extract backstagecraigedmunds/backstage
  3. Delete superseded ingress configs
  4. Rename argocd-edaeda-mesh and 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

  1. Extract image-factory to standalone repo
  2. Extract backstage to standalone repo
  3. Delete superseded ingress configs (helm/traefik-ingress, platform/ingress)
  4. Rename argocd-eda → eda-mesh and restructure for clarity
  5. Update workspace configuration with new repos
  6. Move ArgoCD seeds to k8s-lab

Non-Goals

  1. Refactor internal code - pure extraction/restructure
  2. Change functionality - behavior remains identical

Technical Approach

Repository Mapping

Source (argocd-eda)DestinationNotes
image-factory/image-factory:./Core image-factory
.kiro/specs/image-factory/image-factory:.kiro/specs/Specs
.github/workflows/image-factory-*.ymlimage-factory:.github/workflows/CI/CD
backstage/backstage:./Full Backstage app
.kiro/specs/backstage/backstage:.kiro/specs/Specs
helm/traefik-ingress/DELETESuperseded
platform/ingress/DELETESuperseded
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 repo
  • image-factory/ → image-factory repo
  • helm/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.git

Phase 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 level mesh/
  • 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:

RepoAction
argocd-edaRead source, restructure, rename
image-factoryWrite new structure
backstageWrite new structure
k8s-labWrite seeds and infra
WorkspaceUpdate 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-seeds

PRs created: 4 total (one per repo with changes)

Success Criteria

  1. image-factory repo functional with tests passing
  2. backstage repo functional with tests passing
  3. k8s-lab has all seeds and infra configs
  4. eda-mesh (renamed) is clean with mesh at top level
  5. ArgoCD syncs all apps from new locations
  6. GitHub repo renamed argocd-eda → eda-mesh
  7. Workspace docs updated

Risks

RiskImpactMitigation
Breaking ArgoCD syncHighUpdate seeds before removing source
Backstage build failureHighTest full build before cleanup
GitHub rename issuesMediumUpdate all references after rename
Missing filesMediumDiff before/after each extraction