-
-
Notifications
You must be signed in to change notification settings - Fork 0
15 Migration from ALM Accelerator
The ALM Accelerator for Power Platform was a Microsoft-built canvas app and Azure Pipelines YAML toolkit for automating solution export, branch management, solution checker runs, and multi-environment deployment. It was deprecated in 2025. Microsoft's stated replacements are Pipelines for Power Platform (low-code GUI pipeline) and Dataverse Git Integration (source-as-truth sync).
Neither replacement supports code-first ALM — plugins, web resources, and Custom APIs. Flowline fills that gap.
This is the most important thing to understand before migrating.
ALM Accelerator was designed for environments with multiple makers you do not fully control. It treated source control as the coordination layer: export from DEV → commit to branch → PR → solution checker → pipeline deploys. Makers worked in a shared DEV environment and the pipeline was the gatekeeper.
Flowline assumes your team owns the DEV environment. DEV is truth. flowline sync pulls the
current DEV state into source control as unpacked XML (git-diffable). flowline deploy {env} promotes
to Test, UAT, or Prod. There is no PR-based promotion — you sync when DEV is ready, then deploy when
the commit is tested.
| ALM Accelerator | Flowline | |
|---|---|---|
| DEV environment | Shared, multiple makers | Team-owned |
| Source of truth | Source control (after export) | DEV environment |
| Promotion trigger | Pull request + pipeline | flowline deploy {env} |
| Code-first ALM | Delegates to developer's existing tooling | First-class (push, generate) |
If your team does not own the DEV environment (shared maker environment, ISV model, AppSource distribution), Flowline is not the right fit. Use Pipelines for Power Platform for the no-code pipeline and manage code-first components separately.
| ALM Accelerator | Flowline | Notes |
|---|---|---|
| Solution export → ADO branch commit | flowline sync |
Exports from DEV, unpacks to Solution/src/, git-ready |
| Solution import to Test | flowline deploy test |
Packs from source, imports unmanaged |
| Solution import to UAT | flowline deploy uat |
With DTAP version-check gate |
| Solution import to Prod | flowline deploy prod |
With DTAP version-check gate |
| Plugin assembly deployment | flowline push --scope plugins |
|
| Web resource deployment | flowline push --scope webresources |
|
| Plugin + web resource deployment | flowline push |
|
| Solution version increment | flowline sync --bump patch |
Auto before export |
| Early-bound type generation | flowline generate |
|
| Bootstrap from existing solution | flowline clone |
|
| Verify connection | flowline status |
|
| Service principal auth (CI/CD) | pac auth create --kind ServicePrincipal |
|
| Per-env deployment settings (conn refs, env vars) | No equivalent | See Known gaps |
| Solution Checker in pipeline |
flowline deploy (built-in gate) |
Blocks on Critical findings automatically — see 07-Deploy#solution-checker-gate |
| PR / ADO approval gate | Partial — DTAP version-check | See DTAP gates |
| Azure Pipelines YAML templates | Manual — see Step 5 | No generator yet |
| Deployment history | No equivalent | |
| Teams / email notifications | No equivalent | |
| Canvas admin app (maker portal) | No equivalent — Flowline is CLI-only |
- Install PAC CLI:
dotnet tool install --global Microsoft.PowerApps.CLI.Tool(Windows alternative:winget install Microsoft.PowerAppsCLI) - Install Flowline:
dotnet tool install --global Flowline - Authenticate to your DEV environment:
pac auth create --environment https://your-dev.crm4.dynamics.com - Verify:
flowline status
Running everything in one pass is possible, but splitting the migration into two phases reduces risk — only one thing changes at a time, so problems are easier to diagnose.
Phase 1 — Code-first components only (ALM Acc pipeline stays running)
Replace ALM Accelerator for plugin registration and web resource sync using Flowline's standalone mode.
Your existing ALM Acc export and deploy pipeline keeps running unchanged. This is safe: flowline push
only touches plugin steps and web resources — it does not interact with the solution packaging pipeline.
# Plugins only
flowline push MySolution --pluginFile ./bin/Release/MyPlugins.dll --dev https://your-dev.crm4.dynamics.com
# Web resources only
flowline push MySolution --webresources ./WebResources/dist --dev https://your-dev.crm4.dynamics.com
# Both at once
flowline push MySolution --pluginFile ./bin/Release/MyPlugins.dll --webresources ./WebResources/dist --dev https://your-dev.crm4.dynamics.comAlways verify with --dry-run first. Once phase 1 is stable, ALM Acc is no longer needed for
code-first component management.
Plugin registration attributes: ALM Accelerator did not define its own plugin registration attribute system — it deployed your existing assembly regardless of how steps were declared. If you are currently using spkl, Daxif, or PACX attributes, see the corresponding migration guide for the attribute replacement step. This guide focuses on the ALM pipeline.
Phase 2 — Full pipeline replacement (retire ALM Acc)
Set up the Flowline project structure and replace ALM Acc's export and deploy pipeline stages with
flowline sync and flowline deploy. The steps below cover Phase 2.
Bootstrap the project structure from the existing solution in your DEV environment:
flowline clone MySolution \
--dev https://your-dev.crm4.dynamics.com \
--test https://your-test.crm4.dynamics.com \
--prod https://your-prod.crm4.dynamics.comThis creates:
-
.flowline— environment URLs and solution config -
Solution/—<SolutionName>.cdsprojand unpacked solution XML -
Plugins/—<SolutionName>.Plugins.csproj -
WebResources/—<SolutionName>.WebResources.csproj
The unpacked solution XML in Solution/src/ is what you commit to source control — the same content
ALM Acc exported and committed to ADO branches.
ALM Accelerator exported the solution from DEV and committed the result to an ADO branch. flowline sync does the same in one command:
# ALM Accelerator flow:
# Canvas app → Export → commit to ADO branch → open PR
# Flowline
flowline syncflowline sync exports the solution from DEV, auto-bumps the patch version, unpacks it to Solution/src/,
and leaves the files ready for git commit. You control the commit and branch strategy — Flowline does
not open PRs or manage branches.
# Typical sync → commit flow
flowline sync
git add Solution/src
git commit -m "sync: MySolution patch bump"To skip the auto-bump (re-sync without incrementing the version):
flowline sync --bump noneALM Accelerator ran pack + import inside Azure Pipelines. flowline deploy does the same:
# ALM Accelerator pipeline:
# Pack → solution checker → import to Test → (PR approval) → import to UAT/Prod
# Flowline
flowline deploy test
flowline deploy uat
flowline deploy prodflowline deploy {env} reads the environment URL from .flowline, packs the solution from Solution/src/,
imports it to the target, and runs pre/post-import orphan cleanup automatically. The target environment
must be authenticated (see Step 4).
ALM Accelerator stored service principal credentials in Azure Pipelines variable groups and connected them to environment service connections. Flowline reuses the PAC CLI token cache — no credentials in Flowline's own config.
For interactive use (DEV, daily work):
pac auth create --environment https://your-dev.crm4.dynamics.comFor CI/CD (service principal per environment):
# Test
pac auth create --kind ServicePrincipal \
--applicationId $CLIENT_ID \
--clientSecret $CLIENT_SECRET \
--tenant $TENANT_ID \
--environment https://your-test.crm4.dynamics.com
# Prod (repeat for each additional environment)
pac auth create --kind ServicePrincipal \
--applicationId $CLIENT_ID \
--clientSecret $CLIENT_SECRET \
--tenant $TENANT_ID \
--environment https://your-prod.crm4.dynamics.comRun flowline status to verify all environment connections are active.
ALM Accelerator provided Azure Pipelines YAML templates out of the box. Flowline has no generated templates yet — the examples below are starting points to adapt to your repo.
name: Flowline Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Install tools
run: |
dotnet tool install --global Microsoft.PowerApps.CLI.Tool
dotnet tool install --global Flowline
- name: Authenticate to Test
run: |
pac auth create --kind ServicePrincipal `
--applicationId ${{ secrets.CLIENT_ID }} `
--clientSecret ${{ secrets.CLIENT_SECRET }} `
--tenant ${{ secrets.TENANT_ID }} `
--environment ${{ secrets.TEST_ENV_URL }}
- name: Build plugins
run: dotnet build Plugins/MySolution.Plugins.csproj -c Release
- name: Push plugins
run: flowline push --scope plugins
- name: Deploy to Test
run: flowline deploy testAdd a separate job (or workflow) gated on the Test job for UAT/Prod promotion.
trigger:
- main
pool:
vmImage: windows-latest
steps:
- task: PowerShell@2
displayName: Install tools
inputs:
targetType: inline
script: |
dotnet tool install --global Microsoft.PowerApps.CLI.Tool
dotnet tool install --global Flowline
- task: PowerShell@2
displayName: Authenticate to Test
inputs:
targetType: inline
script: |
pac auth create --kind ServicePrincipal `
--applicationId $(ClientId) `
--clientSecret $(ClientSecret) `
--tenant $(TenantId) `
--environment $(TestEnvUrl)
- task: DotNetCoreCLI@2
displayName: Build plugins
inputs:
command: build
projects: Plugins/MySolution.Plugins.csproj
arguments: -c Release
- task: PowerShell@2
displayName: Push plugins
inputs:
targetType: inline
script: flowline push --scope plugins
- task: PowerShell@2
displayName: Deploy to Test
inputs:
targetType: inline
script: flowline deploy testUse Environments in Azure Pipelines to gate UAT and Prod stages behind manual approvals while Flowline's native approval gate feature is not yet available.
ALM Accelerator used ADO PR approval status to gate promotion between environments. Flowline enforces DTAP gates differently today:
-
DEV block:
flowline deployrefuses to run against a DEV environment. Deployments always flow from packed source (Solution/src/), never from DEV to another environment directly. - Version check: deploying to UAT or Prod checks that the predecessor environment already carries the version being deployed — you cannot skip environments. Deploying v1.2 to Prod fails if UAT is still on v1.1; promote to UAT first.
There is no PR-based or tag-based approval gate in the current version of Flowline. Gating Prod deploys
today means restricting who can trigger the pipeline stage that runs flowline deploy prod — use
Azure DevOps Environments approval or GitHub Actions environment: production protection rules.
ALM Accelerator's most-cited feature was its per-env deployment settings JSON — a file committed to source that mapped connection reference names to connection IDs, and environment variable names to values, per target environment. After import, the pipeline applied these settings automatically, enabling fully unattended CI deploys.
Flowline has no equivalent today. After flowline deploy test, connection references and environment
variable values must be configured manually in the target via the maker portal or PAC CLI.
Tracked as a planned feature — see 12-Planned-Features#flowline-configure--post-deploy-state-reconciliation.
ALM Accelerator gated Prod deployments on ADO pull request approval. Flowline's DTAP gate today is a version-check only — it verifies the source version is higher than the target, but does not require a separate approval action. Use your CI platform's environment protection rules as the gate until a native Flowline approval mechanism is available.
Flowline does not yet generate CI/CD YAML from the project config. The examples in Step 5 are starting points you maintain manually. Adapt the solution name, environment secrets, and project paths to match your repo.