microsoft / AL-Go

The plug-and-play DevOps solution for Business Central app development on GitHub
MIT License
288 stars 121 forks source link

[Bug]: useCompilerFolder seams to have side effects when dontPublish is false. #1273

Open jonaswre opened 3 days ago

jonaswre commented 3 days ago

AL-Go version

6.0

Describe the issue

Hi,

I've enabled useCompilerFolder to try and achieve faster failures when the app compilation fails.

That's didn't seem to work when your apps have dependencies.

We have App B which depends on App A. App A is correctly downloaded from our internal Nuget Feed the compilation works correct. But when trying to install the previous version of App B the Action fails with the error that required objects are missing.

We had the same error when upgrading to AL-GO v6 when only the symbols for App A where resolved from the Microsoft feeds.So my best guess is that the useCompileFolder Option turns app files into symbols. I checked to see App A was resolved in the correct version from our feed and was present as a full app.

Removing the useCompileFolder option fixed the error.

Expected behavior

Well useCompileFolder should not create a state where action fail. Secondly it would be good to be able to fail fast in case of compilation errors. Pretty wasteful to spin up a docker container only to realize it not even compiling.

Steps to reproduce

Create 2 Apps which depend on each other. And then enable useCompileFolder.

Additional context (logs, screenshots, etc.)

No response

freddydk commented 1 day ago

As described on https://aka.ms/algosettings#useCompilerFolder - you need to also set doNotPublishApps in order to get a performance enhancement. I tried to reproduce the issue you are talking about here - but cannot:

This repo has 3 apps and one is dependent on another:

https://github.com/BusinessCentralApps/GHP-Common/actions/runs/11511476130/job/32044989671

Building using CompilerFolder without doNotPublishApps.

freddydk commented 1 day ago

But, you are right that we should wait with the creation of the container until we actually need it.

freddydk commented 1 day ago

Now, I think I was able to repro this - the problem is when you have two repositories with apps with dependencies - then the compilation works, but the deployment fails. Is this the problem you are referring to? https://github.com/BusinessCentralApps/GHP-W1/actions/runs/11511743372/job/32045671301

jonaswre commented 1 day ago

I don't think its the same error. Our error happens in "installing previous app"

Maybe the diffrence is that we use useProjectDependencies. App A and App B are in diffrent projects.

Image

