Getting TestSolution from pipelines host environment and committing #4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Checkout, download, unpack, commit, and raise a PR for an updated solution to The templates for Power Platform Repo | |
run-name: Getting ${{ github.event.inputs.solution_name }} from pipelines host environment and committing | |
on: | |
workflow_dispatch: | |
inputs: | |
artifact_url: | |
description: "The url of the Dataverse record ID for the artifact created by the pipelines (Example: https://[your-env].crm.dynamics.com/api/data/v9.0/deploymentartifacts([your-artifact-id])/artifactfile/$value)." | |
required: true | |
solution_name: | |
description: "Name of the Solution in Dataverse environment" | |
required: true | |
user_name: | |
description: "User name for the commit" | |
required: true | |
source_branch: | |
description: "Branch for the solution commit" | |
required: true | |
target_branch: | |
description: "Branch to create for the solution commit" | |
required: false | |
commit_message: | |
description: "Message to provide for the commit" | |
required: true | |
permissions: | |
contents: write | |
jobs: | |
export-unpack-commit: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
ref: ${{ github.event.inputs.source_branch }} | |
# Commit changes to the existing or new branch | |
- name: create new branch if specified | |
shell: pwsh | |
run: | | |
if('${{ github.event.inputs.target_branch }}' -ne '') { | |
git checkout -b ${{ github.event.inputs.target_branch }} ${{ github.event.inputs.source_branch }} | |
} | |
# Export the solution from the artifact created by pipelines | |
- name: download solution from artifact | |
env: | |
CLIENT_ID: ${{secrets.CLIENT_ID}} | |
TENANT_ID: ${{secrets.TENANT_ID}} | |
CLIENT_SECRET: ${{secrets.CLIENT_SECRET}} | |
shell: pwsh | |
run: | | |
$aadHost = "login.microsoftonline.com" | |
$url = "${{ github.event.inputs.artifact_url }}" | |
$options = [System.StringSplitOptions]::RemoveEmptyEntries | |
$dataverseHost = $url.Split("://", $options)[1].Split("/")[0] | |
$body = @{client_id = $env:CLIENT_ID; client_secret = $env:CLIENT_SECRET; grant_type = "client_credentials"; scope = "https://$dataverseHost/.default"; } | |
$OAuthReq = Invoke-RestMethod -Method Post -Uri "https://$aadHost/$env:TENANT_ID/oauth2/v2.0/token" -Body $body | |
$spnToken = $OAuthReq.access_token | |
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]" | |
$headers.Add("Authorization", "Bearer $spnToken") | |
$headers.Add("Content-Type", "application/json") | |
# Download the managed solution | |
$response = Invoke-RestMethod "${{ github.event.inputs.artifact_url }}" -Method 'GET' -Headers $headers | |
$bytes = [Convert]::FromBase64String($response.value) | |
[IO.File]::WriteAllBytes("${{ github.event.inputs.solution_name }}_managed.zip", $bytes) | |
# Download the unmanaged solution (for now we will need to use string manipulation to get the unmanaged solution URL, until the API provides this value) | |
$unmanaged_artifact_url = "${{ github.event.inputs.artifact_url }}".Replace("artifactfile", "artifactfileunmanaged") | |
$response = Invoke-RestMethod "$unmanaged_artifact_url" -Method 'GET' -Headers $headers | |
$bytes = [Convert]::FromBase64String($response.value) | |
[IO.File]::WriteAllBytes("${{ github.event.inputs.solution_name }}.zip", $bytes) | |
# Unpack the solution | |
- name: unpack solution | |
uses: microsoft/powerplatform-actions/unpack-solution@v0 | |
with: | |
solution-file: "${{ github.event.inputs.solution_name }}.zip" | |
solution-folder: "${{ github.event.repository.name }}" | |
solution-type: 'Both' | |
process-canvas-apps: false | |
overwrite-files: true | |
# Commit changes to the existing or new branch | |
- name: commit changes | |
shell: pwsh | |
run: | | |
rm -rf ${{ github.event.inputs.solution_name }}.zip | |
rm -rf ${{ github.event.inputs.solution_name }}_managed.zip | |
git config user.name ${{ github.event.inputs.user_name }} | |
git pull | |
git add --all | |
git commit -am "${{ github.event.inputs.commit_message }}" --allow-empty | |
# Push the committed changes to the source branch | |
- name: push to branch | |
shell: pwsh | |
run: | | |
if('${{ github.event.inputs.target_branch }}' -ne '') { | |
git push origin ${{ github.event.inputs.target_branch }} | |
} else { | |
git push origin ${{ github.event.inputs.source_branch }} | |
} |