I have deployed Power Platform solutions with the in-product Power Platform Pipelines, now I wanted to try it with GitHub Actions.
I created a Solution called ALM 2 Solution
, real sophisticated name. 😄
My Solution includes these components:
- Canvas App called
ALM 2 Canvas App
- Environment Variable called
ALM 2 Environment Variable
- Flow called
ALM 2 Environment Variable Get (Power Apps)
- Flow called
ALM 2 Environment Variable List (Power Apps)
- Connection Reference called
ALM 2 Dataverse Connection Reference

The Flow ALM 2 Environment Variable List (Power Apps)
uses the Connection Reference ALM 2 Dataverse Connection Reference
.
The Canvas App ALM 2 Canvas App
displays the value of the Environment Variable ALM 2 Environment Variable
and the results of the Flow ALM 2 Environment Variable List (Power Apps)
.

Nothing super special here. 🪄
I created a Service Principal in Azure per Tutorial: Get started with GitHub Actions for Microsoft Power Platform – Power Platform | Microsoft Learn.
This would be the account that the deployment would run under.
I added Secrets for CLIENT_ID
, CLIENT_SECRET
and TENANT_ID
, which I got from the Service Principal.
Then, I added Variables for DEV_ENVIRONMENT_URL
and PROD_ENVIRONMENT_URL
, these held the URL for the Power Platform environments.

In creating my Workflows I followed a lot of the instructions at Tutorial: Automate solution deployment using GitHub Actions for Microsoft Power Platform – Power Platform | Microsoft Learn, but did make a few tweaks.
I created a Workflow called export
. ⚒️
It exports both a managed and unmanaged version of the solution.
Then, it unpacks the unmanaged solution.
After that, it commits the changes to a repository.
Eventually I will trigger this off of a GitHub release, but for now, I wanted to manually trigger it.
I create another Workflow called release-to-prod
, that would deploy the Solution to the production environment. ⚒️
In GitHub I navigated to Actions, clicked on export and clicked Run workflow to run the workflow.

Once the export workflow was completed, I clicked on release-to-prod and clicked Run workflow.

I need to share the Canvas App with my user account, so I can run the application.

When I run the Canvas App in the new environment, I get errors. 😟
- Missing value for the environment variable ‼️
- Missing connection for the connection reference ‼️
I could manually set the value and the connection but would prefer this to be automated.
I came across the article Pre-populate connection references and environment variables for automated deployments on how to create a DeploymentSettings.json
file that can be used during the import.
I created a Settings folder in my repository and then in that folder, created the DeploymentSettings.json
file.
To get the ConnectionId value, I navigated to the Connection in Power Apps Studio and grabbed in from the URL.
The URL is in the format of https://make.powerapps.com/environments/ENVIRONMENT_ID/connections/shared_commondataserviceforapps/CONNECTION_ID/details
.

The connection I wanted to use in my production environment uses a service principal for authentication.
See A Visual Guide To Power Platform Service Principal Setup for how to do this.
I updated the DeploymentSettings.json files with the Value for Environment Variable and the ConnectionID for the Connection Reference.
I updated the release-to-prod workflow to use the DeploymentSettings.json file.
I updated the Import solution to destination environment step and set use-deployment-settings-file to true
and deployment-settings-file to Settings/DeploymentSettings.json
.
In GitHub I navigated to Actions and ran the release-to-prod workflow.
Uh oh! The workflow generated an error. 🤔

As you can see the error message is super helpful … not! 😡
I struggled to figure out what was going on, then I remember with the in-production Pipelines, when you did a delegated deployment with a service principal you had the choice to check a box to share the connections with the service principal. 💡

I reran my release-to-prod workflow … drum roll … the deployment was successful! 🥳

I am sure there are a lot of tweaks I can make to my workflows and process in general, but for my first attempt at deploying with GitHub Actions, I’ll take it! 👏
Discover more from Matt Ruma
Subscribe to get the latest posts sent to your email.
1 Reply to “Adventures with Power Platform: My First Deployment with GitHub Actions”