Skip to content

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.