Skip to content

Workers

The platform's long-running and event-driven work is performed by 11 workers built on the ConnectSoft.WorkerTemplate. Each worker is triggered by an event, schedule, or command, processes idempotently, and emits envelope-wrapped events that drive the next stage of delivery.

Target Architecture — Final-State Design

Workers are deployed as independently scalable background services on the Runtime & Cloud Platform. They consume from Azure Service Bus via MassTransit and honor the consumer rules in the event envelope.

Worker Catalog

Worker Trigger Purpose Input Output Retry Idempotency
RepositoryProvisioningWorker Command ProvisionRepository Create and configure the Azure DevOps Git repository. Provision request RepositoryProvisioned Exponential, 5x Natural key tenantId+name; existing repo returns provisioned
CommitWorker Command CreateCommit Write generated artifact files into a branch and commit. Artifact bundle, branch CommitCreated Exponential, 5x Dedup on content hash; same tree → no-op
PullRequestWorker Event CommitCreated / command OpenPullRequest Open a PR and attach policy/build checks. Commit, branch pair PullRequestOpened Exponential, 5x Dedup on (repo, source, target) open PR
PipelineGenerationWorker Event RepositoryProvisioned / PullRequestOpened Generate YAML pipeline from module metadata. Module metadata PipelineGenerated Exponential, 3x Dedup on (repo, moduleId, templateVersion)
PipelineMonitorWorker Schedule + event PipelineRunStarted Poll/stream Azure DevOps run status to completion. Pipeline run id BuildCompleted (via ingestion) Poll w/ backoff Status reconciled on pipelineRunId
BuildResultIngestionWorker Event from pipeline completion Normalize build/test results, store logs in Blob. Build outputs BuildCompleted Exponential, 5x Dedup on buildId
ReleaseOrchestrationWorker Event BuildCompleted / ReleaseApproved Drive the release state machine: plan → approve → promote. Build result, release plan ReleasePlanned, DeploymentPromoted Exponential, 5x Saga keyed on releaseId
IaCProvisioningWorker Event ReleaseApproved / command ProvisionInfrastructure Run Pulumi preview + apply; detect drift. Infrastructure plan InfrastructureProvisioned Exponential, 3x (apply guarded) Pulumi stack state is idempotent; dedup on planId
GitOpsSyncWorker Schedule + event DeploymentPromoted Reconcile cluster/env state with Git desired state. Desired-state ref GitOpsSynced Continuous reconcile loop Convergent reconcile; dedup on (env, commitSha)
ContainerBuildWorker Event BuildCompleted Build and push container image to ACR. Build artifacts ContainerImageBuilt Exponential, 3x Dedup on image digest
PackagePublishingWorker Event BuildCompleted Publish NuGet package(s) to Azure Artifacts. Build artifacts PackagePublished Exponential, 5x Dedup on (packageId, version); immutable versions

Event-Flow Diagram

flowchart TB
    ProvCmd["ProvisionRepository"] --> RepoWk["RepositoryProvisioningWorker"]
    RepoWk -->|"RepositoryProvisioned"| PipeGenWk["PipelineGenerationWorker"]
    CommitCmd["CreateCommit"] --> CommitWk["CommitWorker"]
    CommitWk -->|"CommitCreated"| PRWk["PullRequestWorker"]
    PRWk -->|"PullRequestOpened"| PipeGenWk
    PipeGenWk -->|"PipelineGenerated"| PipeMonWk["PipelineMonitorWorker"]
    PipeMonWk --> BuildWk["BuildResultIngestionWorker"]
    BuildWk -->|"BuildCompleted"| ContWk["ContainerBuildWorker"]
    BuildWk -->|"BuildCompleted"| PkgWk["PackagePublishingWorker"]
    BuildWk -->|"BuildCompleted"| RelWk["ReleaseOrchestrationWorker"]
    ContWk --> RelWk
    PkgWk --> RelWk
    RelWk -->|"ReleaseApproved"| IaCWk["IaCProvisioningWorker"]
    RelWk -->|"DeploymentPromoted"| GitWk["GitOpsSyncWorker"]
    IaCWk -->|"InfrastructureProvisioned"| GitWk
    GitWk -->|"GitOpsSynced"| Runtime["Runtime and Cloud Platform"]
Hold "Alt" / "Option" to enable pan & zoom

Reliability Patterns

  • Retry — transient failures use exponential backoff with jitter; the retry count is recorded on the message. Apply operations (Pulumi, deployment) are guarded so they never retry a partially-applied mutation without re-previewing.
  • Idempotency — every worker derives an idempotency key from eventId + handler name (see metadata schema); processed keys are persisted so re-delivery is a no-op.
  • Dead-lettering — messages that exhaust retries move to a dead-letter subqueue with the full envelope preserved for replay and human triage.
  • Sagas — multi-step flows (release orchestration, GitOps reconciliation) are MassTransit sagas keyed by releaseId / environment, making them resumable after restart.

Pillar Alignment

  • Autonomy — workers let agents fire-and-forget delivery commands while the platform drives them to completion.
  • Observability — each worker emits start/finish events carrying traceId, feeding the Observability & Feedback Platform.
  • Governance — the ReleaseOrchestrationWorker will not promote without a recorded ReleaseApproved.