This is the full error

   _____           _        _ _ _                                    _
   |_   _|         | |      | | (_)                                  (_)
     | |  _ __  ___| |_ __ _| | |_ _ __   __ _   _ __  _ __ _____   ___  ___  _   _ ___    __ _ _ __  _ __  ___
     | | | '_ \/ __| __/ _` | | | | '_ \ / _` | | '_ \| '__/ _ \ \ / / |/ _ \| | | / __|  / _` | '_ \| '_ \/ __|
    _| |_| | | \__ \ || (_| | | | | | | | (_| | | |_) | | |  __/\ V /| | (_) | |_| \__ \ | (_| | |_) | |_) \__ \
   |_____|_| |_|___/\__\__,_|_|_|_|_| |_|\__, | | .__/|_|  \___| \_/ |_|\___/ \__,_|___/  \__,_| .__/| .__/|___/
                                          __/ | | |                                            | |   | |
                                         |___/  |_|                                            |_|   |_|
  Publishing C:\ProgramData\BcContainerHelper\Extensions\bcBeyondAttributesBridge11403259053\f44aed27-7708-4360-a1fc-b600a69a9643\BEYONDIT GmbH_BeyondRecordSearchAttributesBridge_20.0.57.0.app
  Extension compilation failed
  error AL1024: A package with publisher 'BEYONDIT GmbH', name 'BeyondRecordSearch', and a version compatible with '20.0.0.0' could not be loaded. Symbols for the requested app BeyondRecordSearch by BEYONDIT GmbH 20.0.0.0 could not be found in the database.
  error AL1024: A package with publisher 'BEYONDIT GmbH', name 'BeyondAttributesCore', and a version compatible with '1.0.0.0' could not be loaded. Symbols for the requested app BeyondAttributesCore by BEYONDIT GmbH 1.0.0.0 could not be found in the database.
  src/RecordSearchEvents.Codeunit.al(3,54): error AL0118: The name '"BYD RS Record Search Mgt."' does not exist in the current context.
  src/ServiceItemSearch.Codeunit.al(16,32): error AL0185: Table 'BYD AT Attribute Value Mapping' is missing
  src/ServiceItemSearch.Codeunit.al(23,44): error AL0185: Table 'BYD RS Record Search Column' is missing
  src/RecordSearchEvents.Codeunit.al(4,89): error AL0185: Interface 'BYD RS IRecordSearchProvider' is missing
  src/ServiceItemSearch.Codeunit.al(44,100): error AL0185: Table 'BYD RS Record Search Column' is missing
  src/ServiceItemSearch.Codeunit.al(44,166): error AL0185: Table 'BYD RS Record Search Filter' is missing
  src/ServiceItemSearch.Codeunit.al(44,233): error AL0185: Table 'BYD RS Record Search Sorting' is missing
  src/ServiceItemSearch.Codeunit.al(44,302): error AL0185: Table 'BYD RS Record Search Row Value' is missing
  src/ServiceItemSearch.Codeunit.al(47,32): error AL0185: Table 'BYD AT Attribute Value Mapping' is missing
  src/ServiceItemSearch.Codeunit.al(107,118): error AL0185: Table 'BYD RS Record Search Column' is missing
  src/ServiceItemSearch.Codeunit.al(117,149): error AL0185: Table 'BYD RS Record Search Row Value' is missing
  src/ServiceItemSearch.Codeunit.al(128,61): error AL0185: Table 'BYD AT Attribute Value Mapping' is missing
  src/ServiceItemSearch.Codeunit.al(128,120): error AL0185: Table 'BYD RS Record Search Column' is missing
  src/ServiceItemSearch.Codeunit.al(128,186): error AL0185: Table 'BYD RS Record Search Filter' is missing
  src/ServiceItemSearch.Codeunit.al(128,253): error AL0185: Table 'BYD RS Record Search Sorting' is missing
  src/ServiceItemQuery.Query.al(39,54): error AL0185: Table 'BYD AT Attribute Value Mapping' is missing
  src/ServiceItemQuery.Query.al(41,32): error AL0171: The property value 'Id = Service_Item."BYD RSAB RecordId"' on property 'DataItemLink' is not valid.
  src/ServiceItemSearch.Codeunit.al(1,61): error AL0185: Interface 'BYD RS IRecordSearchProvider' is missing
  src/ServiceItemQuery.Query.al(43,40): error AL0345: The source of a Column or Filter must be a field defined on the table referenced by its parent DataItem
  src/ServiceItemQuery.Query.al(43,24): error AL0353: A Column must have a valid data source or have the 'Method' property set to 'Count'
  src/ServiceItemQuery.Query.al(47,46): error AL0345: The source of a Column or Filter must be a field defined on the table referenced by its parent DataItem
  src/ServiceItemQuery.Query.al(47,24): error AL0353: A Column must have a valid data source or have the 'Method' property set to 'Count'

  Exception Script Stack Trace:
  at <ScriptBlock>, <No file>: line 41

  PowerShell Call Stack:
  at Invoke-ScriptInBcContainer, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\ContainerHandling\Invoke-ScriptInNavContainer.ps1: line 71
  at <ScriptBlock>, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Publish-NavContainerApp.ps1: line 379
  at Publish-BcContainerApp, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Publish-NavContainerApp.ps1: line 154
  at <ScriptBlock>, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Run-AlPipeline.ps1: line 873
  at <ScriptBlock>, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Run-AlPipeline.ps1: line 2208
  at <ScriptBlock>, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Run-AlPipeline.ps1: line 2189
  at <ScriptBlock>, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Run-AlPipeline.ps1: line 2184
  at <ScriptBlock>, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Run-AlPipeline.ps1: line 977
  at Run-AlPipeline, C:\ProgramData\BcContainerHelper\6.0.26\BcContainerHelper\AppHandling\Run-AlPipeline.ps1: line 939
  at <ScriptBlock>, C:\3\_work\_actions\microsoft\AL-Go-Actions\v6.0\RunPipeline\RunPipeline.ps1: line 391
  at <ScriptBlock>, C:\3\_work\_temp\403ce9da-ac3d-4103-807e-b6991c4f0d66.ps1: line 3
  at <ScriptBlock>, C:\3\_work\_actions\microsoft\AL-Go-Actions\v6.0\Invoke-AlGoAction.ps1: line 17
  at <ScriptBlock>, C:\3\_work\_temp\403ce9da-ac3d-4103-807e-b6991c4f0d66.ps1: line 2
  at <ScriptBlock>, <No file>: line 1

  Container Free Physical Memory: 8.3Gb
  Disk C: Free 124Gb from 127Gb

  Services in container bcBeyondAttributesBridge11403259053:
  - MicrosoftDynamicsNavServer$BC is Running
  - MSSQL$SQLEXPRESS is Running
  Publish-BcContainerApp Telemetry Correlation Id: 66d28d85-e005-4071-9f23-62d84c7d4eb1

And regarding the performance improvement. I read the docs but I wanted to see if it would improve performance in failure szenarios. Because it would fail before the container is created to skipping the unnessary time of container creation.

jonaswre commented 1 day ago

BeyondRecordSearch was build in Build1 BeyondAttributeCore is build in another repo and downloaded from nuget.

freddydk commented 1 day ago

Will investigate

freddydk commented 1 day ago

Will let you know when you try out a test branch on one of your own forks or branches.