From 88a4be1b6d654617e818fc072364052a615cc89d Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Tue, 4 Nov 2025 15:41:19 +0100 Subject: [PATCH 01/14] Drop v4 to reduce size --- .github/dependabot.yml | 302 ++++------ BuildTasks/Common/v4/Common.ts | 558 ------------------ BuildTasks/Common/v4/package-lock.json | 397 ------------- BuildTasks/Common/v4/package.json | 20 - BuildTasks/Common/v4/tsconfig.json | 11 - BuildTasks/Common/v4/uuidv5.d.ts | 17 - .../ExtensionVersion/v4/ExtensionVersion.ts | 86 --- BuildTasks/ExtensionVersion/v4/icon.png | Bin 3925 -> 0 bytes .../ExtensionVersion/v4/package-lock.json | 389 ------------ BuildTasks/ExtensionVersion/v4/package.json | 18 - BuildTasks/ExtensionVersion/v4/task.json | 163 ----- BuildTasks/ExtensionVersion/v4/tsconfig.json | 10 - .../InstallExtension/v4/InstallExtension.ts | 29 - BuildTasks/InstallExtension/v4/icon.png | Bin 3770 -> 0 bytes .../InstallExtension/v4/package-lock.json | 389 ------------ BuildTasks/InstallExtension/v4/package.json | 18 - BuildTasks/InstallExtension/v4/task.json | 156 ----- BuildTasks/InstallExtension/v4/tsconfig.json | 10 - .../v4/IsValidExtension.ts | 49 -- BuildTasks/IsValidExtensionAgent/v4/icon.png | Bin 3764 -> 0 bytes .../v4/package-lock.json | 412 ------------- .../IsValidExtensionAgent/v4/package.json | 19 - BuildTasks/IsValidExtensionAgent/v4/task.json | 143 ----- .../IsValidExtensionAgent/v4/tsconfig.json | 10 - .../PackageExtension/v4/PackageExtension.ts | 54 -- BuildTasks/PackageExtension/v4/icon.png | Bin 4073 -> 0 bytes .../PackageExtension/v4/package-lock.json | 389 ------------ BuildTasks/PackageExtension/v4/package.json | 18 - BuildTasks/PackageExtension/v4/task.json | 234 -------- BuildTasks/PackageExtension/v4/tsconfig.json | 10 - .../PublishExtension/v4/PublishExtension.ts | 170 ------ BuildTasks/PublishExtension/v4/icon.png | Bin 3974 -> 0 bytes .../PublishExtension/v4/package-lock.json | 475 --------------- BuildTasks/PublishExtension/v4/package.json | 23 - BuildTasks/PublishExtension/v4/task.json | 301 ---------- BuildTasks/PublishExtension/v4/tsconfig.json | 11 - BuildTasks/PublishExtension/v4/vsixeditor.ts | 349 ----------- .../v4/PublishVSExtension.js | 28 - .../v4/PublishVSExtension.js.map | 1 - .../v4/PublishVSExtension.ts | 29 - BuildTasks/PublishVSExtension/v4/Utils.js | 65 -- BuildTasks/PublishVSExtension/v4/Utils.js.map | 1 - BuildTasks/PublishVSExtension/v4/Utils.ts | 78 --- BuildTasks/PublishVSExtension/v4/icon.png | Bin 1448 -> 0 bytes .../PublishVSExtension/v4/package-lock.json | 383 ------------ BuildTasks/PublishVSExtension/v4/package.json | 23 - BuildTasks/PublishVSExtension/v4/readme.md | 12 - .../PublishVSExtension/v4/screenshot.png | Bin 75867 -> 0 bytes BuildTasks/PublishVSExtension/v4/task.json | 75 --- .../PublishVSExtension/v4/tsconfig.json | 24 - .../ShareExtension/v4/ShareExtension.ts | 21 - BuildTasks/ShareExtension/v4/icon.png | Bin 3949 -> 0 bytes .../ShareExtension/v4/package-lock.json | 389 ------------ BuildTasks/ShareExtension/v4/package.json | 18 - BuildTasks/ShareExtension/v4/task.json | 147 ----- BuildTasks/ShareExtension/v4/tsconfig.json | 10 - BuildTasks/TfxInstaller/v4/TfxInstaller.ts | 112 ---- BuildTasks/TfxInstaller/v4/icon.png | Bin 3849 -> 0 bytes BuildTasks/TfxInstaller/v4/package-lock.json | 447 -------------- BuildTasks/TfxInstaller/v4/package.json | 17 - BuildTasks/TfxInstaller/v4/task.json | 51 -- BuildTasks/TfxInstaller/v4/tsconfig.json | 10 - .../v4/UnpublishExtension.ts | 23 - BuildTasks/UnpublishExtension/v4/icon.png | Bin 3559 -> 0 bytes .../UnpublishExtension/v4/package-lock.json | 389 ------------ BuildTasks/UnpublishExtension/v4/package.json | 18 - BuildTasks/UnpublishExtension/v4/task.json | 142 ----- .../UnpublishExtension/v4/tsconfig.json | 10 - BuildTasks/tsconfig.v4.json | 20 - azure-pipelines.yml | 3 +- package.json | 6 +- test-extensionversion.cmd | 7 - test-isvalid.cmd | 15 - test-packaging.cmd | 6 +- test-publishing.cmd | 6 +- 75 files changed, 112 insertions(+), 7714 deletions(-) delete mode 100644 BuildTasks/Common/v4/Common.ts delete mode 100644 BuildTasks/Common/v4/package-lock.json delete mode 100644 BuildTasks/Common/v4/package.json delete mode 100644 BuildTasks/Common/v4/tsconfig.json delete mode 100644 BuildTasks/Common/v4/uuidv5.d.ts delete mode 100644 BuildTasks/ExtensionVersion/v4/ExtensionVersion.ts delete mode 100644 BuildTasks/ExtensionVersion/v4/icon.png delete mode 100644 BuildTasks/ExtensionVersion/v4/package-lock.json delete mode 100644 BuildTasks/ExtensionVersion/v4/package.json delete mode 100644 BuildTasks/ExtensionVersion/v4/task.json delete mode 100644 BuildTasks/ExtensionVersion/v4/tsconfig.json delete mode 100644 BuildTasks/InstallExtension/v4/InstallExtension.ts delete mode 100644 BuildTasks/InstallExtension/v4/icon.png delete mode 100644 BuildTasks/InstallExtension/v4/package-lock.json delete mode 100644 BuildTasks/InstallExtension/v4/package.json delete mode 100644 BuildTasks/InstallExtension/v4/task.json delete mode 100644 BuildTasks/InstallExtension/v4/tsconfig.json delete mode 100644 BuildTasks/IsValidExtensionAgent/v4/IsValidExtension.ts delete mode 100644 BuildTasks/IsValidExtensionAgent/v4/icon.png delete mode 100644 BuildTasks/IsValidExtensionAgent/v4/package-lock.json delete mode 100644 BuildTasks/IsValidExtensionAgent/v4/package.json delete mode 100644 BuildTasks/IsValidExtensionAgent/v4/task.json delete mode 100644 BuildTasks/IsValidExtensionAgent/v4/tsconfig.json delete mode 100644 BuildTasks/PackageExtension/v4/PackageExtension.ts delete mode 100644 BuildTasks/PackageExtension/v4/icon.png delete mode 100644 BuildTasks/PackageExtension/v4/package-lock.json delete mode 100644 BuildTasks/PackageExtension/v4/package.json delete mode 100644 BuildTasks/PackageExtension/v4/task.json delete mode 100644 BuildTasks/PackageExtension/v4/tsconfig.json delete mode 100644 BuildTasks/PublishExtension/v4/PublishExtension.ts delete mode 100644 BuildTasks/PublishExtension/v4/icon.png delete mode 100644 BuildTasks/PublishExtension/v4/package-lock.json delete mode 100644 BuildTasks/PublishExtension/v4/package.json delete mode 100644 BuildTasks/PublishExtension/v4/task.json delete mode 100644 BuildTasks/PublishExtension/v4/tsconfig.json delete mode 100644 BuildTasks/PublishExtension/v4/vsixeditor.ts delete mode 100644 BuildTasks/PublishVSExtension/v4/PublishVSExtension.js delete mode 100644 BuildTasks/PublishVSExtension/v4/PublishVSExtension.js.map delete mode 100644 BuildTasks/PublishVSExtension/v4/PublishVSExtension.ts delete mode 100644 BuildTasks/PublishVSExtension/v4/Utils.js delete mode 100644 BuildTasks/PublishVSExtension/v4/Utils.js.map delete mode 100644 BuildTasks/PublishVSExtension/v4/Utils.ts delete mode 100644 BuildTasks/PublishVSExtension/v4/icon.png delete mode 100644 BuildTasks/PublishVSExtension/v4/package-lock.json delete mode 100644 BuildTasks/PublishVSExtension/v4/package.json delete mode 100644 BuildTasks/PublishVSExtension/v4/readme.md delete mode 100644 BuildTasks/PublishVSExtension/v4/screenshot.png delete mode 100644 BuildTasks/PublishVSExtension/v4/task.json delete mode 100644 BuildTasks/PublishVSExtension/v4/tsconfig.json delete mode 100644 BuildTasks/ShareExtension/v4/ShareExtension.ts delete mode 100644 BuildTasks/ShareExtension/v4/icon.png delete mode 100644 BuildTasks/ShareExtension/v4/package-lock.json delete mode 100644 BuildTasks/ShareExtension/v4/package.json delete mode 100644 BuildTasks/ShareExtension/v4/task.json delete mode 100644 BuildTasks/ShareExtension/v4/tsconfig.json delete mode 100644 BuildTasks/TfxInstaller/v4/TfxInstaller.ts delete mode 100644 BuildTasks/TfxInstaller/v4/icon.png delete mode 100644 BuildTasks/TfxInstaller/v4/package-lock.json delete mode 100644 BuildTasks/TfxInstaller/v4/package.json delete mode 100644 BuildTasks/TfxInstaller/v4/task.json delete mode 100644 BuildTasks/TfxInstaller/v4/tsconfig.json delete mode 100644 BuildTasks/UnpublishExtension/v4/UnpublishExtension.ts delete mode 100644 BuildTasks/UnpublishExtension/v4/icon.png delete mode 100644 BuildTasks/UnpublishExtension/v4/package-lock.json delete mode 100644 BuildTasks/UnpublishExtension/v4/package.json delete mode 100644 BuildTasks/UnpublishExtension/v4/task.json delete mode 100644 BuildTasks/UnpublishExtension/v4/tsconfig.json delete mode 100644 BuildTasks/tsconfig.v4.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 23865ce4..5a020175 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,200 +5,110 @@ version: 2 updates: - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "weekly" - groups: - ESLint: - patterns: - - esbuild - - eslint - - "@typescript-eslint/*" - - "@eslint/*" - - typescript-eslint +- package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" +- package-ecosystem: "npm" + directory: "/" + schedule: + interval: "weekly" + groups: + ESLint: + patterns: + - esbuild + - eslint + - "@typescript-eslint/*" + - "@eslint/*" + - typescript-eslint - - package-ecosystem: "npm" - directory: "/BuildTasks/Common/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/ExtensionVersion/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/InstallExtension/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/IsValidExtensionAgent/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/PackageExtension/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/PublishExtension/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/PublishVSExtension/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/ShareExtension/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/TfxInstaller/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/UnpublishExtension/v4" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/Common/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/ExtensionVersion/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/InstallExtension/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/IsValidExtensionAgent/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/PackageExtension/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/PublishExtension/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/PublishVSExtension/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/ShareExtension/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/TfxInstaller/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] - - package-ecosystem: "npm" - directory: "/BuildTasks/UnpublishExtension/v5" - schedule: - interval: "weekly" - ignore: - - dependency-name: "azure-pipelines-task-lib" - update-types: ["version-update:semver-major"] - - dependency-name: "@types/node" - update-types: ["version-update:semver-major"] +- package-ecosystem: "npm" + directory: "/BuildTasks/Common/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/ExtensionVersion/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/InstallExtension/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/IsValidExtensionAgent/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/PackageExtension/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/PublishExtension/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/PublishVSExtension/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/ShareExtension/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/TfxInstaller/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/UnpublishExtension/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] diff --git a/BuildTasks/Common/v4/Common.ts b/BuildTasks/Common/v4/Common.ts deleted file mode 100644 index d009876c..00000000 --- a/BuildTasks/Common/v4/Common.ts +++ /dev/null @@ -1,558 +0,0 @@ -import * as path from "path"; -import * as stream from "stream"; -import * as fs from "fs"; -import * as tl from "azure-pipelines-task-lib/task"; -import * as trl from "azure-pipelines-task-lib/toolrunner"; -import * as fse from "fs-extra"; -import ToolRunner = trl.ToolRunner; -import uuidv5 from "uuidv5"; -import * as tmp from "tmp"; - -function writeBuildTempFile(taskName: string, data: string | Buffer): string { - const tempDir = tl.getVariable("Agent.TempDirectory"); - const tempFile = tmp.tmpNameSync({ prefix: taskName, postfix: ".tmp", tmpdir: tempDir }); - - tl.debug(`Generating Build temp file: ${tempFile}`); - tl.writeFile(tempFile, data, { mode: 0o600, encoding: "utf8", flag: "wx+"} ); - - return tempFile; -} - -function deleteBuildTempFile(tempFile: string) { - if (tempFile && tl.exist(tempFile)) { - tl.debug(`Deleting temp file: ${tempFile}`); - fs.unlinkSync(tempFile); - } -} - -/** - * Set manifest related arguments for "tfx extension" command, such as - * the --root or the --manifest-globs switches. - * @param {ToolRunner} tfx - * @returns {() => void} Cleaner function that the caller should use to cleanup temporary files created to be used as arguments - */ -export function validateAndSetTfxManifestArguments(tfx: ToolRunner): (() => void) { - const rootFolder = tl.getInput("rootFolder", false); - tfx.argIf(rootFolder, ["--root", rootFolder]); - - - const globsManifest = tl.getDelimitedInput("patternManifest", "\n", false); - tfx.argIf(globsManifest.length, ["--manifest-globs"]); - tfx.argIf(globsManifest.length, globsManifest); - - // Overrides manifest file - const publisher = tl.getInput("publisherId", false); - - const localizationRoot = tl.getInput("localizationRoot", false); - tfx.argIf(localizationRoot, ["--loc-root", localizationRoot]); - - let extensionId = tl.getInput("extensionId", false); - const extensionTag = tl.getInput("extensionTag", false); - - if (extensionId && extensionTag) { - extensionId += extensionTag; - tl.debug(`Overriding extension id to: ${extensionId}`); - } - - // for backwards compat check both "method" and "fileType" - switch (tl.getInput("method", false) || tl.getInput("fileType", false)) { - // for backwards compat trigger on both "manifest" and "id" - case "manifest": - case "id": - default: { - tfx.argIf(publisher, ["--publisher", publisher]); - tfx.argIf(extensionId, ["--extension-id", extensionId]); - break; - } - case "vsix": { - const vsixFilePattern = tl.getPathInput("vsixFile", true); - let matchingVsixFile: string[]; - if (vsixFilePattern.indexOf("*") >= 0 || vsixFilePattern.indexOf("?") >= 0) { - tl.debug("Pattern found in vsixFile parameter."); - matchingVsixFile = tl.findMatch(process.cwd(), vsixFilePattern); - } - else { - tl.debug("No pattern found in vsixFile parameter."); - matchingVsixFile = [vsixFilePattern]; - } - - if (!matchingVsixFile || matchingVsixFile.length === 0) { - tl.setResult(tl.TaskResult.Failed, `Found no vsix files matching: ${vsixFilePattern}.`); - throw new Error("failed"); - } - if (matchingVsixFile.length !== 1) { - tl.setResult(tl.TaskResult.Failed, `Found multiple vsix files matching: ${vsixFilePattern}.`); - throw new Error("failed"); - } - tfx.arg(["--vsix", matchingVsixFile[0]]); - break; - } - } - - let jsonOverrides: any; - const extensionName = tl.getInput("extensionName", false); - if (extensionName) { - tl.debug(`Overriding extension name to: ${extensionName}`); - jsonOverrides = (jsonOverrides || {}); - jsonOverrides.name = extensionName; - } - - const extensionVisibility = tl.getInput("extensionVisibility", false); - if (extensionVisibility && extensionVisibility !== "default") { - tl.debug(`Overriding extension visibility to: ${extensionVisibility}`); - jsonOverrides = (jsonOverrides || {}); - - const isPublic = extensionVisibility.indexOf("public") >= 0; - const isPreview = extensionVisibility.indexOf("preview") >= 0; - - jsonOverrides.public = isPublic; - - if (isPreview) { - jsonOverrides.galleryFlags = jsonOverrides.galleryFlags || []; - jsonOverrides.galleryFlags.push("Preview"); - } - } - - const extensionPricing = tl.getInput("extensionPricing", false); - if (extensionPricing && extensionPricing !== "default") { - tl.debug(`Overriding extension pricing to: ${extensionPricing}`); - jsonOverrides = (jsonOverrides || {}); - - const isPaid = extensionPricing.indexOf("paid") >= 0; - - if (isPaid) { - jsonOverrides.galleryFlags = jsonOverrides.galleryFlags || []; - jsonOverrides.galleryFlags.push("Paid"); - } - } - - const extensionVersion = getExtensionVersion(); - if (extensionVersion) { - tl.debug(`Overriding extension version to: ${extensionVersion}`); - jsonOverrides = (jsonOverrides || {}); - jsonOverrides.version = extensionVersion; - } - - const noWaitValidation = tl.getBoolInput("noWaitValidation", false); - if (noWaitValidation) { - tl.debug(`Not waiting for validation.`); - tfx.arg("--no-wait-validation"); - } - - const bypassLocalValidation = tl.getBoolInput("bypassLocalValidation", false); - if (bypassLocalValidation) { - tl.debug(`Bypassing local validation.`); - tfx.arg("--bypass-validation"); - } - - let overrideFilePath: string; - if (jsonOverrides) { - // Generate a temp file - overrideFilePath = writeBuildTempFile("PackageTask", JSON.stringify(jsonOverrides)); - tl.debug(`Generated a JSON temp file to override manifest values Path: ${overrideFilePath}`); - - tfx.arg(["--overrides-file", overrideFilePath]); - } - - const args = tl.getInput("arguments", false); - if (args) { - tl.debug(`Adding additional arguments: ${args}.`); - tfx.line(args); - } - - return () => deleteBuildTempFile(overrideFilePath); -} - -/** - * Run a tfx command by ensuring that "tfx" exists, installing it on the fly if needed. - * @param {(tfx:ToolRunner)=>void} cmd - */ -export async function runTfx(cmd: (tfx: ToolRunner) => void) : Promise { - let tfx: ToolRunner; - let tfxPath: string; - - const tryRunCmd = async (tfx: ToolRunner) => { - try { - // Set working folder - const cwd = tl.getInput("cwd", false); - if (cwd) { - tl.cd(cwd); - } - - cmd(tfx); - return true; - } - catch (err) { - tl.setResult(tl.TaskResult.Failed, `Error running task: ${err}`); - return false; - } - }; - - const tfxInstallerPath = tl.getVariable("__tfxpath"); - if (tfxInstallerPath) - { - tfxPath = tl.which(path.join(tfxInstallerPath, "/tfx")); - } - - if (tfxPath) { - tl.debug(`using: ${tfxPath}`); - tfx = new trl.ToolRunner(tfxPath); - await tryRunCmd(tfx); - return; - } - - tl.setResult(tl.TaskResult.Failed, "Could not find tfx. To resolve, add the 'Use Node CLI for Azure DevOps' task to your pipeline before this task."); -} - -/** - * Reads the extension version from the 'extensionVersion' variable, extracting - * just the part that is compatible with the versioning scheme used in the Marketplace. - * - * @returns string - */ -export function getExtensionVersion(): string { - const extensionVersion = tl.getInput("extensionVersion", false); - if (extensionVersion) { - const extractedVersions = extensionVersion.match(/[0-9]+\.[0-9]+\.[0-9]+(?:\.[0-9]+)?/); - if (extractedVersions && extractedVersions.length === 1) { - return extractedVersions[0]; - } - else { - throw new Error(`Supplied ExtensionVersion must contain a string matching '##.##.##(.##)'.`); - } - } - return ""; -} - -/** - * Get the Marketplace endpoint details to be used while publishing or installing an extension. - * - * @param {string="connectedServiceName"} inputFieldName - * @returns string - */ -export function getMarketplaceEndpointDetails(inputFieldName: string): any { - const marketplaceEndpoint = tl.getInput(inputFieldName, true); - - const hostUrl = tl.getEndpointUrl(marketplaceEndpoint, false); - const auth = tl.getEndpointAuthorization(marketplaceEndpoint, false); - const password = auth.parameters["password"]; - const username = auth.parameters["username"]; - const apitoken = auth.parameters["apitoken"]; - - return { - "url": hostUrl, - "username": username, - "password": password, - "apitoken": apitoken - }; -} - -/** - * Sets the marketplace endpoint details (url, credentials) for the toolrunner. - * - * @param {ToolRunner} tfx - * @returns string - */ -export function setTfxMarketplaceArguments(tfx: ToolRunner, setServiceUrl = true) : void { - const connectTo = tl.getInput("connectTo", false) || "VsTeam"; - let galleryEndpoint; - - if (connectTo === "VsTeam") { - galleryEndpoint = getMarketplaceEndpointDetails("connectedServiceName"); - tfx.argIf(setServiceUrl, ["--service-url", galleryEndpoint.url]); - tfx.arg(["--auth-type", "pat"]); - tfx.arg(["--token", galleryEndpoint.password]); - } else { - galleryEndpoint = getMarketplaceEndpointDetails("connectedServiceNameTFS"); - tfx.argIf(setServiceUrl, ["--service-url", galleryEndpoint.url]); - - if (galleryEndpoint.username) { - tfx.arg(["--auth-type", "basic"]); - tfx.arg(["--username", galleryEndpoint.username]); - tfx.arg(["--password", galleryEndpoint.password]); - } - else { - tfx.arg(["--auth-type", "pat"]); - tfx.arg(["--token", galleryEndpoint.apitoken]); - } - } -} - -/** - * A writable stream intended to be used with Tfx when using JSON output. - * This class overcomes the problem of having tfx warnings being displayed - * in stdout as regular messages, even when using --json switch in tfx. - * - */ -export class TfxJsonOutputStream extends stream.Writable { - - jsonString = ""; - messages: string[] = []; - - constructor(public out: (message: string) => void) { - super(); - } - - // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type - _write(chunk: any, enc: string, cb: (Function)) : void { - const chunkStr: string = chunk.toString(); - if (chunkStr.startsWith("[command]")) - { - this.taskOutput(chunkStr, this.out); - } - else if (!this.jsonString && (chunkStr.toString()[0] !== "{" && chunkStr.toString()[0] !== "[")) { - this.messages.push(chunkStr); - this.taskOutput(chunkStr, this.out); - } - else { - this.jsonString += chunkStr; - this.taskOutput(chunkStr, tl.debug); - } - - cb(); - } - - private taskOutput(messages: string, lineWriter: (m: string) => void) { - if (!messages) { return; } - // Split messages to be sure that we are invoking the write lineWriter for each lineWriter - // Otherwise we could get messages in console with the wrong prefix used by azure-pipelines-task-lib - messages.split("\n").forEach(lineWriter); - } -} - -function getTaskPathContributions(manifest: any): string[] { - // Check for task contributions - if (!manifest.contributions) { - return []; - } - - return manifest.contributions - .filter((c: any) => c.type === "ms.vss-distributed-task.task" && c.properties && c.properties["name"]) - .map((c: any) => c.properties["name"]); -} - -function updateTaskId(manifest: any, publisherId: string, extensionId: string): unknown { - tl.debug(`Task manifest ${manifest.name} id before: ${manifest.id}`); - - const extensionNs = uuidv5("url", "https://marketplace.visualstudio.com/vsts", true); - manifest.id = uuidv5(extensionNs, `${publisherId}.${extensionId}.${manifest.name}`, false); - - tl.debug(`Task manifest ${manifest.name} id after: ${manifest.id}`); - return manifest; -} - -function updateExtensionManifestTaskIds(manifest: any, originalTaskId: string, newTaskId: string): unknown { - if (!manifest.contributions) { - tl.debug(`No contributions found`); - return manifest; - } - - manifest.contributions - .filter((c: any) => c.type !== "ms.vss-distributed-task.task" && c.properties && c.properties.supportsTasks) - .forEach((c: any) => { - const supportsTasks = [...c.properties.supportsTasks]; - const index = supportsTasks.indexOf(originalTaskId); - if(index != -1) { - - tl.debug(`Extension manifest supportsTasks before: ${c.properties.supportsTasks}`); - - supportsTasks[index] = newTaskId; - c.properties.supportsTasks = supportsTasks; - - tl.debug(`Extension manifest supportsTasks after: ${c.properties.supportsTasks}`); - } else{ - tl.debug(`No supportTasks entry found in manifest contribution`); - } - }); - - return manifest; -} - -function updateTaskVersion(manifest: any, extensionVersionString: string, extensionVersionType: string): unknown { - const versionParts = extensionVersionString.split("."); - if (versionParts.length > 3) { - tl.warning("Detected a version that consists of more than 3 parts. Build tasks support only 3 parts, ignoring the rest."); - } - - const extensionversion = { major: +versionParts[0], minor: +versionParts[1], patch: +versionParts[2] }; - - if (!manifest.version && extensionVersionType !== "major") { - tl.warning("Detected no version in task manifest. Forcing major."); - manifest.version = extensionversion; - } else { - tl.debug(`Task manifest ${manifest.name} version before: ${JSON.stringify(manifest.version)}`); - - switch (extensionVersionType) { - default: - case "major": manifest.version.Major = `${extensionversion.major}`; - // eslint-disable-next-line no-fallthrough - case "minor": manifest.version.Minor = `${extensionversion.minor}`; - // eslint-disable-next-line no-fallthrough - case "patch": manifest.version.Patch = `${extensionversion.patch}`; - } - } - tl.debug(`Task manifest ${manifest.name} version after: ${JSON.stringify(manifest.version)}`); - return manifest; -} - -/** - * - * Check whether the version update should be propagated to tasks included - * in the extension. - * - */ -export async function updateManifests(manifestPaths: string[]): Promise { - const updateTasksVersion = tl.getBoolInput("updateTasksVersion", false); - const updateTasksId = tl.getBoolInput("updateTasksId", false); - - if (updateTasksVersion || updateTasksId) { - if (!(manifestPaths && manifestPaths.length)) { - manifestPaths = getExtensionManifestPaths(); - } - - tl.debug(`Found manifests: ${manifestPaths.join(", ")}`); - - const tasksIds = await updateTaskManifests(manifestPaths, updateTasksId, updateTasksVersion); - await updateExtensionManifests(manifestPaths, tasksIds); - } -} - -async function updateTaskManifests(manifestPaths: string[], updateTasksId: boolean, updateTasksVersion: boolean) : Promise<[string, string][]> { - const tasksIds: [string, string][] = []; - - await Promise.all(manifestPaths.map(async (extensionPath) => { - const manifest: any = await getManifest(extensionPath); - const taskManifestPaths: string[] = getTaskManifestPaths(extensionPath, manifest); - - if (taskManifestPaths && taskManifestPaths.length) { - await Promise.all(taskManifestPaths.map(async (taskPath) => { - tl.debug(`Patching: ${taskPath}.`); - let taskManifest: any = await getManifest(taskPath); - - if (updateTasksId) { - tl.debug(`Updating Id...`); - const publisherId = tl.getInput("publisherId", false) || manifest.publisher; - const extensionTag = tl.getInput("extensionTag", false) || ""; - const extensionId = `${(tl.getInput("extensionId", false) || manifest.id)}${extensionTag}`; - - const originalTaskId: string = taskManifest.id || null; - taskManifest = updateTaskId(taskManifest, publisherId, extensionId); - const newTaskId: string = taskManifest.id; - - if(originalTaskId && (originalTaskId !== newTaskId)) { - tasksIds.push([originalTaskId, newTaskId]) - } - } - - if (updateTasksVersion) { - tl.debug(`Updating version...`); - const extensionVersion = tl.getInput("extensionVersion", false) || manifest.version; - if (!extensionVersion) { - throw new Error( - "Extension Version was not supplied nor does the extension manifest define one."); - } - const extensionVersionType = tl.getInput("updateTasksVersionType", false) || "major"; - - taskManifest = updateTaskVersion(taskManifest, extensionVersion, extensionVersionType); - } - - await writeManifest(taskManifest, taskPath); - tl.debug(`Updated: ${taskPath}.`); - })); - } - })); - - return tasksIds; -} - -async function updateExtensionManifests(manifestPaths: string[], updatedTaskIds: [string, string][]): Promise { - await Promise.all(manifestPaths.map(async (path) => { - tl.debug(`Patching: ${path}.`); - let originalManifest = await getManifest(path); - - updatedTaskIds.map(([originalTaskId, newTaskId]) => { - tl.debug(`Updating: ${originalTaskId} => ${newTaskId}.`) - originalManifest = updateExtensionManifestTaskIds(originalManifest, originalTaskId, newTaskId); - }); - - await writeManifest(originalManifest, path); - })); -} - -function getExtensionManifestPaths(): string[] { - // Search for extension manifests given the rootFolder and patternManifest inputs - const rootFolder = tl.getInput("rootFolder", false) || tl.getInput("System.DefaultWorkingDirectory"); - const manifestsPatterns = tl.getDelimitedInput("patternManifest", "\n", false) || ["vss-extension.json"]; - - tl.debug(`Searching for extension manifests: ${manifestsPatterns.join(", ")}`); - - return tl.findMatch(rootFolder, manifestsPatterns); -} - -function getManifest(path: string): Promise { - return fse.readFile(path, "utf8").then((data: string) => { - try { - data = data.replace(/^\uFEFF/, - () => { - tl.warning(`Removing Unicode BOM from manifest file: ${path}.`); - return ""; - }); - return JSON.parse(data); - } catch (jsonError) { - throw new Error(`Error parsing task manifest: ${path} - ${jsonError}`); - } - }); -} - -function getTaskManifestPaths(manifestPath: string, manifest: any): string[] { - const tasks = getTaskPathContributions(manifest); - const rootFolder = path.dirname(manifestPath); - - return tasks.reduce((result: string[], task: string) => { - tl.debug(`Found task: ${task}`); - const taskRoot: string = path.join(rootFolder, task); - const rootManifest: string = path.join(taskRoot, "task.json"); - - let localizationRoot = tl.filePathSupplied("localizationRoot") ? tl.getPathInput("localizationRoot", false) : taskRoot; - if (localizationRoot) { - localizationRoot = path.resolve(localizationRoot); - } - - if (tl.exist(rootManifest)) { - tl.debug(`Found single-task manifest: ${rootManifest}`); - const rootManifests: string[] = [rootManifest]; - const rootLocManifest: string = path.join(localizationRoot, "task.loc.json"); - if (tl.exist(rootLocManifest)) { - tl.debug(`Found localized single-task manifest: ${rootLocManifest}`); - rootManifests.push(rootLocManifest); - } - return (result).concat(rootManifests); - } else { - const versionManifests = tl.findMatch(taskRoot, "*/task.json"); - const locVersionManifests = tl.findMatch(localizationRoot, "*/task.loc.json"); - tl.debug(`Found multi-task manifests: ${versionManifests.join(", ")}`); - tl.debug(`Found multi-task localized manifests: ${locVersionManifests.join(", ")}`); - return (result).concat(versionManifests).concat(locVersionManifests); - } - }, []); -} - -export async function writeManifest(manifest: any, path: string): Promise { - await fse.writeJSON(path, manifest); -} - -export async function checkUpdateTasksManifests(manifestFile?: string): Promise { - await updateManifests(manifestFile ? [manifestFile] : []); -} - -export default { - validateAndSetTfxManifestArguments, - runTfx, - getExtensionVersion, - getMarketplaceEndpointDetails, - setTfxMarketplaceArguments, - TfxJsonOutputStream, - updateManifests, - writeManifest, - checkUpdateTasksManifests -}; \ No newline at end of file diff --git a/BuildTasks/Common/v4/package-lock.json b/BuildTasks/Common/v4/package-lock.json deleted file mode 100644 index 37e5d8b2..00000000 --- a/BuildTasks/Common/v4/package-lock.json +++ /dev/null @@ -1,397 +0,0 @@ -{ - "name": "vsts-developer-tools.commonv4", - "version": "4.3.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "vsts-developer-tools.commonv4", - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - "@types/tmp": "^0.2.6" - } - }, - "node_modules/@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "dev": true - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/Common/v4/package.json b/BuildTasks/Common/v4/package.json deleted file mode 100644 index 0815430f..00000000 --- a/BuildTasks/Common/v4/package.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "name": "vsts-developer-tools.commonv4", - "version": "4.3.0", - "description": "common", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - "@types/tmp": "^0.2.6" - }, - "types": "./uuidv5.d.ts" -} diff --git a/BuildTasks/Common/v4/tsconfig.json b/BuildTasks/Common/v4/tsconfig.json deleted file mode 100644 index 16a08c69..00000000 --- a/BuildTasks/Common/v4/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./Common", - "sourceRoot": "./" - }, - "files": [ - "Common.ts", - "uuidv5.d.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/Common/v4/uuidv5.d.ts b/BuildTasks/Common/v4/uuidv5.d.ts deleted file mode 100644 index 73df93b8..00000000 --- a/BuildTasks/Common/v4/uuidv5.d.ts +++ /dev/null @@ -1,17 +0,0 @@ -declare module 'uuidv5' { - type uuid = string | Buffer; - type space = "dns" | "url" | "oid" | "x500" | "null" | "default"; - type ns = uuid | space; - - interface createUUIDv5 { - (namespace: ns, name: uuid): uuid; - (namespace: ns, name: uuid, binary: boolean): uuid; - - uuidToString(uuid: Buffer): string; - uuidFromString(uuid: string): Buffer; - createUUIDv5: createUUIDv5; - spaces: space; - } - const createUUIDv5: createUUIDv5; - export default createUUIDv5; -} \ No newline at end of file diff --git a/BuildTasks/ExtensionVersion/v4/ExtensionVersion.ts b/BuildTasks/ExtensionVersion/v4/ExtensionVersion.ts deleted file mode 100644 index 9a83d7b6..00000000 --- a/BuildTasks/ExtensionVersion/v4/ExtensionVersion.ts +++ /dev/null @@ -1,86 +0,0 @@ -import * as tl from "azure-pipelines-task-lib/task"; -import * as tr from "azure-pipelines-task-lib/toolrunner"; -import * as common from "../../Common/v4/Common"; - -const extensionVersionOverrideVariable = tl.getInput("extensionVersionOverride", false); -let usingOverride = false; - -function setVersion(version: string) { - if (tl.getBoolInput("setBuildNumber", false)) { - tl.command("build.updatebuildnumber", null, version); - } - - console.log("Setting local variable 'Extension.Version'."); - tl.setVariable("Extension.Version", version, false, false); - console.log("Setting output variable '{{StepName}}.Extension.Version'."); - tl.setVariable("Extension.Version", version, false, true); -} - -if (extensionVersionOverrideVariable) { - tl.debug(`Override variable specified checking for value.`); - const version = tl.getVariable(extensionVersionOverrideVariable); - - if (version) { - console.log(`Ignoring Marketplace version and using supplied override: ${version}.`); - setVersion(version); - usingOverride = true; - } -} - -async function run() { - try { - await common.runTfx(async tfx => { - try { - tfx.arg(["extension", "show", "--json", "--no-color"]); - - common.setTfxMarketplaceArguments(tfx); - common.validateAndSetTfxManifestArguments(tfx); - - const versionAction = tl.getInput("versionAction", false); - - const outputStream = new common.TfxJsonOutputStream(console.log); - const errorStream = new common.TfxJsonOutputStream(tl.error); - - const code: number = await tfx.execAsync({ outStream: outputStream, errorStream: errorStream, failOnStdErr: false, ignoreReturnCode: false } as tr.IExecOptions); - if (code !== 0) - { - throw `tfx exited with return code: ${code}` - } - const json = JSON.parse(outputStream.jsonString); - let version: string = json.versions[0].version; - - console.log(`Latest version : ${version}.`); - console.log(`Requested action : ${versionAction}.`); - - if (versionAction !== "None") { - let versionparts: number[] = version.split(".").map(v => +v); - switch (versionAction) { - case "Major": - versionparts = [++versionparts[0], 0, 0]; - break; - case "Minor": - versionparts = [versionparts[0], ++versionparts[1], 0]; - break; - case "Patch": - versionparts = [versionparts[0], versionparts[1], ++versionparts[2]]; - break; - } - version = versionparts.join("."); - console.log(`Updated to : ${version}.`); - } - - setVersion(version); - tl.setResult(tl.TaskResult.Succeeded, `tfx exited with return code: ${code}`); - } - catch (err: any){ - tl.setResult(tl.TaskResult.Failed, err.message); - } - }); - } catch (err: any) { - tl.setResult(tl.TaskResult.Failed, `Extension Version task failed: ${err}`); - } -} - -if (!usingOverride) { - void run(); -} \ No newline at end of file diff --git a/BuildTasks/ExtensionVersion/v4/icon.png b/BuildTasks/ExtensionVersion/v4/icon.png deleted file mode 100644 index 5ccc3c5c703d3eb743f13921595fc03d08e93c49..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3925 zcmc&%3se(V8XnPh5%Gl&(B|k6o>eBvB$I@UL=nQ9AR_W`ZE-R)ArZ*LB!-AvR73^z zXe)sqU|K7zdDus*@ET1xjOK)@bQx4U~b=S*_%-0%PX z|Ni&8|GmkLjtUv;Fx>%yps``0vKa6STONBm2pX|@<{csEjMj!G>LF;%B+D}bDk^q? zAcs%Yu?dC*c_dCUX&i!L6g0<_rUhsS@|$PU5@ZT(fE9GIS|epYK6#oAt0^fvUMT0u zwSlxs9h#w|7iC1nk{KzagksN|3;UUHK#)co2-uXCs?p;nDcj16gSO>0mknDXh7>7# zzQrM&AdiLv866D^IUFe1V>ntuh$2IG3BAp3X@Za2Q=O7nMjPTppjx=OX}t=vQeBgbC5;-TE11w4T(d zwFWh#fh~-Lf>~*hvO%Q1Q%KX=Xf^u2G=YS1O@x+FjYy`sT1~Rmn_P~EY4ip{L(*X~DI0{!QL8B&lPE<>N=YI@(pQNn zB^ZTBc$fsi2ui3F@Dvn9O8V_(47t*x0E>O^W}p}naM)6ZW28XLR|qhK;wb@<7*isI z0#hJj5z0rEzC49Or0i!~pi_hWNTd#CwM0b$Mgo-xfO8=tp(zX@1Q-udP=w`+q-jbh zATU(Oh6nrxGO3JC&QKud0?Tf&suB-X>%r=+>f2w7=oNjfR5ffBB2JK&y&`3kmUX5n zcHe9D5P5pLh!T-?m_R{O62w<1 zBoR!3p@>3Ef%N)fN|dHCzJvyvd`UQBETp(DU4LhJNWwo=EW z!Guhk|sC$8my z>@5l0UssFXzN|Ny!ItH*9z6I^b>VH52u>m#R7+d^{P!wduYcx0t(X?!*ffR5(k4SB zu?mQ=udW0T$paN;0B6NS0liAu)+Wp!TzajqEL7m4F-Vw0nuiTz81_a>l*8u;hOzD) zdz0_luZA%P0~TAWAbK;v9SHuF99bcQE?NCn;O1s&+OCYCW4m+sK}sInB+@j~+eB-kVwSq>O5|ffb?4SSmV;)~10KrcT5baDe7-EmFfB5iW=IJDt zyI&@qKG@XMR8r!)@2amzG&NV2t;m% zZ{51JKc=m%?fu=IfaLytMM%h|NY8!Vb?wi4e(rd(=qn9Y%gZ?RVZvfpzZv7@*X&)3 zN&`!xvoO}U@s5r_E!olW@y;h6H=5roq7$FpHFM8a`atft^8=3G(Ug2*dY8W=(lh_( zs5+n}XwOxZlW8My@%-VVM?HLg8eieEwNX{{;nJn&TrM|18+B+&xug|bZ?i6}kjv%H&dzRbZjia-MP+4W-Q~+K-r*FM?ceV{dv?3oyiB2}Y0y3i z?y2RxoXK)=d^h{!Q1{9NpZ&tH0}eM>GiL(!swymRF9;>(P^w1LGF}WtM?^#v6ck9M z()#*(zZ7ix!~lUn08Q9@zO=N|)645#h<5erA8y_}e(V_dL)F#U8M}08abaO$e*U7k zxYDbtmX?-^ii$I-qSls{?Q1-zOqo(%UM@@gEGCFOvFv(yY12p7mmhud_eKv7k9*%8 zICiYiZf&T04KFe&DT(J&yldAxYrpv>Y9rz9bg7}CA-Qhav}yNn;QU)4!ROC~0T&;4 z=~MehK!-Aq@6#>h#{sk9!r1k&+ diff --git a/BuildTasks/ExtensionVersion/v4/package-lock.json b/BuildTasks/ExtensionVersion/v4/package-lock.json deleted file mode 100644 index 4413a9b4..00000000 --- a/BuildTasks/ExtensionVersion/v4/package-lock.json +++ /dev/null @@ -1,389 +0,0 @@ -{ - "name": "vsts-developer-tools.extensionversionv4", - "version": "4.3.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "vsts-developer-tools.extensionversionv4", - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": {} - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/ExtensionVersion/v4/package.json b/BuildTasks/ExtensionVersion/v4/package.json deleted file mode 100644 index 860e5e11..00000000 --- a/BuildTasks/ExtensionVersion/v4/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "vsts-developer-tools.extensionversionv4", - "description": "Query Extension Version Task", - "version": "4.3.0", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/ExtensionVersion/v4/task.json b/BuildTasks/ExtensionVersion/v4/task.json deleted file mode 100644 index e1a7ba13..00000000 --- a/BuildTasks/ExtensionVersion/v4/task.json +++ /dev/null @@ -1,163 +0,0 @@ -{ - "id": "5c6fa59e-1d5a-4516-9127-b9efd05df306", - "name": "QueryAzureDevOpsExtensionVersion", - "friendlyName": "Query Extension Version", - "description": "Queries the current version from the Visual Studio Marketplace", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Utility", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "extension", - "displayName": "Extension", - "isExpanded": true - }, - { - "name": "version", - "displayName": "Version", - "isExpanded": true - }, - { - "name": "advanced", - "displayName": "Advanced", - "isExpanded": false - }, - { - "name": "backcompat", - "displayName": "Backward Compatibility", - "isExpanded": false - } - ], - "instanceNameFormat": "Query Extension Version: $(publisherId).$(extensionId)", - "inputs": [ - { - "name": "connectTo", - "type": "radio", - "label": "Connect to", - "required": true, - "defaultValue": "VsTeam", - "helpMarkDown": "Connect to Visual Studio Marketplace or a local Azure DevOps Server.", - "options": { - "VsTeam": "Visual Studio Marketplace", - "TFS": "Azure DevOps Server" - } - }, - { - "name": "connectedServiceName", - "type": "connectedService:VstsMarketplacePublishing", - "label": "Visual Studio Marketplace", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=VsTeam" - }, - { - "name": "connectedServiceNameTFS", - "type": "connectedService:TFSMarketplacePublishing", - "label": "TFS Local Gallery connection", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=TFS" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": true, - "helpMarkDown": "Publisher ID of the extension to be installed.", - "groupName": "extension" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Extension ID of the extension to be installed", - "required": true, - "groupName": "extension" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension ID", - "required": false, - "groupName": "extension" - }, - { - "defaultValue": "None", - "helpMarkdown": "Increase a part of the version.", - "label": "Increase version", - "name": "versionAction", - "required": true, - "options": { - "None": "None", - "Patch": "Patch", - "Minor": "Minor", - "Major": "Major" - }, - "type": "pickList", - "groupName": "version" - }, - { - "name": "setBuildNumber", - "type": "boolean", - "label": "Set Build Number", - "defaultValue": false, - "required": false, - "helpMarkDown": "Updates the Build Number with the new version number.", - "groupName": "version" - }, - { - "name": "extensionVersionOverride", - "type": "string", - "label": "Override Variable", - "defaultValue": "Extension.VersionOverride", - "helpMarkDown": "When this value is specified the extension version task will take it regardless of the version returned from the marketplace. You can use this variable at Queue time to move to the next major version. When the variable value is empty or when the variable doesn't exist the Marketplace will be queried.", - "required": false, - "groupName": "version" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Additional arguments passed to the package and publishing tool.", - "required": false, - "groupName": "advanced" - }, - { - "name": "cwd", - "type": "filePath", - "label": "Working Directory", - "defaultValue": "", - "required": false, - "helpMarkDown": "Working directory to run the package and publishing process from. Defaults to the folder where the manifest is located.", - "groupName": "advanced" - } - ], - "execution": { - "Node20_1": { - "target": "ExtensionVersion/v4/ExtensionVersion.js", - "argumentFormat": "" - }, - "Node16": { - "target": "ExtensionVersion/v4/ExtensionVersion.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/ExtensionVersion/v4/tsconfig.json b/BuildTasks/ExtensionVersion/v4/tsconfig.json deleted file mode 100644 index b1161ae2..00000000 --- a/BuildTasks/ExtensionVersion/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "ExtensionVersion.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/InstallExtension/v4/InstallExtension.ts b/BuildTasks/InstallExtension/v4/InstallExtension.ts deleted file mode 100644 index 6f2d077a..00000000 --- a/BuildTasks/InstallExtension/v4/InstallExtension.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as tl from "azure-pipelines-task-lib/task"; -import * as common from "../../Common/v4/Common"; - -const accounts = tl.getDelimitedInput("accounts", ",", true).map((value) => { return value.trim(); }); - -void accounts.forEach(async (account) => await common.runTfx(tfx => { - try { - tfx.arg(["extension", "install", "--no-color"]); - - common.setTfxMarketplaceArguments(tfx, false); - common.validateAndSetTfxManifestArguments(tfx); - - // Installation targets - tfx.arg(["--service-url", account]); - - const result = tfx.execSync({ silent: false, failOnStdErr: false }); - if (result.stderr.search("error: Error: (?=.*TF1590010)") >= 0) { - tl.warning("Task already installed in target account - Ignoring error TF1590010 returned by tfx."); - tl.setResult(tl.TaskResult.Succeeded, "Ignored"); - } - - if (result.stderr.search("error: Error: (?!.*TF1590010)") >= 0) { - tl.setResult(tl.TaskResult.Failed, "Failed"); - } - tl.setResult(tl.TaskResult.Succeeded, "Installed"); - } catch (err) { - tl.setResult(tl.TaskResult.Failed, `Failed: ${err}`); - } -})); \ No newline at end of file diff --git a/BuildTasks/InstallExtension/v4/icon.png b/BuildTasks/InstallExtension/v4/icon.png deleted file mode 100644 index f294114d5291cf9a2640735de26b1fe95d8fb14c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3770 zcmc&%3se->86JFa2!a8L7C9P+(fXd*n|zAfq;ruiD()0NNubQvwn^CTW5}?3@i!``|_tk1)jBw zQZ5Ih?8xP^fZFZK@>#Q5S&Pdfb1oiO%tj2ls&Y64R!izQlIAH~%P>4n5ww6CG&G6p zX~w{i1SRNcLyx>!DfH$R$Gt_ zpwcHKzZ>Qe?Q#JpfmvBFrq9AJ^+5i6xcn!3&)aE@4G0Ww&}w;{w!sA3^a2d80VWCn znqmOtva@tro5dbaKZ*z%h)w~Tq775 zP6J5FuGHAT>v^oY{`c$QMOQwM`Y_DRNgUiofaEb^c1g@dIk(&C;5mhk>U@{rZ_WXN zqq2zhmh*sd6M*FC!-T$80xqEcMSD->-LrL<|3{wG$_Clp64XEJ7TwS0?qDV=>G5qm zY=3>>S(ylTA{KVbK>z&rI$gJY@jvaD3ULCQV$*{r|}fS~26lB9}KX$Fw)o_m_@x?=-~!wE&!M~LnSsC%7% zEJi*^pF>uU6g;^p!@!XdJ_HV(zy({K1do&>ueFXwkijP`=2>Y;YwOeJCD|57cQsf} zmlkJ!w&z4~$X`M#~JiuH&07VC@^L*I|tfnEJF^s@P% z6Mna2M`l_w_QJi1yV9o5Kf8ELwWl$sseJTRF|Ve5>$UseHWV~;HYBWy@CF436-AFZ z8Fca$9LFyviq{c@*6F?{{ygm1()Ro9UAOm47#+3SJQN|K!)ljp)MsR5-0A2@HLY8} zKGoxNhVfe?V>S4y2vd@9{Zv_8>StyI*}Qr4_G^|;PM;3jwkv)Aq)C%D?W(A#Xl=E# z=bXAp$1~p_g&atqHV#i%*=3kH^WeUHTy)}!u_2WylXs;|Hjhf8Zg<|9#NNGqdn5DC z4s?1kvBNv`_qG3cG%Y82`l-;JBTTkK(RIYkch9j=}$M~@zrJy%**7G=88F$hW7mlnDjdvOCyX3fv9 zUn&1)sjwudP_yT~_qs|DWW{$M-7XzkRMXYb@tgdU+4RHYja^k{WSOo!(llc2u9}*z zn>Ry{yM@2Z+;qn~BYF1+d-sO$&O-~M-y~z!J^CUTIdf8Wnr^ z@ZllI*WMLySw%%NH7j32KW%KxlO*Z2*T$99{~{-68oZ`XZM$`=xw$zbJ^f%+)f+8_ z-zFz?&54PLDSY+SDU0?uCSsBM8#(!R8*=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/InstallExtension/v4/package.json b/BuildTasks/InstallExtension/v4/package.json deleted file mode 100644 index 981adcf2..00000000 --- a/BuildTasks/InstallExtension/v4/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "vsts-developer-tools.installextensionv4", - "version": "4.3.0", - "description": "Install Extension Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/InstallExtension/v4/task.json b/BuildTasks/InstallExtension/v4/task.json deleted file mode 100644 index d4e29ccc..00000000 --- a/BuildTasks/InstallExtension/v4/task.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "id": "47a0f73c-f8e6-4fc5-a759-4d560031ef75", - "name": "InstallAzureDevOpsExtension", - "friendlyName": "Install Extension", - "description": "Install a published extension to an Azure DevOps organisation or Team Foundation Server", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Deploy", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "extension", - "displayName": "Extension", - "isExpanded": true - }, - { - "name": "installation", - "displayName": "Installation", - "isExpanded": true - }, - { - "name": "advanced", - "displayName": "Advanced", - "isExpanded": false - } - ], - "instanceNameFormat": "Install Extension", - "inputs": [ - { - "name": "connectTo", - "type": "radio", - "label": "Connect to", - "required": true, - "defaultValue": "VsTeam", - "helpMarkDown": "Connect to Visual Studio Marketplace.", - "options": { - "VsTeam": "Visual Studio Marketplace", - "TFS": "Azure DevOps Server" - } - }, - { - "name": "connectedServiceName", - "type": "connectedService:VstsMarketplacePublishing", - "label": "Visual Studio Marketplace", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=VsTeam" - }, - { - "name": "connectedServiceNameTFS", - "type": "connectedService:TFSMarketplacePublishing", - "label": "TFS Local Gallery connection", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=TFS" - }, - { - "name": "method", - "type": "radio", - "label": "Install using", - "required": true, - "defaultValue": "id", - "helpMarkDown": "Install using either an existing VSIX or using the Publisher and Extension ID.", - "options": { - "id": "Publisher + Extension ID", - "vsix": "VSIX file" - }, - "groupName": "extension" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": true, - "helpMarkDown": "Publisher ID of the extension to be installed.", - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Extension ID of the extension to be installed", - "required": true, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension ID", - "required": false, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "vsixFile", - "type": "filePath", - "label": "VSIX file", - "defaultValue": "", - "required": true, - "helpMarkDown": "VSIX file of the extension to be installed. Supports wildcards.", - "visibleRule": "method = vsix", - "groupName": "extension" - }, - { - "name": "accounts", - "type": "string", - "label": "Install in", - "defaultValue": "", - "helpMarkDown": "Comma separated list of organisation urls where to install the extension (e.g. `https://devops.azure.com/org_a,https://devops.azure.com/org_b`) Or fully qualified TFS Collection URL (e.g. `https://yourserver/tfs/DefaultCollection`).", - "required": true, - "groupName": "installation" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Additional arguments passed to the package and publishing tool.", - "required": false, - "groupName": "advanced" - }, - { - "name": "cwd", - "type": "filePath", - "label": "Working Directory", - "defaultValue": "", - "required": false, - "helpMarkDown": "Working directory to run the package and publishing process from. Defaults to the folder where the manifest is located.", - "groupName": "advanced" - } - ], - "execution": { - "Node16": { - "target": "InstallExtension/v4/InstallExtension.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/InstallExtension/v4/tsconfig.json b/BuildTasks/InstallExtension/v4/tsconfig.json deleted file mode 100644 index cba630cf..00000000 --- a/BuildTasks/InstallExtension/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "InstallExtension.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/IsValidExtensionAgent/v4/IsValidExtension.ts b/BuildTasks/IsValidExtensionAgent/v4/IsValidExtension.ts deleted file mode 100644 index e1812182..00000000 --- a/BuildTasks/IsValidExtensionAgent/v4/IsValidExtension.ts +++ /dev/null @@ -1,49 +0,0 @@ -import * as tl from "azure-pipelines-task-lib/task"; -import * as tlr from "azure-pipelines-task-lib/toolrunner"; -import * as common from "../../Common/v4/Common"; -import promiseRetry from "promise-retry"; - -async function run() { - await common.runTfx(async tfx => { - try - { - tfx.arg(["extension", "isvalid", "--json", "--no-color"]); - - common.setTfxMarketplaceArguments(tfx); - common.validateAndSetTfxManifestArguments(tfx); - - const options = { - retries: +tl.getInput("maxRetries", false) || 10, - factor: 1, - minTimeout: 1000 * 60 * (+tl.getInput("minTimeout", false) || 1), - maxTimeout: 1000 * 60 * (+tl.getInput("maxTimeout", false) || 15), - randomize: false - }; - - await promiseRetry(options, - async (retry, attempt) => { - tl.debug(`Attempt: ${attempt}`); - - const outputStream = new common.TfxJsonOutputStream(console.log); - const errorStream = new common.TfxJsonOutputStream(tl.error); - - await tfx.execAsync({ outStream: outputStream, errorStream: errorStream, failOnStdErr: false, ignoreReturnCode: true } as tlr.IExecOptions); - - const json = JSON.parse(outputStream.jsonString); - switch (json.status) { - case "pending": - return retry(json.status); - case "success": - return json.status; - default: - throw json.status; - } - }); - tl.setResult(tl.TaskResult.Succeeded, "Extension is valid."); - } catch (err) { - tl.setResult(tl.TaskResult.Failed, `Extension validation failed: ${err.toString()}`); - } - }); -} - -void run(); \ No newline at end of file diff --git a/BuildTasks/IsValidExtensionAgent/v4/icon.png b/BuildTasks/IsValidExtensionAgent/v4/icon.png deleted file mode 100644 index 4afbe10988124ad6c740ed9117e98e9d8521eeb5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3764 zcmc&%3se(V8XjLg_^KAcrHVR6Xc3)cUV&sJRU{xm69iE~tTLIofoPJ6$%L1-s7Ja> z3v6Ax_TX8Tt+Z0yQrG&RD!z;ES#?FF_P9_ziqu_El;yB1TJ7FRLcktSce{Hw=S*_% z-0%PX|Ni&8|Gg<%XqY#8#DozDf{fP1Ym?zGDm{LK5oFMNQ@&Ng&TxBtniD}rj+352 z$hO}EA;^f|np0B6RQ&>m6RdKU7mPrjYqdi(f<(>EwX@u6AfiT)X|`!(_YNJEp=Mqq zTdLIKdV37WGRNmTz@mIZ3YWi{Q}eRfZ=g}R3?#4ukwtT@7MqjF)yUku3~WoU6*ANf z5m#$u(ULM&^PB=$ zfECz8C&UsyEX= z-qgH+IfVO+?OB2-IJ1NSlHeQmrNYj{H~=dOjub(#^sMs29u_nvMp{)B8n)DIJW892${xCg3-I^tQ8?GH>53`INz7I?EM@3~N( zV@!g>%EBz0t!ySx*ln3^Z+bnWvpGf9#sQsHBZHyJ&1Rl4s+EzrnjkSHOYs;1Xn?8J zfWkN$kKky+#FG@=W3LrBm!ts6-m@8afrA{r)G?7tRz>ql9HVIyi5Vkk0#m7|NQ{ak zjU z4{c5sfTYh@d=Jbin8X~`0irWuPG3Y{ih<&Hvf0m$o-@&u5%6kErBrelZG`J$jO1Z@ zRkVo!fF{)dYVsM;s~Jk!qsIR*dM`bf#o96fEWZlbPneI9z&VnG^Wh?m7|zoyrdFCL zOvzEo2%c6^MkCb6!1H-(cm40@!wI%*;OL_;JL_QKDFPf$jm+c_tSD=@Tg)6Q$x)GQ z}alofOgm=_v_{A6E-cU+YO` zoU}adgNNy_E^sfXM0gT0uv+@+=f79!JpP5BS}`Tz_%y|&fLw6_n+HYctt)fc%-#yq zi*sWPP_G)9yNQy0ORxKtLFVSU;DIO6%DkLmmZbCiY)m*>(z?PD-57!>JW{mpb(V8dDQa^6gl;8dF{Nu+O z1dTq?8FfGE+U3h}St0DS=s8Yjr!ctSozpE--@7(=*Eendd^F5oWZn!5@DH}wY~QuE zzU2V5O~cg$5uManRYz708|ybTZva)D`PC^D{MhQ zL2j<9rutgY&F0HT4~{7?X5c{=RisX{aj)*2e{^#CiHy9ww3;R7&z=pQG)Xt>;q8~E z4lT>plc80Yy5HPYzb9Zsp}}Cdcxnr{(%IR0=+L1?`YR*RkuhZbid~sO@7NO(5{$c3 zT`r~mQgz4HGp$T{>BmBWKT^QW95hES%f1&y<#wlth+=l>Ry) z6sbFUbX?gtZRakAR$lltCH$>7Di(@(Q1jKR`FG1xt_bOPJ@Cur@=XnGZEfeyl_Y%fr|sp+MZY{f1W8X% z4{EWi&f=p^;@9mDeqQ+G)7YEW1CPuW%VUt@j)sP@$V?1ty*Y{de&y*#o}9XgC({ZF zeyFb>hWugXj3bkfV{KhKQ+D3CVSIP{Sretdlz(`Isu`Jcx4nH8y>0X6%{)2Xt}c!7 ztEs6OG)J~MH7zY|`SS0#MdLwt+S`vDJeZ%CS9H3?<#H`vyf`p0u%x7iQMO>@ z$dNY(7pz@-=62{v{M3z1?fNU0@xOnym#aD@{N3$g3Hhm?EosZ)CKPFx zEM1zmwWhjyYVcMt=H-_|^!`O!bgXLDthG>f8cnRsv4~FULZeJQ!X=s)H OSL$L7+Rx`^Z2T8&aYm~E diff --git a/BuildTasks/IsValidExtensionAgent/v4/package-lock.json b/BuildTasks/IsValidExtensionAgent/v4/package-lock.json deleted file mode 100644 index f3b3d646..00000000 --- a/BuildTasks/IsValidExtensionAgent/v4/package-lock.json +++ /dev/null @@ -1,412 +0,0 @@ -{ - "name": "vsts-developer-tools.isvalidextensionagentv4", - "version": "4.3.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "vsts-developer-tools.isvalidextensionagentv4", - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "promise-retry": "^2.0.1", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": {} - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/err-code": { - "version": "2.0.3", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/promise-retry": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/retry": { - "version": "0.12.0", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/IsValidExtensionAgent/v4/package.json b/BuildTasks/IsValidExtensionAgent/v4/package.json deleted file mode 100644 index 4fbe22db..00000000 --- a/BuildTasks/IsValidExtensionAgent/v4/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "vsts-developer-tools.isvalidextensionagentv4", - "version": "4.3.0", - "description": "Is Valid Extension Agent Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "promise-retry": "^2.0.1", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/IsValidExtensionAgent/v4/task.json b/BuildTasks/IsValidExtensionAgent/v4/task.json deleted file mode 100644 index ad55bc06..00000000 --- a/BuildTasks/IsValidExtensionAgent/v4/task.json +++ /dev/null @@ -1,143 +0,0 @@ -{ - "id": "b86cdd2a-0579-4d40-b28f-18197ffaf520", - "name": "IsAzureDevOpsExtensionValid", - "friendlyName": "Is valid Extension", - "description": "Check Visual Studio Marketplace validation status.", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Deploy", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "extension", - "displayName": "Extension", - "isExpanded": true - }, - { - "name": "retry", - "displayName": "Retry", - "isExpanded": true - } - ], - "instanceNameFormat": "Check Marketplace validation status: $(extensionId)", - "inputs": [ - { - "name": "connectTo", - "type": "radio", - "label": "Connect to", - "required": true, - "defaultValue": "VsTeam", - "helpMarkDown": "Connect to Visual Studio Marketplace.", - "options": { - "VsTeam": "Azure DevOps" - } - }, - { - "name": "connectedServiceName", - "type": "connectedService:VstsMarketplacePublishing", - "label": "Visual Studio Marketplace connection", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=VsTeam" - }, - { - "name": "method", - "type": "radio", - "label": "Validate using", - "required": true, - "defaultValue": "id", - "helpMarkDown": "Validate using either an existing VSIX or using the Publisher, Extension ID and version.", - "options": { - "id": "Publisher + Extension ID", - "vsix": "VSIX" - }, - "groupName": "extension" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": true, - "helpMarkDown": "Publisher ID of the extension to be installed.", - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Extension ID of the extension to be installed", - "required": true, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension ID", - "required": false, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionVersion", - "type": "string", - "label": "Extension Version", - "defaultValue": "", - "helpMarkDown": "Extension version (leave the value empty to check the last submitted version).", - "required": false, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "vsixFile", - "type": "filePath", - "label": "VSIX file", - "defaultValue": "", - "required": true, - "helpMarkDown": "VSIX file of the extension to be installed. Supports wildcards.", - "visibleRule": "method = vsix", - "groupName": "extension" - }, - { - "name": "maxRetries", - "type": "string", - "label": "Maximum number of retries", - "defaultValue": "10", - "required": false, - "helpMarkDown": "Maximum number of retries.", - "groupName": "retry" - }, - { - "name": "minTimeout", - "type": "string", - "label": "Time between retries", - "defaultValue": "1", - "required": false, - "helpMarkDown": "Time between retries (minutes).", - "groupName": "retry" - } - ], - "execution": { - "Node16": { - "target": "IsValidExtensionAgent/v4/IsValidExtension.js", - "argumentFormat": "" - } - } -} \ No newline at end of file diff --git a/BuildTasks/IsValidExtensionAgent/v4/tsconfig.json b/BuildTasks/IsValidExtensionAgent/v4/tsconfig.json deleted file mode 100644 index d5fde9b5..00000000 --- a/BuildTasks/IsValidExtensionAgent/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "IsValidExtension.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/PackageExtension/v4/PackageExtension.ts b/BuildTasks/PackageExtension/v4/PackageExtension.ts deleted file mode 100644 index 11dd3e55..00000000 --- a/BuildTasks/PackageExtension/v4/PackageExtension.ts +++ /dev/null @@ -1,54 +0,0 @@ -import * as tl from "azure-pipelines-task-lib/task"; -import * as common from "../../Common/v4/Common"; - -async function run() { - try { - await common.runTfx(async tfx => { - let cleanupTfxArgs: () => void = null; - try { - tfx.arg(["extension", "create", "--json", "--no-color"]); - const outputVariable = tl.getInput("outputVariable", false); - - // Set tfx manifest arguments - cleanupTfxArgs = common.validateAndSetTfxManifestArguments(tfx); - - // Set vsix output path - const outputPath = tl.getInput("outputPath", false); - tfx.argIf(outputPath, ["--output-path", outputPath]); - - // Before executing check update on tasks version - await common.checkUpdateTasksManifests(); - const outputStream = new common.TfxJsonOutputStream(console.log); - - const code = await tfx.execAsync({ outStream: outputStream, failOnStdErr: false }); - if (code !== 0) - { - throw new Error(`tfx exited with return code: ${code}`); - } - const json = JSON.parse(outputStream.jsonString); - - if (outputVariable) { - tl.setVariable(outputVariable, json.path); - } - tl.setVariable("Extension.OutputPath", json.path); - - console.log(`Packaged extension: ${json.path}.`); - tl.setResult(tl.TaskResult.Succeeded, `tfx exited with return code: ${code}`); - } - catch (err) { - tl.setResult(tl.TaskResult.Failed, `${err}`); - } - finally { - if (cleanupTfxArgs) { - cleanupTfxArgs(); - } - } - }); - } - catch (err) { - console.log(`Error packaging extension: ${err}.`); - tl.setResult(tl.TaskResult.Failed, `Error packaging extension: ${err}`); - } -} - -void run(); \ No newline at end of file diff --git a/BuildTasks/PackageExtension/v4/icon.png b/BuildTasks/PackageExtension/v4/icon.png deleted file mode 100644 index c79e5dffe4b3496ad2d069593cb8785c238d4e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4073 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.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/PackageExtension/v4/package.json b/BuildTasks/PackageExtension/v4/package.json deleted file mode 100644 index ae5d81a5..00000000 --- a/BuildTasks/PackageExtension/v4/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "vsts-developer-tools.packageextensionv4", - "version": "4.3.0", - "description": "Package Extension Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/PackageExtension/v4/task.json b/BuildTasks/PackageExtension/v4/task.json deleted file mode 100644 index 45a25294..00000000 --- a/BuildTasks/PackageExtension/v4/task.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "id": "e59022e0-667a-11e5-ad4c-dd75b69a0d2c", - "name": "PackageAzureDevOpsExtension", - "friendlyName": "Package Extension", - "description": "Package an Azure DevOps extension into a VSIX file", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Package", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "overrides", - "displayName": "Overrides manifest", - "isExpanded": true - }, - { - "name": "advanced", - "displayName": "Advanced", - "isExpanded": false - }, - { - "name": "backcompat", - "displayName": "Backward Compatibility", - "isExpanded": false - } - ], - "instanceNameFormat": "Package Extension: $(rootFolder)", - "inputs": [ - { - "name": "rootFolder", - "type": "filePath", - "label": "Root manifests folder", - "defaultValue": "", - "required": false, - "helpMarkDown": "Root folder from which the manifests are searched." - }, - { - "name": "localizationRoot", - "type": "filePath", - "label": "Localization Root folder", - "defaultValue": "", - "required": false, - "helpMarkDown": "Folder where localization file(s) exist." - }, - { - "name": "patternManifest", - "type": "multiLine", - "properties": { - "resizable": true, - "rows": "1" - }, - "label": "Manifest file(s)", - "defaultValue": "vss-extension.json", - "required": false, - "helpMarkDown": "Specify the pattern for manifest files. One file per line." - }, - { - "name": "outputPath", - "type": "filePath", - "label": "Package output file", - "defaultValue": "", - "required": false, - "helpMarkDown": "Specify the path and file name of the generated vsix." - }, - { - "name": "outputVariable", - "type": "string", - "label": "Output Variable (deprecated)", - "defaultValue": "Extension.OutputPath", - "required": false, - "helpMarkDown": "The variable name to assign the location of the generated package to. Specify only the name, e.g.: `Extension.OutputPath`, not `$(Extension.OutputPath)`.", - "groupName": "backcompat" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": false, - "helpMarkDown": "Extension publisher ID. If not specified, the publisher specified in the manifest will be used.", - "groupName": "overrides" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Overrides extension ID. If not specified, the extension ID specified in the manifest will be used", - "required": false, - "groupName": "overrides" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension ID", - "required": false, - "groupName": "overrides" - }, - { - "name": "extensionName", - "type": "string", - "label": "Extension name", - "defaultValue": "", - "helpMarkDown": "Overrides extension name. If not specified, the extension name specified in the manifest will be used", - "required": false, - "groupName": "overrides" - }, - { - "name": "extensionVersion", - "type": "string", - "label": "Extension version", - "defaultValue": "", - "helpMarkDown": "Overrides extension version. If not specified, the extension version specified in the manifest will be used", - "required": false, - "groupName": "overrides" - }, - { - "name": "updateTasksVersion", - "type": "boolean", - "label": "Override tasks version", - "defaultValue": "false", - "required": true, - "helpMarkDown": "Search for contributed tasks in extension manifests and updates the version specified in each Build and Release task found.", - "groupName": "overrides" - }, - { - "name": "updateTasksVersionType", - "type": "pickList", - "label": "Override Type", - "defaultValue": "major", - "options": { - "major": "Replace Major, Minor, Patch (x.y.r)", - "minor": "Replace Minor, Patch (1.y.r)", - "patch": "Replace Only Patch (1.0.r)" - }, - "required": false, - "helpMarkDown": "The Task version replacement format. You can select which part(s) of the version number to update (Major (x.y.r), Minor (1.y.r), or Patch (1.0.r)). The value (x.y.r) is taken from the Extension Version input or the extension manifest.", - "visibleRule": "updateTasksVersion=true", - "groupName": "overrides" - }, - { - "name": "updateTasksId", - "type": "boolean", - "label": "Override task id", - "defaultValue": "false", - "required": false, - "helpMarkDown": "Search for contributed tasks in extension manifests and updates the id specified in each Build and Release task found based on the Publisher, ExtensionId and TaskName.", - "groupName": "overrides" - }, - { - "name": "extensionVisibility", - "type": "pickList", - "label": "Extension visibility", - "defaultValue": "default", - "helpMarkDown": "Overrides extension visibility (Public vs Private) and optionally adds the Preview flag. If not specified, the extension visibility specified in the manifest will be used", - "required": false, - "groupName": "overrides", - "options": { - "default": "Not set", - "private": "Private", - "private_preview": "Private Preview", - "public_preview": "Public Preview", - "public": "Public" - } - }, - { - "name": "extensionPricing", - "type": "pickList", - "label": "Extension pricing", - "defaultValue": "default", - "helpMarkDown": "Overrides extension pricing (Free vs Paid). If not specified, the extension pricing specified in the manifest will be used", - "required": false, - "groupName": "overrides", - "options": { - "default": "Not set", - "free": "Free", - "paid": "Paid" - } - }, - { - "name": "bypassLocalValidation", - "type": "boolean", - "label": "Bypass local validation", - "defaultValue": "false", - "helpMarkDown": "Bypass local validation.", - "required": false, - "groupName": "advanced" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Additional arguments passed to tfx.", - "required": false, - "groupName": "advanced" - }, - { - "name": "cwd", - "type": "filePath", - "label": "Working Directory", - "defaultValue": "", - "required": false, - "helpMarkDown": "Current working directory when tfx is run. Defaults to the folder where the manifest is located.", - "groupName": "advanced" - } - ], - "outputVariables": [ - { - "name": "Extension.OutputPath", - "description": "Is set with the generated vsix path." - } - ], - "execution": { - "Node16": { - "target": "PackageExtension/v4/PackageExtension.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/PackageExtension/v4/tsconfig.json b/BuildTasks/PackageExtension/v4/tsconfig.json deleted file mode 100644 index fae3b19d..00000000 --- a/BuildTasks/PackageExtension/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "PackageExtension.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/PublishExtension/v4/PublishExtension.ts b/BuildTasks/PublishExtension/v4/PublishExtension.ts deleted file mode 100644 index cfe5b676..00000000 --- a/BuildTasks/PublishExtension/v4/PublishExtension.ts +++ /dev/null @@ -1,170 +0,0 @@ -import "core-js"; -import * as tl from "azure-pipelines-task-lib/task"; -import * as common from "../../Common/v4/Common"; -import * as vsixeditor from "./vsixeditor"; - -void common.runTfx(async tfx => { - let cleanupTfxArgs: () => void; - - try { - tfx.arg(["extension", "publish", "--json", "--no-color"]); - const outputVariable = tl.getInput("outputVariable", false); - - common.setTfxMarketplaceArguments(tfx); - - // Read file type - const fileType = tl.getInput("fileType", true); - let vsixOutput; - - if (fileType === "manifest") { - // Set tfx manifest arguments - cleanupTfxArgs = common.validateAndSetTfxManifestArguments(tfx); - - // Update tasks version if needed - await common.checkUpdateTasksManifests(); - } else { - // Set vsix file argument - const vsixFilePattern = tl.getPathInput("vsixFile", true); - let matchingVsixFile: string[]; - if (vsixFilePattern.indexOf("*") >= 0 || vsixFilePattern.indexOf("?") >= 0) { - tl.debug("Pattern found in vsixFile parameter"); - matchingVsixFile = tl.findMatch(tl.getInput("cwd", false) || process.cwd(), vsixFilePattern); - } - else { - tl.debug("No pattern found in vsixFile parameter"); - matchingVsixFile = [vsixFilePattern]; - } - - if (!matchingVsixFile || matchingVsixFile.length === 0) { - tl.setResult(tl.TaskResult.Failed, `Found no vsix files matching: ${vsixFilePattern}.`); - return false; - } - if (matchingVsixFile.length !== 1) { - tl.setResult(tl.TaskResult.Failed, `Found multiple vsix files matching: ${vsixFilePattern}.`); - return false; - } - - const vsixFile = matchingVsixFile[0]; - tl.checkPath(vsixFile, "vsixPath"); - - vsixOutput = tl.getVariable("System.DefaultWorkingDirectory"); - - const publisher = tl.getInput("publisherId", false); - - const extensionId = tl.getInput("extensionId", false); - const extensionTag = tl.getInput("extensionTag", false); - - const extensionName = tl.getInput("extensionName", false); - const extensionVisibility = tl.getInput("extensionVisibility", false) || ""; - const extensionPricing = tl.getInput("extensionPricing", false); - const extensionVersion = common.getExtensionVersion(); - const updateTasksId = tl.getBoolInput("updateTasksId", false); - const updateTasksVersion = tl.getBoolInput("updateTasksVersion", false); - - if (publisher - || extensionId - || extensionTag - || extensionName - || (extensionPricing && extensionPricing !== "default") - || (extensionVisibility && extensionVisibility !== "default") - || extensionVersion - || updateTasksId ) { - - tl.debug("Start editing of VSIX"); - const ve = new vsixeditor.VSIXEditor(vsixFile, vsixOutput); - ve.startEdit(); - - if (publisher) { ve.editPublisher(publisher); } - if (extensionId) { ve.editId(extensionId); } - if (extensionTag) { ve.editIdTag(extensionTag); } - if (extensionName) { ve.editExtensionName(extensionName); } - if (extensionVisibility) { ve.editExtensionVisibility(extensionVisibility); } - if (extensionPricing) { ve.editExtensionPricing(extensionPricing); } - if (extensionVersion) { - ve.editVersion(extensionVersion); - ve.editUpdateTasksVersion(updateTasksVersion); - } - if (updateTasksId) { - ve.editUpdateTasksId(updateTasksId); - } - - const vsixGeneratedFile = await ve.endEdit(); - tfx.arg(["--vsix", vsixGeneratedFile]); - vsixOutput = vsixGeneratedFile; - } - else { - vsixOutput = vsixFile; - tfx.arg(["--vsix", vsixOutput]); - } - } - - // Share with - const shareWith = tl.getDelimitedInput("shareWith", ",", false).map((value) => { return value.trim(); }); - const extensionVisibility = tl.getInput("extensionVisibility", false) || ""; - const connectTo = tl.getInput("connectTo", true); - if (shareWith) { - if (connectTo === "TFS") { - tl.warning("Ignoring Share - Not available on TFS."); - } - else if (extensionVisibility.indexOf("public") < 0) { - // Only handle shareWith if the extension is not public - tfx.argIf(shareWith && shareWith.length > 0, ["--share-with"].concat(shareWith)); - } else if (shareWith && shareWith.length > 0) { - tl.warning("Ignoring Share - Not available on public extensions."); - } - } - - const noWaitValidation = tl.getBoolInput("noWaitValidation", false); - if (noWaitValidation) { - tl.debug(`Not waiting for validation.`); - tfx.arg("--no-wait-validation"); - } - - const bypassLocalValidation = tl.getBoolInput("bypassLocalValidation", false); - if (bypassLocalValidation) { - tl.debug(`Bypassing local validation.`); - tfx.arg("--bypass-validation"); - } - - const args = tl.getInput("arguments", false); - if (args) { - tl.debug(`Adding additional arguments: ${args}.`); - tfx.line(args); - } - - tl.debug(`Redirecting output to stderr.`); - tfx.arg(['--debug-log-stream', 'stderr']); - - tl.debug(`Run tfx.`); - const outputStream = new common.TfxJsonOutputStream(console.log); - const errorStream = new common.TfxJsonOutputStream(tl.error); - - const code = await tfx.execAsync({ outStream: outputStream, errorStream: errorStream, failOnStdErr: false } as any); - if (code !== 0) - { - throw `tfx exited with return code: ${code}` - } - const json = JSON.parse(outputStream.jsonString); - - if (json && json.published) { - const publishedVsix = fileType === "manifest" ? json.packaged : vsixOutput; - - if (outputVariable) { - tl.setVariable(outputVariable, publishedVsix); - } - tl.setVariable("Extension.OutputPath", publishedVsix); - - console.log(`Published VSIX: ${publishedVsix}.`); - tl.setResult(tl.TaskResult.Succeeded, `tfx exited with return code: ${code}`); - } - else - { - tl.setResult(tl.TaskResult.Failed, `Publishing failed`); - } - }catch (err) { - tl.setResult(tl.TaskResult.Failed, `tfx failed with error: ${err.toString()}`); - } finally { - if (cleanupTfxArgs) { cleanupTfxArgs(); } - } - return Promise.resolve(true); -}); diff --git a/BuildTasks/PublishExtension/v4/icon.png b/BuildTasks/PublishExtension/v4/icon.png deleted file mode 100644 index b62f737e48cc7848bd0494e853c311992f67b5a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3974 zcmcIn3se(V8XhQBYPEn`waV5ZC`Fec?~u$PP$2S>M;2lMk83-b8Az05ViF)cv=yu_ z%Th#Es}Qvu>Onz@t)d_*y5L!Plm!t1@v$gc!3VAghEs*TArPoX)ONQyC&^6i_rJdX zyZ_vzi$nZo%~&`Cf}mLe{-QAO4IAIqmJno-vG^Jn+`OamkJ3QUyK{_h3n*8=0D@-h zkV_)9k-m0YgXM&f7Qqc>1gm^V zncP1~O@=3hNbscfxPYK}dcf{F6gW_jS`5}HVwDo9z($5xWFt1(~Zt>qchnEgNZVDC|dxJy=Wksnutcj zM80FOz@3mL(`r>Hot}`8;F`d8rPMKWra&N|Ggx#M3jqj3lc>~UIz*{)9QPn1HMm-? z(#k0%Z1jjpsW`2W1~N63pir6JDm7y?0mA4yOhsq9GK?jS0twuVQ^l!cM}reMos1Z_X7L)7`w`cog?H*f=bXV zGiEtvLy9mhDWnrh~`OrL5Q4^piW(xTOr z0>)ITSUHXvwMdUw5@R#jtZrCK!4rFVO40~YEuSQV$x+NH!2id1uNB>!jh3lJ_d7L- zZhR=3h5`M>IbpgNnV9r7_Ga{9gT8Dcyr~Ak(+34}(mXkT-HbEEr~cPjX;h6_P^g5| zX@jstpun+-;*G^j%$5n}S8%@nVNmtHr_~Sk#$5UyyMJiYvAwQY#yN1{bFmQi^c-o0{l(66eSCcG zj&L(0pB*@UoVRRQ&-r=jBK}v&SNr?>y}Z2E<|id5XLsDVk%jF}h~E#+;Fg<#v!qpV zI$dN$gx`0MxYP4~R8mwS>g(s%oaI~afxUf7z?z7Nf8JJS`z+sirrX)Y#R}qZxu-?n z9INTaISX4_T82`FD^d5e8}#R;LzlNTwYANkJ=+p83_d6=DM5~Q1PxBBTADJvCjFM- zY2Vhgx58Jfczb#7>f%rr7nf6ictX2CutMiP*_f1cvw!H5;#K+L!zCqlRu+}>@r#|O@%{cGiaIB!f(K_Ed-(bkTRr+mLS65zM-j`oi+3iU=dmTAcUcS4!ORwME za`EEzq>b8T4i5RJPCdJSzu`fAX=&;7#xI&WI(jr$GrqWGXl#6s+$wgy+S$p@`;l(- zb^SoyGzb!hhdbI@H~EW1Tk3BI1_X5V56P?wnq{jDc33d&ZONS52BixLwP`&c(RJFVwsEOm5D3n?saUFVcjQBl#eK|xU^rKLwZ z?q_7Y>uG1{>>m=s+Y=O0*grh%;qIs$2dHb zSkBnBYnRG?q_%c=w*QjZ(8pr27{?3FeFj^5!?t44e!ae?rY6Pk$imw>r&i~_FVe;7 z)2Q~xkJU=0($8=D(CO{9gzY~%I-;PnU>7`j^5oK`OPzyP9t;*06{V%6RaRC4CL0UXQ?%7owInval<#D+Vb555MZ%0K%StM)= zJ5&QfA%!6A_=JQ-GpCiUo(0L|^5%7ATJ*WWU=XSaf;el%Svae*yuAG6$yD23ExN7R z%XW)o`Ch$VG~ZBN?Q_=I;$vH@#9()sOa_PM_%HeUyhD=14.6" - } - }, - "node_modules/7zip-bin-win": { - "version": "2.2.0", - "license": "MIT", - "os": [ - "win32" - ] - }, - "node_modules/adm-zip": { - "version": "0.5.10", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", - "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz", - "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/temp": { - "version": "0.9.4", - "license": "MIT", - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/x2js": { - "version": "3.4.4", - "license": "Apache-2.0", - "dependencies": { - "@xmldom/xmldom": "^0.8.3" - } - }, - "node_modules/x2js/node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - } - } - } -} diff --git a/BuildTasks/PublishExtension/v4/package.json b/BuildTasks/PublishExtension/v4/package.json deleted file mode 100644 index 23b4e995..00000000 --- a/BuildTasks/PublishExtension/v4/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "vsts-developer-tools.publishextensionv4", - "version": "4.3.0", - "description": "Publish Extension Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "@xmldom/xmldom": "^0.9.8", - "7zip-bin-win": "^2.2.0", - "azure-pipelines-task-lib": "^4.17.3", - "core-js": "^3.46.0", - "fs-extra": "^11.3.2", - "temp": "^0.9.4", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0", - "x2js": "^3.4.4" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/PublishExtension/v4/task.json b/BuildTasks/PublishExtension/v4/task.json deleted file mode 100644 index f0944b4c..00000000 --- a/BuildTasks/PublishExtension/v4/task.json +++ /dev/null @@ -1,301 +0,0 @@ -{ - "id": "631511B4-50AB-47C8-B766-7AE2AA672733", - "name": "PublishAzureDevOpsExtension", - "friendlyName": "Publish Extension", - "description": "Publish an Azure DevOps extension to the Visual Studio Marketplace", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Deploy", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "manifest", - "displayName": "Extension manifest", - "isExpanded": true - }, - { - "name": "advanced", - "displayName": "Advanced", - "isExpanded": false - }, - { - "name": "backcompat", - "displayName": "Backward Compatibility", - "isExpanded": false - } - ], - "instanceNameFormat": "Publish Extension", - "inputs": [ - { - "name": "connectTo", - "type": "radio", - "label": "Connect to", - "required": true, - "defaultValue": "VsTeam", - "helpMarkDown": "Publish to Visual Studio Marketplace or a local Azure DevOps Server.", - "options": { - "VsTeam": "Visual Studio Marketplace", - "TFS": "Azure DevOps Server" - } - }, - { - "name": "connectedServiceName", - "type": "connectedService:VstsMarketplacePublishing", - "label": "Visual Studio Marketplace connection", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=VsTeam" - }, - { - "name": "connectedServiceNameTFS", - "type": "connectedService:TFSMarketplacePublishing", - "label": "TFS Local Gallery connection", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=TFS" - }, - { - "name": "fileType", - "type": "radio", - "label": "Input file type", - "required": true, - "defaultValue": "manifest", - "options": { - "manifest": "Extension manifest file", - "vsix": "VSIX file" - }, - "groupName": "manifest" - }, - { - "name": "vsixFile", - "type": "filePath", - "label": "VSIX file", - "defaultValue": "", - "required": true, - "helpMarkDown": "VSIX file to publish. Supports wildcards.", - "visibleRule": "fileType = vsix", - "groupName": "manifest" - }, - { - "name": "rootFolder", - "type": "filePath", - "label": "Root manifest folder", - "defaultValue": "", - "required": false, - "helpMarkDown": "Folder where manifest file(s) exist.", - "visibleRule": "fileType = manifest", - "groupName": "manifest" - }, - { - "name": "localizationRoot", - "type": "filePath", - "label": "Localization Root folder", - "defaultValue": "", - "required": false, - "helpMarkDown": "Folder where localization file(s) exist.", - "visibleRule": "fileType = manifest", - "groupName": "manifest" - }, - { - "name": "patternManifest", - "type": "multiLine", - "properties": { - "resizable": true, - "rows": "1" - }, - "label": "Manifest file(s)", - "defaultValue": "vss-extension.json", - "required": false, - "helpMarkDown": "Specify the pattern for manifest files. One file per line.", - "visibleRule": "fileType = manifest", - "groupName": "manifest" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": false, - "helpMarkDown": "Extension publisher ID. If not specified, the publisher specified in the manifest will be used.", - "groupName": "manifest" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Overrides extension ID. If not specified, the extension ID specified in the manifest will be used", - "required": false, - "groupName": "manifest" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension ID", - "required": false, - "groupName": "manifest" - }, - { - "name": "extensionName", - "type": "string", - "label": "Extension name", - "defaultValue": "", - "helpMarkDown": "Overrides extension name. If not specified, the extension name specified in the manifest will be used", - "required": false, - "groupName": "manifest" - }, - { - "name": "extensionVersion", - "type": "string", - "label": "Extension version", - "defaultValue": "", - "helpMarkDown": "Overrides extension version. If not specified, the extension version specified in the manifest will be used", - "required": false, - "groupName": "manifest" - }, - { - "name": "updateTasksVersion", - "type": "boolean", - "label": "Override task version", - "defaultValue": "true", - "required": false, - "helpMarkDown": "Search for contributed tasks in extension manifests and updates the version specified in each Build and Release task found.", - "groupName": "manifest" - }, - { - "name": "updateTasksVersionType", - "type": "pickList", - "label": "Override Type", - "defaultValue": "major", - "options": { - "major": "Replace Major, Minor, Patch (x.y.r)", - "minor": "Replace Minor, Patch (1.y.r)", - "patch": "Replace Only Patch (1.0.r)" - }, - "required": false, - "helpMarkDown": "The Task version replacement format. You can select which part(s) of the version number to update (Major (x.y.r), Minor (1.y.r), or Patch (1.0.r)). The value (x.y.r) is taken from the Extension Version input or the extension manifest.", - "visibleRule": "updateTasksVersion=true", - "groupName": "manifest" - }, - { - "name": "updateTasksId", - "type": "boolean", - "label": "Override task id", - "defaultValue": "false", - "required": false, - "helpMarkDown": "Search for contributed tasks in extension manifests and updates the id specified in each Build and Release task found based on the Publisher, ExtensionId and TaskName.", - "groupName": "manifest" - }, - { - "name": "extensionVisibility", - "type": "pickList", - "label": "Extension visibility", - "defaultValue": "default", - "helpMarkDown": "Overrides extension visibility (Public vs Private) and optionally adds the Preview flag. If not specified, the extension visibility specified in the manifest will be used", - "required": false, - "options": { - "default": "Not set", - "private": "Private", - "privatepreview": "Private Preview", - "publicpreview": "Public Preview", - "public": "Public" - }, - "groupName": "manifest" - }, - { - "name": "extensionPricing", - "type": "pickList", - "label": "Extension pricing", - "defaultValue": "default", - "helpMarkDown": "Overrides extension pricing (Free vs Paid). If not specified, the extension pricing specified in the manifest will be used", - "required": false, - "groupName": "manifest", - "options": { - "default": "Not set", - "free": "Free", - "paid": "Paid" - } - }, - { - "name": "outputVariable", - "type": "string", - "label": "Output Variable (deprecated)", - "defaultValue": "Extension.OutputPath", - "required": false, - "helpMarkDown": "The variable name to assign the location of the generated package to. Specify only the name, e.g.: `Extension.OutputPath`, not `$(Extension.OutputPath)`.", - "groupName": "backcompat" - }, - { - "name": "shareWith", - "type": "string", - "label": "Share with", - "defaultValue": "", - "helpMarkDown": "Comma separated list of organisations with which to share the extension if it's private (e.g. org_x,org_y,org_z). Share is ignored for public extensions and when publishing to TFS.", - "required": false, - "groupName": "manifest", - "visibleRule": "extensionVisibility = private || extensionVisibility = privatepreview || extensionVisibility = default" - }, - { - "name": "bypassLocalValidation", - "type": "boolean", - "label": "Bypass local validation", - "defaultValue": "false", - "helpMarkDown": "Bypass local validation.", - "required": false, - "groupName": "advanced" - }, - { - "name": "noWaitValidation", - "type": "boolean", - "label": "Don't wait for validation", - "defaultValue": "false", - "helpMarkDown": "Don't block command for extension validation.", - "required": false, - "groupName": "advanced" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Additional arguments passed to the package and publishing tool.", - "required": false, - "groupName": "advanced" - }, - { - "name": "cwd", - "type": "filePath", - "label": "Working Directory", - "defaultValue": "", - "required": false, - "helpMarkDown": "Working directory to run the package and publishing process from. Defaults to the folder where the manifest is located.", - "groupName": "advanced" - } - ], - "outputVariables": [ - { - "name": "Extension.OutputPath", - "description": "Is set with the generated vsix path." - } - ], - "execution": { - "Node16": { - "target": "PublishExtension/v4/PublishExtension.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/PublishExtension/v4/tsconfig.json b/BuildTasks/PublishExtension/v4/tsconfig.json deleted file mode 100644 index 3d153e63..00000000 --- a/BuildTasks/PublishExtension/v4/tsconfig.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "vsixeditor.ts", - "PublishExtension.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/PublishExtension/v4/vsixeditor.ts b/BuildTasks/PublishExtension/v4/vsixeditor.ts deleted file mode 100644 index 2ed75271..00000000 --- a/BuildTasks/PublishExtension/v4/vsixeditor.ts +++ /dev/null @@ -1,349 +0,0 @@ -import "core-js"; -import temp = require("temp"); -import fs = require("fs"); -import fse = require("fs-extra"); -import path = require("path"); -import tl = require("azure-pipelines-task-lib/task"); -import tr = require("azure-pipelines-task-lib/toolrunner"); -import common = require("../../Common/v4/Common"); - - -class ManifestData { - public outputFileName: string; - constructor(public version: string, - public id: string, - public publisher: string, - public visibility: string, - public pricing: string, - public name: string, - public dirPath: string) { } - - public createOutputFilePath(outputPath: string): string { - const fileName = `${this.publisher}.${this.id}-${this.version}.gen.vsix`; - - const updateFileName = (fileName: string, iteration: number) => { - if (iteration > 0) { - const gen = iteration.toString().padStart(2, "0"); - fileName = `${this.publisher}.${this.id}-${this.version}.gen${gen}.vsix`; - } - if (fs.existsSync(path.join(outputPath, fileName))) { - updateFileName(fileName, ++iteration); - } else { - tl.debug("Generated filename: " + fileName); - } - }; - - updateFileName(fileName, 0); - - return fileName; - } -} - -class GalleryFlagsEditor { - flags: string[] = []; - constructor(galleryFlagsEditor: string) { - if (galleryFlagsEditor) { - this.flags = galleryFlagsEditor.split(" ").filter(f => f != null && f !== ""); - } - } - - private addFlag(flag: string) { - if (this.flags.indexOf(flag) < 0) { this.flags.push(flag); } - } - - private removeFlag(flag: string) { - const index = this.flags.indexOf(flag); - if (index >= 0) { this.flags.splice(index, 1); } - } - - addPublicFlag() { - this.addFlag("Public"); - } - - removePublicFlag() { - this.removeFlag("Public"); - } - - removePaidFlag() { - this.removeFlag("Paid"); - } - - addPaidFlag() { - this.addFlag("Paid"); - } - - addPreviewFlag() { - this.addFlag("Preview"); - } - - removePreviewFlag() { - this.removeFlag("Preview"); - } - - toString(): string { - return this.flags.join(" "); - } -} - -export class VSIXEditor { - private edit = false; - private versionNumber: string = null; - private id: string = null; - private idTag: string = null; - private publisher: string = null; - private extensionName: string = null; - private extensionVisibility: string = null; - private extensionPricing: string = null; - private updateTasksVersion = true; - private updateTasksId = true; - - constructor( - public inputFile: string, - public outputPath: string) { - } - - public startEdit() : void { - if (this.edit) { throw new Error("Edit is already started"); } - this.edit = true; - tl.debug("Editing started"); - } - - private async extractArchive(vsix: string, tmpPath: string): Promise { - const cwd = tl.cwd(); - - if (tl.getPlatform() === tl.Platform.Windows) { - const sevenZip = require("7zip-bin-win"); - const zip = new tr.ToolRunner(sevenZip.path7za); - - zip.arg("x"); - zip.arg(vsix); // file to extract - zip.arg(`-o${tmpPath}`); // redirect output to dir - zip.arg("task.json"); - zip.arg("task.loc.json"); - zip.arg("extension.vsixmanifest"); - zip.arg("extension.vsomanifest"); - zip.arg("-y"); // assume yes on all queries - zip.arg("-r"); // recurse - zip.arg("-bd"); // disable progress indicator - zip.arg("-aoa"); // overwrite all - zip.arg("-spd"); // disable wildcards - await zip.execAsync(); - } else { - const zip = new tr.ToolRunner(tl.which("unzip", true)); - - zip.arg("-o"); // overwrite all - zip.arg("-C"); // match case insensitive - zip.arg("-d"); // redirect output to - zip.arg(tmpPath); // output directory - zip.arg(vsix); // file to extract - zip.arg("*/task.json"); - zip.arg("*/task.loc.json"); - zip.arg("extension.vsixmanifest"); - zip.arg("extension.vsomanifest"); - - const result = await zip.execAsync({ ignoreReturnCode: true }); - - // unzip returns exit code 11 when some files are not found, but extraction succeeds for existing files - // This is acceptable for optional files like task.json and task.loc.json - if (result !== 0 && result !== 11) { - throw new Error(`unzip extraction failed with exit code: ${result}`); - } - } - tl.cd(cwd); - } - - private async createArchive(originalVsix: string, tmpPath: string, targetVsix: string): Promise { - const cwd = tl.cwd(); - - if (originalVsix !== targetVsix) { tl.cp(originalVsix, targetVsix, "-f"); } - - if (tl.getPlatform() === tl.Platform.Windows) { - const sevenZip = require("7zip-bin-win"); - const zip = new tr.ToolRunner(sevenZip.path7za); - - zip.arg("u"); - zip.arg(targetVsix); // redirect output to file - zip.arg(path.join(tmpPath, "\\*")); - zip.arg("-r"); // recursive - zip.arg("-y"); // assume yes on all queries - zip.arg("-tzip"); // zip format - zip.arg("-mx9"); // max compression level - zip.arg("-bd"); // disable progress indicator - await zip.execAsync(); - } else { - const zip = new tr.ToolRunner(tl.which("zip", true)); - - tl.cd(tmpPath); - zip.arg(path.join(cwd, targetVsix)); // redirect output to file - zip.arg("."); - zip.arg("-r"); // recursive - zip.arg("-9"); // max compression level - zip.arg("-f"); // update changed files only - await zip.execAsync(); - } - tl.cd(cwd); - } - - public async endEdit(): Promise { - this.validateEditMode(); - - if (!this.hasEdits()) { return this.inputFile; } - - temp.track(); - - const dirPath = await temp.mkdir("vsixeditor"); - tl.debug("Extracting files to " + dirPath); - - await this.extractArchive(this.inputFile, dirPath); - if (this.versionNumber && this.updateTasksVersion || this.updateTasksId) { - tl.debug("Look for build tasks manifest"); - const extensionManifest = path.join(dirPath, "extension.vsomanifest"); - await common.checkUpdateTasksManifests(extensionManifest); - } - - tl.debug("Editing VSIX manifest"); - const manifestData = await this.editVsixManifest(dirPath); - manifestData.outputFileName = manifestData.createOutputFilePath(this.outputPath); - - tl.debug(`Creating final archive file at ${this.outputPath}`); - await this.createArchive(this.inputFile, manifestData.dirPath, manifestData.outputFileName); - tl.debug("Final archive file created"); - - return manifestData.outputFileName; - } - - private async editVsixManifest(dirPath: string): Promise { - const x2jsLib = require("x2js"); - const x2js = new x2jsLib(); - - const vsixManifestPath = path.join(dirPath, "extension.vsixmanifest"); - - try { - let vsixManifestData = await fse.readFile(vsixManifestPath, "utf8"); - - const vsixmanifest:any = x2js.xml2js(vsixManifestData); - const identity = vsixmanifest.PackageManifest.Metadata.Identity; - - if (this.versionNumber) { identity._Version = this.versionNumber; } - if (this.id) { identity._Id = this.id; } - if (this.idTag) { identity._Id += this.idTag; } - if (this.publisher) { identity._Publisher = this.publisher; } - if (this.extensionName) { vsixmanifest.PackageManifest.Metadata.DisplayName = this.extensionName; } - if (this.extensionVisibility && this.extensionVisibility !== "default") { - const flagsEditor = new GalleryFlagsEditor(vsixmanifest.PackageManifest.Metadata.GalleryFlags); - - const isPublic = this.extensionVisibility.indexOf("public") >= 0; - const isPreview = this.extensionVisibility.indexOf("preview") >= 0; - - if (isPublic) { - flagsEditor.addPublicFlag(); - } - else { - flagsEditor.removePublicFlag(); - } - - if (isPreview) { - flagsEditor.addPreviewFlag(); - } - else { - flagsEditor.removePreviewFlag(); - } - - vsixmanifest.PackageManifest.Metadata.GalleryFlags = flagsEditor.toString(); - } - if (this.extensionPricing && this.extensionPricing !== "default") { - const flagsEditor = new GalleryFlagsEditor(vsixmanifest.PackageManifest.Metadata.GalleryFlags); - - const isFree = this.extensionPricing.indexOf("free") >= 0; - const isPaid = this.extensionPricing.indexOf("paid") >= 0; - - if (isFree) { - flagsEditor.removePaidFlag(); - } - - if (isPaid) { - flagsEditor.addPaidFlag(); - } - - vsixmanifest.PackageManifest.Metadata.GalleryFlags = flagsEditor.toString(); - } - - vsixManifestData = x2js.js2xml(vsixmanifest); - const manifestData = new ManifestData(identity._Version, - identity._Id, - identity._Publisher, - this.extensionVisibility, - this.extensionPricing, - vsixmanifest.PackageManifest.Metadata.DisplayName, - dirPath); - - await fse.writeFile(vsixManifestPath, vsixManifestData, { encoding: "utf8" }); - return Promise.resolve(manifestData); - } - catch (err: any) { - return Promise.reject(new Error(err.message)); - } - } - - public hasEdits(): boolean { - return (this.versionNumber - || this.id - || this.idTag - || this.publisher - || this.extensionName - || (this.extensionVisibility && this.extensionVisibility !== "default") - || (this.extensionPricing && this.extensionPricing !== "default")) - || this.updateTasksId; - } - - public editVersion(version: string) : void { - this.validateEditMode(); - this.versionNumber = version; - } - - public editExtensionName(name: string) : void { - this.validateEditMode(); - this.extensionName = name; - } - - public editExtensionVisibility(visibility: string) : void { - this.validateEditMode(); - this.extensionVisibility = visibility; - } - - public editExtensionPricing(pricing: string) : void { - this.validateEditMode(); - this.extensionPricing = pricing; - } - - public editId(id: string) : void { - this.validateEditMode(); - this.id = id; - } - - public editIdTag(tag: string) : void { - this.validateEditMode(); - this.idTag = tag; - } - - public editPublisher(publisher: string) : void { - this.validateEditMode(); - this.publisher = publisher; - } - - public editUpdateTasksVersion(updateTasksVersion: boolean) : void { - this.validateEditMode(); - this.updateTasksVersion = updateTasksVersion; - } - - public editUpdateTasksId(updateTasksId: boolean) : void { - this.validateEditMode(); - this.updateTasksId = updateTasksId; - } - - private validateEditMode() : void { - if (!this.edit) { throw new Error("Editing is not started"); } - } -} - - diff --git a/BuildTasks/PublishVSExtension/v4/PublishVSExtension.js b/BuildTasks/PublishVSExtension/v4/PublishVSExtension.js deleted file mode 100644 index 32b13244..00000000 --- a/BuildTasks/PublishVSExtension/v4/PublishVSExtension.js +++ /dev/null @@ -1,28 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const tl = require("azure-pipelines-task-lib"); -const util = require("./Utils"); -let publisher = ""; -try { - const connectedService = tl.getInput("ConnectedServiceName", true); - const token = tl.getEndpointAuthorizationParameter(connectedService, "password", true); - const vsixFile = tl.getPathInput("vsixFile", true, true); - const manifestFile = tl.getPathInput("manifestFile", true, true); - const publisherId = tl.getInput("publisherId", true); - publisher = publisherId; - const ignoreWarnings = tl.getInput("ignoreWarnings", false); - console.info(`Logging in as '${publisherId}'`); - util.login(publisherId, token); - console.info(`Publishing '${vsixFile}' to Visual Studio marketplace`); - util.publish(vsixFile, manifestFile, ignoreWarnings); -} -catch (error) { - tl.error(error); - tl.setResult(tl.TaskResult.Failed, error); -} -finally { - console.info(`Logging out publisher '${publisher}'`); - util.logout(publisher); - console.log("All done"); -} -//# sourceMappingURL=PublishVSExtension.js.map \ No newline at end of file diff --git a/BuildTasks/PublishVSExtension/v4/PublishVSExtension.js.map b/BuildTasks/PublishVSExtension/v4/PublishVSExtension.js.map deleted file mode 100644 index 318a7cef..00000000 --- a/BuildTasks/PublishVSExtension/v4/PublishVSExtension.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"PublishVSExtension.js","sourceRoot":"","sources":["PublishVSExtension.ts"],"names":[],"mappings":";;AAAA,+CAA+C;AAC/C,gCAAgC;AAEhC,IAAI,SAAS,GAAG,EAAE,CAAC;AAEnB,IAAI,CAAC;IACD,MAAM,gBAAgB,GAAG,EAAE,CAAC,QAAQ,CAAC,sBAAsB,EAAE,IAAI,CAAC,CAAC;IACnE,MAAM,KAAK,GAAG,EAAE,CAAC,iCAAiC,CAAC,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;IAEvF,MAAM,QAAQ,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,EAAE,CAAC,YAAY,CAAC,cAAc,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACjE,MAAM,WAAW,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;IACrD,SAAS,GAAG,WAAW,CAAC;IACxB,MAAM,cAAc,GAAG,EAAE,CAAC,QAAQ,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAE5D,OAAO,CAAC,IAAI,CAAC,kBAAkB,WAAW,GAAG,CAAC,CAAC;IAC/C,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAE/B,OAAO,CAAC,IAAI,CAAC,eAAe,QAAQ,gCAAgC,CAAC,CAAA;IACrE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC;AACzD,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACb,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChB,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAC9C,CAAC;QACO,CAAC;IACL,OAAO,CAAC,IAAI,CAAC,0BAA0B,SAAS,GAAG,CAAC,CAAC;IACrD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC"} \ No newline at end of file diff --git a/BuildTasks/PublishVSExtension/v4/PublishVSExtension.ts b/BuildTasks/PublishVSExtension/v4/PublishVSExtension.ts deleted file mode 100644 index d6349353..00000000 --- a/BuildTasks/PublishVSExtension/v4/PublishVSExtension.ts +++ /dev/null @@ -1,29 +0,0 @@ -import * as tl from "azure-pipelines-task-lib"; -import * as util from "./Utils"; - -let publisher = ""; - -try { - const connectedService = tl.getInput("ConnectedServiceName", true); - const token = tl.getEndpointAuthorizationParameter(connectedService, "password", true); - - const vsixFile = tl.getPathInput("vsixFile", true, true); - const manifestFile = tl.getPathInput("manifestFile", true, true); - const publisherId = tl.getInput("publisherId", true); - publisher = publisherId; - const ignoreWarnings = tl.getInput("ignoreWarnings", false); - - console.info(`Logging in as '${publisherId}'`); - util.login(publisherId, token); - - console.info(`Publishing '${vsixFile}' to Visual Studio marketplace`) - util.publish(vsixFile, manifestFile, ignoreWarnings); -} catch (error) { - tl.error(error); - tl.setResult(tl.TaskResult.Failed, error); -} -finally { - console.info(`Logging out publisher '${publisher}'`); - util.logout(publisher); - console.log("All done"); -} \ No newline at end of file diff --git a/BuildTasks/PublishVSExtension/v4/Utils.js b/BuildTasks/PublishVSExtension/v4/Utils.js deleted file mode 100644 index d41f5417..00000000 --- a/BuildTasks/PublishVSExtension/v4/Utils.js +++ /dev/null @@ -1,65 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -exports.getVsixPublisherExe = getVsixPublisherExe; -exports.login = login; -exports.logout = logout; -exports.publish = publish; -const tl = require("azure-pipelines-task-lib"); -const path = require("path"); -let cacheVsixPublisherExe = ""; -let loggedIn = false; -function getVsixPublisherExe() { - if (cacheVsixPublisherExe === "") { - const vswhereTool = tl.tool(path.join(__dirname, "tools", "vswhere.exe")); - vswhereTool.line("-version [15.0,) -latest -requires Microsoft.VisualStudio.Component.VSSDK -find VSSDK\\VisualStudioIntegration\\Tools\\Bin\\VsixPublisher.exe"); - const vswhereResult = vswhereTool.execSync({ silent: true }); - const vsixPublisherExe = vswhereResult.stdout.trim(); - if (vswhereResult.code === 0 && vsixPublisherExe && tl.exist(vsixPublisherExe)) { - tl.debug('VsixPublisher.exe installed path: ' + vsixPublisherExe); - cacheVsixPublisherExe = vsixPublisherExe; - } - else { - throw new Error("Could not locate vsixpublisher.exe. Ensure the Visual Studio SDK is installed on the agent."); - } - } - return cacheVsixPublisherExe; -} -function login(publisher, token) { - const vsixPublisherExe = getVsixPublisherExe(); - const vsixPublisher = tl.tool(vsixPublisherExe); - vsixPublisher.arg("login"); - vsixPublisher.arg(["-personalAccessToken", token]); - vsixPublisher.arg(["-publisherName", publisher]); - if (vsixPublisher.execSync({ failOnStdErr: true }).code !== 0) { - throw new Error("Login failed."); - } - loggedIn = true; - console.info(`Login successful.`); -} -function logout(publisher) { - if (loggedIn) { - const vsixPublisherExe = getVsixPublisherExe(); - const vsixPublisher = tl.tool(vsixPublisherExe); - vsixPublisher.arg("logout"); - vsixPublisher.arg(["-publisherName", publisher]); - vsixPublisher.arg("-ignoreMissingPublisher"); - if (vsixPublisher.execSync({ failOnStdErr: true }).code !== 0) { - throw new Error("Logout failed."); - } - loggedIn = false; - } - console.info(`Logout successful.`); -} -function publish(vsixPath, manifestPath, warningsToIgnore) { - const vsixPublisherExe = getVsixPublisherExe(); - const vsixPublisher = tl.tool(vsixPublisherExe); - vsixPublisher.arg("publish"); - vsixPublisher.arg(["-payload", vsixPath]); - vsixPublisher.arg(["-publishManifest", manifestPath]); - vsixPublisher.arg(["-ignoreWarnings", warningsToIgnore]); - if (vsixPublisher.execSync({ failOnStdErr: true }).code !== 0) { - throw new Error("Publish failed."); - } - console.info(`Published successfully.`); -} -//# sourceMappingURL=Utils.js.map \ No newline at end of file diff --git a/BuildTasks/PublishVSExtension/v4/Utils.js.map b/BuildTasks/PublishVSExtension/v4/Utils.js.map deleted file mode 100644 index 7fc49f41..00000000 --- a/BuildTasks/PublishVSExtension/v4/Utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"Utils.js","sourceRoot":"","sources":["Utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/BuildTasks/PublishVSExtension/v4/Utils.ts b/BuildTasks/PublishVSExtension/v4/Utils.ts deleted file mode 100644 index 4396c14b..00000000 --- a/BuildTasks/PublishVSExtension/v4/Utils.ts +++ /dev/null @@ -1,78 +0,0 @@ -import * as tl from "azure-pipelines-task-lib"; -import * as tr from "azure-pipelines-task-lib/toolrunner"; -import * as path from "path"; - -let cacheVsixPublisherExe = ""; -let loggedIn = false; - -export function getVsixPublisherExe(): string { - if (cacheVsixPublisherExe === "") { - const vswhereTool = tl.tool(path.join(__dirname, "tools", "vswhere.exe")); - vswhereTool.line("-version [15.0,) -latest -requires Microsoft.VisualStudio.Component.VSSDK -find VSSDK\\VisualStudioIntegration\\Tools\\Bin\\VsixPublisher.exe"); - const vswhereResult = vswhereTool.execSync({ silent: true } as tr.IExecSyncOptions); - const vsixPublisherExe = vswhereResult.stdout.trim(); - if (vswhereResult.code === 0 && vsixPublisherExe && tl.exist(vsixPublisherExe)) - { - tl.debug('VsixPublisher.exe installed path: ' + vsixPublisherExe); - cacheVsixPublisherExe = vsixPublisherExe; - } - else - { - throw new Error("Could not locate vsixpublisher.exe. Ensure the Visual Studio SDK is installed on the agent."); - } - } - return cacheVsixPublisherExe; - } - -export function login(publisher: string, token: string) { - const vsixPublisherExe = getVsixPublisherExe(); - const vsixPublisher = tl.tool(vsixPublisherExe); - - vsixPublisher.arg("login"); - vsixPublisher.arg(["-personalAccessToken", token]); - vsixPublisher.arg(["-publisherName", publisher]); - - if (vsixPublisher.execSync({ failOnStdErr: true } as tr.IExecOptions).code !== 0) - { - throw new Error("Login failed."); - } - - loggedIn = true; - console.info(`Login successful.`) -} - -export function logout(publisher: string) { - if (loggedIn) - { - const vsixPublisherExe = getVsixPublisherExe(); - const vsixPublisher = tl.tool(vsixPublisherExe); - - vsixPublisher.arg("logout"); - vsixPublisher.arg(["-publisherName", publisher]); - vsixPublisher.arg("-ignoreMissingPublisher"); - - if (vsixPublisher.execSync({ failOnStdErr: true } as tr.IExecOptions).code !== 0) - { - throw new Error("Logout failed."); - } - loggedIn = false; - } - console.info(`Logout successful.`) -} - -export function publish(vsixPath: string, manifestPath: string, warningsToIgnore: string) { - const vsixPublisherExe = getVsixPublisherExe(); - const vsixPublisher = tl.tool(vsixPublisherExe); - - vsixPublisher.arg("publish"); - vsixPublisher.arg(["-payload", vsixPath]); - vsixPublisher.arg(["-publishManifest", manifestPath]); - vsixPublisher.arg(["-ignoreWarnings", warningsToIgnore]); - - if (vsixPublisher.execSync({ failOnStdErr: true } as tr.IExecOptions).code !== 0) - { - throw new Error("Publish failed."); - } - - console.info(`Published successfully.`) -} diff --git a/BuildTasks/PublishVSExtension/v4/icon.png b/BuildTasks/PublishVSExtension/v4/icon.png deleted file mode 100644 index b8e55d02f6486af3fa782ee6435e04858dbb8497..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1448 zcmV;Z1y}lsP)c~Vy#5Q z!NyjF3_)SZAY=(>G~ys(iPra!Wbhajve8^rj=aGezE=lKn$@5*onOxDQ$c1OeQx~j#C{xuy)W(;BL@1@V3%x zapIL-{CDS8^67K602l)<14fMhjM*XST`&eBq z=caSyLi$xS93mIeyaz*cCVz0*sr1^!nHdsenU$g9977GjW=WfX-IxuC9IlOm$nE`` z=}7j$n_}7VlN2H$&a}oES>8x47A_si7HLXlXnALXy4k|YaKV2C>d*642Mi*jK(5vt zL{z4#=(^Z+{>zAe0n@YbC?9;b!45(FRJOP@m7y-3TOCHb76|@{EdoLkzc}b4}KSpHuv;f%tuB0adb)N{j;-@*6uDpFYL9{>=ad;6WfCtcxSUzyJFW z^jtYWXG>qz#>@X1;@HUHx#xBLTL6l{4-FQ4|DysXja)4MKrN<@WN+nTRnSW7>srOS z{w)Lyg^+$L_))O^KgfPBT7zit(vaoDC+NlVfku zdihl)ChUidPJ)Mp_5%6x3^0?O<^XmNqPBA(4woH z9(rdF{XKWq2EgW3Nml}AjZ;FSKngr+GzuOS8bzeA#=sMjGL>mN-}qnotnN_T`dp1_ptf zfX`e)m0ff;Re6-|Xz8Ol-g5qaOz10?2Zh!EpJVYZ!jC3!d9s(zWFLK9t7vX$tvV)< z@%56{fCoXn3t#6SgC6tV|NWb#@fLd82DrL?fR5x1)%q{B>2_eXq_x1;fLM)ji@-kP z?ZBRz=!``h=xHCIGucaD*QzSw0;whp-xMCCq@UyhZpN^mG(0Zpt#bK(qI`A)Ksu8* zur%IMC1OM!W`*UoLTiC(?CpkURH~l23LQSNpAP|3lM8aUTF;sQ0000=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/core-js": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.46.0.tgz", - "integrity": "sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==", - "hasInstallScript": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.3", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path": { - "version": "0.12.7", - "license": "MIT", - "dependencies": { - "process": "^0.11.1", - "util": "^0.10.3" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/process": { - "version": "0.11.10", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/util": { - "version": "0.10.4", - "license": "MIT", - "dependencies": { - "inherits": "2.0.3" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/PublishVSExtension/v4/package.json b/BuildTasks/PublishVSExtension/v4/package.json deleted file mode 100644 index 645077c3..00000000 --- a/BuildTasks/PublishVSExtension/v4/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "publishvsextension", - "version": "4.3.0", - "description": "Publish Visual Studio Extension Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "keywords": [], - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "core-js": "^3.46.0", - "path": "~0.12.7", - "tmp": "^0.2.5" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/PublishVSExtension/v4/readme.md b/BuildTasks/PublishVSExtension/v4/readme.md deleted file mode 100644 index 7151308b..00000000 --- a/BuildTasks/PublishVSExtension/v4/readme.md +++ /dev/null @@ -1,12 +0,0 @@ -## Publish Visual Studio Extension task - -With this task you will be able to publish a Visual Studio extension to Marketplace. - -This task uses [VSIXPublisher](https://docs.microsoft.com/en-us/visualstudio/extensibility/walkthrough-publishing-a-visual-studio-extension-via-command-line?view=vs-2017) program to publish Visual Studio extension to Marketplace. - -> VSIXPublisher executable is not shipped with this task, hence this task needs to be run on an agent where at least Visual Studio 2017 with `Microsoft.VisualStudio.Component.VSSDK` workload installed. `Hosted VS 2017` pool contains agents with both Visual Studio and Microsoft.VisualStudio.Component.VSSDK installed. - -### Screenshot - -![screenshot](screenshot.png) - diff --git a/BuildTasks/PublishVSExtension/v4/screenshot.png b/BuildTasks/PublishVSExtension/v4/screenshot.png deleted file mode 100644 index d41cda0068be525cf327d76f8a3407b0af0e2268..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75867 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 paB(M&kB+R`zzGLn$7oOZKYjN<2TQ6Ycq { - tfx.arg(["extension", "share", "--no-color"]); - - common.setTfxMarketplaceArguments(tfx); - common.validateAndSetTfxManifestArguments(tfx); - - // Installation targets - const accounts = tl.getDelimitedInput("accounts", ",", true); - tfx.arg(["--share-with"].concat(accounts).map((value) => { return value.trim(); })); - - try{ - const code = await tfx.execAsync(); - tl.setResult(tl.TaskResult.Succeeded, `tfx exited with return code: ${code}`); - } catch (err) - { - tl.setResult(tl.TaskResult.Failed, `tfx failed with error: ${err}`); - } -}); diff --git a/BuildTasks/ShareExtension/v4/icon.png b/BuildTasks/ShareExtension/v4/icon.png deleted file mode 100644 index 99c23b672a7e3ed0a87b5e6489db8cefdd1c400b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3949 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.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/ShareExtension/v4/package.json b/BuildTasks/ShareExtension/v4/package.json deleted file mode 100644 index ab8706f8..00000000 --- a/BuildTasks/ShareExtension/v4/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "vsts-developer-tools.shareextensionv4", - "version": "4.3.0", - "description": "Share Extension Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/ShareExtension/v4/task.json b/BuildTasks/ShareExtension/v4/task.json deleted file mode 100644 index 692d32ba..00000000 --- a/BuildTasks/ShareExtension/v4/task.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "id": "22683a08-0dbe-4fe8-8c53-4606fcb32752", - "name": "ShareAzureDevOpsExtension", - "friendlyName": "Share Extension", - "description": "Share a published extension with a Azure Devops organisation", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Deploy", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "extension", - "displayName": "Extension", - "isExpanded": true - }, - { - "name": "share", - "displayName": "Share", - "isExpanded": true - }, - { - "name": "advanced", - "displayName": "Advanced", - "isExpanded": false - } - ], - "instanceNameFormat": "Share Extension", - "inputs": [ - { - "name": "connectTo", - "type": "radio", - "label": "Connect to", - "required": true, - "defaultValue": "VsTeam", - "helpMarkDown": "Connect to Visual Studio Marketplace.", - "options": { - "VsTeam": "Visual Studio Marketplace" - } - }, - { - "name": "connectedServiceName", - "type": "connectedService:VstsMarketplacePublishing", - "label": "Visual Studio Marketplace connection", - "required": true, - "helpMarkDown": "Service endpoint connection to install the extension.", - "visibleRule": "connectTo=VsTeam" - }, - { - "name": "method", - "type": "radio", - "label": "Share using", - "required": true, - "defaultValue": "id", - "helpMarkDown": "Share using either an existing VSIX or using the Publisher and Extension ID.", - "options": { - "id": "Publisher + Extension ID", - "vsix": "VSIX file" - }, - "groupName": "extension" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": true, - "helpMarkDown": "Publisher ID of the extension to be shared.", - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Extension ID of the extension to be shared", - "required": true, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension id", - "required": false, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "vsixFile", - "type": "filePath", - "label": "VSIX file", - "defaultValue": "", - "required": true, - "helpMarkDown": "VSIX file of the extension to be shared. Supports wildcards.", - "visibleRule": "method = vsix", - "groupName": "extension" - }, - { - "name": "accounts", - "type": "string", - "label": "Share with", - "defaultValue": "", - "helpMarkDown": "Comma separated list of organisations where to install the extension (e.g. org_x,org_y,org_z)", - "required": true, - "groupName": "share" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Additional arguments passed to the package and publishing tool.", - "required": false, - "groupName": "advanced" - }, - { - "name": "cwd", - "type": "filePath", - "label": "Working Directory", - "defaultValue": "", - "required": false, - "helpMarkDown": "Working directory to run the package and publishing process from. Defaults to the folder where the manifest is located.", - "groupName": "advanced" - } - ], - "execution": { - "Node16": { - "target": "ShareExtension/v4/ShareExtension.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/ShareExtension/v4/tsconfig.json b/BuildTasks/ShareExtension/v4/tsconfig.json deleted file mode 100644 index 1597fc59..00000000 --- a/BuildTasks/ShareExtension/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "ShareExtension.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/TfxInstaller/v4/TfxInstaller.ts b/BuildTasks/TfxInstaller/v4/TfxInstaller.ts deleted file mode 100644 index 1cfb44e7..00000000 --- a/BuildTasks/TfxInstaller/v4/TfxInstaller.ts +++ /dev/null @@ -1,112 +0,0 @@ -import * as tr from 'azure-pipelines-task-lib/toolrunner'; - -import * as taskLib from 'azure-pipelines-task-lib/task'; -import * as toolLib from 'azure-pipelines-tool-lib/tool'; - -import * as path from 'path'; -import * as os from 'os'; -import * as fs from 'fs'; - -const debug = taskLib.getVariable("system.debug") || false; - -async function run() -{ - try { - const version = taskLib.getInput("version", true); - const checkLatest = taskLib.getBoolInput("checkLatest", false) || false; - - await getTfx(version, checkLatest); - await taskLib.tool("tfx").arg(["version", "--no-color"]).execAsync(); - } - catch (error: any) { - taskLib.setResult(taskLib.TaskResult.Failed, error.message); - } -} - -async function getTfx(versionSpec: string, checkLatest: boolean) { - if (toolLib.isExplicitVersion(versionSpec)) { - checkLatest = false; // check latest doesn't make sense when explicit version - } - - let toolPath: string; - if (!checkLatest) { - toolPath = toolLib.findLocalTool('tfx', versionSpec); - } - - if (!toolPath) { - let version: string; - if (toolLib.isExplicitVersion(versionSpec)) { - version = versionSpec; - } - else { - version = queryLatestMatch(versionSpec); - if (!version) { - throw new Error(`Unable to find Tfx version '${versionSpec}'`); - } - - toolPath = toolLib.findLocalTool('tfx', version); - } - - if (!toolPath) { - toolPath = await acquireTfx(version); - } - } - - if (os.platform() !== "win32") - { - // Depending on target platform npm behaves slightly different. This seems to differ between distros and npm versions too. - const probePaths = [toolPath, path.join(toolPath, "/bin"), path.join(toolPath, "/node_modules/.bin/")]; - toolPath = probePaths.find((probePath) => { - return taskLib.exist(path.join(probePath, "/tfx")); - }); - } - - taskLib.setVariable("__tfxpath", toolPath, false); - toolLib.prependPath(toolPath); -} - -function queryLatestMatch(versionSpec: string): string { - const npmRunner = new tr.ToolRunner("npm"); - npmRunner.arg(["show", "tfx-cli", "versions", "--json"]); - const result = npmRunner.execSync({ failOnStdErr: false, silent: !debug, ignoreReturnCode: false} as tr.IExecOptions); - if (result.code === 0) - { - const versions: string[] = JSON.parse(result.stdout.trim()); - const version: string = toolLib.evaluateVersions(versions, versionSpec); - return version; - } - return ""; -} - -async function acquireTfx(version: string): Promise { - try{ - version = toolLib.cleanVersion(version); - - let extPath: string; - taskLib.assertAgent('2.115.0'); - extPath = taskLib.getVariable('Agent.TempDirectory'); - if (!extPath) { - throw new Error('Expected Agent.TempDirectory to be set'); - } - extPath = path.join(extPath, 'tfx'); // use as short a path as possible due to nested node_modules folders - - taskLib.mkdirP(path.join(extPath)); - const npmRunner = new tr.ToolRunner("npm"); - npmRunner.arg(["install", "tfx-cli@" + version, "-g", "--prefix", extPath, '--no-fund']); - - const result = npmRunner.execSync({ failOnStdErr: false, silent: !debug, ignoreReturnCode: false} as tr.IExecOptions); - if (result.code === 0) - { - if (os.platform() === "win32") - { - fs.unlinkSync(path.join(extPath, "/tfx")); - } - return await toolLib.cacheDir(extPath, 'tfx', version); - } - } - catch { - return Promise.reject(new Error("Failed to install tfx")); - } -} - -void run(); \ No newline at end of file diff --git a/BuildTasks/TfxInstaller/v4/icon.png b/BuildTasks/TfxInstaller/v4/icon.png deleted file mode 100644 index 1faf17da52617944dc658ff65c6facfa57d0e054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3849 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.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/azure-pipelines-tool-lib": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.10.tgz", - "integrity": "sha512-UiwgFUjbooyEpDQX/0eY6teTUjKXD5VDbe3USpLaFpjbzxI2/XglboA9fj86dQBFvMx6NVg0LKYtECflfYiJOQ==", - "license": "MIT", - "dependencies": { - "@types/semver": "^5.3.0", - "@types/uuid": "^3.4.5", - "azure-pipelines-task-lib": "^4.1.0", - "semver": "^5.7.0", - "semver-compare": "^1.0.0", - "typed-rest-client": "^1.8.6", - "uuid": "^3.3.2" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob": { - "version": "7.1.7", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-symbols": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.4.0", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mime-db": { - "version": "1.48.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.31", - "license": "MIT", - "dependencies": { - "mime-db": "1.48.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/object-inspect": { - "version": "1.10.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-compare": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/tunnel": { - "version": "0.0.6", - "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "1.8.9", - "license": "MIT", - "dependencies": { - "qs": "^6.9.1", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - } - }, - "node_modules/underscore": { - "version": "1.13.6", - "license": "MIT" - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/TfxInstaller/v4/package.json b/BuildTasks/TfxInstaller/v4/package.json deleted file mode 100644 index a6d8ac46..00000000 --- a/BuildTasks/TfxInstaller/v4/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "vsts-developer-tools.tfxinstallerv4", - "version": "4.3.0", - "description": "Node CLI for Azure DevOps Installer Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tool-lib": "^2.0.10", - "tmp": "^0.2.5" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/TfxInstaller/v4/task.json b/BuildTasks/TfxInstaller/v4/task.json deleted file mode 100644 index e26283cb..00000000 --- a/BuildTasks/TfxInstaller/v4/task.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "id": "f7c56a03-d9d3-4019-b144-6283b88a66a8", - "name": "TfxInstaller", - "friendlyName": "Use Node CLI for Azure DevOps (tfx-cli)", - "description": "Installs the Node CLI for Azure DevOps (tfx-cli) on your agent.", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Tool", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "preview": false, - "satisfies": [ "tfx-cli" ], - "minimumAgentVersion": "2.115.0", - "groups": [ - ], - "instanceNameFormat": "Use Node CLI for Azure DevOps (tfx-cli): $(version)", - "inputs": [ - { - "name": "version", - "type": "string", - "label": "Version", - "defaultValue": "v0.x", - "helpMarkDown": "Specify which `tfx-cli` version you want to use. Examples: `v0.9.x`, `>=v0.5.x`.", - "required": true - }, - { - "name": "checkLatest", - "type": "boolean", - "label": "Auto update", - "defaultValue": "true", - "required": false, - "helpMarkDown": "Automatically download the latest version." - } - ], - "execution": { - "Node16": { - "target": "TfxInstaller/v4/TfxInstaller.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/TfxInstaller/v4/tsconfig.json b/BuildTasks/TfxInstaller/v4/tsconfig.json deleted file mode 100644 index 7492265e..00000000 --- a/BuildTasks/TfxInstaller/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "TfxInstaller.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/UnpublishExtension/v4/UnpublishExtension.ts b/BuildTasks/UnpublishExtension/v4/UnpublishExtension.ts deleted file mode 100644 index 168304ee..00000000 --- a/BuildTasks/UnpublishExtension/v4/UnpublishExtension.ts +++ /dev/null @@ -1,23 +0,0 @@ -import * as tl from "azure-pipelines-task-lib/task"; -import * as common from "../../Common/v4/Common"; - -async function run() { - await common.runTfx(tfx => { - try { - tfx.arg(["extension", "unpublish", "--no-color"]); - - common.setTfxMarketplaceArguments(tfx); - common.validateAndSetTfxManifestArguments(tfx); - - const result = tfx.execSync({ silent: false, failOnStdErr: false }); - if (result.code != 0) { - tl.setResult(tl.TaskResult.Failed, "Failed"); - } - tl.setResult(tl.TaskResult.Succeeded, "Unpublished"); - } catch (err) { - tl.setResult(tl.TaskResult.Failed, `Failed: ${err}`); - } - }); -} - -void run(); \ No newline at end of file diff --git a/BuildTasks/UnpublishExtension/v4/icon.png b/BuildTasks/UnpublishExtension/v4/icon.png deleted file mode 100644 index 2f335ab953f69ab6fee6cb1b92853724279a1cdc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3559 zcmd5<4Nw&48QwGg0FD$BB$hUr^=KS4?(OgW><%Zw9eS7X0P&)x6DxbW-yIw8ZqMBX z4q8TwlBrsZKhs(z#*CC!OC(8cM5-+@q;)#9lS$Hu3^gfOzwdUI7O$F@mYs$m$UL{pSq87D{!N(yfA1|EYKE88i0e5O zLFPWDe+|gtmlq;PT94%2pl$H1<^(xp;zij9OwmvTq7fu7KN{hM%|JtaARvY9#^JM_ zMpP2*#`R_o;fXjvh2*MLz}nhkuTZ;LU`1p8ax^c>L4pv_cr+RchE*rxbO_3P3F;0uuCVassyRkykA{>raS67>=X_Kr3aFS(Nor9tG>4`{YW^ZiJD>rx1!HX~SwFO)z12l#k$~iO{DM1ByZt7pYW&G3TOygCGcj zu%<#RnZ&{@c|1w@eQ86XBwE#qs$fKkx!o77dTSy8F9WJvsR*E`3VO^L4@}j{z(i`M zVGiL*<4A?9$!di>MG}&)lc|Vs4h8U(btLi{KMtlyjG!^f;w5R0W;ud-j%yck4TfE>xxaW<9^cv7S>#!p%>mSG6Y z=NJ4Kuv!U`q5z;ta-6M1kzhUY!O5(8R3c>LNtUJwpBZC;$Y4CJ^N76uBLEB-}6hoe-H{ZbIVP|H>oqV6Jxg=8%jj53jW*~H|_xg-@Xb4{WU z*McpHyP$-|6wC2~UQ~9YpbG+s#>B96pM*{?^f+yG1%RXvP)Qu7%6_eyS3p4kCVx6Y z#HWg1<*ObXz2IkP9}rp0W;P2L<6}t7XBFW(*x-r+z)&oJ;(b8$EJvHiHU1@|PtXe$ zd^iALpT><}em*ucW3^BujR}5|zz82BVyvIGVl%}Et10;*<1SP`8^nbKY51r5S+UnuRvl54 ziJrU{#f`pDM7Vw|i1#=Ai>)vI?2Id8rLMKucFWzb$xXMc;Qq_OJtDbl{CoX9?qB{- z_X)iUk_EzfK~!7K*T9NOG|56fFwrh2a4}3VEIzxjWb&308`nwnah*Dr(>Mt}Vg5Nc zG03FT*|-%v^69t9vnG5oB^wmt=(MRUOZa|klywA)$WbzS)A2X@!b)-1g6Qae_l z5$D|*ZT0SX&!zV6%{_Dd(^b+f!{HyV&E1ub)uU%RY;#X9{vaczuqora*f+QDF5RA9 zS0H{i`udz=`S7nlZhiE#{B!57ox7IT*)^8;-pKwNC--@0Z z!3UB4OXnAHJIb>!jir|_SkZhcM;$tr{jn=W{%X$ior{)jsyUl-XEe+ez1`L2;EuF; zmv%W`e&v5lf(2QUx zbn>;=Hk`cJ)6-Le-1t#yYsU%SsouK=S(YE&DOOf4n4jJFV%dp2j(g_~@6tMC*KY;} z27JWAziM2tN>vYhCu``4ecQU$mUXSe!^3~uGjwy#lE+hKdY685_inA};ATtHyFtr` z8H*33{zN#@)&D9zGBVQL-F@qyH*dZ%CsJ2;Q9fG&Icm>4)x4{?n^hK_C#wSke4`#`1=){(R)n>KEtjbM2_J*=(<_xp?v7 zY=g!$_L%nQP0>?|I>^OJk#>%a5m^ulMvlvbXzcj$!tK>}QUi&3yLqBd)~=6.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-task-lib": { - "version": "4.17.3", - "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", - "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", - "license": "MIT", - "dependencies": { - "adm-zip": "^0.5.10", - "minimatch": "3.0.5", - "nodejs-file-downloader": "^4.11.1", - "q": "^1.5.1", - "semver": "^5.7.2", - "shelljs": "^0.8.5", - "uuid": "^3.0.1" - } - }, - "node_modules/balanced-match": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/glob": { - "version": "7.2.0", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "license": "ISC" - }, - "node_modules/has": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/interpret": { - "version": "1.4.0", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.8.1", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "license": "MIT", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.5", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nodejs-file-downloader": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", - "integrity": "sha512-LpfCTNhh805AlLnJnzt1PuEj+RmbrccbAQZ6hBRw2e6QPVR0Qntuo6qqyvPHG5s77/0w0IEKgRAD4nbSnr/X4w==", - "dependencies": { - "follow-redirects": "^1.15.1", - "https-proxy-agent": "^5.0.0", - "mime-types": "^2.1.27", - "sanitize-filename": "^1.6.3" - } - }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve": { - "version": "1.22.0", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.8.1", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sanitize-filename": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", - "dependencies": { - "truncate-utf8-bytes": "^1.0.0" - } - }, - "node_modules/semver": { - "version": "5.7.2", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/tmp": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", - "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", - "license": "MIT", - "engines": { - "node": ">=14.14" - } - }, - "node_modules/truncate-utf8-bytes": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", - "dependencies": { - "utf8-byte-length": "^1.0.1" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/utf8-byte-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" - }, - "node_modules/uuid": { - "version": "3.4.0", - "license": "MIT", - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/uuidv5": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - } - } -} diff --git a/BuildTasks/UnpublishExtension/v4/package.json b/BuildTasks/UnpublishExtension/v4/package.json deleted file mode 100644 index 43e328d4..00000000 --- a/BuildTasks/UnpublishExtension/v4/package.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "name": "vsts-developer-tools.unpublishextensionv4", - "version": "4.3.0", - "description": "Unpublish Extension Task", - "repository": { - "type": "git", - "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" - }, - "license": "MIT", - "dependencies": { - "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", - "uuidv5": "^1.0.0" - }, - "devDependencies": { - } -} diff --git a/BuildTasks/UnpublishExtension/v4/task.json b/BuildTasks/UnpublishExtension/v4/task.json deleted file mode 100644 index 2962dcb3..00000000 --- a/BuildTasks/UnpublishExtension/v4/task.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "id": "b2664b33-2f30-40a4-b75f-bb9456ad27d2", - "name": "UnpublishAzureDevOpsExtension", - "friendlyName": "Unpublish Extension", - "description": "Unpublish a published extension from the marketplace", - "author": "Microsoft Corporation", - "helpMarkDown": "", - "category": "Deploy", - "version": { - "Major": 4, - "Minor": 4, - "Patch": 0 - }, - "visibility": [ - "Build", - "Release" - ], - "demands": [ - "npm" - ], - "minimumAgentVersion": "2.206.1", - "groups": [ - { - "name": "extension", - "displayName": "Extension", - "isExpanded": true - }, - { - "name": "advanced", - "displayName": "Advanced", - "isExpanded": false - } - ], - "instanceNameFormat": "Unpublish Extension", - "inputs": [ - { - "name": "connectTo", - "type": "radio", - "label": "Connect to", - "required": true, - "defaultValue": "VsTeam", - "helpMarkDown": "Connect to Visual Studio Marketplace.", - "options": { - "VsTeam": "Visual Studio Marketplace", - "TFS": "Azure DevOps Server" - } - }, - { - "name": "connectedServiceName", - "type": "connectedService:VstsMarketplacePublishing", - "label": "Visual Studio Marketplace", - "required": true, - "helpMarkDown": "Service endpoint connection to unpublish the extension.", - "visibleRule": "connectTo=VsTeam" - }, - { - "name": "connectedServiceNameTFS", - "type": "connectedService:TFSMarketplacePublishing", - "label": "TFS Local Gallery connection", - "required": true, - "helpMarkDown": "Service endpoint connection to unpublish the extension.", - "visibleRule": "connectTo=TFS" - }, - { - "name": "method", - "type": "radio", - "label": "Unpublish using", - "required": true, - "defaultValue": "id", - "helpMarkDown": "Unpublish using either an existing VSIX or using the Publisher and Extension ID.", - "options": { - "id": "Publisher + Extension ID", - "vsix": "VSIX file" - }, - "groupName": "extension" - }, - { - "name": "publisherId", - "type": "string", - "label": "Publisher ID", - "defaultValue": "", - "required": true, - "helpMarkDown": "Publisher ID of the extension to be unpublished.", - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionId", - "type": "string", - "label": "Extension ID", - "defaultValue": "", - "helpMarkDown": "Extension ID of the extension to be unpublished", - "required": true, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "extensionTag", - "type": "string", - "label": "Extension Tag", - "defaultValue": "", - "helpMarkDown": "Extension Tag to append to the extension ID", - "required": false, - "groupName": "extension", - "visibleRule": "method = id" - }, - { - "name": "vsixFile", - "type": "filePath", - "label": "VSIX file", - "defaultValue": "", - "required": true, - "helpMarkDown": "VSIX file of the extension to be unpublished. Supports wildcards.", - "visibleRule": "method = vsix", - "groupName": "extension" - }, - { - "name": "arguments", - "type": "string", - "label": "Arguments", - "defaultValue": "", - "helpMarkDown": "Additional arguments passed to the package and publishing tool.", - "required": false, - "groupName": "advanced" - }, - { - "name": "cwd", - "type": "filePath", - "label": "Working Directory", - "defaultValue": "", - "required": false, - "helpMarkDown": "Working directory to run the package and publishing process from. Defaults to the folder where the manifest is located.", - "groupName": "advanced" - } - ], - "execution": { - "Node16": { - "target": "UnpublishExtension/v4/UnpublishExtension.js", - "argumentFormat": "" - } - } -} diff --git a/BuildTasks/UnpublishExtension/v4/tsconfig.json b/BuildTasks/UnpublishExtension/v4/tsconfig.json deleted file mode 100644 index 10c23f5a..00000000 --- a/BuildTasks/UnpublishExtension/v4/tsconfig.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "extends": "../../tsconfig.v4.json", - "compilerOptions": { - "outDir": "./", - "sourceRoot": "./" - }, - "files": [ - "UnpublishExtension.ts" - ] - } \ No newline at end of file diff --git a/BuildTasks/tsconfig.v4.json b/BuildTasks/tsconfig.v4.json deleted file mode 100644 index d5c19369..00000000 --- a/BuildTasks/tsconfig.v4.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compileOnSave": true, - "compilerOptions": { - "module": "commonjs", - "target": "es6", - "sourceMap": true, - "strict": true, - "strictNullChecks": false, - "removeComments": true, - "forceConsistentCasingInFileNames": true, - "esModuleInterop": true - }, - "include": [ - "./Common/v4/Common.ts", - "./Common/v4/uuidv5.d.ts" - ], - "exclude": [ - "*/v4/**/*.js" - ] -} \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 3534a4fd..5420637c 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -37,7 +37,6 @@ stages: $vswhereLatest = "https://github.com/Microsoft/vswhere/releases/latest/download/vswhere.exe" $targets = @( - ".\BuildTasks\PublishVSExtension\v4\tools\", ".\BuildTasks\PublishVSExtension\v5\tools\" ".\BuildTasks\PublishVSExtension\v5\PublishVSExtension\v5\tools\" ) @@ -104,7 +103,7 @@ stages: del -include @( "*.pem" - ) -recurse BuildTasks\*\v*\node_modules\azure-pipelines-tasks-azure-arm-rest\openssl\PEM\ -force + ) -recurse BuildTasks\*\v*\node_modules\azure-pipelines-tasks-azure-arm-rest\openssl*\PEM\ -force displayName: 'Delete unneeded files' - pwsh: | ./fix-manifest-file.ps1 diff --git a/package.json b/package.json index e8d96920..63128f65 100644 --- a/package.json +++ b/package.json @@ -16,12 +16,10 @@ "initdev:npm": "npm run initdev:npm:base & npm run initdev:npm:tasks", "initdev:npm:base": "npm install --no-progress --force --no-update-notifier --legacy-peer-deps --no-fund", "initdev:npm:tasks": "glob-exec --parallel --foreach \"BuildTasks/*/*/tsconfig.json\" -- \"cd {{file.dir}} && npm install --force --no-update-notifier --no-progress --legacy-peer-deps --no-fund\"", - "compile:tasks": "npm run compile:tasks:v4 && npm run compile:tasks:v5", - "compile:tasks:v4": "glob-exec \"BuildTasks/*/v4/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", + "compile:tasks": "npm run compile:tasks:v5", "compile:tasks:v5": "glob-exec \"BuildTasks/*/v5/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", "postcompile:tasks": "npm run lint:tasks", - "lint:tasks": "npm run lint:tasks:v4 && npm run lint:tasks:v5", - "lint:tasks:v4": "glob-exec --parallel --foreach \"BuildTasks/*/v4/tsconfig.json\" -- \"eslint {{file.dir}}\\*.ts --parser-options \"{'project':['{{file}}']}\"", + "lint:tasks": "npm run lint:tasks:v5", "lint:tasks:v5": "glob-exec --parallel --foreach \"BuildTasks/*/v5/tsconfig.json\" -- \"eslint {{file.dir}}\\*.ts --parser-options \"{'project':['{{file}}']}\"", "package:tasks": "tfx extension create --root . --output-path dist --manifest-globs vss-extension.json", "build": "npm run build:tasks", diff --git a/test-extensionversion.cmd b/test-extensionversion.cmd index 85898c75..ac826bf4 100644 --- a/test-extensionversion.cmd +++ b/test-extensionversion.cmd @@ -24,18 +24,11 @@ set NO_UPDATE_NOTIFIER=true REM cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v4\TfxInstaller\v4 -node TfxInstaller.js -popd pushd BuildTasks\TfxInstaller\v5\TfxInstaller\v5 node TfxInstaller.js popd -pushd BuildTasks\ExtensionVersion\v4\ExtensionVersion\v4 -node ExtensionVersion.js -popd - pushd BuildTasks\ExtensionVersion\v5\ExtensionVersion\v5 node ExtensionVersion.js popd \ No newline at end of file diff --git a/test-isvalid.cmd b/test-isvalid.cmd index c3fe7aaa..e7de52ea 100644 --- a/test-isvalid.cmd +++ b/test-isvalid.cmd @@ -26,13 +26,6 @@ pushd BuildTasks\TfxInstaller\v5\TfxInstaller\v5 node TfxInstaller.js popd -echo. -echo ======================================== -echo Testing IsValidExtension v4 -echo ======================================== -pushd BuildTasks\IsValidExtensionAgent\v4\IsValidExtensionAgent\v4 -node IsValidExtension.js -popd echo. echo ======================================== @@ -42,14 +35,6 @@ pushd BuildTasks\IsValidExtensionAgent\v5\IsValidExtensionAgent\v5 node IsValidExtension.js popd -echo. -echo ======================================== -echo Testing IsValidExtension v4 with TFX_TRACE=1 -echo ======================================== -set TFX_TRACE=1 -pushd BuildTasks\IsValidExtensionAgent\v4\IsValidExtensionAgent\v4 -node IsValidExtension.js -popd echo. echo ======================================== diff --git a/test-packaging.cmd b/test-packaging.cmd index 5a35bb32..9214b959 100644 --- a/test-packaging.cmd +++ b/test-packaging.cmd @@ -16,7 +16,7 @@ set NO_UPDATE_NOTIFIER=true cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v4\TfxInstaller\v4 +pushd BuildTasks\TfxInstaller\v5\TfxInstaller\v5 node TfxInstaller.js popd @@ -30,8 +30,6 @@ set INPUT_UPDATETASKSID=true set INPUT_UPDATETASKSVERSION=true set INPUT_UPDATETASKSVERSIONTYPE=minor set INPUT_PATTERNMANIFEST=vss-extension*.json -pushd BuildTasks\PackageExtension\v4\PackageExtension\v4 -rem c:\TfsData\jessehouwing\externals.2.111.1\node\bin\node.exe PackageExtension.js -rem c:\TfsData\jessehouwing\externals.2.136.1\node\bin\node.exe PackageExtension.js +pushd BuildTasks\PackageExtension\v5\PackageExtension\v5 node PackageExtension.js popd \ No newline at end of file diff --git a/test-publishing.cmd b/test-publishing.cmd index 10e64dd9..2a497444 100644 --- a/test-publishing.cmd +++ b/test-publishing.cmd @@ -30,10 +30,6 @@ cmd /c "npm run build:tasks" set __TFXPATH=C:\Users\JESSEH~1\AppData\Local\Temp\agent\tools\tfx\0.18.0\x64\ -pushd BuildTasks\PublishExtension\v4\PublishExtension\v5 -node PublishExtension.js -popd - -pushd BuildTasks\PublishExtension\v4\PublishExtension\v4 +pushd BuildTasks\PublishExtension\v5\PublishExtension\v5 node PublishExtension.js popd \ No newline at end of file From 08f67d5e37e0263ac817312fcd15e4adf79d838a Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 17:27:09 +0100 Subject: [PATCH 02/14] Adding copilot custom instructions --- .github/copilot-instructions.md | 60 +++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 .github/copilot-instructions.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md new file mode 100644 index 00000000..2186bdee --- /dev/null +++ b/.github/copilot-instructions.md @@ -0,0 +1,60 @@ +# AI Coding Agent Instructions + +Purpose: Help agents quickly contribute to Azure DevOps Extension Tasks (publishing & packaging tasks for Azure/VS Marketplace). + +## Big Picture +- This repo builds an Azure DevOps extension that contributes multiple pipeline tasks (see `vss-extension.json` > `contributions`). Each task lives under `BuildTasks//v5/` with a `task.json` (declarative metadata) and a TypeScript implementation file compiled to JS. +- Tasks wrap the `tfx-cli` to package/publish/share/install/query Azure DevOps & Visual Studio extensions. Common cross-cutting logic (auth, arg building, JSON stream parsing, version utilities) is centralized in `BuildTasks/Common/v5/Common.ts`. +- Build flow: install dependencies locally per task folder, compile TS with project references, lint, then prune/dedupe before packaging the VSIX manifest. +- CI pipeline (`azure-pipelines.yml`) produces three VSIX variants (build/private/public) and optionally publishes them. + +## Key Workflows +- Dev setup: run `npm run initdev` (installs root deps + each task's deps). Then `npm run build` compiles all tasks. Use `npm run package` for per-task dependency pruning before creating .vsix. +- Packaging extension (local): `tfx extension create --root . --output-path dist --manifest-globs vss-extension.json` (scripted by `package:tasks`). +- Manifest adjustments: `fix-manifest-file.ps1` cleans & re-adds certain binary/no-extension files before packaging. +- Test scripts (`test-*.cmd`) emulate agent execution by setting `INPUT_*` env vars matching `task.json` inputs and running the task's generated JS entrypoint. + +## Task Implementation Pattern +- Entry script calls `common.runTfx(async tfx => { ... })` providing an async block that builds CLI args then executes `tfx.execAsync`. +- Inputs are fetched using `azure-pipelines-task-lib` (`tl.getInput`, `tl.getBoolInput`, `tl.getPathInput`, `tl.getDelimitedInput`). Task results set via `tl.setResult` and output variables with `tl.setVariable`. +- File globbing: if a task allows wildcard inputs (e.g. `vsixFile`), use `tl.findMatch(cwd, pattern)` and enforce exactly one match. +- Conditional arg inclusion uses `tfx.argIf(condition, ["--flag", value])` (defined in common helpers). +- JSON output capture: tasks redirect `tfx` output to stderr or stdout and then parse via `new common.TfxJsonOutputStream(...)` to inspect `json.published` or similar properties. + +## Version & Metadata Handling +- Extension version sourced via `common.getExtensionVersion()` (uses manifest or task inputs). Task can update embedded task versions/IDs when packaging/publishing (`updateTasksVersion`, `updateTasksId`). Logic lives in Common utilities. +- `task.json` declares execution targets for multiple Node versions (e.g. `Node20_1`, `Node16`), so generated JS must remain backward-compatible with both. + +## Conventions +- Each task folder structure: `BuildTasks//v5/{.ts, task.json, package.json, tsconfig.json}`; compiled JS ends parallel to TS. Avoid cross-imports between tasks except via `../Common/v5/Common.js`. +- Use explicit relative imports ending in `.js` for runtime JS resolution (e.g. `import tl from "azure-pipelines-task-lib/task.js"`). +- Keep side effects inside the `runTfx` callback; return a resolved `true` to signal completion. +- Prefer adding new shared logic to `Common.ts` instead of duplicating in tasks. + +## Adding or Modifying a Task +1. Copy an existing task folder structure (e.g. `PublishExtension/v5`) and adjust `task.json` metadata (id, name, inputs, demands, execution target). +2. Implement logic following the existing pattern: gather inputs early; validate file existence; build `tfx` args; execute once; parse JSON; set result & output variable. +3. Add the task path to `vss-extension.json` under `files` and a contribution entry under `contributions` if it's a new task. +4. Run `npm run build` and ensure lint passes (`npm run lint:tasks`). +5. If the task needs to modify the VSIX, reuse `VsixEditor` patterns from `PublishExtension.ts`. + +## Performance & Size Practices +- After build, pipeline deletes unnecessary files (`*.map`, tests, markdown, licenses, unused platform bins) from each task's `node_modules` to shrink VSIX size. +- Local dev shouldn’t manually prune during iteration; rely on CI or `npm run package` before shipping. + +## Common Pitfalls +- Forgetting to install per-task dependencies after adding a new task: rerun `npm run initdev`. +- Wildcard file patterns resolving to none or multiple files must fail early with `tl.setResult(Failed, ...)`. +- Ensure new task inputs align with environment variable naming used in test scripts (`INPUT_` pattern in legacy tests). +- Maintain Node version compatibility (avoid APIs newer than Node16 unless guarded). + +## External Integrations +- `tfx-cli` drives extension publishing, sharing, installing; tasks craft CLI args rather than reimplement REST calls. +- Uses `azure-pipelines-task-lib` for agent interaction. Do not replace with ad-hoc env parsing. + +## When Unsure +- Inspect a similar existing task’s TS + `task.json` pair. +- Put reusable helpers in `Common.ts` and import them. +- Ask whether a change affects packaging size; if yes, mirror cleanup logic or update `azure-pipelines.yml` pruning step. + +Provide feedback on unclear sections or request deeper coverage (e.g. Common utilities breakdown) before expanding this doc. From 926fe1842bea428c02cf261252f14496df7bbb23 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 17:55:30 +0100 Subject: [PATCH 03/14] Remove fs-extra --- BuildTasks/Common/v5/Common.ts | 4 ++-- BuildTasks/Common/v5/package.json | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/BuildTasks/Common/v5/Common.ts b/BuildTasks/Common/v5/Common.ts index ac9da320..49b3da86 100644 --- a/BuildTasks/Common/v5/Common.ts +++ b/BuildTasks/Common/v5/Common.ts @@ -4,7 +4,6 @@ import fs from "node:fs/promises"; import tl from "azure-pipelines-task-lib"; import { ToolRunner } from "azure-pipelines-task-lib/toolrunner.js"; import { AzureRMEndpoint } from "azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint.js"; -import fse from "fs-extra"; import uuidv5 from "uuidv5"; import tmp from "tmp"; @@ -545,7 +544,8 @@ function getTaskManifestPaths(manifestPath: string, manifest: any): string[] { } export async function writeManifest(manifest: any, path: string): Promise { - await fse.writeJSON(path, manifest); + const manifestJson = `${JSON.stringify(manifest, null, 2)}\n`; + await fs.writeFile(path, manifestJson, { encoding: "utf8" }); } export async function checkUpdateTasksManifests(manifestFile?: string): Promise { diff --git a/BuildTasks/Common/v5/package.json b/BuildTasks/Common/v5/package.json index 0a22222d..c290707a 100644 --- a/BuildTasks/Common/v5/package.json +++ b/BuildTasks/Common/v5/package.json @@ -11,7 +11,6 @@ "dependencies": { "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", - "fs-extra": "^11.3.2", "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, From 14789ef60fcd2135ea6fa93b3c7be4eab0419a7a Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 17:58:08 +0100 Subject: [PATCH 04/14] Updating package-lock to reflect removal of `fs-extra` --- BuildTasks/Common/v5/package-lock.json | 39 -------------------------- 1 file changed, 39 deletions(-) diff --git a/BuildTasks/Common/v5/package-lock.json b/BuildTasks/Common/v5/package-lock.json index 122ac661..3ba33b3b 100644 --- a/BuildTasks/Common/v5/package-lock.json +++ b/BuildTasks/Common/v5/package-lock.json @@ -11,7 +11,6 @@ "dependencies": { "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", - "fs-extra": "^11.3.2", "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, @@ -600,20 +599,6 @@ } } }, - "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -707,11 +692,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, "node_modules/has-symbols": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", @@ -832,17 +812,6 @@ "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", "license": "MIT" }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -1421,14 +1390,6 @@ "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", "license": "MIT" }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "engines": { - "node": ">= 10.0.0" - } - }, "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", From 6384cab7034bdb8d1097a835b1c33a3b594d4059 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 18:09:31 +0100 Subject: [PATCH 05/14] Remove dependency `temp` in favor of `tmp` --- .../PublishExtension/v5/package-lock.json | 55 ++++-------------- BuildTasks/PublishExtension/v5/package.json | 2 +- BuildTasks/PublishExtension/v5/vsixeditor.ts | 57 ++++++++++++------- 3 files changed, 49 insertions(+), 65 deletions(-) diff --git a/BuildTasks/PublishExtension/v5/package-lock.json b/BuildTasks/PublishExtension/v5/package-lock.json index 22b0512f..d236cb79 100644 --- a/BuildTasks/PublishExtension/v5/package-lock.json +++ b/BuildTasks/PublishExtension/v5/package-lock.json @@ -13,12 +13,13 @@ "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "fs-extra": "^11.3.2", - "temp": "^0.9.4", "tmp": "^0.2.5", "uuidv5": "^1.0.0", "x2js": "^3.4.4" }, - "devDependencies": {} + "devDependencies": { + "@types/tmp": "^0.2.6" + } }, "node_modules/@azure/abort-controller": { "version": "1.1.0", @@ -284,6 +285,13 @@ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "dev": true, + "license": "MIT" + }, "node_modules/@typespec/ts-http-runtime": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", @@ -992,25 +1000,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -1234,18 +1223,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1395,18 +1372,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", - "dependencies": { - "mkdirp": "^0.5.1", - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/tmp": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", diff --git a/BuildTasks/PublishExtension/v5/package.json b/BuildTasks/PublishExtension/v5/package.json index 6f38a1f2..c9074dd5 100644 --- a/BuildTasks/PublishExtension/v5/package.json +++ b/BuildTasks/PublishExtension/v5/package.json @@ -13,11 +13,11 @@ "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "fs-extra": "^11.3.2", - "temp": "^0.9.4", "tmp": "^0.2.5", "uuidv5": "^1.0.0", "x2js": "^3.4.4" }, "devDependencies": { + "@types/tmp": "^0.2.6" } } diff --git a/BuildTasks/PublishExtension/v5/vsixeditor.ts b/BuildTasks/PublishExtension/v5/vsixeditor.ts index 66471a9b..5a302d1f 100644 --- a/BuildTasks/PublishExtension/v5/vsixeditor.ts +++ b/BuildTasks/PublishExtension/v5/vsixeditor.ts @@ -1,6 +1,7 @@ -import temp from "temp"; import fs from "node:fs/promises"; import path from "node:path"; +import os from "node:os"; +import tmp from "tmp"; import tl from "azure-pipelines-task-lib"; import tr from "azure-pipelines-task-lib/toolrunner.js"; import * as common from "../../Common/v5/Common.js"; @@ -209,27 +210,45 @@ export default class VSIXEditor { if (!this.hasEdits()) { return this.inputFile; } - temp.track(); - - const dirPath = await temp.mkdir("vsixeditor"); - tl.debug("Extracting files to " + dirPath); - - await this.extractArchive(this.inputFile, dirPath); - if (this.versionNumber && this.updateTasksVersion || this.updateTasksId) { - tl.debug("Look for build tasks manifest"); - const extensionManifest = path.join(dirPath, "extension.vsomanifest"); - await common.checkUpdateTasksManifests(extensionManifest); - } + const tempRoot = tl.getVariable("Agent.TempDirectory") || os.tmpdir(); + let dirPath: string | undefined; + let cleanupTempDir: (() => void) | undefined; + + try { + const tempDirResult = await new Promise<{ path: string; cleanup: () => void }>((resolve, reject) => { + tmp.dir({ prefix: "vsixeditor-", tmpdir: tempRoot, unsafeCleanup: true }, (error, directory, cleanupCallback) => { + if (error) { + reject(error); + return; + } + + resolve({ path: directory, cleanup: cleanupCallback }); + }); + }); + + dirPath = tempDirResult.path; + cleanupTempDir = tempDirResult.cleanup; + tl.debug("Extracting files to " + dirPath); + + await this.extractArchive(this.inputFile, dirPath); + if (this.versionNumber && this.updateTasksVersion || this.updateTasksId) { + tl.debug("Look for build tasks manifest"); + const extensionManifest = path.join(dirPath, "extension.vsomanifest"); + await common.checkUpdateTasksManifests(extensionManifest); + } - tl.debug("Editing VSIX manifest"); - const manifestData = await this.editVsixManifest(dirPath); - manifestData.outputFileName = await manifestData.createOutputFilePath(this.outputPath); + tl.debug("Editing VSIX manifest"); + const manifestData = await this.editVsixManifest(dirPath); + manifestData.outputFileName = await manifestData.createOutputFilePath(this.outputPath); - tl.debug(`Creating final archive file at ${this.outputPath}`); - await this.createArchive(this.inputFile, manifestData.dirPath, manifestData.outputFileName); - tl.debug("Final archive file created"); + tl.debug(`Creating final archive file at ${this.outputPath}`); + await this.createArchive(this.inputFile, manifestData.dirPath, manifestData.outputFileName); + tl.debug("Final archive file created"); - return manifestData.outputFileName; + return manifestData.outputFileName; + } finally { + cleanupTempDir?.(); + } } private async editVsixManifest(dirPath: string): Promise { From 75e68d15bd437936c987e1a7b67aecf4fa664d5a Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 19:42:30 +0100 Subject: [PATCH 06/14] Add Common Authentication v5 package and TypeScript configuration - Created package.json for vsts-developer-tools.common-authv5 with dependencies on azure-pipelines-task-lib and azure-pipelines-tasks-azure-arm-rest. - Added tsconfig.json to configure TypeScript compilation for CommonAuth.ts. --- BuildTasks/Common-Auth/v5/CommonAuth.ts | 70 + BuildTasks/Common-Auth/v5/package-lock.json | 1471 +++++++++++++++++ BuildTasks/Common-Auth/v5/package.json | 15 + BuildTasks/Common-Auth/v5/tsconfig.json | 10 + BuildTasks/Common/v5/Common.ts | 64 - BuildTasks/Common/v5/package-lock.json | 1047 ------------ BuildTasks/Common/v5/package.json | 4 - .../ExtensionVersion/v5/ExtensionVersion.ts | 3 +- .../InstallExtension/v5/InstallExtension.ts | 3 +- .../v5/IsValidExtension.ts | 3 +- .../PackageExtension/v5/package-lock.json | 1047 ------------ BuildTasks/PackageExtension/v5/package.json | 1 - .../PublishExtension/v5/PublishExtension.ts | 3 +- BuildTasks/PublishExtension/v5/package.json | 3 +- .../ShareExtension/v5/ShareExtension.ts | 3 +- BuildTasks/TfxInstaller/v5/package-lock.json | 714 -------- BuildTasks/TfxInstaller/v5/package.json | 1 - .../v5/UnpublishExtension.ts | 3 +- BuildTasks/tsconfig.v5.json | 11 +- 19 files changed, 1588 insertions(+), 2888 deletions(-) create mode 100644 BuildTasks/Common-Auth/v5/CommonAuth.ts create mode 100644 BuildTasks/Common-Auth/v5/package-lock.json create mode 100644 BuildTasks/Common-Auth/v5/package.json create mode 100644 BuildTasks/Common-Auth/v5/tsconfig.json diff --git a/BuildTasks/Common-Auth/v5/CommonAuth.ts b/BuildTasks/Common-Auth/v5/CommonAuth.ts new file mode 100644 index 00000000..4b8b0b68 --- /dev/null +++ b/BuildTasks/Common-Auth/v5/CommonAuth.ts @@ -0,0 +1,70 @@ +import tl from "azure-pipelines-task-lib"; +import { ToolRunner } from "azure-pipelines-task-lib/toolrunner.js"; +import { AzureRMEndpoint } from "azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint.js"; + +export function getMarketplaceEndpointDetails(inputFieldName: string): { + url: string; + username: string; + password: string; + apitoken: string; +} { + const marketplaceEndpoint = tl.getInput(inputFieldName, true); + + const hostUrl = tl.getEndpointUrl(marketplaceEndpoint, false); + const auth = tl.getEndpointAuthorization(marketplaceEndpoint, false); + const password = auth.parameters["password"]; + const username = auth.parameters["username"]; + const apitoken = auth.parameters["apitoken"]; + + return { + url: hostUrl, + username: username, + password: password, + apitoken: apitoken + }; +} + +export async function setTfxMarketplaceArguments(tfx: ToolRunner, setServiceUrl = true): Promise { + const connectTo = tl.getInput("connectTo", false) || "VsTeam"; + + if (connectTo === "VsTeam") { + const galleryEndpoint = getMarketplaceEndpointDetails("connectedServiceName"); + tl.setSecret(galleryEndpoint.password); + tfx.argIf(setServiceUrl, ["--service-url", galleryEndpoint.url]); + tfx.arg(["--auth-type", "pat"]); + tfx.arg(["--token", galleryEndpoint.password]); + } + else if (connectTo === "AzureRM") { + const serviceName = tl.getInput("connectedServiceNameAzureRM", true); + const endpoint = await new AzureRMEndpoint(serviceName).getEndpoint(); + + // Ensure the access token includes Marketplace scopes. + endpoint.applicationTokenCredentials.activeDirectoryResourceId = "499b84ac-1321-427f-aa17-267ca6975798"; + const token = await endpoint.applicationTokenCredentials.getToken(); + tfx.argIf(setServiceUrl, ["--service-url", "https://marketplace.visualstudio.com"]); + tfx.arg(["--auth-type", "pat"]); + tfx.arg(["--token", token]); + tl.setSecret(token); + } + else { + const galleryEndpoint = getMarketplaceEndpointDetails("connectedServiceNameTFS"); + tfx.argIf(setServiceUrl, ["--service-url", galleryEndpoint.url]); + + if (galleryEndpoint.username) { + tfx.arg(["--auth-type", "basic"]); + tfx.arg(["--username", galleryEndpoint.username]); + tfx.arg(["--password", galleryEndpoint.password]); + tl.setSecret(galleryEndpoint.password); + } + else { + tfx.arg(["--auth-type", "pat"]); + tfx.arg(["--token", galleryEndpoint.apitoken]); + tl.setSecret(galleryEndpoint.apitoken); + } + } +} + +export default { + getMarketplaceEndpointDetails, + setTfxMarketplaceArguments +}; \ No newline at end of file diff --git a/BuildTasks/Common-Auth/v5/package-lock.json b/BuildTasks/Common-Auth/v5/package-lock.json new file mode 100644 index 00000000..4c2f052c --- /dev/null +++ b/BuildTasks/Common-Auth/v5/package-lock.json @@ -0,0 +1,1471 @@ +{ + "name": "vsts-developer-tools.common-authv5", + "version": "5.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "vsts-developer-tools.common-authv5", + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "azure-pipelines-task-lib": "^4.17.3", + "azure-pipelines-tasks-azure-arm-rest": "^3.263.1" + } + }, + "node_modules/@azure/abort-controller": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", + "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", + "license": "MIT", + "dependencies": { + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@azure/core-auth": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", + "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-util": "^1.13.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-client": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", + "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-rest-pipeline": "^1.22.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", + "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@azure/core-auth": "^1.10.0", + "@azure/core-tracing": "^1.3.0", + "@azure/core-util": "^1.13.0", + "@azure/logger": "^1.3.0", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/core-tracing": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", + "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-util": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", + "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^2.1.2", + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", + "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@azure/identity": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.2.tgz", + "integrity": "sha512-0q5DL4uyR0EZ4RXQKD8MadGH6zTIcloUoS/RVbCpNpej4pwte0xpqYxk8K97Py2RiuUvI7F4GXpoT4046VfufA==", + "license": "MIT", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.5.0", + "@azure/core-client": "^1.4.0", + "@azure/core-rest-pipeline": "^1.1.0", + "@azure/core-tracing": "^1.0.0", + "@azure/core-util": "^1.6.1", + "@azure/logger": "^1.0.0", + "@azure/msal-browser": "^3.5.0", + "@azure/msal-node": "^2.5.1", + "events": "^3.0.0", + "jws": "^4.0.0", + "open": "^8.0.0", + "stoppable": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@azure/logger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", + "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", + "license": "MIT", + "dependencies": { + "@typespec/ts-http-runtime": "^0.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@azure/msal-browser": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.30.0.tgz", + "integrity": "sha512-I0XlIGVdM4E9kYP5eTjgW8fgATdzwxJvQ6bm2PNiHaZhEuUz47NYw1xHthC9R+lXz4i9zbShS0VdLyxd7n0GGA==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.16.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-common": { + "version": "14.16.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", + "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@azure/msal-node": { + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.3.tgz", + "integrity": "sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.16.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@azure/msal-node/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@types/jsonwebtoken": { + "version": "8.5.9", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", + "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mocha": { + "version": "5.2.7", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", + "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "10.17.60", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", + "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", + "license": "MIT" + }, + "node_modules/@types/q": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", + "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==", + "license": "MIT" + }, + "node_modules/@typespec/ts-http-runtime": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.2.tgz", + "integrity": "sha512-IlqQ/Gv22xUC1r/WQm4StLkYQmaaTsXAhUVsNE0+xiyf0yRFiH5++q78U3bw6bLKDCTmh0uqKB9eG9+Bt75Dkg==", + "license": "MIT", + "dependencies": { + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "license": "MIT", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/async-mutex": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", + "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/azure-devops-node-api": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", + "integrity": "sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==", + "license": "MIT", + "dependencies": { + "tunnel": "0.0.6", + "typed-rest-client": "2.1.0" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/azure-pipelines-task-lib": { + "version": "4.17.3", + "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", + "integrity": "sha512-UxfH5pk3uOHTi9TtLtdDyugQVkFES5A836ZEePjcs3jYyxm3EJ6IlFYq6gbfd6mNBhrM9fxG2u/MFYIJ+Z0cxQ==", + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.10", + "minimatch": "3.0.5", + "nodejs-file-downloader": "^4.11.1", + "q": "^1.5.1", + "semver": "^5.7.2", + "shelljs": "^0.8.5", + "uuid": "^3.0.1" + } + }, + "node_modules/azure-pipelines-tasks-azure-arm-rest": { + "version": "3.263.1", + "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.263.1.tgz", + "integrity": "sha512-19HPDiU1aHpeqe1BQMucjZhkYKM/rHXr5dGmOLIf4toEw2MwsJmtXA4nPFsfVRX/VkBzdgrn7/XRyfT4UfXWcw==", + "license": "MIT", + "dependencies": { + "@azure/identity": "^3.4.2", + "@types/jsonwebtoken": "^8.5.8", + "@types/mocha": "^5.2.7", + "@types/node": "^10.17.0", + "@types/q": "1.5.4", + "async-mutex": "^0.4.0", + "azure-devops-node-api": "^14.0.1", + "azure-pipelines-task-lib": "^4.11.0", + "https-proxy-agent": "^4.0.0", + "jsonwebtoken": "^9.0.0", + "msalv1": "npm:@azure/msal-node@^1.18.4", + "msalv2": "npm:@azure/msal-node@^2.7.0", + "msalv3": "npm:@azure/msal-node@^3.5.3", + "node-fetch": "^2.6.7", + "q": "1.5.1", + "typed-rest-client": "^2.0.1", + "xml2js": "0.6.2" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/des.js": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", + "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", + "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", + "license": "MIT", + "dependencies": { + "agent-base": "5", + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/https-proxy-agent/node_modules/agent-base": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", + "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-md4": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", + "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", + "license": "MIT" + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/jwa": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", + "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jwa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "license": "MIT", + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/msalv1": { + "name": "@azure/msal-node", + "version": "1.18.4", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", + "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", + "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "13.3.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": "10 || 12 || 14 || 16 || 18" + } + }, + "node_modules/msalv1/node_modules/@azure/msal-common": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", + "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/msalv1/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/msalv2": { + "name": "@azure/msal-node", + "version": "2.16.3", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.3.tgz", + "integrity": "sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "14.16.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/msalv2/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/msalv3": { + "name": "@azure/msal-node", + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.1.tgz", + "integrity": "sha512-HszfqoC+i2C9+BRDQfuNUGp15Re7menIhCEbFCQ49D3KaqEDrgZIgQ8zSct4T59jWeUIL9N/Dwiv4o2VueTdqQ==", + "license": "MIT", + "dependencies": { + "@azure/msal-common": "15.13.1", + "jsonwebtoken": "^9.0.0", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/msalv3/node_modules/@azure/msal-common": { + "version": "15.13.1", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.13.1.tgz", + "integrity": "sha512-vQYQcG4J43UWgo1lj7LcmdsGUKWYo28RfEvDQAEMmQIMjSFufvb+pS0FJ3KXmrPmnWlt1vHDl3oip6mIDUQ4uA==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/msalv3/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodejs-file-downloader": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.13.0.tgz", + "integrity": "sha512-nI2fKnmJWWFZF6SgMPe1iBodKhfpztLKJTtCtNYGhm/9QXmWa/Pk9Sv00qHgzEvNLe1x7hjGDRor7gcm/ChaIQ==", + "license": "ISC", + "dependencies": { + "follow-redirects": "^1.15.6", + "https-proxy-agent": "^5.0.0", + "mime-types": "^2.1.27", + "sanitize-filename": "^1.6.3" + } + }, + "node_modules/nodejs-file-downloader/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/nodejs-file-downloader/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "deprecated": "You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other.\n\n(For a CapTP with native promises, see @endo/eventual-send and @endo/captp)", + "license": "MIT", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.0.tgz", + "integrity": "sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve": { + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/sanitize-filename": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", + "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.3.tgz", + "integrity": "sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==", + "license": "BlueOak-1.0.0" + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stoppable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", + "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", + "license": "MIT", + "engines": { + "node": ">=4", + "npm": ">=6" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tunnel": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", + "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", + "license": "MIT", + "engines": { + "node": ">=0.6.11 <=0.7.0 || >=0.7.3" + } + }, + "node_modules/typed-rest-client": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", + "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", + "license": "MIT", + "dependencies": { + "des.js": "^1.1.0", + "js-md4": "^0.3.2", + "qs": "^6.10.3", + "tunnel": "0.0.6", + "underscore": "^1.12.1" + }, + "engines": { + "node": ">= 16.0.0" + } + }, + "node_modules/underscore": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", + "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", + "license": "MIT" + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + } + } +} diff --git a/BuildTasks/Common-Auth/v5/package.json b/BuildTasks/Common-Auth/v5/package.json new file mode 100644 index 00000000..c7f2a910 --- /dev/null +++ b/BuildTasks/Common-Auth/v5/package.json @@ -0,0 +1,15 @@ +{ + "name": "vsts-developer-tools.common-authv5", + "version": "5.0.0", + "description": "Authentication helpers shared across extension tasks", + "repository": { + "type": "git", + "url": "https://github.com/Microsoft/azure-devops-extension-tasks.git" + }, + "type": "module", + "license": "MIT", + "dependencies": { + "azure-pipelines-task-lib": "^4.17.3", + "azure-pipelines-tasks-azure-arm-rest": "^3.263.1" + } +} \ No newline at end of file diff --git a/BuildTasks/Common-Auth/v5/tsconfig.json b/BuildTasks/Common-Auth/v5/tsconfig.json new file mode 100644 index 00000000..2cd6347b --- /dev/null +++ b/BuildTasks/Common-Auth/v5/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.v5.json", + "compilerOptions": { + "outDir": "./", + "sourceRoot": "./" + }, + "include": [ + "CommonAuth.ts" + ] +} \ No newline at end of file diff --git a/BuildTasks/Common/v5/Common.ts b/BuildTasks/Common/v5/Common.ts index 49b3da86..8e65cdce 100644 --- a/BuildTasks/Common/v5/Common.ts +++ b/BuildTasks/Common/v5/Common.ts @@ -3,7 +3,6 @@ import stream from "node:stream"; import fs from "node:fs/promises"; import tl from "azure-pipelines-task-lib"; import { ToolRunner } from "azure-pipelines-task-lib/toolrunner.js"; -import { AzureRMEndpoint } from "azure-pipelines-tasks-azure-arm-rest/azure-arm-endpoint.js"; import uuidv5 from "uuidv5"; import tmp from "tmp"; @@ -227,67 +226,6 @@ export function getExtensionVersion(): string { * @param {string="connectedServiceName"} inputFieldName * @returns string */ -export function getMarketplaceEndpointDetails(inputFieldName: string): any { - const marketplaceEndpoint = tl.getInput(inputFieldName, true); - - const hostUrl = tl.getEndpointUrl(marketplaceEndpoint, false); - const auth = tl.getEndpointAuthorization(marketplaceEndpoint, false); - const password = auth.parameters["password"]; - const username = auth.parameters["username"]; - const apitoken = auth.parameters["apitoken"]; - - return { - "url": hostUrl, - "username": username, - "password": password, - "apitoken": apitoken - }; -} - -/** - * Sets the marketplace endpoint details (url, credentials) for the toolrunner. - * - * @param {ToolRunner} tfx - */ -export async function setTfxMarketplaceArguments(tfx: ToolRunner, setServiceUrl = true): Promise { - const connectTo = tl.getInput("connectTo", false) || "VsTeam"; - - if (connectTo === "VsTeam") { - const galleryEndpoint = getMarketplaceEndpointDetails("connectedServiceName"); - tl.setSecret(galleryEndpoint.password); - tfx.argIf(setServiceUrl, ["--service-url", galleryEndpoint.url]); - tfx.arg(["--auth-type", "pat"]); - tfx.arg(["--token", galleryEndpoint.password]); - } else if (connectTo === "AzureRM") { - const serviceName = tl.getInput("connectedServiceNameAzureRM", true); - const endpoint = await new AzureRMEndpoint(serviceName).getEndpoint(); - - // Overriding the "Active Directory" ID seems to be the only public way to change which scopes the token has access to. - // https://github.com/microsoft/azure-pipelines-tasks-common-packages/blob/74b799d41d0b78bae6b9ecf9987cf7008093d457/common-npm-packages/azure-arm-rest/azure-arm-common.ts#L480 - endpoint.applicationTokenCredentials.activeDirectoryResourceId = "499b84ac-1321-427f-aa17-267ca6975798"; - const token = await endpoint.applicationTokenCredentials.getToken(); - tfx.argIf(setServiceUrl, ["--service-url", "https://marketplace.visualstudio.com"]); - tfx.arg(["--auth-type", "pat"]); - tfx.arg(["--token", token]); - tl.setSecret(token); - } else { - const galleryEndpoint = getMarketplaceEndpointDetails("connectedServiceNameTFS"); - tfx.argIf(setServiceUrl, ["--service-url", galleryEndpoint.url]); - - if (galleryEndpoint.username) { - tfx.arg(["--auth-type", "basic"]); - tfx.arg(["--username", galleryEndpoint.username]); - tfx.arg(["--password", galleryEndpoint.password]); - tl.setSecret(galleryEndpoint.password); - } - else { - tfx.arg(["--auth-type", "pat"]); - tfx.arg(["--token", galleryEndpoint.apitoken]); - tl.setSecret(galleryEndpoint.apitoken); - } - } -} - /** * A writable stream intended to be used with Tfx when using JSON output. * This class overcomes the problem of having tfx warnings being displayed @@ -556,8 +494,6 @@ export default { validateAndSetTfxManifestArguments, runTfx, getExtensionVersion, - getMarketplaceEndpointDetails, - setTfxMarketplaceArguments, TfxJsonOutputStream, updateManifests, writeManifest, diff --git a/BuildTasks/Common/v5/package-lock.json b/BuildTasks/Common/v5/package-lock.json index 3ba33b3b..152edc05 100644 --- a/BuildTasks/Common/v5/package-lock.json +++ b/BuildTasks/Common/v5/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, @@ -18,270 +17,6 @@ "@types/tmp": "^0.2.6" } }, - "node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.1.tgz", - "integrity": "sha512-UVZlVLfLyz6g3Hy7GNDpooMQonUygH7ghdiSASOOHy97fKj/mPLqgDX7aidOijn+sCMU+WU8NjlPlNTgnvbcGA==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.2.tgz", - "integrity": "sha512-0q5DL4uyR0EZ4RXQKD8MadGH6zTIcloUoS/RVbCpNpej4pwte0xpqYxk8K97Py2RiuUvI7F4GXpoT4046VfufA==", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.5.0", - "@azure/core-client": "^1.4.0", - "@azure/core-rest-pipeline": "^1.1.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^3.5.0", - "@azure/msal-node": "^2.5.1", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^8.0.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/identity/node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/identity/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "dependencies": { - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.30.0.tgz", - "integrity": "sha512-I0XlIGVdM4E9kYP5eTjgW8fgATdzwxJvQ6bm2PNiHaZhEuUz47NYw1xHthC9R+lXz4i9zbShS0VdLyxd7n0GGA==", - "dependencies": { - "@azure/msal-common": "14.16.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", - "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.3.tgz", - "integrity": "sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==", - "dependencies": { - "@azure/msal-common": "14.16.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", - "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "node_modules/@types/node": { - "version": "20.19.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", - "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, "node_modules/@types/tmp": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", @@ -289,39 +24,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", - "integrity": "sha512-SnbaqayTVFEA6/tYumdF0UmybY0KHyKwGPBXnyckFlrrKdhWFrL3a2HIPXHjht5ZOElKGcXfD2D63P36btb+ww==", - "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/adm-zip": { "version": "0.5.12", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz", @@ -341,27 +43,6 @@ "node": ">= 6.0.0" } }, - "node_modules/async-mutex": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", - "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/azure-devops-node-api": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", - "integrity": "sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==", - "license": "MIT", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "2.1.0" - }, - "engines": { - "node": ">= 16.0.0" - } - }, "node_modules/azure-pipelines-task-lib": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", @@ -377,59 +58,6 @@ "uuid": "^3.0.1" } }, - "node_modules/azure-pipelines-tasks-azure-arm-rest": { - "version": "3.263.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.263.1.tgz", - "integrity": "sha512-19HPDiU1aHpeqe1BQMucjZhkYKM/rHXr5dGmOLIf4toEw2MwsJmtXA4nPFsfVRX/VkBzdgrn7/XRyfT4UfXWcw==", - "license": "MIT", - "dependencies": { - "@azure/identity": "^3.4.2", - "@types/jsonwebtoken": "^8.5.8", - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "1.5.4", - "async-mutex": "^0.4.0", - "azure-devops-node-api": "^14.0.1", - "azure-pipelines-task-lib": "^4.11.0", - "https-proxy-agent": "^4.0.0", - "jsonwebtoken": "^9.0.0", - "msalv1": "npm:@azure/msal-node@^1.18.4", - "msalv2": "npm:@azure/msal-node@^2.7.0", - "msalv3": "npm:@azure/msal-node@^3.5.3", - "node-fetch": "^2.6.7", - "q": "1.5.1", - "typed-rest-client": "^2.0.1", - "xml2js": "0.6.2" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "license": "MIT" - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "license": "MIT", - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -445,41 +73,6 @@ "concat-map": "0.0.1" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -501,85 +94,6 @@ } } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -612,43 +126,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -680,30 +157,6 @@ "node": "*" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -715,26 +168,6 @@ "node": ">= 0.4" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -781,143 +214,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-md4": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "license": "MIT" - }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -937,12 +233,6 @@ "node": ">= 0.6" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -959,113 +249,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/msalv1": { - "name": "@azure/msal-node", - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", - "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", - "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "13.3.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": "10 || 12 || 14 || 16 || 18" - } - }, - "node_modules/msalv1/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/msalv2": { - "name": "@azure/msal-node", - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", - "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "14.16.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/msalv2/node_modules/@azure/msal-common": { - "version": "14.16.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", - "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalv2/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/msalv3": { - "name": "@azure/msal-node", - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.7.4.tgz", - "integrity": "sha512-fjqvhrThwzzPvqhFOdkkGRJCHPQZTNijpceVy8QjcfQuH482tOVEjHyamZaioOhVtx+FK1u+eMpJA2Zz4U9LVg==", - "dependencies": { - "@azure/msal-common": "15.12.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/msalv3/node_modules/@azure/msal-common": { - "version": "15.12.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.12.0.tgz", - "integrity": "sha512-4ucXbjVw8KJ5QBgnGJUeA07c8iznwlk5ioHIhI4ASXcXgcf2yRFhWzYOyWg/cI49LC9ekpFJeQtO3zjDTbl6TQ==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalv3/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/nodejs-file-downloader": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", @@ -1077,18 +260,6 @@ "sanitize-filename": "^1.6.3" } }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1097,22 +268,6 @@ "wrappy": "1" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1135,21 +290,6 @@ "teleport": ">=0.2.0" } }, - "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -1177,26 +317,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", @@ -1205,11 +325,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -1234,87 +349,6 @@ "node": ">=4" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -1335,11 +369,6 @@ "node": ">=14.14" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -1348,48 +377,6 @@ "utf8-byte-length": "^1.0.1" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", - "license": "MIT", - "dependencies": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - }, - "engines": { - "node": ">= 16.0.0" - } - }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, "node_modules/utf8-byte-length": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", @@ -1409,44 +396,10 @@ "resolved": "https://registry.npmjs.org/uuidv5/-/uuidv5-1.0.0.tgz", "integrity": "sha512-OIrdJoTuC0Sbk1CKrGWG02gwrZHZptlYTHGkVOH7wxVNmMsGYFzJ77N7+SbrctXfpp9sI8Bp/nsu6C932p2MGQ==" }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } } } } diff --git a/BuildTasks/Common/v5/package.json b/BuildTasks/Common/v5/package.json index c290707a..37ef08a5 100644 --- a/BuildTasks/Common/v5/package.json +++ b/BuildTasks/Common/v5/package.json @@ -10,12 +10,8 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, - "devDependencies": { - "@types/tmp": "^0.2.6" - }, "types": "./uuidv5.d.ts" } diff --git a/BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts b/BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts index 44d0cd2b..2126961f 100644 --- a/BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts +++ b/BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts @@ -1,6 +1,7 @@ import tl from "azure-pipelines-task-lib"; import tr from "azure-pipelines-task-lib/toolrunner.js"; import * as common from "../../Common/v5/Common.js"; +import * as commonAuth from "../../Common-Auth/v5/CommonAuth.js"; const extensionVersionOverrideVariable = tl.getInput("extensionVersionOverride", false); let usingOverride = false; @@ -33,7 +34,7 @@ async function run() { try { tfx.arg(["extension", "show", "--json", "--no-color"]); - await common.setTfxMarketplaceArguments(tfx); + await commonAuth.setTfxMarketplaceArguments(tfx); common.validateAndSetTfxManifestArguments(tfx); const versionAction = tl.getInput("versionAction", false); diff --git a/BuildTasks/InstallExtension/v5/InstallExtension.ts b/BuildTasks/InstallExtension/v5/InstallExtension.ts index 008d7bcc..016eb403 100644 --- a/BuildTasks/InstallExtension/v5/InstallExtension.ts +++ b/BuildTasks/InstallExtension/v5/InstallExtension.ts @@ -1,5 +1,6 @@ import tl from "azure-pipelines-task-lib"; import * as common from "../../Common/v5/Common.js"; +import * as commonAuth from "../../Common-Auth/v5/CommonAuth.js"; const accounts = tl.getDelimitedInput("accounts", ",", true).map((value) => { return value.trim(); }); @@ -7,7 +8,7 @@ accounts.forEach(async (account) => await common.runTfx(async tfx => { try { tfx.arg(["extension", "install", "--no-color"]); - await common.setTfxMarketplaceArguments(tfx, false); + await commonAuth.setTfxMarketplaceArguments(tfx, false); common.validateAndSetTfxManifestArguments(tfx); // Installation targets diff --git a/BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts b/BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts index 6eec5245..c5baebc6 100644 --- a/BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts +++ b/BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts @@ -1,13 +1,14 @@ import tl from "azure-pipelines-task-lib"; import tr from "azure-pipelines-task-lib/toolrunner.js"; import * as common from "../../Common/v5/Common.js"; +import * as commonAuth from "../../Common-Auth/v5/CommonAuth.js"; import promiseRetry from "promise-retry"; await common.runTfx(async tfx => { try { tfx.arg(["extension", "isvalid", "--json", "--no-color"]); - await common.setTfxMarketplaceArguments(tfx); + await commonAuth.setTfxMarketplaceArguments(tfx); common.validateAndSetTfxManifestArguments(tfx); const options = { diff --git a/BuildTasks/PackageExtension/v5/package-lock.json b/BuildTasks/PackageExtension/v5/package-lock.json index f979d3c9..5bf4ebde 100644 --- a/BuildTasks/PackageExtension/v5/package-lock.json +++ b/BuildTasks/PackageExtension/v5/package-lock.json @@ -10,310 +10,12 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "fs-extra": "^11.3.2", "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, "devDependencies": {} }, - "node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.1.tgz", - "integrity": "sha512-UVZlVLfLyz6g3Hy7GNDpooMQonUygH7ghdiSASOOHy97fKj/mPLqgDX7aidOijn+sCMU+WU8NjlPlNTgnvbcGA==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.2.tgz", - "integrity": "sha512-0q5DL4uyR0EZ4RXQKD8MadGH6zTIcloUoS/RVbCpNpej4pwte0xpqYxk8K97Py2RiuUvI7F4GXpoT4046VfufA==", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.5.0", - "@azure/core-client": "^1.4.0", - "@azure/core-rest-pipeline": "^1.1.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^3.5.0", - "@azure/msal-node": "^2.5.1", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^8.0.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/identity/node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/identity/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "dependencies": { - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.30.0.tgz", - "integrity": "sha512-I0XlIGVdM4E9kYP5eTjgW8fgATdzwxJvQ6bm2PNiHaZhEuUz47NYw1xHthC9R+lXz4i9zbShS0VdLyxd7n0GGA==", - "dependencies": { - "@azure/msal-common": "14.16.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", - "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.3.tgz", - "integrity": "sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==", - "dependencies": { - "@azure/msal-common": "14.16.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", - "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "node_modules/@types/node": { - "version": "20.19.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", - "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", - "integrity": "sha512-SnbaqayTVFEA6/tYumdF0UmybY0KHyKwGPBXnyckFlrrKdhWFrL3a2HIPXHjht5ZOElKGcXfD2D63P36btb+ww==", - "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/adm-zip": { "version": "0.5.12", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz", @@ -333,27 +35,6 @@ "node": ">= 6.0.0" } }, - "node_modules/async-mutex": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", - "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/azure-devops-node-api": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-14.1.0.tgz", - "integrity": "sha512-QhpgjH1LQ+vgDJ7oBwcmsZ3+o4ZpjLVilw0D3oJQpYpRzN+L39lk5jZDLJ464hLUgsDzWn/Ksv7zLLMKLfoBzA==", - "license": "MIT", - "dependencies": { - "tunnel": "0.0.6", - "typed-rest-client": "2.1.0" - }, - "engines": { - "node": ">= 16.0.0" - } - }, "node_modules/azure-pipelines-task-lib": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/azure-pipelines-task-lib/-/azure-pipelines-task-lib-4.17.3.tgz", @@ -369,59 +50,6 @@ "uuid": "^3.0.1" } }, - "node_modules/azure-pipelines-tasks-azure-arm-rest": { - "version": "3.263.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.263.1.tgz", - "integrity": "sha512-19HPDiU1aHpeqe1BQMucjZhkYKM/rHXr5dGmOLIf4toEw2MwsJmtXA4nPFsfVRX/VkBzdgrn7/XRyfT4UfXWcw==", - "license": "MIT", - "dependencies": { - "@azure/identity": "^3.4.2", - "@types/jsonwebtoken": "^8.5.8", - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "1.5.4", - "async-mutex": "^0.4.0", - "azure-devops-node-api": "^14.0.1", - "azure-pipelines-task-lib": "^4.11.0", - "https-proxy-agent": "^4.0.0", - "jsonwebtoken": "^9.0.0", - "msalv1": "npm:@azure/msal-node@^1.18.4", - "msalv2": "npm:@azure/msal-node@^2.7.0", - "msalv3": "npm:@azure/msal-node@^3.5.3", - "node-fetch": "^2.6.7", - "q": "1.5.1", - "typed-rest-client": "^2.0.1", - "xml2js": "0.6.2" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "license": "MIT" - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "license": "MIT", - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -437,41 +65,6 @@ "concat-map": "0.0.1" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -493,85 +86,6 @@ } } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -618,43 +132,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -686,35 +163,11 @@ "node": "*" } }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -726,26 +179,6 @@ "node": ">= 0.4" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -792,37 +225,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-md4": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/js-md4/-/js-md4-0.3.2.tgz", - "integrity": "sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==", - "license": "MIT" - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -834,112 +236,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -959,12 +255,6 @@ "node": ">= 0.6" } }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, "node_modules/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", @@ -981,113 +271,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/msalv1": { - "name": "@azure/msal-node", - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", - "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", - "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "13.3.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": "10 || 12 || 14 || 16 || 18" - } - }, - "node_modules/msalv1/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/msalv2": { - "name": "@azure/msal-node", - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", - "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "14.16.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/msalv2/node_modules/@azure/msal-common": { - "version": "14.16.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", - "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalv2/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/msalv3": { - "name": "@azure/msal-node", - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.7.4.tgz", - "integrity": "sha512-fjqvhrThwzzPvqhFOdkkGRJCHPQZTNijpceVy8QjcfQuH482tOVEjHyamZaioOhVtx+FK1u+eMpJA2Zz4U9LVg==", - "dependencies": { - "@azure/msal-common": "15.12.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/msalv3/node_modules/@azure/msal-common": { - "version": "15.12.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.12.0.tgz", - "integrity": "sha512-4ucXbjVw8KJ5QBgnGJUeA07c8iznwlk5ioHIhI4ASXcXgcf2yRFhWzYOyWg/cI49LC9ekpFJeQtO3zjDTbl6TQ==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalv3/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/nodejs-file-downloader": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", @@ -1099,18 +282,6 @@ "sanitize-filename": "^1.6.3" } }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -1119,22 +290,6 @@ "wrappy": "1" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -1157,21 +312,6 @@ "teleport": ">=0.2.0" } }, - "node_modules/qs": { - "version": "6.13.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", - "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", @@ -1199,26 +339,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", @@ -1227,11 +347,6 @@ "truncate-utf8-bytes": "^1.0.0" } }, - "node_modules/sax": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz", - "integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==" - }, "node_modules/semver": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", @@ -1256,87 +371,6 @@ "node": ">=4" } }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -1357,11 +391,6 @@ "node": ">=14.14" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", @@ -1370,48 +399,6 @@ "utf8-byte-length": "^1.0.1" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, - "node_modules/tunnel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", - "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", - "license": "MIT", - "engines": { - "node": ">=0.6.11 <=0.7.0 || >=0.7.3" - } - }, - "node_modules/typed-rest-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", - "license": "MIT", - "dependencies": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - }, - "engines": { - "node": ">= 16.0.0" - } - }, - "node_modules/underscore": { - "version": "1.13.7", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.7.tgz", - "integrity": "sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==", - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -1439,44 +426,10 @@ "resolved": "https://registry.npmjs.org/uuidv5/-/uuidv5-1.0.0.tgz", "integrity": "sha512-OIrdJoTuC0Sbk1CKrGWG02gwrZHZptlYTHGkVOH7wxVNmMsGYFzJ77N7+SbrctXfpp9sI8Bp/nsu6C932p2MGQ==" }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "engines": { - "node": ">=4.0" - } } } } diff --git a/BuildTasks/PackageExtension/v5/package.json b/BuildTasks/PackageExtension/v5/package.json index d7bbf27d..58249ffa 100644 --- a/BuildTasks/PackageExtension/v5/package.json +++ b/BuildTasks/PackageExtension/v5/package.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "fs-extra": "^11.3.2", "tmp": "^0.2.5", "uuidv5": "^1.0.0" diff --git a/BuildTasks/PublishExtension/v5/PublishExtension.ts b/BuildTasks/PublishExtension/v5/PublishExtension.ts index e8f20eb5..6f4fe617 100644 --- a/BuildTasks/PublishExtension/v5/PublishExtension.ts +++ b/BuildTasks/PublishExtension/v5/PublishExtension.ts @@ -1,5 +1,6 @@ import tl from "azure-pipelines-task-lib/task.js"; import * as common from "../../Common/v5/Common.js"; +import * as commonAuth from "../../Common-Auth/v5/CommonAuth.js"; import VsixEditor from "./vsixeditor.js"; await common.runTfx(async tfx => { @@ -9,7 +10,7 @@ await common.runTfx(async tfx => { tfx.arg(["extension", "publish", "--json", "--no-color"]); const outputVariable = tl.getInput("outputVariable", false); - await common.setTfxMarketplaceArguments(tfx); + await commonAuth.setTfxMarketplaceArguments(tfx); // Read file type const fileType = tl.getInput("fileType", true); diff --git a/BuildTasks/PublishExtension/v5/package.json b/BuildTasks/PublishExtension/v5/package.json index c9074dd5..317c95ce 100644 --- a/BuildTasks/PublishExtension/v5/package.json +++ b/BuildTasks/PublishExtension/v5/package.json @@ -17,7 +17,6 @@ "uuidv5": "^1.0.0", "x2js": "^3.4.4" }, - "devDependencies": { - "@types/tmp": "^0.2.6" + "devDependencies": {} } } diff --git a/BuildTasks/ShareExtension/v5/ShareExtension.ts b/BuildTasks/ShareExtension/v5/ShareExtension.ts index 0e6a0d8b..3e9ebe90 100644 --- a/BuildTasks/ShareExtension/v5/ShareExtension.ts +++ b/BuildTasks/ShareExtension/v5/ShareExtension.ts @@ -1,10 +1,11 @@ import tl from "azure-pipelines-task-lib"; import * as common from "../../Common/v5/Common.js"; +import * as commonAuth from "../../Common-Auth/v5/CommonAuth.js"; await common.runTfx(async tfx => { tfx.arg(["extension", "share", "--no-color"]); - await common.setTfxMarketplaceArguments(tfx); + await commonAuth.setTfxMarketplaceArguments(tfx); common.validateAndSetTfxManifestArguments(tfx); // Installation targets diff --git a/BuildTasks/TfxInstaller/v5/package-lock.json b/BuildTasks/TfxInstaller/v5/package-lock.json index c345531c..02acdc57 100644 --- a/BuildTasks/TfxInstaller/v5/package-lock.json +++ b/BuildTasks/TfxInstaller/v5/package-lock.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "azure-pipelines-tool-lib": "^2.0.10", "fs-extra": "^11.3.2", "tfx-cli": "^0.22.2", @@ -18,244 +17,6 @@ "uuidv5": "^1.0.0" } }, - "node_modules/@azure/abort-controller": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz", - "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==", - "dependencies": { - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@azure/core-auth": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-auth/-/core-auth-1.10.1.tgz", - "integrity": "sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-util": "^1.13.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-auth/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-client": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/@azure/core-client/-/core-client-1.10.1.tgz", - "integrity": "sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-rest-pipeline": "^1.22.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-client/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.1.tgz", - "integrity": "sha512-UVZlVLfLyz6g3Hy7GNDpooMQonUygH7ghdiSASOOHy97fKj/mPLqgDX7aidOijn+sCMU+WU8NjlPlNTgnvbcGA==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@azure/core-auth": "^1.10.0", - "@azure/core-tracing": "^1.3.0", - "@azure/core-util": "^1.13.0", - "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-rest-pipeline/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/core-tracing": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@azure/core-tracing/-/core-tracing-1.3.1.tgz", - "integrity": "sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.13.1.tgz", - "integrity": "sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A==", - "dependencies": { - "@azure/abort-controller": "^2.1.2", - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/core-util/node_modules/@azure/abort-controller": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-2.1.2.tgz", - "integrity": "sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@azure/identity": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.2.tgz", - "integrity": "sha512-0q5DL4uyR0EZ4RXQKD8MadGH6zTIcloUoS/RVbCpNpej4pwte0xpqYxk8K97Py2RiuUvI7F4GXpoT4046VfufA==", - "dependencies": { - "@azure/abort-controller": "^1.0.0", - "@azure/core-auth": "^1.5.0", - "@azure/core-client": "^1.4.0", - "@azure/core-rest-pipeline": "^1.1.0", - "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.6.1", - "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^3.5.0", - "@azure/msal-node": "^2.5.1", - "events": "^3.0.0", - "jws": "^4.0.0", - "open": "^8.0.0", - "stoppable": "^1.1.0", - "tslib": "^2.2.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@azure/identity/node_modules/jwa": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", - "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", - "dependencies": { - "buffer-equal-constant-time": "^1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/identity/node_modules/jws": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", - "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", - "dependencies": { - "jwa": "^2.0.0", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/@azure/logger": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@azure/logger/-/logger-1.3.0.tgz", - "integrity": "sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==", - "dependencies": { - "@typespec/ts-http-runtime": "^0.3.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@azure/msal-browser": { - "version": "3.30.0", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.30.0.tgz", - "integrity": "sha512-I0XlIGVdM4E9kYP5eTjgW8fgATdzwxJvQ6bm2PNiHaZhEuUz47NYw1xHthC9R+lXz4i9zbShS0VdLyxd7n0GGA==", - "dependencies": { - "@azure/msal-common": "14.16.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-browser/node_modules/@azure/msal-common": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", - "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-common": { - "version": "13.3.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.1.tgz", - "integrity": "sha512-Lrk1ozoAtaP/cp53May3v6HtcFSVxdFrg2Pa/1xu5oIvsIwhxW6zSPibKefCOVgd5osgykMi5jjcZHv8XkzZEQ==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.3.tgz", - "integrity": "sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==", - "dependencies": { - "@azure/msal-common": "14.16.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@azure/msal-node/node_modules/@azure/msal-common": { - "version": "14.16.1", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz", - "integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@azure/msal-node/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", @@ -341,32 +102,6 @@ "node": ">=14" } }, - "node_modules/@types/jsonwebtoken": { - "version": "8.5.9", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", - "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==" - }, - "node_modules/@types/node": { - "version": "20.19.24", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.24.tgz", - "integrity": "sha512-FE5u0ezmi6y9OZEzlJfg37mqqf6ZDSF2V/NLjUyGrR9uTZ7Sb9F7bLNZ03S4XVUNRWGA7Ck4c1kK+YnuWjl+DA==", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/q": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", - "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" - }, "node_modules/@types/semver": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-5.5.0.tgz", @@ -377,39 +112,6 @@ "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-3.4.13.tgz", "integrity": "sha512-pAeZeUbLE4Z9Vi9wsWV2bYPTweEHeJJy0G4pEjOA/FSvy1Ad5U5Km8iDV6TKre1mjBiVNfAdVHKruP8bAh4Q5A==" }, - "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", - "integrity": "sha512-SnbaqayTVFEA6/tYumdF0UmybY0KHyKwGPBXnyckFlrrKdhWFrL3a2HIPXHjht5ZOElKGcXfD2D63P36btb+ww==", - "dependencies": { - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" - } - }, - "node_modules/@typespec/ts-http-runtime/node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, "node_modules/abort-controller": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", @@ -682,14 +384,6 @@ "node": ">= 0.4" } }, - "node_modules/async-mutex": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", - "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", - "dependencies": { - "tslib": "^2.4.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", @@ -749,75 +443,6 @@ "uuid": "^3.0.1" } }, - "node_modules/azure-pipelines-tasks-azure-arm-rest": { - "version": "3.263.1", - "resolved": "https://registry.npmjs.org/azure-pipelines-tasks-azure-arm-rest/-/azure-pipelines-tasks-azure-arm-rest-3.263.1.tgz", - "integrity": "sha512-19HPDiU1aHpeqe1BQMucjZhkYKM/rHXr5dGmOLIf4toEw2MwsJmtXA4nPFsfVRX/VkBzdgrn7/XRyfT4UfXWcw==", - "license": "MIT", - "dependencies": { - "@azure/identity": "^3.4.2", - "@types/jsonwebtoken": "^8.5.8", - "@types/mocha": "^5.2.7", - "@types/node": "^10.17.0", - "@types/q": "1.5.4", - "async-mutex": "^0.4.0", - "azure-devops-node-api": "^14.0.1", - "azure-pipelines-task-lib": "^4.11.0", - "https-proxy-agent": "^4.0.0", - "jsonwebtoken": "^9.0.0", - "msalv1": "npm:@azure/msal-node@^1.18.4", - "msalv2": "npm:@azure/msal-node@^2.7.0", - "msalv3": "npm:@azure/msal-node@^3.5.3", - "node-fetch": "^2.6.7", - "q": "1.5.1", - "typed-rest-client": "^2.0.1", - "xml2js": "0.6.2" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/@types/node": { - "version": "10.17.60", - "resolved": "https://registry.npmjs.org/@types/node/-/node-10.17.60.tgz", - "integrity": "sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==", - "license": "MIT" - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/agent-base": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-5.1.1.tgz", - "integrity": "sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==", - "license": "MIT", - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/https-proxy-agent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-4.0.0.tgz", - "integrity": "sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==", - "license": "MIT", - "dependencies": { - "agent-base": "5", - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/azure-pipelines-tasks-azure-arm-rest/node_modules/typed-rest-client": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-2.1.0.tgz", - "integrity": "sha512-Nel9aPbgSzRxfs1+4GoSB4wexCF+4Axlk7OSGVQCMa+4fWcyxIsN/YNmkp0xTT2iQzMD98h8yFLav/cNaULmRA==", - "license": "MIT", - "dependencies": { - "des.js": "^1.1.0", - "js-md4": "^0.3.2", - "qs": "^6.10.3", - "tunnel": "0.0.6", - "underscore": "^1.12.1" - }, - "engines": { - "node": ">= 16.0.0" - } - }, "node_modules/azure-pipelines-tool-lib": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/azure-pipelines-tool-lib/-/azure-pipelines-tool-lib-2.0.10.tgz", @@ -935,12 +560,6 @@ "node": ">=8.0.0" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", - "license": "BSD-3-Clause" - }, "node_modules/call-bind": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", @@ -1256,14 +875,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -1310,15 +921,6 @@ "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", @@ -1874,26 +1476,6 @@ "node": ">= 0.4" } }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", - "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", - "engines": { - "node": ">= 14" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -2489,40 +2071,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "license": "MIT", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -2535,27 +2083,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "license": "MIT", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "license": "MIT", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", @@ -2582,48 +2109,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", - "license": "MIT" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", - "license": "MIT" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", - "license": "MIT" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", - "license": "MIT" - }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", - "license": "MIT" - }, "node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", @@ -2758,119 +2243,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "node_modules/msalv1": { - "name": "@azure/msal-node", - "version": "1.18.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.4.tgz", - "integrity": "sha512-Kc/dRvhZ9Q4+1FSfsTFDME/v6+R2Y1fuMty/TfwqE5p9GTPw08BPbKgeWinE8JRHRp+LemjQbUZsn4Q4l6Lszg==", - "deprecated": "A newer major version of this library is available. Please upgrade to the latest available version.", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "13.3.1", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": "10 || 12 || 14 || 16 || 18" - } - }, - "node_modules/msalv1/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/msalv2": { - "name": "@azure/msal-node", - "version": "2.16.2", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.2.tgz", - "integrity": "sha512-An7l1hEr0w1HMMh1LU+rtDtqL7/jw74ORlc9Wnh06v7TU/xpG39/Zdr1ZJu3QpjUfKJ+E0/OXMW8DRSWTlh7qQ==", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "14.16.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/msalv2/node_modules/@azure/msal-common": { - "version": "14.16.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.0.tgz", - "integrity": "sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalv2/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/msalv3": { - "name": "@azure/msal-node", - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.7.4.tgz", - "integrity": "sha512-fjqvhrThwzzPvqhFOdkkGRJCHPQZTNijpceVy8QjcfQuH482tOVEjHyamZaioOhVtx+FK1u+eMpJA2Zz4U9LVg==", - "dependencies": { - "@azure/msal-common": "15.12.0", - "jsonwebtoken": "^9.0.0", - "uuid": "^8.3.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/msalv3/node_modules/@azure/msal-common": { - "version": "15.12.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.12.0.tgz", - "integrity": "sha512-4ucXbjVw8KJ5QBgnGJUeA07c8iznwlk5ioHIhI4ASXcXgcf2yRFhWzYOyWg/cI49LC9ekpFJeQtO3zjDTbl6TQ==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/msalv3/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "license": "ISC" }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/nodejs-file-downloader": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/nodejs-file-downloader/-/nodejs-file-downloader-4.12.1.tgz", @@ -3010,47 +2388,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open/node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -3696,15 +3033,6 @@ "node": ">= 0.4" } }, - "node_modules/stoppable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stoppable/-/stoppable-1.1.0.tgz", - "integrity": "sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==", - "engines": { - "node": ">=4", - "npm": ">=6" - } - }, "node_modules/streamx": { "version": "2.23.0", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.23.0.tgz", @@ -4201,11 +3529,6 @@ "node": ">=8.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, "node_modules/tracer": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/tracer/-/tracer-0.7.4.tgz", @@ -4237,11 +3560,6 @@ "utf8-byte-length": "^1.0.1" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -4357,12 +3675,6 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "node_modules/undici-types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", - "license": "MIT" - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", @@ -4431,20 +3743,6 @@ "node": ">= 0.10" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4672,18 +3970,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/xmlbuilder": { "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", diff --git a/BuildTasks/TfxInstaller/v5/package.json b/BuildTasks/TfxInstaller/v5/package.json index a56b8ebf..f23097df 100644 --- a/BuildTasks/TfxInstaller/v5/package.json +++ b/BuildTasks/TfxInstaller/v5/package.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", "azure-pipelines-tool-lib": "^2.0.10", "fs-extra": "^11.3.2", "tfx-cli": "^0.22.2", diff --git a/BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts b/BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts index 7c515f91..4b6d5da1 100644 --- a/BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts +++ b/BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts @@ -1,11 +1,12 @@ import tl from "azure-pipelines-task-lib"; import * as common from "../../Common/v5/Common.js"; +import * as commonAuth from "../../Common-Auth/v5/CommonAuth.js"; await common.runTfx(async tfx => { try { tfx.arg(["extension", "unpublish", "--no-color"]); - await common.setTfxMarketplaceArguments(tfx); + await commonAuth.setTfxMarketplaceArguments(tfx); common.validateAndSetTfxManifestArguments(tfx); const result = await tfx.execAsync({ silent: false, failOnStdErr: false }); diff --git a/BuildTasks/tsconfig.v5.json b/BuildTasks/tsconfig.v5.json index 0dd5ab37..e832129e 100644 --- a/BuildTasks/tsconfig.v5.json +++ b/BuildTasks/tsconfig.v5.json @@ -8,11 +8,18 @@ "strictNullChecks": false, "removeComments": true, "forceConsistentCasingInFileNames": true, - "esModuleInterop": true + "esModuleInterop": true, + "typeRoots": [ + "../node_modules/@types" + ], + "types": [ + "node" + ] }, "include": [ "./Common/v5/Common.ts", - "./Common/v5/uuidv5.d.ts" + "./Common/v5/uuidv5.d.ts", + "./Common-Auth/v5/CommonAuth.ts" ], "exclude": [ "*/v5/**/*.js" From 7a735579367e0d8ba38a845e0685b1dd39b0949b Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 20:21:17 +0100 Subject: [PATCH 07/14] Adds common-auth to dependabot config --- .github/dependabot.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 5a020175..ad447f2b 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -31,6 +31,15 @@ updates: update-types: [ "version-update:semver-major" ] - dependency-name: "@types/node" update-types: [ "version-update:semver-major" ] +- package-ecosystem: "npm" + directory: "/BuildTasks/Common-Auth/v5" + schedule: + interval: "weekly" + ignore: + - dependency-name: "azure-pipelines-task-lib" + update-types: [ "version-update:semver-major" ] + - dependency-name: "@types/node" + update-types: [ "version-update:semver-major" ] - package-ecosystem: "npm" directory: "/BuildTasks/ExtensionVersion/v5" schedule: From bf7bd1cb60a384d066842cf1b3d26d11151c2d59 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 20:21:31 +0100 Subject: [PATCH 08/14] fixes package.json parse error --- BuildTasks/Common/v5/package-lock.json | 10 ---------- BuildTasks/PublishExtension/v5/package-lock.json | 10 ---------- BuildTasks/PublishExtension/v5/package.json | 4 +--- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/BuildTasks/Common/v5/package-lock.json b/BuildTasks/Common/v5/package-lock.json index 152edc05..b7207400 100644 --- a/BuildTasks/Common/v5/package-lock.json +++ b/BuildTasks/Common/v5/package-lock.json @@ -12,18 +12,8 @@ "azure-pipelines-task-lib": "^4.17.3", "tmp": "^0.2.5", "uuidv5": "^1.0.0" - }, - "devDependencies": { - "@types/tmp": "^0.2.6" } }, - "node_modules/@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "dev": true, - "license": "MIT" - }, "node_modules/adm-zip": { "version": "0.5.12", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.12.tgz", diff --git a/BuildTasks/PublishExtension/v5/package-lock.json b/BuildTasks/PublishExtension/v5/package-lock.json index d236cb79..c5b9a262 100644 --- a/BuildTasks/PublishExtension/v5/package-lock.json +++ b/BuildTasks/PublishExtension/v5/package-lock.json @@ -16,9 +16,6 @@ "tmp": "^0.2.5", "uuidv5": "^1.0.0", "x2js": "^3.4.4" - }, - "devDependencies": { - "@types/tmp": "^0.2.6" } }, "node_modules/@azure/abort-controller": { @@ -285,13 +282,6 @@ "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz", "integrity": "sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==" }, - "node_modules/@types/tmp": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", - "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", - "dev": true, - "license": "MIT" - }, "node_modules/@typespec/ts-http-runtime": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.1.tgz", diff --git a/BuildTasks/PublishExtension/v5/package.json b/BuildTasks/PublishExtension/v5/package.json index 317c95ce..ea459033 100644 --- a/BuildTasks/PublishExtension/v5/package.json +++ b/BuildTasks/PublishExtension/v5/package.json @@ -16,7 +16,5 @@ "tmp": "^0.2.5", "uuidv5": "^1.0.0", "x2js": "^3.4.4" - }, - "devDependencies": {} } -} +} \ No newline at end of file From 6a2eff0d793fe720c08ed752c414623792e3c62a Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 20:26:08 +0100 Subject: [PATCH 09/14] Ensure @types/tmp is referenced in package.json --- package-lock.json | 42 ++++++------------------------------------ package.json | 7 ++----- 2 files changed, 8 insertions(+), 41 deletions(-) diff --git a/package-lock.json b/package-lock.json index d16c4ceb..9eeedd99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,12 +9,9 @@ "devDependencies": { "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.39.1", - "@types/core-js": "^2.5.8", - "@types/fs-extra": "^5.1.0", "@types/node": "^20.19.24", "@types/promise-retry": "^1.1.6", - "@types/q": "^1.5.8", - "@types/temp": "^0.9.4", + "@types/tmp": "^0.2.6", "@types/xmldom": "^0.1.34", "@typescript-eslint/eslint-plugin": "^8.46.3", "@typescript-eslint/parser": "^8.46.3", @@ -285,13 +282,6 @@ "node": ">= 8" } }, - "node_modules/@types/core-js": { - "version": "2.5.8", - "resolved": "https://registry.npmjs.org/@types/core-js/-/core-js-2.5.8.tgz", - "integrity": "sha512-VgnAj6tIAhJhZdJ8/IpxdatM8G4OD3VWGlp6xIxUGENZlpbob9Ty4VVdC1FIEp0aK6DBscDDjyzy5FB60TuNqg==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/estree": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", @@ -299,16 +289,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/fs-extra": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-5.1.0.tgz", - "integrity": "sha512-AInn5+UBFIK9FK5xc9yP5e3TQSPNNgjHByqYcj9g5elVBnDQcQL7PlO1CIRy2gWlbwK7UPYqi7vRvFA44dCmYQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -335,13 +315,6 @@ "@types/retry": "*" } }, - "node_modules/@types/q": { - "version": "1.5.8", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", - "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/retry": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", @@ -349,15 +322,12 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/temp": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/@types/temp/-/temp-0.9.4.tgz", - "integrity": "sha512-+VfWIwrlept2VBTj7Y2wQnI/Xfscy1u8Pyj/puYwss6V1IblXn1x7S0S9eFh6KyBolgLCm+rUFzhFAbdkR691g==", + "node_modules/@types/tmp": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } + "license": "MIT" }, "node_modules/@types/xmldom": { "version": "0.1.34", diff --git a/package.json b/package.json index 785e83d3..34397598 100644 --- a/package.json +++ b/package.json @@ -33,16 +33,13 @@ "devDependencies": { "@eslint/eslintrc": "^3.3.1", "@eslint/js": "^9.39.1", - "@types/core-js": "^2.5.8", - "@types/fs-extra": "^5.1.0", + "@types/node": "^20.19.24", "@types/promise-retry": "^1.1.6", - "@types/q": "^1.5.8", - "@types/temp": "^0.9.4", + "@types/tmp": "^0.2.6", "@types/xmldom": "^0.1.34", "@typescript-eslint/eslint-plugin": "^8.46.3", "@typescript-eslint/parser": "^8.46.3", "@ungap/structured-clone": "^1.3.0", - "@types/node": "^20.19.24", "eslint": "^9.39.1", "glob-exec": "^0.1.1", "globals": "^16.5.0", From 2c15b3131584d5d5c6cda5491460121e165fc0da Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 20:29:37 +0100 Subject: [PATCH 10/14] Keep q --- package-lock.json | 8 ++++++++ package.json | 1 + 2 files changed, 9 insertions(+) diff --git a/package-lock.json b/package-lock.json index 9eeedd99..e120d5e1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "@eslint/js": "^9.39.1", "@types/node": "^20.19.24", "@types/promise-retry": "^1.1.6", + "@types/q": "^1.5.8", "@types/tmp": "^0.2.6", "@types/xmldom": "^0.1.34", "@typescript-eslint/eslint-plugin": "^8.46.3", @@ -315,6 +316,13 @@ "@types/retry": "*" } }, + "node_modules/@types/q": { + "version": "1.5.8", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.8.tgz", + "integrity": "sha512-hroOstUScF6zhIi+5+x0dzqrHA1EJi+Irri6b1fxolMTqqHIV/Cg77EtnQcZqZCu8hR3mX2BzIxN4/GzI68Kfw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/retry": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.5.tgz", diff --git a/package.json b/package.json index 34397598..763d9068 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "@eslint/js": "^9.39.1", "@types/node": "^20.19.24", "@types/promise-retry": "^1.1.6", + "@types/q": "^1.5.8", "@types/tmp": "^0.2.6", "@types/xmldom": "^0.1.34", "@typescript-eslint/eslint-plugin": "^8.46.3", From 8eb3c7295f0f38255c89c271276ded71bfc53443 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 20:49:16 +0100 Subject: [PATCH 11/14] Should be able to delete @types after build --- azure-pipelines.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5420637c..9c2db9c9 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -74,7 +74,8 @@ stages: "tsconfig.json", ".snyk", "*.md", - "tsconfig.tsbuildinfo" + "tsconfig.tsbuildinfo", + "@types" ) -recurse BuildTasks\*\v* del -include @( From f3ac1113880079eded70525d09a1296e7919b464 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 21:14:12 +0100 Subject: [PATCH 12/14] See if we can strip out `msal-browser` --- azure-pipelines.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 9c2db9c9..0d83e775 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -78,6 +78,10 @@ stages: "@types" ) -recurse BuildTasks\*\v* + del -include @( + "msal-browser" + ) -recurse BuildTasks\*\v*\node_modules\@azure\ + del -include @( ".package-lock.json", "*.map", From 0f6f08071a1657be5babf116d4a432626329d76e Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 21:23:47 +0100 Subject: [PATCH 13/14] The Common and Common-Auth folders ended up in the vsix --- fix-manifest-file.ps1 | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/fix-manifest-file.ps1 b/fix-manifest-file.ps1 index 73d78888..e334595f 100644 --- a/fix-manifest-file.ps1 +++ b/fix-manifest-file.ps1 @@ -11,6 +11,7 @@ if (-not (Test-Path "vss-extension.json")) { } $extensionManifest = Get-Content -Raw "vss-extension.json" | ConvertFrom-Json +$repoRoot = (Get-Location).Path Write-Host "Original file count in manifest: $($extensionManifest.files.Count)" -ForegroundColor Cyan @@ -23,12 +24,30 @@ $removedCount = $originalCount - $extensionManifest.files.Count Write-Host "Removed $removedCount files with contentType 'application/octet-stream'" -ForegroundColor Yellow -# Get all files in BuildTasks\* folders -Write-Host "Scanning BuildTasks\* folders for files without extensions..." -ForegroundColor Yellow +# Get all files in BuildTasks folders referenced by the manifest +$manifestTaskDirectories = $extensionManifest.files | + Where-Object { $_.path -like "BuildTasks/*" } | + ForEach-Object { + $fullPath = Join-Path -Path $repoRoot -ChildPath ($_.path -replace '/', '\') + if (Test-Path -LiteralPath $fullPath -PathType Container) { + $fullPath + } + } | + Sort-Object -Unique + +$buildTasksFiles = @() -$buildTasksFiles = Get-ChildItem -Path "BuildTasks\*" -File -Recurse | Where-Object { - # Select files that don't have an extension (no dot in the name or ends with a dot) - $_.Name -notmatch '\.[^.]+$' -or $_.Name.EndsWith('.') +if ($manifestTaskDirectories.Count -eq 0) { + Write-Host "No BuildTasks directories referenced in manifest; skipping scan." -ForegroundColor Yellow +} else { + Write-Host "Scanning BuildTasks folders referenced in manifest for files without extensions..." -ForegroundColor Yellow + + $buildTasksFiles = $manifestTaskDirectories | ForEach-Object { + Get-ChildItem -Path $_ -File -Recurse + } | Where-Object { + # Select files that don't have an extension (no dot in the name or ends with a dot) + $_.Name -notmatch '\.[^.]+$' -or $_.Name.EndsWith('.') + } } Write-Host "Found $($buildTasksFiles.Count) files without extensions" -ForegroundColor Cyan @@ -44,7 +63,7 @@ foreach ($file in $extensionManifest.files) { # Add files without extensions to the manifest if they're not already there $addedCount = 0 foreach ($file in $buildTasksFiles) { - $relativePath = $file.FullName.Substring((Get-Location).Path.Length + 1).Replace('\', '/') + $relativePath = $file.FullName.Substring($repoRoot.Length + 1).Replace('\', '/') if (-not $existingFilePaths.ContainsKey($relativePath)) { $extensionManifest.files += @{ From 5d6f59d1778582e593f37f5dbe6b698dcffa7487 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Sun, 9 Nov 2025 22:02:47 +0100 Subject: [PATCH 14/14] Auto prepend path to tfx --- test-isvalid.cmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test-isvalid.cmd b/test-isvalid.cmd index e7de52ea..748710c3 100644 --- a/test-isvalid.cmd +++ b/test-isvalid.cmd @@ -11,7 +11,8 @@ SET ENDPOINT_AUTH_A={ "parameters": { "password": "%azdo_token%" }, "Scheme": "b set AGENT_WORKFOLDER=%temp%\agent\work set AGENT_TOOLSDIRECTORY=%temp%\agent\tools SET AGENT_TEMPDIRECTORY=%temp%\agent\tmp -set __TFXPATH=E:\azure-devops-extension-tasks\BuildTasks\TfxInstaller\v5\node_modules\.bin +set __TFXPATH=D:\azure-devops-extension-tasks\BuildTasks\TfxInstaller\v5\node_modules\.bin +set PATH=%__TFXPATH%;%PATH% md %temp%\agent md %AGENT_WORKFOLDER% md %AGENT_TOOLSDIRECTORY%