From f34d73391dbbd07c7961b335a908738e35d7b692 Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 11:45:48 -0600 Subject: [PATCH 1/7] Force undici 7.10 package install; later versions incompatible Refers to #39 --- bc-tools-extension/package.json | 2 +- bc-tools-extension/vss-extension.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bc-tools-extension/package.json b/bc-tools-extension/package.json index 4280478..fd0fff0 100644 --- a/bc-tools-extension/package.json +++ b/bc-tools-extension/package.json @@ -1,7 +1,7 @@ { "dependencies": { "node-fetch": "^2.7.0", - "undici": "^7.10.0", + "undici": "7.10.0", "unzipper": "^0.12.3" } } diff --git a/bc-tools-extension/vss-extension.json b/bc-tools-extension/vss-extension.json index 0fa2e8c..55ae8cf 100644 --- a/bc-tools-extension/vss-extension.json +++ b/bc-tools-extension/vss-extension.json @@ -2,7 +2,7 @@ "manifestVersion": 1, "id": "eg-bc-build-tasks", "name": "Business Central Build Tasks", - "version": "0.1.10", + "version": "0.1.11", "publisher": "Evergrowth", "targets": [ { From 61d4600e796c6aaf0a664415afd921b5e46993a8 Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 13:17:13 -0600 Subject: [PATCH 2/7] Missed incrementing environments.json Refers to #39 --- _tasks/environments.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tasks/environments.json b/_tasks/environments.json index 0dfb84c..d722091 100644 --- a/_tasks/environments.json +++ b/_tasks/environments.json @@ -2,7 +2,7 @@ "version": { "major": 0, "minor": 1, - "patch": 10, + "patch": 11, "build": 0 }, "dev": { From 0dc15f6ac5d1256c424ae8786991d4ed9aae27d0 Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 13:59:11 -0600 Subject: [PATCH 3/7] Update undici with a fallback Refers to #39 --- bc-tools-extension/Build-ALPackage/task.json | 2 +- bc-tools-extension/Enumerate-Environment/task.json | 2 +- bc-tools-extension/Get-BCDependencies/task.json | 2 +- bc-tools-extension/Get-ListOfCompanies/task.json | 2 +- bc-tools-extension/Get-ListOfModules/task.json | 2 +- bc-tools-extension/Get-VSIXCompiler/task.json | 2 +- bc-tools-extension/Publish-BCModuleToTenant/task.json | 2 +- bc-tools-extension/_common/CommonTools.js | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bc-tools-extension/Build-ALPackage/task.json b/bc-tools-extension/Build-ALPackage/task.json index 2d92799..dc849bc 100644 --- a/bc-tools-extension/Build-ALPackage/task.json +++ b/bc-tools-extension/Build-ALPackage/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Build AL Package from $(ProjectPath)", "inputs": [ diff --git a/bc-tools-extension/Enumerate-Environment/task.json b/bc-tools-extension/Enumerate-Environment/task.json index ca8b4ef..c801237 100644 --- a/bc-tools-extension/Enumerate-Environment/task.json +++ b/bc-tools-extension/Enumerate-Environment/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Enumerate compiling environment", "inputs": [ diff --git a/bc-tools-extension/Get-BCDependencies/task.json b/bc-tools-extension/Get-BCDependencies/task.json index 228899a..98080f3 100644 --- a/bc-tools-extension/Get-BCDependencies/task.json +++ b/bc-tools-extension/Get-BCDependencies/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Collect dependencies for AL project", "inputs": [ diff --git a/bc-tools-extension/Get-ListOfCompanies/task.json b/bc-tools-extension/Get-ListOfCompanies/task.json index fdb6aa0..ff36e0a 100644 --- a/bc-tools-extension/Get-ListOfCompanies/task.json +++ b/bc-tools-extension/Get-ListOfCompanies/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Collect list of companies", "inputs": [ diff --git a/bc-tools-extension/Get-ListOfModules/task.json b/bc-tools-extension/Get-ListOfModules/task.json index 9dcbf53..d6cd61a 100644 --- a/bc-tools-extension/Get-ListOfModules/task.json +++ b/bc-tools-extension/Get-ListOfModules/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Collect list of modules", "inputs": [ diff --git a/bc-tools-extension/Get-VSIXCompiler/task.json b/bc-tools-extension/Get-VSIXCompiler/task.json index 01b9381..901bd24 100644 --- a/bc-tools-extension/Get-VSIXCompiler/task.json +++ b/bc-tools-extension/Get-VSIXCompiler/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Acquire compiler for AL project", "inputs": [ diff --git a/bc-tools-extension/Publish-BCModuleToTenant/task.json b/bc-tools-extension/Publish-BCModuleToTenant/task.json index 95b5e62..9560d84 100644 --- a/bc-tools-extension/Publish-BCModuleToTenant/task.json +++ b/bc-tools-extension/Publish-BCModuleToTenant/task.json @@ -9,7 +9,7 @@ "version": { "Major": 0, "Minor": 1, - "Patch": 5 + "Patch": 6 }, "instanceNameFormat": "Deploy module to tenant", "inputs": [ diff --git a/bc-tools-extension/_common/CommonTools.js b/bc-tools-extension/_common/CommonTools.js index 0b0c1e7..74b9bbc 100644 --- a/bc-tools-extension/_common/CommonTools.js +++ b/bc-tools-extension/_common/CommonTools.js @@ -53,7 +53,7 @@ function usesUndici() { const { execSync } = require('child_process'); try { - execSync('npm install undici --no-progress --loglevel=warn', { + execSync('npm install undici@7.10.0 --no-progress --loglevel=warn', { cwd: projectRoot, stdio: 'inherit' }); From 190b5d00b25aa31998340193604bd7bb930a2ca0 Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 14:24:13 -0600 Subject: [PATCH 4/7] Troubleshooting undici version mismatch continued Refers to #39 --- bc-tools-extension/Build-ALPackage/task.json | 3 ++ .../Enumerate-Environment/task.json | 3 ++ .../Get-BCDependencies/task.json | 3 ++ .../Get-ListOfCompanies/task.json | 3 ++ .../Get-ListOfModules/task.json | 3 ++ bc-tools-extension/Get-VSIXCompiler/task.json | 3 ++ .../Publish-BCModuleToTenant/task.json | 3 ++ bc-tools-extension/_common/CommonTools.js | 54 +++++++++---------- 8 files changed, 46 insertions(+), 29 deletions(-) diff --git a/bc-tools-extension/Build-ALPackage/task.json b/bc-tools-extension/Build-ALPackage/task.json index dc849bc..c261f1e 100644 --- a/bc-tools-extension/Build-ALPackage/task.json +++ b/bc-tools-extension/Build-ALPackage/task.json @@ -60,6 +60,9 @@ }, "Node20_1": { "target": "function_Build-ALPackage.js" + }, + "Node24": { + "target": "function_Build-ALPackage.js" } } } diff --git a/bc-tools-extension/Enumerate-Environment/task.json b/bc-tools-extension/Enumerate-Environment/task.json index c801237..4c0a077 100644 --- a/bc-tools-extension/Enumerate-Environment/task.json +++ b/bc-tools-extension/Enumerate-Environment/task.json @@ -36,6 +36,9 @@ }, "Node20_1": { "target": "function_Enumerate-Environment.js" + }, + "Node24": { + "target": "function_Enumerate-Environment.js" } } } diff --git a/bc-tools-extension/Get-BCDependencies/task.json b/bc-tools-extension/Get-BCDependencies/task.json index 98080f3..251b916 100644 --- a/bc-tools-extension/Get-BCDependencies/task.json +++ b/bc-tools-extension/Get-BCDependencies/task.json @@ -84,6 +84,9 @@ }, "Node20_1": { "target": "function_Get-BCDependencies.js" + }, + "Node24": { + "target": "function_Get-BCDependencies.js" } } } diff --git a/bc-tools-extension/Get-ListOfCompanies/task.json b/bc-tools-extension/Get-ListOfCompanies/task.json index ff36e0a..c5cdff4 100644 --- a/bc-tools-extension/Get-ListOfCompanies/task.json +++ b/bc-tools-extension/Get-ListOfCompanies/task.json @@ -60,6 +60,9 @@ }, "Node20_1": { "target": "function_Get-ListOfCompanies.js" + }, + "Node24": { + "target": "function_Get-ListOfCompanies.js" } } } diff --git a/bc-tools-extension/Get-ListOfModules/task.json b/bc-tools-extension/Get-ListOfModules/task.json index d6cd61a..effc954 100644 --- a/bc-tools-extension/Get-ListOfModules/task.json +++ b/bc-tools-extension/Get-ListOfModules/task.json @@ -76,6 +76,9 @@ }, "Node20_1": { "target": "function_Get-ListOfModules.js" + }, + "Node24": { + "target": "function_Get-ListOfModules.js" } } } diff --git a/bc-tools-extension/Get-VSIXCompiler/task.json b/bc-tools-extension/Get-VSIXCompiler/task.json index 901bd24..a792066 100644 --- a/bc-tools-extension/Get-VSIXCompiler/task.json +++ b/bc-tools-extension/Get-VSIXCompiler/task.json @@ -36,6 +36,9 @@ }, "Node20_1": { "target": "function_Get-VSIXCompiler.js" + }, + "Node24": { + "target": "function_Get-VSIXCompiler.js" } } } diff --git a/bc-tools-extension/Publish-BCModuleToTenant/task.json b/bc-tools-extension/Publish-BCModuleToTenant/task.json index 9560d84..4b7a235 100644 --- a/bc-tools-extension/Publish-BCModuleToTenant/task.json +++ b/bc-tools-extension/Publish-BCModuleToTenant/task.json @@ -91,6 +91,9 @@ }, "Node20_1": { "target": "function_Publish-BCModuleToTenant.js" + }, + "Node24": { + "target": "function_Publish-BCModuleToTenant.js" } } } diff --git a/bc-tools-extension/_common/CommonTools.js b/bc-tools-extension/_common/CommonTools.js index 74b9bbc..70355b9 100644 --- a/bc-tools-extension/_common/CommonTools.js +++ b/bc-tools-extension/_common/CommonTools.js @@ -45,24 +45,20 @@ let fetch = null; function usesUndici() { if (!fetch) { + logger.warn("'undici' not found. Attempting to install deterministic version..."); + const projectRoot = path.resolve(__dirname, '..'); + + const { execSync } = require('child_process'); try { + execSync('npm install undici@6.22.0 --no-progress --loglevel=warn', { + cwd: projectRoot, + stdio: 'inherit' + }); fetch = require('undici').fetch; - } catch (_) { - logger.warn("'undici' not found. Attempting to install..."); - const projectRoot = path.resolve(__dirname, '..'); - - const { execSync } = require('child_process'); - try { - execSync('npm install undici@7.10.0 --no-progress --loglevel=warn', { - cwd: projectRoot, - stdio: 'inherit' - }); - fetch = require('undici').fetch; - } catch (installErr) { - console.error("Auto-install of 'undici' failed. Aborting."); - console.error(installErr); - process.exit(1); - } + } catch (installErr) { + console.error("Auto-install of 'undici' failed. Aborting."); + console.error(installErr); + process.exit(1); } } return fetch; @@ -217,7 +213,7 @@ async function getModules(token, tenantId, environmentName, companyId, moduleId, 'Accept': 'application/json' } }); - + if (!response.ok) { logger.error(`Failed to get modules: ${response.status}`); const error = await response.text(); @@ -238,8 +234,8 @@ async function confirmModule(token, tenantId, environmentName, companyId, module let checkValue = await getModules(token, tenantId, environmentName, companyId, moduleId); checkValue.forEach((module, idx) => { - logger.debug(`**** ${idx + 1}. ${module.displayName} (ID: ${module.id})`); - }); + logger.debug(`**** ${idx + 1}. ${module.displayName} (ID: ${module.id})`); + }); return checkValue.some(m => m.id === moduleId); } @@ -282,9 +278,9 @@ async function getInstallationStatus(token, tenantId, environmentName, companyId //console.debug('API response (getInstallationStatus)'); const data = await response.json(); - + //console.debug(data); - return data.value; + return data.value; } /** @@ -337,7 +333,7 @@ async function createInstallationBookmark(token, tenantId, environmentName, comp } if (!['Current version', 'Next minor version', 'Next major version'].includes(schedule) && schedule?.trim() !== "") { - throw new Error ('\'schedule\' must be one of: \'Current version\', \'Next minor version\', or \'Next major version\', or left blank'); + throw new Error('\'schedule\' must be one of: \'Current version\', \'Next minor version\', or \'Next major version\', or left blank'); } // per: https://learn.microsoft.com/en-us/dynamics365/business-central/dev-itpro/administration/resources/dynamics_extensionupload @@ -346,14 +342,14 @@ async function createInstallationBookmark(token, tenantId, environmentName, comp } if (!['Add', 'Force Sync'].includes(syncMode) && syncMode?.trim() !== "") { - throw new Error ('\'syncMode\' must be one of: \'Add\', or \'Force Sync\', or left blank'); + throw new Error('\'syncMode\' must be one of: \'Add\', or \'Force Sync\', or left blank'); } const body = { schedule: schedule, schemaSyncMode: syncMode }; - + const _debugBody = await JSON.stringify(body); logger.debug('Request body:'); logger.debug(_debugBody); @@ -367,7 +363,7 @@ async function createInstallationBookmark(token, tenantId, environmentName, comp }, body: JSON.stringify(body) }); - + if (!response.ok) { const status = response.status; @@ -410,7 +406,7 @@ async function createInstallationBookmark(token, tenantId, environmentName, comp const data = await response.json(); logger.debug('(createInstallationBookmark) returning: '); logger.debug(data); - return data; + return data; } /** @@ -492,7 +488,7 @@ async function callNavUploadCommand(token, tenantId, environmentName, companyId, let response = await fetch(apiUrl, { method: 'POST', headers: { - 'Authorization': `Bearer ${token}`, + 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate, br' } @@ -507,14 +503,14 @@ async function callNavUploadCommand(token, tenantId, environmentName, companyId, logger.info(`Original odata.etag: ${odata_etag}`); if (Array.isArray(refreshCheck)) { odata_etag = refreshCheck[0]['@odata.etag']; - } else { + } else { odata_etag = refreshCheck['@odata.etag']; } logger.info(`Refreshed odata.etag: ${odata_etag}`); response = await fetch(apiUrl, { method: 'POST', headers: { - 'Authorization': `Bearer ${token}`, + 'Authorization': `Bearer ${token}`, 'Accept': 'application/json', 'Accept-Encoding': 'gzip, deflate, br' } From bdc442341d6db90d42234e6c15cdef43bd177a8c Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 14:31:56 -0600 Subject: [PATCH 5/7] Bump version number Refers to #39 --- _tasks/environments.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_tasks/environments.json b/_tasks/environments.json index d722091..1a94338 100644 --- a/_tasks/environments.json +++ b/_tasks/environments.json @@ -2,7 +2,7 @@ "version": { "major": 0, "minor": 1, - "patch": 11, + "patch": 12, "build": 0 }, "dev": { From 910321a63e5b79e252cc83fe4852083bd7a511f5 Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 14:49:27 -0600 Subject: [PATCH 6/7] Update documentation for fix Refers to #39 --- bc-tools-extension/README.md | 4 ++++ bc-tools-extension/RELEASE.md | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/bc-tools-extension/README.md b/bc-tools-extension/README.md index aea7bbb..d0a50dd 100644 --- a/bc-tools-extension/README.md +++ b/bc-tools-extension/README.md @@ -26,6 +26,10 @@ ## Overview +**2026-06-24 Version 0.1.12: Node24 support now added** + +We've updated to allow for Node 24 support! + **2025-06-10 Version 0.1.8: NO LONGER WINDOWS ONLY!** *Proud to announce that this extension is NO LONGER Windows agent dependent!!!* diff --git a/bc-tools-extension/RELEASE.md b/bc-tools-extension/RELEASE.md index 8221c15..156e8a6 100644 --- a/bc-tools-extension/RELEASE.md +++ b/bc-tools-extension/RELEASE.md @@ -1,8 +1,11 @@ # Release Notes - BCBuildTasks Extension - [Release Notes - BCBuildTasks Extension](#release-notes---bcbuildtasks-extension) +- [Version: 0.1.12](#version-0112) +- [Version: 0.1.11](#version-0111) - [Version: 0.1.10](#version-0110) - [Version: 0.1.9](#version-019) +- [Version: 0.1.9](#version-019-1) - [Version: 0.1.8](#version-018) - [Version: 0.1.7](#version-017) - [Fixes](#fixes) @@ -33,6 +36,13 @@ - [Support](#support) - [License](#license) +# Version: 0.1.12 +- Added Node24 support +- Fixed ```undici``` error regarding "```TypeError: webidl.util.markAsUncloneable is not a function```" + +# Version: 0.1.11 +- Unused + # Version: 0.1.10 - Adds [#36](https://github.com/crazycga/bcdevopsextension/issues/36): incorporate failure condition regarding missing pipeline user entry onto Microsoft Entra Application screen in Business Central. - Adds new function ```EGEnumerateEnvironment``` for fast troubleshooting of pipeline environments. From 5274161b4f0d05b038d4684d40de53f8c6b7bb52 Mon Sep 17 00:00:00 2001 From: "jamesm@evergrowth.ca" Date: Wed, 24 Jun 2026 14:52:29 -0600 Subject: [PATCH 7/7] Minor fix to package.json Refers to #39 --- bc-tools-extension/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bc-tools-extension/package.json b/bc-tools-extension/package.json index fd0fff0..a269379 100644 --- a/bc-tools-extension/package.json +++ b/bc-tools-extension/package.json @@ -1,7 +1,7 @@ { "dependencies": { "node-fetch": "^2.7.0", - "undici": "7.10.0", + "undici": "6.22.0", "unzipper": "^0.12.3" } }