Skip to content

CI/CD

CI/CD #26

Workflow file for this run

name: ' CI/CD'
on:
workflow_dispatch:
push:
paths-ignore:
- '**.md'
- '.github/workflows/*.yaml'
- '!.github/workflows/CICD.yaml'
branches: [ 'main', 'release/*', 'feature/*' ]
defaults:
run:
shell: powershell
permissions:
contents: read
actions: read
env:
workflowDepth: 1
ALGoOrgSettings: ${{ vars.ALGoOrgSettings }}
ALGoRepoSettings: ${{ vars.ALGoRepoSettings }}
jobs:
Initialization:
runs-on: [ windows-latest ]
outputs:
telemetryScopeJson: ${{ steps.init.outputs.telemetryScopeJson }}
settings: ${{ steps.ReadSettings.outputs.SettingsJson }}
environments: ${{ steps.ReadSettings.outputs.EnvironmentsJson }}
environmentCount: ${{ steps.ReadSettings.outputs.EnvironmentCount }}
deliveryTargets: ${{ steps.DetermineDeliveryTargets.outputs.DeliveryTargetsJson }}
deliveryTargetCount: ${{ steps.DetermineDeliveryTargets.outputs.DeliveryTargetCount }}
githubRunner: ${{ steps.ReadSettings.outputs.GitHubRunnerJson }}
githubRunnerShell: ${{ steps.ReadSettings.outputs.GitHubRunnerShell }}
checkRunId: ${{ steps.CreateCheckRun.outputs.checkRunId }}
projects: ${{ steps.determineProjectsToBuild.outputs.ProjectsJson }}
projectDependenciesJson: ${{ steps.determineProjectsToBuild.outputs.ProjectDependenciesJson }}
buildOrderJson: ${{ steps.determineProjectsToBuild.outputs.BuildOrderJson }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
lfs: true
- name: Initialize the workflow
id: init
uses: microsoft/AL-Go-Actions/WorkflowInitialize@PPPreview
with:
shell: powershell
eventId: "DO0091"
- name: Read settings
id: ReadSettings
uses: microsoft/AL-Go-Actions/ReadSettings@PPPreview
with:
shell: powershell
parentTelemetryScopeJson: ${{ steps.init.outputs.telemetryScopeJson }}
getEnvironments: '*'
- name: Determine Projects To Build
id: determineProjectsToBuild
uses: microsoft/AL-Go-Actions/DetermineProjectsToBuild@PPPreview
with:
shell: powershell
maxBuildDepth: ${{ env.workflowDepth }}
- name: Determine Delivery Target Secrets
id: DetermineDeliveryTargetSecrets
run: |
$ErrorActionPreference = "STOP"
Set-StrictMode -version 2.0
$deliveryTargetSecrets = @('GitHubPackagesContext','NuGetContext','StorageContext','AppSourceContext')
$namePrefix = 'DeliverTo'
Get-Item -Path (Join-Path $ENV:GITHUB_WORKSPACE ".github/$($namePrefix)*.ps1") | ForEach-Object {
$deliveryTarget = [System.IO.Path]::GetFileNameWithoutExtension($_.Name.SubString($namePrefix.Length))
$deliveryTargetSecrets += @("$($deliveryTarget)Context")
}
Add-Content -Path $env:GITHUB_OUTPUT -Value "Secrets=$($deliveryTargetSecrets -join ',')"
- name: Read secrets
uses: microsoft/AL-Go-Actions/ReadSecrets@PPPreview
env:
secrets: ${{ toJson(secrets) }}
with:
shell: powershell
settingsJson: ${{ env.Settings }}
secrets: ${{ steps.DetermineDeliveryTargetSecrets.outputs.Secrets }}
- name: Determine Delivery Targets
id: DetermineDeliveryTargets
run: |
$ErrorActionPreference = "STOP"
Set-StrictMode -version 2.0
$deliveryTargets = @('GitHubPackages','NuGet','Storage')
if ($env:type -eq "AppSource App") {
$continuousDelivery = $false
# For multi-project repositories, we will add deliveryTarget AppSource if any project has AppSourceContinuousDelivery set to true
('${{ steps.determineProjectsToBuild.outputs.ProjectsJson }}' | ConvertFrom-Json) | where-Object { $_ } | ForEach-Object {
$projectSettings = Get-Content (Join-Path $_ '.AL-Go/settings.json') -raw | ConvertFrom-Json
if ($projectSettings.PSObject.Properties.Name -eq 'AppSourceContinuousDelivery' -and $projectSettings.AppSourceContinuousDelivery) {
Write-Host "Project $_ is setup for Continuous Delivery"
$continuousDelivery = $true
}
}
if ($continuousDelivery) {
$deliveryTargets += @("AppSource")
}
}
$namePrefix = 'DeliverTo'
Get-Item -Path (Join-Path $ENV:GITHUB_WORKSPACE ".github/$($namePrefix)*.ps1") | ForEach-Object {
$deliveryTarget = [System.IO.Path]::GetFileNameWithoutExtension($_.Name.SubString($namePrefix.Length))
$deliveryTargets += @($deliveryTarget)
}
$deliveryTargets = @($deliveryTargets | Select-Object -unique | Where-Object {
$include = $false
Write-Host "Check DeliveryTarget $_"
$contextName = "$($_)Context"
$deliveryContext = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String([System.Environment]::GetEnvironmentVariable($contextName)))
if ($deliveryContext) {
$settingName = "DeliverTo$_"
$settings = $env:Settings | ConvertFrom-Json
if (($settings.PSObject.Properties.Name -eq $settingName) -and ($settings."$settingName".PSObject.Properties.Name -eq "Branches")) {
Write-Host "Branches:"
$settings."$settingName".Branches | ForEach-Object {
Write-Host "- $_"
if ($ENV:GITHUB_REF_NAME -like $_) {
$include = $true
}
}
}
else {
$include = ($ENV:GITHUB_REF_NAME -eq 'main')
}
}
if ($include) {
Write-Host "DeliveryTarget $_ included"
}
$include
})
$deliveryTargetsJson = $deliveryTargets | ConvertTo-Json -Depth 99 -compress
if ($deliveryTargets.Count -lt 2) { $deliveryTargetsJson = "[$($deliveryTargetsJson)]" }
Add-Content -Path $env:GITHUB_OUTPUT -Value "DeliveryTargetsJson=$deliveryTargetsJson"
Write-Host "DeliveryTargetsJson=$deliveryTargetsJson"
Add-Content -Path $env:GITHUB_OUTPUT -Value "DeliveryTargetCount=$($deliveryTargets.Count)"
Write-Host "DeliveryTargetCount=$($deliveryTargets.Count)"
Add-Content -Path $env:GITHUB_ENV -Value "DeliveryTargets=$deliveryTargetsJson"
CheckForUpdates:
runs-on: [ windows-latest ]
needs: [ Initialization ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Read settings
uses: microsoft/AL-Go-Actions/ReadSettings@PPPreview
with:
shell: powershell
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
get: templateUrl
- name: Check for updates to AL-Go system files
uses: microsoft/AL-Go-Actions/CheckForUpdates@PPPreview
with:
shell: powershell
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
templateUrl: ${{ env.templateUrl }}
Build:
needs: [ Initialization ]
if: (!failure()) && (!cancelled()) && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0
runs-on: ${{ fromJson(needs.Initialization.outputs.githubRunner) }}
defaults:
run:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
strategy:
matrix:
include: ${{ fromJson(needs.Initialization.outputs.buildOrderJson)[0].buildDimensions }}
fail-fast: false
name: Build ${{ matrix.project }} - ${{ matrix.buildMode }}
outputs:
AppsArtifactsName: ${{ steps.calculateArtifactNames.outputs.AppsArtifactsName }}
TestAppsArtifactsName: ${{ steps.calculateArtifactNames.outputs.TestAppsArtifactsName }}
TestResultsArtifactsName: ${{ steps.calculateArtifactNames.outputs.TestResultsArtifactsName }}
BcptTestResultsArtifactsName: ${{ steps.calculateArtifactNames.outputs.BcptTestResultsArtifactsName }}
BuildOutputArtifactsName: ${{ steps.calculateArtifactNames.outputs.BuildOutputArtifactsName }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
lfs: true
- name: Download thisbuild artifacts
if: env.workflowDepth > 1
uses: actions/download-artifact@v3
with:
path: '.dependencies'
- name: Read settings
uses: microsoft/AL-Go-Actions/ReadSettings@PPPreview
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
project: ${{ matrix.project }}
- name: Read secrets
uses: microsoft/AL-Go-Actions/ReadSecrets@PPPreview
env:
secrets: ${{ toJson(secrets) }}
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
settingsJson: ${{ env.Settings }}
secrets: 'licenseFileUrl,insiderSasToken,codeSignCertificateUrl,codeSignCertificatePassword,keyVaultCertificateUrl,keyVaultCertificatePassword,keyVaultClientId,storageContext,gitHubPackagesContext'
- name: Determine ArtifactUrl
uses: microsoft/AL-Go-Actions/DetermineArtifactUrl@PPPreview
id: determineArtifactUrl
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
project: ${{ matrix.project }}
settingsJson: ${{ env.Settings }}
secretsJson: ${{ env.RepoSecrets }}
- name: Cache Business Central Artifacts
if: env.useCompilerFolder == 'True' && steps.determineArtifactUrl.outputs.ArtifactUrl && !contains(env.artifact,'INSIDERSASTOKEN')
uses: actions/cache@v3
with:
path: .artifactcache
key: ${{ steps.determineArtifactUrl.outputs.ArtifactUrl }}
- name: Build AL Project
id: RunPipeline
if: matrix.project != env.powerPlatformSolutionFolder
uses: microsoft/AL-Go-Actions/RunPipeline@PPPreview
env:
BuildMode: ${{ matrix.buildMode }}
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
project: ${{ matrix.project }}
projectDependenciesJson: ${{ needs.Initialization.outputs.projectDependenciesJson }}
settingsJson: ${{ env.Settings }}
secretsJson: ${{ env.RepoSecrets }}
buildMode: ${{ matrix.buildMode }}
- name: Build PowerPlatform Solution
id: BuildPowerPlatform
if: matrix.project == env.powerPlatformSolutionFolder && matrix.buildMode == 'default'
uses: microsoft/AL-Go-Actions/BuildPowerPlatform@PPPreview
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
solutionFolder: ${{ matrix.project }}
outputFolder: ${{ matrix.project }}/.buildartifacts/PowerPlatformSolution/
outputFileName: ${{ matrix.project }}
appRevision: ${{ env.appRevision }}
appBuild: ${{ env.appBuild }}
- name: Calculate Artifact names
id: calculateArtifactsNames
uses: microsoft/AL-Go-Actions/CalculateArtifactNames@PPPreview
if: success() || failure()
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
settingsJson: ${{ env.Settings }}
project: ${{ matrix.project }}
buildMode: ${{ matrix.buildMode }}
branchName: ${{ github.ref_name }}
- name: Upload thisbuild artifacts - apps
if: env.workflowDepth > 1
uses: actions/upload-artifact@v3
with:
name: ${{ steps.calculateArtifactsNames.outputs.ThisBuildAppsArtifactsName }}
path: '${{ matrix.project }}/.buildartifacts/Apps/'
if-no-files-found: ignore
retention-days: 1
- name: Upload thisbuild artifacts - test apps
if: env.workflowDepth > 1
uses: actions/upload-artifact@v3
with:
name: ${{ steps.calculateArtifactsNames.outputs.ThisBuildTestAppsArtifactsName }}
path: '${{ matrix.project }}/.buildartifacts/TestApps/'
if-no-files-found: ignore
retention-days: 1
- name: Publish artifacts - apps
uses: actions/upload-artifact@v3
if: github.ref_name == 'main' || startswith(github.ref_name, 'release/') || needs.Initialization.outputs.deliveryTargetCount > 0 || needs.Initialization.outputs.environmentCount > 0
with:
name: ${{ env.AppsArtifactsName }}
path: '${{ matrix.project }}/.buildartifacts/Apps/'
if-no-files-found: ignore
- name: Publish artifacts - dependencies
uses: actions/upload-artifact@v3
if: github.ref_name == 'main' || startswith(github.ref_name, 'release/') || needs.Initialization.outputs.deliveryTargetCount > 0 || needs.Initialization.outputs.environmentCount > 0
with:
name: ${{ env.DependenciesArtifactsName }}
path: '${{ matrix.project }}/.buildartifacts/Dependencies/'
if-no-files-found: ignore
- name: Publish artifacts - test apps
uses: actions/upload-artifact@v3
if: github.ref_name == 'main' || startswith(github.ref_name, 'release/') || needs.Initialization.outputs.deliveryTargetCount > 0 || needs.Initialization.outputs.environmentCount > 0
with:
name: ${{ env.TestAppsArtifactsName }}
path: '${{ matrix.project }}/.buildartifacts/TestApps/'
if-no-files-found: ignore
- name: Publish artifacts - build output
uses: actions/upload-artifact@v3
if: (success() || failure()) && (hashFiles(format('{0}/BuildOutput.txt',matrix.project)) != '')
with:
name: ${{ env.BuildOutputArtifactsName }}
path: '${{ matrix.project }}/BuildOutput.txt'
if-no-files-found: ignore
- name: Publish artifacts - container event log
uses: actions/upload-artifact@v3
if: (failure()) && (hashFiles(format('{0}/ContainerEventLog.evtx',matrix.project)) != '')
with:
name: ${{ env.ContainerEventLogArtifactsName }}
path: '${{ matrix.project }}/ContainerEventLog.evtx'
if-no-files-found: ignore
- name: Publish artifacts - test results
uses: actions/upload-artifact@v3
if: (success() || failure()) && (hashFiles(format('{0}/TestResults.xml',matrix.project)) != '')
with:
name: ${{ env.TestResultsArtifactsName }}
path: '${{ matrix.project }}/TestResults.xml'
if-no-files-found: ignore
- name: Publish artifacts - bcpt test results
uses: actions/upload-artifact@v3
if: (success() || failure()) && (hashFiles(format('{0}/bcptTestResults.json',matrix.project)) != '')
with:
name: ${{ env.BcptTestResultsArtifactsName }}
path: '${{ matrix.project }}/bcptTestResults.json'
if-no-files-found: ignore
- name: Publish artifacts - Power Platform Solution
uses: actions/upload-artifact@v3
if: github.ref_name == 'main' || startswith(github.ref_name, 'release/') || needs.Initialization.outputs.deliveryTargetCount > 0 || needs.Initialization.outputs.environmentCount > 0
with:
name: ${{ env.PowerPlatformSolutionArtifactsName }}
path: '${{ matrix.project }}/.buildartifacts/PowerPlatformSolution/'
if-no-files-found: ignore
- name: Analyze Test Results
id: analyzeTestResults
if: success() || failure()
uses: microsoft/AL-Go-Actions/AnalyzeTests@PPPreview
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
Project: ${{ matrix.project }}
- name: Cleanup
if: always()
uses: microsoft/AL-Go-Actions/PipelineCleanup@PPPreview
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
Project: ${{ matrix.project }}
Deploy:
needs: [ Initialization, Build ]
if: always() && needs.Build.result == 'Success' && needs.Initialization.outputs.environmentCount > 0
strategy: ${{ fromJson(needs.Initialization.outputs.environments) }}
runs-on: ${{ fromJson(matrix.os) }}
name: Deploy to ${{ matrix.environment }}
environment:
name: ${{ matrix.environment }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: '.artifacts'
- name: EnvName
id: envName
run: |
$ErrorActionPreference = "STOP"
Set-StrictMode -version 2.0
$envName = '${{ matrix.environment }}'.split(' ')[0]
Add-Content -Path $env:GITHUB_OUTPUT -Value "envName=$envName"
- name: Read settings
uses: microsoft/AL-Go-Actions/ReadSettings@PPPreview
with:
shell: powershell
- name: Read secrets
uses: microsoft/AL-Go-Actions/ReadSecrets@PPPreview
env:
secrets: ${{ toJson(secrets) }}
with:
shell: powershell
settingsJson: ${{ env.Settings }}
secrets: '${{ steps.envName.outputs.envName }}-AuthContext,${{ steps.envName.outputs.envName }}_AuthContext,AuthContext,${{ steps.envName.outputs.envName }}-EnvironmentName,${{ steps.envName.outputs.envName }}_EnvironmentName,EnvironmentName,projects'
- name: AuthContext
id: authContext
run: |
$ErrorActionPreference = "STOP"
Set-StrictMode -version 2.0
$envName = '${{ steps.envName.outputs.envName }}'
$deployToSettingStr = [System.Environment]::GetEnvironmentVariable("DeployTo$envName")
if ($deployToSettingStr) {
$deployToSettings = $deployToSettingStr | ConvertFrom-Json
}
else {
$deployToSettings = [PSCustomObject]@{}
}
$authContext = $null
"$($envName)-AuthContext", "$($envName)_AuthContext", "AuthContext" | ForEach-Object {
if (!($authContext)) {
$authContext = [System.Environment]::GetEnvironmentVariable($_)
if ($authContext) {
Write-Host "Using $_ secret as AuthContext"
}
}
}
if (!($authContext)) {
Write-Host "::Error::No AuthContext provided"
exit 1
}
if (("$deployToSettings" -ne "") -and $deployToSettings.PSObject.Properties.name -eq "EnvironmentName") {
$environmentName = $deployToSettings.environmentName
}
else {
$environmentName = $null
"$($envName)-EnvironmentName", "$($envName)_EnvironmentName", "EnvironmentName" | ForEach-Object {
if (!($EnvironmentName)) {
$EnvironmentName = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String([System.Environment]::GetEnvironmentVariable($_)))
if ($EnvironmentName) {
Write-Host "Using $_ secret as EnvironmentName"
Write-Host "Please consider using the DeployTo$_ setting instead, where you can specify EnvironmentName, projects and branches"
}
}
}
if (!($environmentName)) {
$environmentName = '${{ steps.envName.outputs.envName }}'
}
$deployToSettings | Add-Member -MemberType NoteProperty -name 'environmentName' -value $environmentName
}
$environmentName = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes(($environmentName + '${{ matrix.environment }}'.SubString($envName.Length)).ToUpperInvariant()))
if (("$deployToSettings" -ne "") -and $deployToSettings.PSObject.Properties.name -eq "projects") {
$projects = $deployToSettings.projects
}
else {
$projects = [System.Environment]::GetEnvironmentVariable("$($envName)-projects")
if (-not $projects) {
$projects = [System.Environment]::GetEnvironmentVariable("$($envName)_Projects")
if (-not $projects) {
$projects = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String([System.Environment]::GetEnvironmentVariable('projects')))
}
}
$deployToSettings | Add-Member -MemberType NoteProperty -Name 'projects' -Value $projects
}
$powerPlatformSolutionFolder = [System.Environment]::GetEnvironmentVariable('PowerPlatformSolutionFolder')
$deployPP = $false
if ($projects -eq '' -or $projects -eq '*') {
$projects = '*'
$deployPP = ("$powerPlatformSolutionFolder" -ne "")
}
else {
$buildProjects = '${{ needs.Initialization.outputs.projects }}' | ConvertFrom-Json
$projects = ($projects.Split(',') | Where-Object {
$deployALProject = $buildProjects -contains $_
if ($_ -eq $powerPlatformSolutionFolder) {
$deployPP = $true
$deployALProject = $false
}
$deployALProject
}) -join ','
}
Add-Content -Path $env:GITHUB_OUTPUT -Value "authContext=$authContext"
Write-Host "authContext=$authContext"
Add-Content -Path $env:GITHUB_OUTPUT -Value "deployTo=$($deployToSettings | ConvertTo-Json -depth 99 -compress)"
Add-Content -Path $env:GITHUB_OUTPUT -Value "environmentName=$environmentName"
Write-Host "environmentName=$([System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($environmentName)))"
Write-Host "environmentName (as Base64)=$environmentName"
Add-Content -Path $env:GITHUB_OUTPUT -Value "projects=$projects"
Write-Host "projects=$projects"
Add-Content -Path $env:GITHUB_OUTPUT -Value "deployPP=$deployPP"
Write-Host "deployPP=$deployPP"
- name: Deploy AL
uses: microsoft/AL-Go-Actions/Deploy@PPPreview
if: ${{ steps.authContext.outputs.projects }}
env:
AuthContext: ${{ steps.authContext.outputs.authContext }}
with:
shell: powershell
type: 'CD'
projects: ${{ steps.authContext.outputs.projects }}
environmentName: ${{ steps.authContext.outputs.environmentName }}
artifacts: '.artifacts'
- name: Deploy PowerPlatform
if: ${{ steps.authContext.outputs.deployPP == 'true' }}
uses: microsoft/AL-Go-Actions/DeployPowerPlatform@PPPreview
with:
shell: ${{ needs.Initialization.outputs.githubRunnerShell }}
parentTelemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}
artifactPath: '.artifacts'
deploySettings: ${{ steps.authContext.outputs.deployTo }}
authSettings: ${{ steps.authContext.outputs.authContext }}
Deliver:
needs: [ Initialization, Build ]
if: always() && needs.Build.result == 'Success' && needs.Initialization.outputs.deliveryTargetCount > 0
strategy:
matrix:
deliveryTarget: ${{ fromJson(needs.Initialization.outputs.deliveryTargets) }}
fail-fast: false
runs-on: [ windows-latest ]
name: Deliver to ${{ matrix.deliveryTarget }}
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Download artifacts
uses: actions/download-artifact@v3
with:
path: '.artifacts'
- name: Read settings
uses: microsoft/AL-Go-Actions/ReadSettings@PPPreview
with:
shell: powershell
- name: Read secrets
uses: microsoft/AL-Go-Actions/ReadSecrets@PPPreview
env:
secrets: ${{ toJson(secrets) }}
with:
shell: powershell
settingsJson: ${{ env.Settings }}
secrets: '${{ matrix.deliveryTarget }}Context'
- name: DeliveryContext
id: deliveryContext
run: |
$ErrorActionPreference = "STOP"
Set-StrictMode -version 2.0
$contextName = '${{ matrix.deliveryTarget }}Context'
$deliveryContext = [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String([System.Environment]::GetEnvironmentVariable($contextName)))
Add-Content -Path $env:GITHUB_OUTPUT -Value "deliveryContext=$deliveryContext"
Write-Host "deliveryContext=$deliveryContext"
- name: Deliver
uses: microsoft/AL-Go-Actions/Deliver@PPPreview
env:
deliveryContext: ${{ steps.deliveryContext.outputs.deliveryContext }}
with:
shell: powershell
type: 'CD'
projects: ${{ needs.Initialization.outputs.projects }}
deliveryTarget: ${{ matrix.deliveryTarget }}
artifacts: '.artifacts'
PostProcess:
if: (!cancelled())
runs-on: [ windows-latest ]
needs: [ Initialization, Build, Deploy, Deliver ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Finalize the workflow
id: PostProcess
uses: microsoft/AL-Go-Actions/WorkflowPostProcess@PPPreview
with:
shell: powershell
eventId: "DO0091"
telemetryScopeJson: ${{ needs.Initialization.outputs.telemetryScopeJson }}