Azure DevOps Release Completed to SharePoint Changelog
When a release pipeline completes, compile the associated work items and append a changelog entry to a SharePoint page.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
When an Azure DevOps build pipeline finishes (succeeded or partially succeeded), this flow appends a structured changelog entry to a SharePoint list and emails a roll-up summary to the release notification distribution list. It runs on a recurrence trigger that polls the ADO REST API for builds completed in a configurable look-back window, then for each completed build it fetches the associated work items and writes one row per release into the SharePoint changelog list.
Because every external identifier — ADO organization, ADO project, SharePoint site, list name, recipient email, polling window, status filter — is resolved through Dataverse environment variables, the same exported solution can be deployed to a new tenant by only updating the env var values and authorizing the three connection references.
Use Case
Audience: Developers and Project Managers who own release communications.
Typical scenario: An engineering team ships nightly or per-PR builds to production. Stakeholders want a single, queryable changelog of what shipped, when, with which work items, without anyone having to manually copy build numbers and PBI links into a wiki page after every deployment. This flow keeps that changelog fresh automatically and emails a digest the moment any new build crosses the finish line.
The flow is ideal for teams that:
- Developers who own release communications
- Project Managers tracking what shipped in each build
- Engineering teams running nightly or per-PR builds to production
- Stakeholders who want a single queryable changelog of releases
Flow Architecture
Recurrence: Poll For Completed Releases
Recurrence (every 1 hour)Schedule the polling cycle that drives the flow.
Init env-var variables
Initialize variable (x7)Resolve all seven environment variables (varAdoOrganization, varAdoProject, varSharePointSiteURL, varChangelogListName, varNotificationEmail, varReleaseStatusFilter, varPollingMinutes) into runtime variables.
Init varSinceDateTime
Initialize variableComputes subtractFromTime(utcNow(), int(varPollingMinutes), 'Minute') — the ISO-8601 lower bound for the build query.
Init varProcessedSummary / varProcessedCount
Initialize variable (x2)Empty seed for the email digest table plus an integer counter used to branch on whether anything was processed.
Get Recently Completed Builds
Azure DevOps - HttpRequestGET {project}/_apis/build/builds?statusFilter=completed&resultFilter={statusFilter}&minTime={iso}&queryOrder=finishTimeDescending&api-version=7.0 against the configured ADO organization/project.
Parse Builds Response
Parse JSONStrongly-typed schema: value[] of id, buildNumber, result, startTime, finishTime, sourceBranch, sourceVersion, definition.name, _links.web.href.
For Each Completed Release
Apply to eachLoops over body('Parse_Builds_Response')?['value']. For each build: fetch work items (Get Build Work Items HttpRequest), Parse Work Items Response, Select Work Item Links (object-form Select that emits one <li> per work item), Compose Work Items Html (wraps the <li> rows in <ul> using the triple-replace unwrap trick, or shows 'No work items linked'), Compose Build Web Url (coalesce(_links.web.href, fallback URL built from org/project/buildId)), Compose Status Choice (maps ADO succeeded/partiallySucceeded/failed to SharePoint Choice values), Append Changelog Entry To SharePoint (PostItem with nested item:{} object format), Append To Summary (appends a <tr>...</tr> row to the email digest variable), and Increment Processed Count (varProcessedCount += 1).
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_AdoOrganization | String | <configure> | Azure DevOps organization name — just the org slug, NOT the full URL (the connector prepends dev.azure.com/). Set per tenant. |
| flowlibs_AdoProject | String | <configure> | Azure DevOps project name. Set per tenant. |
| flowlibs_SharePointSiteURL | String | https://your-tenant.sharepoint.com | SharePoint site URL hosting the changelog list. |
| flowlibs_ChangelogListName | String | FlowLibs - Release Changelog | SharePoint list name to append release rows to. |
| flowlibs_NotificationEmail | String | <configure> | Distribution email address that receives the release digest. Set per tenant. |
| flowlibs_AdoReleaseStatusFilter | String | succeeded,partiallySucceeded | Comma-separated ADO resultFilter values controlling which completed builds are included (e.g. succeeded, partiallySucceeded, failed). |
| flowlibs_ReleasePollingMinutes | String | 60 | Polling window — how far back from utcNow() to look for completed builds. Keep this aligned with the recurrence interval so each cycle queries a non-overlapping window. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Azure DevOps (Visual Studio Team Services) | shared_visualstudioteamservices | HttpRequest (Used twice — Get Recently Completed Builds and Get Build Work Items (queries the ADO Build REST API).) |
| SharePoint Online | shared_sharepointonline | PostItem (Appends one row per release to the changelog list using the nested item:{} object format.) |
| Office 365 Outlook | shared_office365 | SendEmailV2 (Sends the HTML digest email summarising all releases processed in the current polling cycle.) |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Import the unmanaged solution
- Import the unmanaged solution into the target environment (or repoint the deployment) so the env vars, connection references, and flow land together.
- Set environment variable values
- Set values for flowlibs_AdoOrganization, flowlibs_AdoProject, and flowlibs_NotificationEmail. Override the defaults on flowlibs_SharePointSiteURL and flowlibs_ChangelogListName if your changelog lives elsewhere.
- Authorize the three connection references
- Authorize Azure DevOps, SharePoint Online, and Office 365 Outlook. The Azure DevOps reference uses the raw-GUID connection name format — when the designer first opens the flow it will show 'Invalid connection, please update your connection' on every ADO action; click each one and rebind to your authorized ADO connection.
- Create the SharePoint changelog list
- Create a list named 'FlowLibs - Release Changelog' (or your override) on the configured site, with columns: Title (Text), ReleaseName (Text), ReleaseDate (DateTime), Environment (Choice: Development, Staging, Production, UAT), PipelineName (Text), WorkItems (Multi-line text), ReleaseNotes (Multi-line text), ReleaseUrl (Hyperlink), Status (Choice: Succeeded, PartiallySucceeded, Failed, Cancelled).
- Adjust polling cadence
- The trigger is set to every 1 hour. Change recurrence.frequency and recurrence.interval directly in the flow JSON if you need a tighter loop, and keep flowlibs_ReleasePollingMinutes aligned with the recurrence interval so each cycle queries a non-overlapping window.
- Switch from build pipelines to classic releases
- Edit Get_Recently_Completed_Builds and Get_Build_Work_Items to call vsrm.dev.azure.com/{org}/{project}/_apis/release/... endpoints instead. The ADO connector's HttpRequest action accepts an absolute URL on the parameters/Uri field if you need to override the dev.azure.com/{account} base.
- Turn the flow on
- Solution ships with the flow Stopped (Off). Turn it on once env vars, connections, and the SharePoint list are all in place.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Lookback window
Produces the ISO-8601 timestamp consumed by ADO's minTime query parameter.
EXPR.02ADO build query URI
Builds the relative URI for Get Recently Completed Builds against the configured project.
EXPR.03Work items URI
Per-build work items request inside the Apply to each loop.
EXPR.04Status mapping
Nested if() that maps the ADO result enum to the SharePoint Status Choice values exactly.
EXPR.05Build web URL fallback
Defends against the ADO API occasionally omitting _links.web for queued-but-not-yet-fully-resolved builds.
EXPR.06Work items HTML unwrap
Collapses the Select action's { html: ... } object array into a flat HTML fragment that downstream actions can drop into the email/SharePoint body.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.