Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions RELEASENOTES.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ The `DownloadProjectDependencies` action now downloads app files from URLs speci

- Attempt to start docker service in case it is not running
- NextMajor (v28) fails when downloading dependencies from NuGet-feed
- Issue 2126 Deliver and Deploy actions now skip execution when no app artifacts are found, preventing errors on initial commits

## v8.3

Expand Down
2 changes: 2 additions & 0 deletions Scenarios/DeliveryTargets.md
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,8 @@ Your custom delivery script receives a hash table with the following parameters:

> **Note:** The folder parameters (`*Folder`) may be `$null` if no artifacts of that type were found. The plural versions (`*Folders`) contain arrays of all matching folders across different build modes.

> **Important:** The delivery step is automatically skipped at the workflow level when no app artifacts are available. This means your custom delivery script will not be executed if no app artifacts were built. This behavior prevents errors on initial commits when no apps have been built yet.
Copy link

Copilot AI Mar 4, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

“Skipped at the workflow level” can be interpreted as the entire Deliver job/workflow being skipped, but the skip is implemented via a conditional on the Deliver step/action when no .app artifacts are present. Consider rewording to avoid implying that the whole workflow/job is skipped.

Suggested change
> **Important:** The delivery step is automatically skipped at the workflow level when no app artifacts are available. This means your custom delivery script will not be executed if no app artifacts were built. This behavior prevents errors on initial commits when no apps have been built yet.
> **Important:** The delivery step is configured with a condition so that it is not run when no app artifacts are available. This means your custom delivery script will not be executed if no app artifacts were built. This behavior prevents errors on initial commits when no apps have been built yet.

Copilot uses AI. Check for mistakes.

### Branch-Specific Delivery

Configure different delivery targets for different branches:
Expand Down
12 changes: 12 additions & 0 deletions Templates/AppSource App/.github/workflows/CICD.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -338,6 +338,7 @@ jobs:

- name: Deploy to Business Central
id: Deploy
if: hashFiles('.artifacts/**/*.app') != ''
uses: microsoft/AL-Go-Actions/Deploy@main
env:
Secrets: '${{ steps.ReadSecrets.outputs.Secrets }}'
Expand All @@ -348,6 +349,11 @@ jobs:
type: 'CD'
deploymentEnvironmentsJson: ${{ needs.Initialization.outputs.deploymentEnvironmentsJson }}

- name: Deployment skipped
if: hashFiles('.artifacts/**/*.app') == ''
run: |
Write-Host "::Notice::Deployment to environment ${{ matrix.environment }} was skipped because no app artifacts were found"

- name: Deploy to Power Platform
if: env.type == 'PTE' && env.powerPlatformSolutionFolder != ''
uses: microsoft/AL-Go-Actions/DeployPowerPlatform@main
Expand Down Expand Up @@ -391,6 +397,7 @@ jobs:
getSecrets: '${{ matrix.deliveryTarget }}Context'

- name: Deliver
if: hashFiles('.artifacts/**/*.app') != ''
uses: microsoft/AL-Go-Actions/Deliver@main
env:
Secrets: '${{ steps.ReadSecrets.outputs.Secrets }}'
Expand All @@ -401,6 +408,11 @@ jobs:
deliveryTarget: ${{ matrix.deliveryTarget }}
artifacts: '.artifacts'

- name: Delivery skipped
if: hashFiles('.artifacts/**/*.app') == ''
run: |
Write-Host "::Notice::Delivery to ${{ matrix.deliveryTarget }} was skipped because no app artifacts were found"

PostProcess:
needs: [ Initialization, Build, Deploy, Deliver, DeployALDoc, CodeAnalysisUpload ]
if: (!cancelled())
Expand Down
12 changes: 12 additions & 0 deletions Templates/Per Tenant Extension/.github/workflows/CICD.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,7 @@ jobs:

- name: Deploy to Business Central
id: Deploy
if: hashFiles('.artifacts/**/*.app') != ''
uses: microsoft/AL-Go-Actions/Deploy@main
env:
Secrets: '${{ steps.ReadSecrets.outputs.Secrets }}'
Expand All @@ -362,6 +363,11 @@ jobs:
type: 'CD'
deploymentEnvironmentsJson: ${{ needs.Initialization.outputs.deploymentEnvironmentsJson }}

- name: Deployment skipped
if: hashFiles('.artifacts/**/*.app') == ''
run: |
Write-Host "::Notice::Deployment to environment ${{ matrix.environment }} was skipped because no app artifacts were found"

- name: Deploy to Power Platform
if: env.type == 'PTE' && env.powerPlatformSolutionFolder != ''
uses: microsoft/AL-Go-Actions/DeployPowerPlatform@main
Expand Down Expand Up @@ -405,6 +411,7 @@ jobs:
getSecrets: '${{ matrix.deliveryTarget }}Context'

- name: Deliver
if: hashFiles('.artifacts/**/*.app') != ''
uses: microsoft/AL-Go-Actions/Deliver@main
env:
Secrets: '${{ steps.ReadSecrets.outputs.Secrets }}'
Expand All @@ -415,6 +422,11 @@ jobs:
deliveryTarget: ${{ matrix.deliveryTarget }}
artifacts: '.artifacts'

- name: Delivery skipped
if: hashFiles('.artifacts/**/*.app') == ''
run: |
Write-Host "::Notice::Delivery to ${{ matrix.deliveryTarget }} was skipped because no app artifacts were found"

PostProcess:
needs: [ Initialization, Build, BuildPP, Deploy, Deliver, DeployALDoc, CodeAnalysisUpload ]
if: (!cancelled())
Expand Down
6 changes: 6 additions & 0 deletions Workshop/ContinuousDelivery.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,12 @@ For detailed step-by-step instructions, configuration examples, and troubleshoot

Custom delivery will be handled in an advanced part of this workshop later.

## Important Note: Automatic Skip Behavior

The Deliver step/action is skipped when no app artifacts are available.

This skip behavior prevents delivery errors and ensures that delivery targets are only invoked when there are actual artifacts to deliver. You'll see the Deliver step/action appear as skipped in the workflow summary when this occurs.

OK, so **CD** stands for **Continuous Delivery**, I thought it was **Continuous Deployment**? Well, it is actually both, so let's talk about **Continuous Deployment**...

______________________________________________________________________
Expand Down
6 changes: 6 additions & 0 deletions Workshop/ContinuousDeployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,12 @@ Paste the value from the clipboard into the "Value" field of the **AuthContext**

AL-Go can also be setup for custom deployment when you want to deploy to non-SaaS environments. More about this in the advanced section.

## Important Note: Automatic Skip Behavior

Deployment jobs automatically skip execution when no app artifacts are available.

This skip behavior prevents deployment errors and ensures that environments are only targeted when there are actual artifacts to deploy. You'll see the deployment step appear as skipped in the workflow summary when this occurs.

This section was about Continuous Deployment, but you might not want to deploy to production environments continuously - how can we publish to production on demand?

______________________________________________________________________
Expand Down
Loading