Guard Build job JSON parsing#2260
Conversation
There was a problem hiding this comment.
Pull request overview
This PR addresses a GitHub Actions workflow failure where the Build job’s if: condition attempted to fromJson() an empty needs.Initialization.outputs.buildOrderJson, causing CI/CD to error and skip Build.
Changes:
- Guarded the Build job
if:condition in both template CI/CD workflows to ensurebuildOrderJsonis non-empty before callingfromJson(...). - Applied the same guard to the
if:conditions generated for multi-depth Build jobs inModifyBuildWorkflows.
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| Templates/Per Tenant Extension/.github/workflows/CICD.yaml | Adds a non-empty buildOrderJson guard before fromJson(...) in the Build job condition. |
| Templates/AppSource App/.github/workflows/CICD.yaml | Adds the same non-empty buildOrderJson guard before fromJson(...) in the Build job condition. |
| Actions/CheckForUpdates/CheckForUpdates.HelperFunctions.ps1 | Updates multi-depth Build job condition generation to include the same guard. |
| if: (!failure()) && (!cancelled()) && needs.Initialization.outputs.buildOrderJson != '' && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| strategy: | ||
| matrix: | ||
| include: ${{ fromJson(needs.Initialization.outputs.buildOrderJson)[0].buildDimensions }} |
| if: (!failure()) && (!cancelled()) && needs.Initialization.outputs.buildOrderJson != '' && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| strategy: | ||
| matrix: | ||
| include: ${{ fromJson(needs.Initialization.outputs.buildOrderJson)[0].buildDimensions }} |
| # Example (depth 1): | ||
| # needs: [ Initialization ] | ||
| # if: (!failure()) && (!cancelled()) && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| $if = "if: (!failure()) && (!cancelled()) && fromJson(needs.Initialization.outputs.buildOrderJson)[$index].projectsCount > 0" | ||
| # if: (!failure()) && (!cancelled()) && needs.Initialization.outputs.buildOrderJson != '' && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| $if = "if: (!failure()) && (!cancelled()) && needs.Initialization.outputs.buildOrderJson != '' && fromJson(needs.Initialization.outputs.buildOrderJson)[$index].projectsCount > 0" | ||
| } | ||
| else { | ||
| # Subsequent build jobs needs to have a dependency on all previous build jobs | ||
| # Example (depth 2): | ||
| # needs: [ Initialization, Build1 ] | ||
| # if: (!failure()) && (!cancelled()) && (needs.Build1.result == 'success' || needs.Build1.result == 'skipped') && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| # if: (!failure()) && (!cancelled()) && (needs.Build1.result == 'success' || needs.Build1.result == 'skipped') && needs.Initialization.outputs.buildOrderJson != '' && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| # Another example (depth 3): | ||
| # needs: [ Initialization, Build2, Build1 ] | ||
| # if: (!failure()) && (!cancelled()) && (needs.Build2.result == 'success' || needs.Build2.result == 'skipped') && (needs.Build1.result == 'success' || needs.Build1.result == 'skipped') && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 | ||
| # if: (!failure()) && (!cancelled()) && (needs.Build2.result == 'success' || needs.Build2.result == 'skipped') && (needs.Build1.result == 'success' || needs.Build1.result == 'skipped') && needs.Initialization.outputs.buildOrderJson != '' && fromJson(needs.Initialization.outputs.buildOrderJson)[0].projectsCount > 0 |
3972fd2 to
1283d72
Compare
|
Updated the other template Build conditions with the same guard and fixed the generated workflow examples to use the matching build-order index. |
1283d72 to
b200349
Compare
|
Hi, checking in on this when you have a chance. The branch keeps the fix scoped to #2258 by guarding the generated Build-job |
|
Quick follow-up. I addressed the generated workflow/template coverage after review; happy to adjust if this needs to fit a different AL-Go template path. |
Summary
needs.Initialization.outputs.buildOrderJsonCloses #2258.
Testing
git diff --check