trigger: - main pool: name: 'GlobalSP-SelfHosted' variables: solutionName: 'CopilotStudioDemoSolution' solutionFile: '$(solutionName)_managed.zip' artifactName: 'powerplatform' stages: # ------------------ EXPORT FROM DEV ------------------ - stage: ExportFromDev displayName: Export Solution from Dev jobs: - job: Export displayName: Export from Dev Environment workspace: clean: all # 🔑 VERY IMPORTANT for self-hosted agents steps: - checkout: self - task: PowerPlatformToolInstaller@2 displayName: Install Power Platform Tools - task: PowerPlatformExportSolution@2 displayName: Export solution from Dev inputs: authenticationType: 'PowerPlatformSPN' PowerPlatformSPN: 'PowerPlatform-CICD-Dev' SolutionName: '$(solutionName)' SolutionOutputFile: '$(Build.ArtifactStagingDirectory)\$(solutionFile)' Managed: true # ⚠️ Do NOT unpack a managed solution as Unmanaged - task: PowerPlatformUnpackSolution@2 displayName: Unpack solution inputs: SolutionInputFile: '$(Build.ArtifactStagingDirectory)\$(solutionFile)' SolutionTargetFolder: '$(Build.SourcesDirectory)\powerplatform\solutions\$(solutionName)' SolutionType: 'Managed' - task: PublishBuildArtifacts@1 displayName: Publish solution artifact inputs: PathtoPublish: '$(Build.ArtifactStagingDirectory)' ArtifactName: '$(artifactName)' # ------------------ IMPORT INTO PROD ------------------ - stage: DeployToProd displayName: Deploy to Production dependsOn: ExportFromDev jobs: - job: Import displayName: Import into Prod Environment workspace: clean: all # 🔑 Prevent leftover artifacts steps: - checkout: none - task: DownloadBuildArtifacts@0 displayName: Download build artifacts inputs: artifactName: '$(artifactName)' downloadPath: '$(System.ArtifactsDirectory)' - task: PowerPlatformToolInstaller@2 displayName: Install Power Platform Tools - task: PowerPlatformImportSolution@2 displayName: Import solution into Prod inputs: authenticationType: 'PowerPlatformSPN' PowerPlatformSPN: 'PowerPlatform-CICD-Prod' SolutionInputFile: '$(System.ArtifactsDirectory)\$(artifactName)\$(solutionFile)' Managed: true OverwriteUnmanagedCustomizations: true