Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
9c737bd
Initial plan
Copilot Feb 16, 2026
d9f710a
Add check to skip delivery when no app artifacts exist
Copilot Feb 16, 2026
1570115
Add skip logic to Deploy action and update release notes
Copilot Feb 16, 2026
9596e4e
Make exit code explicit in Deploy action
Copilot Feb 16, 2026
1c00551
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Feb 17, 2026
67494a5
Refactor delivery and deployment workflows to skip steps when no app …
mazhelez Feb 18, 2026
ae6d218
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Feb 18, 2026
60a16fa
Update release notes and documentation to clarify automatic skip beha…
mazhelez Feb 18, 2026
463560d
Merge branch 'copilot/fix-deliver-to-blob-storage' of https://github.…
mazhelez Feb 18, 2026
7678b81
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Mar 3, 2026
23495bc
Move release notes entry to next release section
Copilot Mar 3, 2026
5542516
Add notices when Deploy and Deliver steps are skipped due to no app a…
Copilot Mar 3, 2026
cb11b6e
Update DeliveryTargets.md to remove inaccurate statements about skip …
Copilot Mar 4, 2026
4fa1f34
Apply suggestion from @Copilot
mazhelez Mar 4, 2026
f76e075
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Mar 4, 2026
6f63340
Merge main and move release notes entry above v9.0 section
Copilot May 1, 2026
0e71474
Merge main and update release notes to position above v9.1
Copilot Jul 9, 2026
1657635
Merge main and update release notes to position above v9.1
Copilot Jul 9, 2026
ee20979
Merge main and resolve conflicts in RELEASENOTES.md
Copilot Jul 13, 2026
de4d82a
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Jul 13, 2026
03bee84
Merge main and move Issue 2126 to top of RELEASENOTES.md
Copilot Jul 17, 2026
6ac3d55
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Jul 20, 2026
e8f3f7d
Revert action downgrades and fix release notes structure
Copilot Jul 20, 2026
341b320
Merge branch 'main' into copilot/fix-deliver-to-blob-storage
mazhelez Jul 23, 2026
576b9a8
Address PR review comments: fix notice injection, remove duplicate sc…
mazhelez Jul 23, 2026
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 @@ -4,6 +4,7 @@ Workspace compilation now finds altool both in the platform-specific subfolder (

### Issues

- Issue 2126 Deliver and Deploy actions now skip execution when no app artifacts are found, preventing errors on initial commits
- Issue 2285 - CheckForUpdates now handles settings file `$schema` reordering in a PowerShell 5-safe way to avoid writing invalid entries like `"*": null` to settings JSON files.
- Fix "filename or extension is too long" error when validating settings on PS5.1 with large settings JSON
- Fix dependency apps not being resolved when the branch name contains a `]` character (the dependency folder was matched as a wildcard pattern instead of enumerated literally, resulting in 0 apps being published)
Expand Down
2 changes: 2 additions & 0 deletions Scenarios/DeliveryTargets.md
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,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.
Comment thread
mazhelez marked this conversation as resolved.

### Branch-Specific Delivery

Configure different delivery targets for different branches:
Expand Down
16 changes: 16 additions & 0 deletions Templates/AppSource App/.github/workflows/CICD.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -344,6 +344,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 @@ -354,6 +355,13 @@ jobs:
type: 'CD'
deploymentEnvironmentsJson: ${{ needs.Initialization.outputs.deploymentEnvironmentsJson }}

- name: Deployment skipped
if: hashFiles('.artifacts/**/*.app') == ''
env:
_environment: ${{ matrix.environment }}
run: |
Write-Host "::Notice::Deployment to environment $($env:_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 @@ -399,6 +407,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 @@ -409,6 +418,13 @@ jobs:
deliveryTarget: ${{ matrix.deliveryTarget }}
artifacts: '.artifacts'

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

PostProcess:
needs: [ Initialization, Build, Deploy, Deliver, DeployALDoc, CodeAnalysisUpload ]
if: (!cancelled())
Expand Down
16 changes: 16 additions & 0 deletions Templates/Per Tenant Extension/.github/workflows/CICD.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -358,6 +358,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 @@ -368,6 +369,13 @@ jobs:
type: 'CD'
deploymentEnvironmentsJson: ${{ needs.Initialization.outputs.deploymentEnvironmentsJson }}

- name: Deployment skipped
if: hashFiles('.artifacts/**/*.app') == ''
env:
_environment: ${{ matrix.environment }}
run: |
Write-Host "::Notice::Deployment to environment $($env:_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 @@ -413,6 +421,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 @@ -423,6 +432,13 @@ jobs:
deliveryTarget: ${{ matrix.deliveryTarget }}
artifacts: '.artifacts'

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

PostProcess:
needs: [ Initialization, Build, BuildPP, Deploy, Deliver, DeployALDoc, CodeAnalysisUpload ]
if: (!cancelled())
Expand Down
4 changes: 4 additions & 0 deletions Workshop/ContinuousDelivery.md
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ 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 is automatically skipped when no app artifacts are available, so delivery targets are only invoked when there is something to deliver.

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
4 changes: 4 additions & 0 deletions Workshop/ContinuousDeployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,10 @@ 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

The Deploy step is automatically skipped when no app artifacts are available, so environments are only targeted when there is something to deploy.

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