PPDS ALM

January 12, 2026 · View on GitHub

CI/CD templates for Power Platform Application Lifecycle Management (ALM).

Part of the Power Platform Developer Suite ecosystem.

Quick Start

GitHub Actions

name: Deploy to QA

on:
  push:
    branches: [develop]

jobs:
  deploy:
    uses: joshsmithxrm/ppds-alm/.github/workflows/solution-deploy.yml@v1
    with:
      solution-name: MySolution
      solution-folder: solutions/MySolution/src
      build-plugins: true
      package-type: Managed
    secrets:
      environment-url: ${{ vars.POWERPLATFORM_ENVIRONMENT_URL }}
      tenant-id: ${{ vars.POWERPLATFORM_TENANT_ID }}
      client-id: ${{ vars.POWERPLATFORM_CLIENT_ID }}
      client-secret: ${{ secrets.POWERPLATFORM_CLIENT_SECRET }}

Reusable Workflows

WorkflowPurpose
solution-export.ymlExport solution from environment with noise filtering
solution-import.ymlImport solution with version check and retry logic
solution-build.ymlBuild .NET code and pack solution
solution-validate.ymlPR validation with build, pack, and Solution Checker
solution-deploy.ymlFull deployment: build, pack, import
plugin-deploy.ymlDeploy plugins using PPDS.Cli
plugin-extract.ymlExtract plugin registrations from assembly
solution-promote.ymlPromote solution between environments (export, build, deploy)
azure-deploy.ymlDeploy Azure integration resources

Composite Actions

Granular, reusable actions for building custom workflows:

ActionPurpose
setup-pac-cliInstall .NET SDK and Power Platform CLI
pac-authAuthenticate to Power Platform environment
export-solutionExport and unpack solution
import-solutionImport with version check and retry
pack-solutionPack solution from source
build-solutionBuild .NET solution with tests
check-solutionRun PowerApps Solution Checker
analyze-changesFilter noise from exports
copy-plugin-assembliesCopy built DLLs to solution
copy-plugin-packagesCopy NuGet packages to solution

See Actions Reference for detailed documentation.

Key Features

Smart Import

The import action automatically:

  • Compares versions - Skips import if target has same or newer version
  • Retries transient failures - Handles concurrent import conflicts with configurable retry
  • Applies deployment settings - Auto-detects environment-specific configuration files
- uses: joshsmithxrm/ppds-alm/.github/actions/import-solution@v1
  with:
    solution-path: ./exports/MySolution_managed.zip
    solution-name: MySolution
    skip-if-same-version: 'true'
    max-retries: '3'
    settings-file: ./config/qa.deploymentsettings.json

Noise Filtering

Solution exports often contain volatile changes that aren't real customizations:

  • Solution.xml version timestamps
  • Canvas app random URI suffixes
  • Workflow session IDs
  • Whitespace-only changes

The analyze-changes action filters these, preventing unnecessary commits.

Solution Checker Integration

Validate solution quality before deployment:

- uses: joshsmithxrm/ppds-alm/.github/actions/check-solution@v1
  with:
    solution-path: ./exports/MySolution_managed.zip
    fail-on-level: High  # Critical, High, Medium, Low, Informational
    geography: unitedstates

Documentation

Getting Started

Reference

Azure Integration

Strategy Guides

Repository Structure

ppds-alm/
├── .github/
│   ├── actions/                    # Composite actions
│   │   ├── setup-pac-cli/
│   │   ├── pac-auth/
│   │   ├── export-solution/
│   │   ├── import-solution/
│   │   ├── pack-solution/
│   │   ├── build-solution/
│   │   ├── check-solution/
│   │   ├── analyze-changes/
│   │   ├── copy-plugin-assemblies/
│   │   └── copy-plugin-packages/
│   └── workflows/                  # All workflows
│       ├── _ci.yml                 # CI for this repo (internal)
│       ├── solution-export.yml     # Reusable workflows (workflow_call)
│       ├── solution-import.yml
│       ├── solution-build.yml
│       ├── solution-validate.yml
│       ├── solution-deploy.yml
│       ├── plugin-deploy.yml
│       ├── plugin-extract.yml
│       ├── solution-promote.yml
│       └── azure-deploy.yml
├── bicep/                          # Azure Bicep modules
├── docs/
├── CHANGELOG.md
└── README.md

Compatibility

ALM VersionDependencies
v1.0.xPPDS.Cli (for plugins), PAC CLI (for solutions)

Versioning

Use version tags for stability:

TagDescriptionRecommendation
@v1Latest v1.x releaseRecommended for production
@v1.0.0Specific versionMaximum stability
@mainLatest developmentNot recommended for production

PPDS Ecosystem

RepositoryPurposeInstall
power-platform-developer-suiteSDK + CLI + TUI + Extension + MCPNuGet / VS Code Marketplace
ppds-toolsPowerShell ModuleInstall-Module PPDS.Tools
ppds-almCI/CD TemplatesReference in pipelines
ppds-demoReference ImplementationClone
ppds-orchestrationParallel Claude Code Sessionsnpm

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Run actionlint on GitHub Actions workflows
  5. Test with actual CI/CD environment
  6. Submit a pull request

License

MIT License - see LICENSE for details.

Support