Microservices¶
The DevOps / GitOps Platform is composed of 14 microservices under the ConnectSoft.Factory.DevOps.* namespace, following the naming conventions and the Clean Architecture layout of the ConnectSoft.MicroserviceTemplate. Each service owns its aggregate roots and store; no service reads another's database.
Target Architecture — Final-State Design
All 14 services are described in their final state. They are deployed independently on the Runtime & Cloud Platform and scaled per workload.
Service Catalog¶
| Microservice | Responsibility | APIs | Events | Aggregate Roots | Store |
|---|---|---|---|---|---|
| RepositoryService | Provision and configure Azure DevOps Git repositories per project/module. | POST /repositories |
RepositoryProvisioned |
Repository | Azure SQL |
| BranchService | Create and manage branches and branch policies. | POST /repositories/{repoId}/branches |
BranchCreated |
Branch | Azure SQL |
| CommitService | Author commits from generated artifacts with full lineage. | POST /repositories/{repoId}/commits |
CommitCreated |
Commit | Azure SQL |
| PullRequestService | Open, review, and merge pull requests; enforce branch policies. | POST /pull-requests, GET /pull-requests/{pullRequestId} |
PullRequestOpened, PullRequestMerged |
PullRequest | Azure SQL |
| PipelineGeneratorService | Generate YAML pipeline definitions from module metadata (aligned to ConnectSoft.AzurePipelines). |
POST /pipelines/generate |
PipelineGenerated |
PipelineDefinition | Azure SQL |
| PipelineExecutionService | Trigger and track pipeline runs on Azure DevOps. | POST /pipelines/{pipelineId}/run |
PipelineRunStarted |
PipelineRun | Azure SQL |
| BuildResultService | Ingest, normalize, and expose build/test results and artifacts. | (internal) | BuildCompleted |
BuildResult | Azure SQL + Blob (logs) |
| ReleaseService | Plan releases and gate them through approvals. | POST /releases, POST /releases/{releaseId}/approve |
ReleasePlanned, ReleaseApproved |
ReleasePlan, ReleaseApproval | Azure SQL |
| EnvironmentPromotionService | Promote approved releases across dev → test → staging → prod. | (internal) | DeploymentPromoted |
EnvironmentPromotion | Azure SQL |
| PackagePublishingService | Publish NuGet packages to Azure Artifacts feeds. | (internal) | PackagePublished |
PackagePublication | Azure SQL |
| ContainerImageService | Build and push container images to Azure Container Registry. | (internal) | ContainerImageBuilt |
ContainerImage | Azure SQL + ACR |
| IaCProvisioningService | Plan and apply Pulumi (.NET/C#) infrastructure programs. | POST /iac/provision |
InfrastructureProvisioned |
InfrastructurePlan | Azure SQL |
| GitOpsSyncService | Reconcile running state with desired state declared in Git. | (internal) | GitOpsSynced |
GitOpsSyncState | Azure SQL |
| DeploymentManifestService | Render and version deployment manifests (Helm/Kustomize/Pulumi outputs). | (internal) | DeploymentManifestRendered |
DeploymentManifest | Azure SQL + Blob |
Implementation Notes
The YAML emitted by PipelineGeneratorService mirrors the templates maintained in the existing ConnectSoft.AzurePipelines repository, and PackagePublishingService targets the same Azure Artifacts NuGet feeds used by the factory today.
Service Interaction Diagram¶
flowchart LR
Repo["RepositoryService"] --> BranchS["BranchService"]
BranchS --> CommitS["CommitService"]
CommitS --> PRS["PullRequestService"]
PRS -->|"PullRequestMerged"| PipeGen["PipelineGeneratorService"]
PipeGen --> PipeExec["PipelineExecutionService"]
PipeExec --> BuildRes["BuildResultService"]
BuildRes -->|"BuildCompleted"| PkgPub["PackagePublishingService"]
BuildRes -->|"BuildCompleted"| ContImg["ContainerImageService"]
BuildRes -->|"BuildCompleted"| ReleaseS["ReleaseService"]
PkgPub --> ReleaseS
ContImg --> ReleaseS
ReleaseS -->|"ReleaseApproved"| IaC["IaCProvisioningService"]
ReleaseS -->|"ReleaseApproved"| DeployMan["DeploymentManifestService"]
DeployMan --> EnvPromo["EnvironmentPromotionService"]
IaC --> GitSync["GitOpsSyncService"]
EnvPromo -->|"DeploymentPromoted"| GitSync
Hold "Alt" / "Option" to enable pan & zoom
Cross-Cutting Concerns¶
- Multi-tenancy — every service applies the
ConnectSoft.Extensions.Saas.*tenant context; all queries are tenant- and project-scoped. - Messaging — services publish and consume via MassTransit on Azure Service Bus using the canonical envelope.
- Persistence — Azure SQL (or PostgreSQL) via NHibernate for metadata; large artifacts go to Blob, ACR, or Azure Artifacts.
- Idempotency — each service deduplicates inbound events on
eventId; commands are idempotent on natural keys.