My Workflow
In Power Apps we package assets into Solution. Solutions are how customisations move from one environment into another. We use Solution Packager to unpack and repack the Solutions.
It is easy to do this in Azure DevOps, as there are Microsoft, aswell as third-party tools to help with this. Since there is no Action currently in GitHub Marketplace to help with this, I thought it would be a fun project to do this using only PowerShell, so I have developed these two Actions.
- Power Apps Extract Solution - This Action unpacks the Solution files into assets using Solution Packager and commits them into your repo
- Power Apps Deploy Solution - This Action deploys the Solution file into the Power Apps environment.
Since I wanted to do this just using PowerShell, I found it relatively easy to do this using open-source commandlets in PowerShell Gallery and composite run steps
Sample Workflow
Here is a sample Workflow on how you can use these two Actions in your GitHub Workflow.
# This workflow is run only manually, as it uses a workflow_dispatch. It is recommended to use cron or push into main branch to trigger this. Since this workflow also commits into the repo, use ignore tags to prevent infinite loop. Refer https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#example-ignoring-branches-and-tags
name: extract-and-deploy
on:
workflow_dispatch:
inputs:
solutionName:
description: "Solution Name"
required: true
default: "GitHubSolution"
sourceEnvironmentUrl:
description: "Source Environment URL"
required: true
default: "https://xxxx.crm.dynamics.com"
targetEnvironmentUrl:
description: "Target Environment URL"
required: true
default: "https://xxxx.crm.dynamics.com"
release:
description: "Release?"
required: true
default: true
managed:
description: "Managed?"
required: true
default: true
debug:
description: "Debug?"
required: true
default: "true"
jobs:
build:
# The type of runner that the job will run on. This needs to be Windows runner.
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- name: Dump GitHub context
if: github.event.inputs.debug == 'true'
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
- name: Extract Solution
id: extract-solution
uses: rajyraman/powerapps-solution-extract@v1.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
solutionName: ${{ github.event.inputs.solutionName }}
sourceEnvironmentUrl: ${{ github.event.inputs.sourceEnvironmentUrl }}
applicationId: ${{ secrets.APPLICATION_ID }}
applicationSecret: ${{ secrets.APPLICATION_SECRET }}
releaseSolution: ${{ github.event.inputs.release }}
- name: Deploy Solution
id: deploy-solution
uses: rajyraman/powerapps-deploy-solution@v1.1
with:
token: ${{ secrets.GITHUB_TOKEN }}
solutionName: ${{ github.event.inputs.solutionName }}
targetEnvironmentUrl: ${{ github.event.inputs.targetEnvironmentUrl }}
applicationId: ${{ secrets.APPLICATION_ID }}
applicationSecret: ${{ secrets.APPLICATION_SECRET }}
tag: ${{ steps.extract-solution.outputs.solutionVersion }}
managed: ${{ github.event.inputs.managed }}
# This step below can be removed, if you do not want to send a notification to Teams about this solution deployment.
- name: Notify Teams
uses: fjogeleit/http-request-action@v1.4.1
with:
# Url to Power Automate Flow to notify about Solution Deployment
url: "${{ secrets.FLOW_HTTP_URL }}"
# Request body to be sent the Flow with HTTP Trigger
data: >-
{
"solutionFile": "${{ steps.deploy-solution.outputs.solution }}",
"tag": "${{ steps.deploy-solution.outputs.solutionVersion }}",
"environmentUrl": "${{ github.event.inputs.targetEnvironmentUrl }}",
"repoUrl": "https://github.com/${{ github.repository }}",
"runId": "${{ github.run_id }}",
"sha": "${{ github.sha }}"
}
Sample Workflow Run
Release and Assets created by Power Apps Extract Solution Action
Teams Notifications using Power Automate
Submission Category:
Wacky Wildcards
Yaml File or Link to Code
rajyraman / powerapps-deploy-solution
GitHub Action to deploy Power Apps Solutions
Power Apps Deploy Solution
This Action deploys a solution file in the Release with matching tag into the target environment.
Inputs
Input | Required | Default | Description |
---|---|---|---|
token | - | GitHub Personal Access Token. This is required for downloading the solution files from Releases. | |
tag | - | Git Tag associated with the Release. If you are using Power Apps Solution Extract Action, it tags the Release with the Solution's version number. | |
solutionName | - | The Unique Name of the solution. This is used in Solution Upgrade step, if you are deploying a Managed Solution. | |
targetEnvironmentUrl | - | Environment URL where the Solution will be deployed to. | |
applicationId | - | Application Id that will be used to connect to the Power Apps environment.Refer Scott Durow's video if you do not know how to set Application Registration and scopes in Azure to facilitate this. | |
applicationSecret | - | Secret that will be used |
rajyraman / powerapps-solution-extract
GitHub Action to extract, commit and release Power Apps Solutions.
Power Apps Extract Solution
This Action exports the specified solution in the source environment, extract and decomposes them them into individual components and commits them into the repo. This Action can also build the Managed and Unmanaged Solutions from the individual components in the repo, and publish these file to Release as assets.
Inputs
Input | Required | Default | Description |
---|---|---|---|
token | - | GitHub Personal Access Token. This is required for downloading the solution files from Releases. | |
solutionName | - | The Unique Name of the solution. This is used in Solution Upgrade step, if you are deploying a Managed Solution. | |
sourceEnvironmentUrl | - | Environment URL from where the Solution will be downloaded from. | |
applicationId | - | Application Id that will be used to connect to the Power Apps environment.Refer Scott Durow's video if you do not know how to set Application Registration and scopes in Azure to facilitate this. | |
applicationSecret |
Top comments (0)