This page describes intended behaviour or structure. No implementation is claimed unless a section is explicitly marked Current implementation or Evidence.
ReleaseService turns a succeeded pipeline run into a product release: an immutable record with a semantic version, the merged commit, the components the run produced (container images, NuGet and npm packages, Helm charts, templates, static sites) each with its digest and target, the SBOM and provenance attestations, the change proposals merged since the previous release, and the asset releases (agents, templates, blueprints) that generated the code. A release is Candidate until the PublicationVerifier has found every digest in its registry or feed — publication itself stays in the existing CI (external canonical PackagePublishingService, TemplatePublishingService) — then Released, and only a Released release can be promoted. Release notes are drafted with the structured profile as an artifact and never published automatically.
It absorbs ContainerImageService (images are components).
flowchart LR
S["ReleaseService"]
EnvironmentPromotionService["EnvironmentPromotionService"] -->|grpc| S
StudioBff["StudioBff"] -->|sync-http| S
S -->|event| PipelineExecutionService["PipelineExecutionService"]
S -->|grpc| ArtifactService["ArtifactService"]
S -->|grpc| ConnectorRegistryService["ConnectorRegistryService"]
S -->|grpc| ModelRouterService["ModelRouterService"]
S -. "ReleaseCreated" .-> E_ReleaseCreated(("event"))
S -. "ReleaseReady" .-> E_ReleaseReady(("event"))
S -. "ReleaseWithdrawn" .-> E_ReleaseWithdrawn(("event"))
Hold "Alt" / "Option" to enable pan & zoom
The release is the unit the Product Fleet Operations platform inventories and upgrades (P12), the unit promotions move (BC-24), and the unit the marketplace can list when a template is the product. Withdrawing a release blocks promotion; it never revokes what is already deployed — that is a rollback.
ProductRelease — An immutable release of a generated product or module: semantic version, merged commit, components with digests, SBOM and attestations, the pipeline run and change proposals that produced it, and the asset releases (agents, templates, blueprints) that generated it. (catalog entry)
Field
Type
Required
Description
releaseId
guid
yes
tenantId
string
yes
projectId
string
yes
productId
string
yes
Generated product or module id.
version
string
yes
commit
string
yes
pipelineRunId
guid
yes
proposalIds
list:guid
yes
generatedBy
json
yes
agent, template and blueprint release ids (provenance)
ReleaseComponent (entity, in ProductRelease) — One component with its digest, target feed or registry and publication evidence (from the existing CI publishing).
Releases by product, version and state with components and provenance.
GET
/factory/delivery/releases/{releaseId}
GetProductRelease
factory.delivery.read
read
natural
GW-03
One release with components, SBOM, attestations, pipeline run, proposals and generating assets.
POST
/factory/delivery/releases
CreateProductRelease
factory.delivery.release
shared-write
key-header
GW-03
Assemble a release from a succeeded pipeline run (version, components from its results, provenance); Candidate until every component has publication evidence.
POST
/factory/delivery/releases/{releaseId}/withdraw
WithdrawProductRelease
factory.delivery.release
shared-write
natural
GW-03
Withdraw a release with a reason (blocks promotion; revokes nothing already deployed).
gRPC service
Method
Streaming
Visibility
Side effects
Summary
Releases
GetRelease
none
internal
read
Resolve a release with digests and evidence for promotion and fleet inventory.
Checks each component's feed or registry for the digest (through the existing CI publishing evidence and registry reads) and records publication evidence; moves the release to Released when complete.
ReleaseNotesWriter
event
—
fixed
releaseId
Drafts release notes from merged proposals and results with the structured profile and stores them as an artifact (never auto-published).
Azure Artifacts publishing and container builds exist in the pipelines; versions are tags in repositories. No release record, SBOM or attestation handling exists in the estate.
Signed releases with the Factory's workload identity; SLSA level targets per edition; dependency-vulnerability re-scans of Released components with advisories as alerts.