From 88a4be1b6d654617e818fc072364052a615cc89d Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Tue, 4 Nov 2025 15:41:19 +0100 Subject: [PATCH 01/24] 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 zcmc&%4^R}>8NVZmB8o8vDPUXI(;-CN+uhsUyW5SY5e_}XBZx#H9S8Q$J8tFf_S{|I zU=$LKO-*8x#*o@phMGjtByCL-9Vyb9Sfd%+keJS>K_=+X8VxF-QRCpGZ|{x+84;Rx zrZ;nYZ{PR({=VP)-n-5Dc}o%#(h>{?Lt>80Spa_#{Tm+#pZzJ9-he+7g05oKV3_!@ z{xuqYy*&jEzLg4#v?BL1R*?N>PLz3I4*7!+Z7|GV7z%PiInWRult}@H=}OCAOo${p zOsi-&?ha-FujHyxz>1o@LZPNyU_{fx1<3pm3k~>z#vviUFQBp^hbe5Ag=2jhGa+G! zR_-t@(j6j2?tCOmRsceqt*AgyG-6}Sgq5TiW*%a}2|I?{F@i)1D@)<5#ezgXCg@EO zJ#2wS7;6sj5LyhKNvF`P@`pn1;avI5F^aEo>CYn3Nc);Lh*&2ivk9Gzz+hN z3b8~C3#;UI$KZE0>-Wdds+L^|BZ}sBSF~DK9RyebP~{3m0NIt$7ngg(i7MaHvb}fP#=T0#uj8pg}fE0h}f)g|h4$;70Cl_3MDLskV_UwC(B&i!s2)Y>W1tTIgN{f85D=C z!wW5hPCUvs7bgb6vM70~M}>+4>yZ^d2iH#Wb7cSv2Fk+T+-^1}plVz|069*F35IHx zB#{Lk#=;4V2PJVkg;F$SMR^Y`qBKu?7?P(1kJU1u@05iKomaYkWQ&Qi0Byt;gtglU zk>l(l%2{kMZIPl;4ge7q?H-yWNu1~H^nkS|6bbHf&NtMm9+e0!as;EJX_NsXg>oc? zqrAxJ4*{B^Nsc0*ok71@vQJjrvIuKVnh<@#S!f=H%IRCoVIrcFMLJu36_H7s1&1Gu z(4SFx@hI{^@sj}wmKc^srwkkRzXEnI7=V?gNf=ysK3@s}Uy)OSRa3)(kOLZFN%5T$ zy_xBolyyleq+NBi-K+p>qa&Y$g!d)O36T^8ouEK8MW>~^Eb!P$88KVs1+ZB6U~L4Z z${wwXQ^2A!SmCj33~Z$MRj%^h(F-1mGK@L;`WeCH9oWj9F6)391_a2gO$3TGgb72v#6m#+hyF(8-PqdV|6`pn{k{-s3E1#%5qWn;in&-{p71%$ z-mNc;m5K0RW?`EjrSU`Z3a~AUC~5Ix;6Q~ZTvco zVhm#oK}cK1RYOWfyG$lmHrQ_labZjzWUs>%9wM+650mPq;4N$jO@{#@>Nz7Q=8URI zm@Q^_Kn=4RaT}41=KJu$5!9hzG~L3*MI$Kd5?wn?u1Ni`!65Iba2PV={yLxqFU9&W zb{mH;vHLs-z_zKt+xo!_Jl$Z3+n?iHROmX|@tWJkFHbsJ@x?Tkd5(8l{2cG8*B^Yq zza!(o@rD^v!MOTubC$U%Q&Av3WyRwCU_vX2C zd|c=C>(|S_+?(>=h1BJzvigwMSH4}*((yh%b+h49FSV=wXZx8o$GXSW_Mez+s9iF7 zm+??Aj(zU5ueRis@y01<+p&!cx}Hmaby|9A-Q?2gDP51Ob?tsB?x#!d2WQrA%>UcF zo^ikB56^UEBwe0oEWGKOl*ssr`wY_-%$nGQF6do-?FnN;-Xm#Sk`p%d&OCA9{k$gC z{=*}D@5PI673^6yaqns0u}f#pZ2$bio1bK+o#op0tb98+H#hE?r`yiAU%KAV(9qi2 z+SJtarJO&X5`IBpQ-?!^h{-reA9#7wT`qZhOnpODCy8<{dGDf15}v$SRV zisp6w;`l$?+uN^o_lE3Gx3si~mTFCVw!;?)WPW_)NcJcD`)e0o>Fg}^``tSWxOeh1 z-dQ=fb>sQo-rk;`U=noSn_i4exjCVzxcGw&rTDRf_QxK3BV*0JnxxY5@^VvWUteG1 zl!Q&&egG4C*qFA(^ORxMLvM=DkAL9g*WY~PqEJKgPU9bM_w*bx&)hw!Yl-o+uX6qR zAAMa?QnG|Lc6W6>dtcG&)eQ;wTc3S;t9#E^YbJNzy7h&ZGGkcXh4y^I^P#>ciG>Sa zs&jh(v13(sONY6B>4BercozR~$C2dZ=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/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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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/24] 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% From 77a34661fd99329e768c960033f929d5a243b45d Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Mon, 10 Nov 2025 13:53:02 +0100 Subject: [PATCH 15/24] Removed some more dependencies. - tmp - fs-extra - @types/tmp --- BuildTasks/Common/v5/Common.ts | 29 ++++++++--- BuildTasks/Common/v5/package-lock.json | 10 ---- BuildTasks/Common/v5/package.json | 1 - .../ExtensionVersion/v5/package-lock.json | 49 ------------------- BuildTasks/ExtensionVersion/v5/package.json | 2 - .../InstallExtension/v5/package-lock.json | 49 ------------------- BuildTasks/InstallExtension/v5/package.json | 2 - .../v5/package-lock.json | 49 ------------------- .../IsValidExtensionAgent/v5/package.json | 2 - .../PackageExtension/v5/package-lock.json | 49 ------------------- BuildTasks/PackageExtension/v5/package.json | 2 - .../PublishExtension/v5/package-lock.json | 49 ------------------- BuildTasks/PublishExtension/v5/package.json | 2 - BuildTasks/PublishExtension/v5/vsixeditor.ts | 30 ++++++------ .../PublishVSExtension/v5/package-lock.json | 39 --------------- BuildTasks/PublishVSExtension/v5/package.json | 1 - .../ShareExtension/v5/package-lock.json | 49 ------------------- BuildTasks/ShareExtension/v5/package.json | 2 - BuildTasks/TfxInstaller/v5/package-lock.json | 35 ------------- BuildTasks/TfxInstaller/v5/package.json | 2 - .../UnpublishExtension/v5/package-lock.json | 49 ------------------- BuildTasks/UnpublishExtension/v5/package.json | 2 - package-lock.json | 8 --- package.json | 1 - 24 files changed, 37 insertions(+), 476 deletions(-) diff --git a/BuildTasks/Common/v5/Common.ts b/BuildTasks/Common/v5/Common.ts index 8e65cdce..b09f4776 100644 --- a/BuildTasks/Common/v5/Common.ts +++ b/BuildTasks/Common/v5/Common.ts @@ -1,19 +1,36 @@ +import crypto from "node:crypto"; import path from "node:path"; import stream from "node:stream"; import fs from "node:fs/promises"; +import fsSync from "node:fs"; +import os from "node:os"; import tl from "azure-pipelines-task-lib"; import { ToolRunner } from "azure-pipelines-task-lib/toolrunner.js"; import uuidv5 from "uuidv5"; -import tmp from "tmp"; function writeBuildTempFile(taskName: string, data: any): string { - const tempDir = tl.getVariable("Agent.TempDirectory"); - const tempFile = tmp.tmpNameSync({ prefix: taskName, postfix: ".tmp", tmpdir: tempDir }); + const baseTempDir = tl.getVariable("Agent.TempDirectory") || os.tmpdir(); + fsSync.mkdirSync(baseTempDir, { recursive: true }); - tl.debug(`Generating Build temp file: ${tempFile}`); - tl.writeFile(tempFile, data, { mode: 0o600, encoding: "utf8", flag: "wx+" }); + for (let attempt = 0; attempt < 5; attempt++) { + const randomSuffix = crypto.randomBytes(16).toString("hex"); + const tempFile = path.join(baseTempDir, `${taskName}-${randomSuffix}.tmp`); - return tempFile; + try { + tl.writeFile(tempFile, data, { mode: 0o600, encoding: "utf8", flag: "wx+" }); + tl.debug(`Generating Build temp file: ${tempFile}`); + return tempFile; + } catch (error) { + const err = error as NodeJS.ErrnoException; + if (err.code === "EEXIST") { + tl.debug(`Temp file collision detected, retrying (${attempt + 1}/5).`); + continue; + } + throw error; + } + } + + throw new Error("Unable to create unique temporary file after multiple attempts."); } async function deleteBuildTempFile(tempFile: string) { diff --git a/BuildTasks/Common/v5/package-lock.json b/BuildTasks/Common/v5/package-lock.json index b7207400..89bffd41 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", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" } }, @@ -350,15 +349,6 @@ "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", diff --git a/BuildTasks/Common/v5/package.json b/BuildTasks/Common/v5/package.json index 37ef08a5..f46aac62 100644 --- a/BuildTasks/Common/v5/package.json +++ b/BuildTasks/Common/v5/package.json @@ -10,7 +10,6 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, "types": "./uuidv5.d.ts" diff --git a/BuildTasks/ExtensionVersion/v5/package-lock.json b/BuildTasks/ExtensionVersion/v5/package-lock.json index 7897449c..a0b4a9ab 100644 --- a/BuildTasks/ExtensionVersion/v5/package-lock.json +++ b/BuildTasks/ExtensionVersion/v5/package-lock.json @@ -11,8 +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" }, "devDependencies": {} @@ -591,20 +589,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", @@ -698,11 +682,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", @@ -823,17 +802,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", @@ -1348,15 +1316,6 @@ "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/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1412,14 +1371,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", diff --git a/BuildTasks/ExtensionVersion/v5/package.json b/BuildTasks/ExtensionVersion/v5/package.json index eea143a9..8d2f11a1 100644 --- a/BuildTasks/ExtensionVersion/v5/package.json +++ b/BuildTasks/ExtensionVersion/v5/package.json @@ -11,8 +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" }, "devDependencies": { diff --git a/BuildTasks/InstallExtension/v5/package-lock.json b/BuildTasks/InstallExtension/v5/package-lock.json index 42dc245b..b44129e2 100644 --- a/BuildTasks/InstallExtension/v5/package-lock.json +++ b/BuildTasks/InstallExtension/v5/package-lock.json @@ -11,8 +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" }, "devDependencies": {} @@ -591,20 +589,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", @@ -698,11 +682,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", @@ -823,17 +802,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", @@ -1348,15 +1316,6 @@ "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/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1412,14 +1371,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", diff --git a/BuildTasks/InstallExtension/v5/package.json b/BuildTasks/InstallExtension/v5/package.json index f45d75aa..0809f003 100644 --- a/BuildTasks/InstallExtension/v5/package.json +++ b/BuildTasks/InstallExtension/v5/package.json @@ -11,8 +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" }, "devDependencies": { diff --git a/BuildTasks/IsValidExtensionAgent/v5/package-lock.json b/BuildTasks/IsValidExtensionAgent/v5/package-lock.json index 6f44b306..37fd3f16 100644 --- a/BuildTasks/IsValidExtensionAgent/v5/package-lock.json +++ b/BuildTasks/IsValidExtensionAgent/v5/package-lock.json @@ -11,9 +11,7 @@ "dependencies": { "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", - "fs-extra": "^11.3.2", "promise-retry": "^2.0.1", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, "devDependencies": {} @@ -597,20 +595,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", @@ -704,11 +688,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", @@ -829,17 +808,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", @@ -1374,15 +1342,6 @@ "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/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1438,14 +1397,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", diff --git a/BuildTasks/IsValidExtensionAgent/v5/package.json b/BuildTasks/IsValidExtensionAgent/v5/package.json index 08482f6a..8fa18ac1 100644 --- a/BuildTasks/IsValidExtensionAgent/v5/package.json +++ b/BuildTasks/IsValidExtensionAgent/v5/package.json @@ -11,9 +11,7 @@ "dependencies": { "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tasks-azure-arm-rest": "^3.263.1", - "fs-extra": "^11.3.2", "promise-retry": "^2.0.1", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, "devDependencies": { diff --git a/BuildTasks/PackageExtension/v5/package-lock.json b/BuildTasks/PackageExtension/v5/package-lock.json index 5bf4ebde..928556d8 100644 --- a/BuildTasks/PackageExtension/v5/package-lock.json +++ b/BuildTasks/PackageExtension/v5/package-lock.json @@ -10,8 +10,6 @@ "license": "MIT", "dependencies": { "azure-pipelines-task-lib": "^4.17.3", - "fs-extra": "^11.3.2", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" }, "devDependencies": {} @@ -105,20 +103,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", @@ -163,11 +147,6 @@ "node": "*" } }, - "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/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -225,17 +204,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "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/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -382,15 +350,6 @@ "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", @@ -399,14 +358,6 @@ "utf8-byte-length": "^1.0.1" } }, - "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", diff --git a/BuildTasks/PackageExtension/v5/package.json b/BuildTasks/PackageExtension/v5/package.json index 58249ffa..30c2d886 100644 --- a/BuildTasks/PackageExtension/v5/package.json +++ b/BuildTasks/PackageExtension/v5/package.json @@ -10,8 +10,6 @@ "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/PublishExtension/v5/package-lock.json b/BuildTasks/PublishExtension/v5/package-lock.json index c5b9a262..e331363a 100644 --- a/BuildTasks/PublishExtension/v5/package-lock.json +++ b/BuildTasks/PublishExtension/v5/package-lock.json @@ -12,8 +12,6 @@ "7zip-bin": "^5.2.0", "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", "x2js": "^3.4.4" } @@ -605,20 +603,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", @@ -712,11 +696,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", @@ -837,17 +816,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", @@ -1362,15 +1330,6 @@ "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/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1426,14 +1385,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", diff --git a/BuildTasks/PublishExtension/v5/package.json b/BuildTasks/PublishExtension/v5/package.json index ea459033..173932f8 100644 --- a/BuildTasks/PublishExtension/v5/package.json +++ b/BuildTasks/PublishExtension/v5/package.json @@ -12,8 +12,6 @@ "7zip-bin": "^5.2.0", "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", "x2js": "^3.4.4" } diff --git a/BuildTasks/PublishExtension/v5/vsixeditor.ts b/BuildTasks/PublishExtension/v5/vsixeditor.ts index 5a302d1f..024278c1 100644 --- a/BuildTasks/PublishExtension/v5/vsixeditor.ts +++ b/BuildTasks/PublishExtension/v5/vsixeditor.ts @@ -1,7 +1,6 @@ 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"; @@ -212,22 +211,19 @@ export default class VSIXEditor { const tempRoot = tl.getVariable("Agent.TempDirectory") || os.tmpdir(); let dirPath: string | undefined; - let cleanupTempDir: (() => void) | undefined; + let cleanupTempDir: (() => Promise) | 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; + dirPath = await fs.mkdtemp(path.join(tempRoot, "vsixeditor-")); + const directoryToClean = dirPath; + cleanupTempDir = async () => { + try { + await fs.rm(directoryToClean, { recursive: true, force: true }); + } catch (error) { + const cleanupError = error instanceof Error ? error.message : String(error); + tl.debug(`Failed to remove temporary directory ${directoryToClean}: ${cleanupError}`); + } + }; tl.debug("Extracting files to " + dirPath); await this.extractArchive(this.inputFile, dirPath); @@ -247,7 +243,9 @@ export default class VSIXEditor { return manifestData.outputFileName; } finally { - cleanupTempDir?.(); + if (cleanupTempDir) { + await cleanupTempDir(); + } } } diff --git a/BuildTasks/PublishVSExtension/v5/package-lock.json b/BuildTasks/PublishVSExtension/v5/package-lock.json index f8cde7b5..60b630ff 100644 --- a/BuildTasks/PublishVSExtension/v5/package-lock.json +++ b/BuildTasks/PublishVSExtension/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" }, @@ -591,20 +590,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", @@ -698,11 +683,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", @@ -823,17 +803,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", @@ -1412,14 +1381,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", diff --git a/BuildTasks/PublishVSExtension/v5/package.json b/BuildTasks/PublishVSExtension/v5/package.json index f09d1277..d0b9c51e 100644 --- a/BuildTasks/PublishVSExtension/v5/package.json +++ b/BuildTasks/PublishVSExtension/v5/package.json @@ -15,7 +15,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" }, diff --git a/BuildTasks/ShareExtension/v5/package-lock.json b/BuildTasks/ShareExtension/v5/package-lock.json index ce9de5e9..e87691da 100644 --- a/BuildTasks/ShareExtension/v5/package-lock.json +++ b/BuildTasks/ShareExtension/v5/package-lock.json @@ -11,8 +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" }, "devDependencies": {} @@ -591,20 +589,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", @@ -698,11 +682,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", @@ -823,17 +802,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", @@ -1348,15 +1316,6 @@ "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/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1412,14 +1371,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", diff --git a/BuildTasks/ShareExtension/v5/package.json b/BuildTasks/ShareExtension/v5/package.json index 89c5c991..9e5bcd36 100644 --- a/BuildTasks/ShareExtension/v5/package.json +++ b/BuildTasks/ShareExtension/v5/package.json @@ -11,8 +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" }, "devDependencies": { diff --git a/BuildTasks/TfxInstaller/v5/package-lock.json b/BuildTasks/TfxInstaller/v5/package-lock.json index 02acdc57..6f84c69c 100644 --- a/BuildTasks/TfxInstaller/v5/package-lock.json +++ b/BuildTasks/TfxInstaller/v5/package-lock.json @@ -11,9 +11,7 @@ "dependencies": { "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tool-lib": "^2.0.10", - "fs-extra": "^11.3.2", "tfx-cli": "^0.22.2", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" } }, @@ -1204,20 +1202,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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", @@ -2060,17 +2044,6 @@ "integrity": "sha512-kdpvcH1gqYXQEAVFxVwIWZKihrS0o9SjbwW2v8+0p6HA/YSMk5c4BkXdMiz/kDz2QW0XlOSkFKrJsC9KL0Mb5g==", "license": "ISC" }, - "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/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -3675,14 +3648,6 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, - "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", diff --git a/BuildTasks/TfxInstaller/v5/package.json b/BuildTasks/TfxInstaller/v5/package.json index f23097df..91501359 100644 --- a/BuildTasks/TfxInstaller/v5/package.json +++ b/BuildTasks/TfxInstaller/v5/package.json @@ -11,9 +11,7 @@ "dependencies": { "azure-pipelines-task-lib": "^4.17.3", "azure-pipelines-tool-lib": "^2.0.10", - "fs-extra": "^11.3.2", "tfx-cli": "^0.22.2", - "tmp": "^0.2.5", "uuidv5": "^1.0.0" } } diff --git a/BuildTasks/UnpublishExtension/v5/package-lock.json b/BuildTasks/UnpublishExtension/v5/package-lock.json index 01b5a168..df5b476d 100644 --- a/BuildTasks/UnpublishExtension/v5/package-lock.json +++ b/BuildTasks/UnpublishExtension/v5/package-lock.json @@ -11,8 +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" }, "devDependencies": {} @@ -591,20 +589,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", @@ -698,11 +682,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", @@ -823,17 +802,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", @@ -1348,15 +1316,6 @@ "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/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -1412,14 +1371,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", diff --git a/BuildTasks/UnpublishExtension/v5/package.json b/BuildTasks/UnpublishExtension/v5/package.json index c2e80d96..2f283106 100644 --- a/BuildTasks/UnpublishExtension/v5/package.json +++ b/BuildTasks/UnpublishExtension/v5/package.json @@ -11,8 +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" }, "devDependencies": { diff --git a/package-lock.json b/package-lock.json index e120d5e1..1b9583e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,6 @@ "@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", "@typescript-eslint/parser": "^8.46.3", @@ -330,13 +329,6 @@ "dev": true, "license": "MIT" }, - "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/@types/xmldom": { "version": "0.1.34", "resolved": "https://registry.npmjs.org/@types/xmldom/-/xmldom-0.1.34.tgz", diff --git a/package.json b/package.json index 763d9068..829b3bb6 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "@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", "@typescript-eslint/parser": "^8.46.3", From 88cbff6efe66f53d713de564f3cd11534e9d4e7e Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Mon, 10 Nov 2025 17:32:51 +0100 Subject: [PATCH 16/24] Update test-isvalid.cmd Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- test-isvalid.cmd | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/test-isvalid.cmd b/test-isvalid.cmd index 748710c3..dec78f0c 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=D:\azure-devops-extension-tasks\BuildTasks\TfxInstaller\v5\node_modules\.bin +REM Use a relative path to make the script portable +set __TFXPATH=%~dp0BuildTasks\TfxInstaller\v5\node_modules\.bin set PATH=%__TFXPATH%;%PATH% md %temp%\agent md %AGENT_WORKFOLDER% From 4bca656f52d573ff0755c534d0fb8d98ba3f2a66 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Mon, 10 Nov 2025 18:14:38 +0100 Subject: [PATCH 17/24] lowercase for consistency --- BuildTasks/PublishExtension/v5/task.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildTasks/PublishExtension/v5/task.json b/BuildTasks/PublishExtension/v5/task.json index c40be950..e792cbf0 100644 --- a/BuildTasks/PublishExtension/v5/task.json +++ b/BuildTasks/PublishExtension/v5/task.json @@ -1,5 +1,5 @@ { - "id": "631511B4-50AB-47C8-B766-7AE2AA672733", + "id": "631511b4-50ab-47c8-b766-7ae2aa672733", "name": "PublishAzureDevOpsExtension", "friendlyName": "Publish Extension", "description": "Publish an Azure DevOps extension to the Visual Studio Marketplace", From c8b3c5912bf9b096fc0f388268fcfcf9708aefb7 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Mon, 10 Nov 2025 21:03:54 +0100 Subject: [PATCH 18/24] Move all tasks up one folder --- .gitignore | 4 ++-- BuildTasks/Common-Auth/{v5 => }/CommonAuth.ts | 0 .../Common-Auth/{v5 => }/package-lock.json | 0 BuildTasks/Common-Auth/{v5 => }/package.json | 0 BuildTasks/Common-Auth/{v5 => }/tsconfig.json | 6 +++--- BuildTasks/Common-Auth/tsconfig.test.json | 1 + BuildTasks/Common/{v5 => }/Common.ts | 0 BuildTasks/Common/{v5 => }/package-lock.json | 0 BuildTasks/Common/{v5 => }/package.json | 0 BuildTasks/Common/{v5 => }/tsconfig.json | 2 +- BuildTasks/Common/{v5 => }/uuidv5.d.ts | 0 .../{v5 => }/ExtensionVersion.ts | 4 ++-- BuildTasks/ExtensionVersion/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../ExtensionVersion/{v5 => }/package.json | 0 .../ExtensionVersion/{v5 => }/task.json | 4 ++-- .../ExtensionVersion/{v5 => }/tsconfig.json | 2 +- .../{v5 => }/InstallExtension.ts | 4 ++-- BuildTasks/InstallExtension/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../InstallExtension/{v5 => }/package.json | 0 .../InstallExtension/{v5 => }/task.json | 4 ++-- .../InstallExtension/{v5 => }/tsconfig.json | 2 +- .../{v5 => }/IsValidExtension.ts | 4 ++-- .../IsValidExtensionAgent/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../{v5 => }/package.json | 0 .../IsValidExtensionAgent/{v5 => }/task.json | 4 ++-- .../{v5 => }/tsconfig.json | 2 +- .../{v5 => }/PackageExtension.ts | 2 +- BuildTasks/PackageExtension/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../PackageExtension/{v5 => }/package.json | 0 .../PackageExtension/{v5 => }/task.json | 4 ++-- .../PackageExtension/{v5 => }/tsconfig.json | 2 +- .../{v5 => }/PublishExtension.ts | 4 ++-- BuildTasks/PublishExtension/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../PublishExtension/{v5 => }/package.json | 0 .../PublishExtension/{v5 => }/task.json | 4 ++-- .../PublishExtension/{v5 => }/tsconfig.json | 2 +- .../PublishExtension/{v5 => }/vsixeditor.ts | 2 +- .../{v5 => }/PublishVSExtension.ts | 0 .../PublishVSExtension/{v5 => }/Utils.ts | 0 .../PublishVSExtension/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../PublishVSExtension/{v5 => }/package.json | 0 .../PublishVSExtension/{v5 => }/readme.md | 0 .../{v5 => }/screenshot.png | Bin .../PublishVSExtension/{v5 => }/task.json | 4 ++-- .../PublishVSExtension/{v5 => }/tsconfig.json | 2 +- .../ShareExtension/{v5 => }/ShareExtension.ts | 4 ++-- BuildTasks/ShareExtension/{v5 => }/icon.png | Bin .../ShareExtension/{v5 => }/package-lock.json | 0 .../ShareExtension/{v5 => }/package.json | 0 BuildTasks/ShareExtension/{v5 => }/task.json | 4 ++-- .../ShareExtension/{v5 => }/tsconfig.json | 2 +- BuildTasks/TfxInstaller/{v5 => }/.npmrc | 0 .../TfxInstaller/{v5 => }/TfxInstaller.ts | 0 BuildTasks/TfxInstaller/{v5 => }/icon.png | Bin .../TfxInstaller/{v5 => }/package-lock.json | 0 BuildTasks/TfxInstaller/{v5 => }/package.json | 0 BuildTasks/TfxInstaller/{v5 => }/task.json | 4 ++-- .../TfxInstaller/{v5 => }/tsconfig.json | 2 +- .../{v5 => }/UnpublishExtension.ts | 4 ++-- .../UnpublishExtension/{v5 => }/icon.png | Bin .../{v5 => }/package-lock.json | 0 .../UnpublishExtension/{v5 => }/package.json | 0 .../UnpublishExtension/{v5 => }/task.json | 4 ++-- .../UnpublishExtension/{v5 => }/tsconfig.json | 2 +- BuildTasks/tsconfig.v5.json | 8 ++++---- azure-pipelines.yml | 8 ++++---- package.json | 8 ++++---- test-extensionversion.cmd | 13 +++++++----- test-isvalid.cmd | 6 +++--- test-packaging.cmd | 13 ++++++------ test-publishing.cmd | 19 +++++++++++------- test-tfxinstaller.cmd | 10 ++++----- 78 files changed, 95 insertions(+), 85 deletions(-) rename BuildTasks/Common-Auth/{v5 => }/CommonAuth.ts (100%) rename BuildTasks/Common-Auth/{v5 => }/package-lock.json (100%) rename BuildTasks/Common-Auth/{v5 => }/package.json (100%) rename BuildTasks/Common-Auth/{v5 => }/tsconfig.json (66%) create mode 100644 BuildTasks/Common-Auth/tsconfig.test.json rename BuildTasks/Common/{v5 => }/Common.ts (100%) rename BuildTasks/Common/{v5 => }/package-lock.json (100%) rename BuildTasks/Common/{v5 => }/package.json (100%) rename BuildTasks/Common/{v5 => }/tsconfig.json (78%) rename BuildTasks/Common/{v5 => }/uuidv5.d.ts (100%) rename BuildTasks/ExtensionVersion/{v5 => }/ExtensionVersion.ts (96%) rename BuildTasks/ExtensionVersion/{v5 => }/icon.png (100%) rename BuildTasks/ExtensionVersion/{v5 => }/package-lock.json (100%) rename BuildTasks/ExtensionVersion/{v5 => }/package.json (100%) rename BuildTasks/ExtensionVersion/{v5 => }/task.json (97%) rename BuildTasks/ExtensionVersion/{v5 => }/tsconfig.json (77%) rename BuildTasks/InstallExtension/{v5 => }/InstallExtension.ts (90%) rename BuildTasks/InstallExtension/{v5 => }/icon.png (100%) rename BuildTasks/InstallExtension/{v5 => }/package-lock.json (100%) rename BuildTasks/InstallExtension/{v5 => }/package.json (100%) rename BuildTasks/InstallExtension/{v5 => }/task.json (97%) rename BuildTasks/InstallExtension/{v5 => }/tsconfig.json (77%) rename BuildTasks/IsValidExtensionAgent/{v5 => }/IsValidExtension.ts (93%) rename BuildTasks/IsValidExtensionAgent/{v5 => }/icon.png (100%) rename BuildTasks/IsValidExtensionAgent/{v5 => }/package-lock.json (100%) rename BuildTasks/IsValidExtensionAgent/{v5 => }/package.json (100%) rename BuildTasks/IsValidExtensionAgent/{v5 => }/task.json (97%) rename BuildTasks/IsValidExtensionAgent/{v5 => }/tsconfig.json (77%) rename BuildTasks/PackageExtension/{v5 => }/PackageExtension.ts (97%) rename BuildTasks/PackageExtension/{v5 => }/icon.png (100%) rename BuildTasks/PackageExtension/{v5 => }/package-lock.json (100%) rename BuildTasks/PackageExtension/{v5 => }/package.json (100%) rename BuildTasks/PackageExtension/{v5 => }/task.json (98%) rename BuildTasks/PackageExtension/{v5 => }/tsconfig.json (77%) rename BuildTasks/PublishExtension/{v5 => }/PublishExtension.ts (98%) rename BuildTasks/PublishExtension/{v5 => }/icon.png (100%) rename BuildTasks/PublishExtension/{v5 => }/package-lock.json (100%) rename BuildTasks/PublishExtension/{v5 => }/package.json (100%) rename BuildTasks/PublishExtension/{v5 => }/task.json (98%) rename BuildTasks/PublishExtension/{v5 => }/tsconfig.json (79%) rename BuildTasks/PublishExtension/{v5 => }/vsixeditor.ts (99%) rename BuildTasks/PublishVSExtension/{v5 => }/PublishVSExtension.ts (100%) rename BuildTasks/PublishVSExtension/{v5 => }/Utils.ts (100%) rename BuildTasks/PublishVSExtension/{v5 => }/icon.png (100%) rename BuildTasks/PublishVSExtension/{v5 => }/package-lock.json (100%) rename BuildTasks/PublishVSExtension/{v5 => }/package.json (100%) rename BuildTasks/PublishVSExtension/{v5 => }/readme.md (100%) rename BuildTasks/PublishVSExtension/{v5 => }/screenshot.png (100%) rename BuildTasks/PublishVSExtension/{v5 => }/task.json (96%) rename BuildTasks/PublishVSExtension/{v5 => }/tsconfig.json (77%) rename BuildTasks/ShareExtension/{v5 => }/ShareExtension.ts (84%) rename BuildTasks/ShareExtension/{v5 => }/icon.png (100%) rename BuildTasks/ShareExtension/{v5 => }/package-lock.json (100%) rename BuildTasks/ShareExtension/{v5 => }/package.json (100%) rename BuildTasks/ShareExtension/{v5 => }/task.json (97%) rename BuildTasks/ShareExtension/{v5 => }/tsconfig.json (76%) rename BuildTasks/TfxInstaller/{v5 => }/.npmrc (100%) rename BuildTasks/TfxInstaller/{v5 => }/TfxInstaller.ts (100%) rename BuildTasks/TfxInstaller/{v5 => }/icon.png (100%) rename BuildTasks/TfxInstaller/{v5 => }/package-lock.json (100%) rename BuildTasks/TfxInstaller/{v5 => }/package.json (100%) rename BuildTasks/TfxInstaller/{v5 => }/task.json (93%) rename BuildTasks/TfxInstaller/{v5 => }/tsconfig.json (76%) rename BuildTasks/UnpublishExtension/{v5 => }/UnpublishExtension.ts (83%) rename BuildTasks/UnpublishExtension/{v5 => }/icon.png (100%) rename BuildTasks/UnpublishExtension/{v5 => }/package-lock.json (100%) rename BuildTasks/UnpublishExtension/{v5 => }/package.json (100%) rename BuildTasks/UnpublishExtension/{v5 => }/task.json (97%) rename BuildTasks/UnpublishExtension/{v5 => }/tsconfig.json (77%) diff --git a/.gitignore b/.gitignore index b9dc9fab..7c159d12 100644 --- a/.gitignore +++ b/.gitignore @@ -17,8 +17,8 @@ BuildTasks/*Extension*/common.ts /BuildTasks/PublishExtension/debug.cmd /BuildTasks/IsValidExtensionAgent/debug.cmd *.env -BuildTasks/*/v*/**/*.js -BuildTasks/*/v*/**/*.js.map +BuildTasks/**/*.js +BuildTasks/**/*.js.map tsconfig.tsbuildinfo /*.pfx diff --git a/BuildTasks/Common-Auth/v5/CommonAuth.ts b/BuildTasks/Common-Auth/CommonAuth.ts similarity index 100% rename from BuildTasks/Common-Auth/v5/CommonAuth.ts rename to BuildTasks/Common-Auth/CommonAuth.ts diff --git a/BuildTasks/Common-Auth/v5/package-lock.json b/BuildTasks/Common-Auth/package-lock.json similarity index 100% rename from BuildTasks/Common-Auth/v5/package-lock.json rename to BuildTasks/Common-Auth/package-lock.json diff --git a/BuildTasks/Common-Auth/v5/package.json b/BuildTasks/Common-Auth/package.json similarity index 100% rename from BuildTasks/Common-Auth/v5/package.json rename to BuildTasks/Common-Auth/package.json diff --git a/BuildTasks/Common-Auth/v5/tsconfig.json b/BuildTasks/Common-Auth/tsconfig.json similarity index 66% rename from BuildTasks/Common-Auth/v5/tsconfig.json rename to BuildTasks/Common-Auth/tsconfig.json index 2cd6347b..4a31e60c 100644 --- a/BuildTasks/Common-Auth/v5/tsconfig.json +++ b/BuildTasks/Common-Auth/tsconfig.json @@ -1,10 +1,10 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" }, - "include": [ + "files": [ "CommonAuth.ts" ] -} \ No newline at end of file +} diff --git a/BuildTasks/Common-Auth/tsconfig.test.json b/BuildTasks/Common-Auth/tsconfig.test.json new file mode 100644 index 00000000..ca1bd5fd --- /dev/null +++ b/BuildTasks/Common-Auth/tsconfig.test.json @@ -0,0 +1 @@ +{"extends": "../tsconfig.v5.json", "compilerOptions": {"outDir": "./", "sourceRoot": "./"}, "include": ["D:/azure-devops-extension-tasks/BuildTasks/Common-Auth/CommonAuth.ts"]} diff --git a/BuildTasks/Common/v5/Common.ts b/BuildTasks/Common/Common.ts similarity index 100% rename from BuildTasks/Common/v5/Common.ts rename to BuildTasks/Common/Common.ts diff --git a/BuildTasks/Common/v5/package-lock.json b/BuildTasks/Common/package-lock.json similarity index 100% rename from BuildTasks/Common/v5/package-lock.json rename to BuildTasks/Common/package-lock.json diff --git a/BuildTasks/Common/v5/package.json b/BuildTasks/Common/package.json similarity index 100% rename from BuildTasks/Common/v5/package.json rename to BuildTasks/Common/package.json diff --git a/BuildTasks/Common/v5/tsconfig.json b/BuildTasks/Common/tsconfig.json similarity index 78% rename from BuildTasks/Common/v5/tsconfig.json rename to BuildTasks/Common/tsconfig.json index c9ff5b07..04777104 100644 --- a/BuildTasks/Common/v5/tsconfig.json +++ b/BuildTasks/Common/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/Common/v5/uuidv5.d.ts b/BuildTasks/Common/uuidv5.d.ts similarity index 100% rename from BuildTasks/Common/v5/uuidv5.d.ts rename to BuildTasks/Common/uuidv5.d.ts diff --git a/BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts b/BuildTasks/ExtensionVersion/ExtensionVersion.ts similarity index 96% rename from BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts rename to BuildTasks/ExtensionVersion/ExtensionVersion.ts index 2126961f..ef638339 100644 --- a/BuildTasks/ExtensionVersion/v5/ExtensionVersion.ts +++ b/BuildTasks/ExtensionVersion/ExtensionVersion.ts @@ -1,7 +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"; +import * as common from "../Common/Common.js"; +import * as commonAuth from "../Common-Auth/CommonAuth.js"; const extensionVersionOverrideVariable = tl.getInput("extensionVersionOverride", false); let usingOverride = false; diff --git a/BuildTasks/ExtensionVersion/v5/icon.png b/BuildTasks/ExtensionVersion/icon.png similarity index 100% rename from BuildTasks/ExtensionVersion/v5/icon.png rename to BuildTasks/ExtensionVersion/icon.png diff --git a/BuildTasks/ExtensionVersion/v5/package-lock.json b/BuildTasks/ExtensionVersion/package-lock.json similarity index 100% rename from BuildTasks/ExtensionVersion/v5/package-lock.json rename to BuildTasks/ExtensionVersion/package-lock.json diff --git a/BuildTasks/ExtensionVersion/v5/package.json b/BuildTasks/ExtensionVersion/package.json similarity index 100% rename from BuildTasks/ExtensionVersion/v5/package.json rename to BuildTasks/ExtensionVersion/package.json diff --git a/BuildTasks/ExtensionVersion/v5/task.json b/BuildTasks/ExtensionVersion/task.json similarity index 97% rename from BuildTasks/ExtensionVersion/v5/task.json rename to BuildTasks/ExtensionVersion/task.json index d2d1408d..a841b978 100644 --- a/BuildTasks/ExtensionVersion/v5/task.json +++ b/BuildTasks/ExtensionVersion/task.json @@ -161,11 +161,11 @@ ], "execution": { "Node20_1": { - "target": "ExtensionVersion/v5/ExtensionVersion.js", + "target": "ExtensionVersion/ExtensionVersion.js", "argumentFormat": "" }, "Node16": { - "target": "ExtensionVersion/v5/ExtensionVersion.js", + "target": "ExtensionVersion/ExtensionVersion.js", "argumentFormat": "" } }, diff --git a/BuildTasks/ExtensionVersion/v5/tsconfig.json b/BuildTasks/ExtensionVersion/tsconfig.json similarity index 77% rename from BuildTasks/ExtensionVersion/v5/tsconfig.json rename to BuildTasks/ExtensionVersion/tsconfig.json index 3f419588..56bcfe81 100644 --- a/BuildTasks/ExtensionVersion/v5/tsconfig.json +++ b/BuildTasks/ExtensionVersion/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/InstallExtension/v5/InstallExtension.ts b/BuildTasks/InstallExtension/InstallExtension.ts similarity index 90% rename from BuildTasks/InstallExtension/v5/InstallExtension.ts rename to BuildTasks/InstallExtension/InstallExtension.ts index 016eb403..17939d38 100644 --- a/BuildTasks/InstallExtension/v5/InstallExtension.ts +++ b/BuildTasks/InstallExtension/InstallExtension.ts @@ -1,6 +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"; +import * as common from "../Common/Common.js"; +import * as commonAuth from "../Common-Auth/CommonAuth.js"; const accounts = tl.getDelimitedInput("accounts", ",", true).map((value) => { return value.trim(); }); diff --git a/BuildTasks/InstallExtension/v5/icon.png b/BuildTasks/InstallExtension/icon.png similarity index 100% rename from BuildTasks/InstallExtension/v5/icon.png rename to BuildTasks/InstallExtension/icon.png diff --git a/BuildTasks/InstallExtension/v5/package-lock.json b/BuildTasks/InstallExtension/package-lock.json similarity index 100% rename from BuildTasks/InstallExtension/v5/package-lock.json rename to BuildTasks/InstallExtension/package-lock.json diff --git a/BuildTasks/InstallExtension/v5/package.json b/BuildTasks/InstallExtension/package.json similarity index 100% rename from BuildTasks/InstallExtension/v5/package.json rename to BuildTasks/InstallExtension/package.json diff --git a/BuildTasks/InstallExtension/v5/task.json b/BuildTasks/InstallExtension/task.json similarity index 97% rename from BuildTasks/InstallExtension/v5/task.json rename to BuildTasks/InstallExtension/task.json index 34df925a..323c9223 100644 --- a/BuildTasks/InstallExtension/v5/task.json +++ b/BuildTasks/InstallExtension/task.json @@ -158,11 +158,11 @@ ], "execution": { "Node20_1": { - "target": "InstallExtension/v5/InstallExtension.js", + "target": "InstallExtension/InstallExtension.js", "argumentFormat": "" }, "Node16": { - "target": "InstallExtension/v5/InstallExtension.js", + "target": "InstallExtension/InstallExtension.js", "argumentFormat": "" } }, diff --git a/BuildTasks/InstallExtension/v5/tsconfig.json b/BuildTasks/InstallExtension/tsconfig.json similarity index 77% rename from BuildTasks/InstallExtension/v5/tsconfig.json rename to BuildTasks/InstallExtension/tsconfig.json index d53c6f2c..2f5cddeb 100644 --- a/BuildTasks/InstallExtension/v5/tsconfig.json +++ b/BuildTasks/InstallExtension/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts b/BuildTasks/IsValidExtensionAgent/IsValidExtension.ts similarity index 93% rename from BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts rename to BuildTasks/IsValidExtensionAgent/IsValidExtension.ts index c5baebc6..dbc5664e 100644 --- a/BuildTasks/IsValidExtensionAgent/v5/IsValidExtension.ts +++ b/BuildTasks/IsValidExtensionAgent/IsValidExtension.ts @@ -1,7 +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"; +import * as common from "../Common/Common.js"; +import * as commonAuth from "../Common-Auth/CommonAuth.js"; import promiseRetry from "promise-retry"; await common.runTfx(async tfx => { diff --git a/BuildTasks/IsValidExtensionAgent/v5/icon.png b/BuildTasks/IsValidExtensionAgent/icon.png similarity index 100% rename from BuildTasks/IsValidExtensionAgent/v5/icon.png rename to BuildTasks/IsValidExtensionAgent/icon.png diff --git a/BuildTasks/IsValidExtensionAgent/v5/package-lock.json b/BuildTasks/IsValidExtensionAgent/package-lock.json similarity index 100% rename from BuildTasks/IsValidExtensionAgent/v5/package-lock.json rename to BuildTasks/IsValidExtensionAgent/package-lock.json diff --git a/BuildTasks/IsValidExtensionAgent/v5/package.json b/BuildTasks/IsValidExtensionAgent/package.json similarity index 100% rename from BuildTasks/IsValidExtensionAgent/v5/package.json rename to BuildTasks/IsValidExtensionAgent/package.json diff --git a/BuildTasks/IsValidExtensionAgent/v5/task.json b/BuildTasks/IsValidExtensionAgent/task.json similarity index 97% rename from BuildTasks/IsValidExtensionAgent/v5/task.json rename to BuildTasks/IsValidExtensionAgent/task.json index c519d46d..b187f760 100644 --- a/BuildTasks/IsValidExtensionAgent/v5/task.json +++ b/BuildTasks/IsValidExtensionAgent/task.json @@ -145,11 +145,11 @@ ], "execution": { "Node20_1": { - "target": "IsValidExtensionAgent/v5/IsValidExtension.js", + "target": "IsValidExtensionAgent/IsValidExtension.js", "argumentFormat": "" }, "Node16": { - "target": "IsValidExtensionAgent/v5/IsValidExtension.js", + "target": "IsValidExtensionAgent/IsValidExtension.js", "argumentFormat": "" } }, diff --git a/BuildTasks/IsValidExtensionAgent/v5/tsconfig.json b/BuildTasks/IsValidExtensionAgent/tsconfig.json similarity index 77% rename from BuildTasks/IsValidExtensionAgent/v5/tsconfig.json rename to BuildTasks/IsValidExtensionAgent/tsconfig.json index f058a11d..e0eaf5ad 100644 --- a/BuildTasks/IsValidExtensionAgent/v5/tsconfig.json +++ b/BuildTasks/IsValidExtensionAgent/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/PackageExtension/v5/PackageExtension.ts b/BuildTasks/PackageExtension/PackageExtension.ts similarity index 97% rename from BuildTasks/PackageExtension/v5/PackageExtension.ts rename to BuildTasks/PackageExtension/PackageExtension.ts index d2f319f7..af1d71f6 100644 --- a/BuildTasks/PackageExtension/v5/PackageExtension.ts +++ b/BuildTasks/PackageExtension/PackageExtension.ts @@ -1,5 +1,5 @@ import tl from "azure-pipelines-task-lib/task.js"; -import * as common from "../../Common/v5/Common.js"; +import * as common from "../Common/Common.js"; try { await common.runTfx(async tfx => { diff --git a/BuildTasks/PackageExtension/v5/icon.png b/BuildTasks/PackageExtension/icon.png similarity index 100% rename from BuildTasks/PackageExtension/v5/icon.png rename to BuildTasks/PackageExtension/icon.png diff --git a/BuildTasks/PackageExtension/v5/package-lock.json b/BuildTasks/PackageExtension/package-lock.json similarity index 100% rename from BuildTasks/PackageExtension/v5/package-lock.json rename to BuildTasks/PackageExtension/package-lock.json diff --git a/BuildTasks/PackageExtension/v5/package.json b/BuildTasks/PackageExtension/package.json similarity index 100% rename from BuildTasks/PackageExtension/v5/package.json rename to BuildTasks/PackageExtension/package.json diff --git a/BuildTasks/PackageExtension/v5/task.json b/BuildTasks/PackageExtension/task.json similarity index 98% rename from BuildTasks/PackageExtension/v5/task.json rename to BuildTasks/PackageExtension/task.json index 36b0ab97..9d3b6ba8 100644 --- a/BuildTasks/PackageExtension/v5/task.json +++ b/BuildTasks/PackageExtension/task.json @@ -227,11 +227,11 @@ ], "execution": { "Node20_1": { - "target": "PackageExtension/v5/PackageExtension.js", + "target": "PackageExtension/PackageExtension.js", "argumentFormat": "" }, "Node16": { - "target": "PackageExtension/v5/PackageExtension.js", + "target": "PackageExtension/PackageExtension.js", "argumentFormat": "" } }, diff --git a/BuildTasks/PackageExtension/v5/tsconfig.json b/BuildTasks/PackageExtension/tsconfig.json similarity index 77% rename from BuildTasks/PackageExtension/v5/tsconfig.json rename to BuildTasks/PackageExtension/tsconfig.json index b64d9608..d4900be1 100644 --- a/BuildTasks/PackageExtension/v5/tsconfig.json +++ b/BuildTasks/PackageExtension/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/PublishExtension/v5/PublishExtension.ts b/BuildTasks/PublishExtension/PublishExtension.ts similarity index 98% rename from BuildTasks/PublishExtension/v5/PublishExtension.ts rename to BuildTasks/PublishExtension/PublishExtension.ts index 6f4fe617..f71d0a62 100644 --- a/BuildTasks/PublishExtension/v5/PublishExtension.ts +++ b/BuildTasks/PublishExtension/PublishExtension.ts @@ -1,6 +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 * as common from "../Common/Common.js"; +import * as commonAuth from "../Common-Auth/CommonAuth.js"; import VsixEditor from "./vsixeditor.js"; await common.runTfx(async tfx => { diff --git a/BuildTasks/PublishExtension/v5/icon.png b/BuildTasks/PublishExtension/icon.png similarity index 100% rename from BuildTasks/PublishExtension/v5/icon.png rename to BuildTasks/PublishExtension/icon.png diff --git a/BuildTasks/PublishExtension/v5/package-lock.json b/BuildTasks/PublishExtension/package-lock.json similarity index 100% rename from BuildTasks/PublishExtension/v5/package-lock.json rename to BuildTasks/PublishExtension/package-lock.json diff --git a/BuildTasks/PublishExtension/v5/package.json b/BuildTasks/PublishExtension/package.json similarity index 100% rename from BuildTasks/PublishExtension/v5/package.json rename to BuildTasks/PublishExtension/package.json diff --git a/BuildTasks/PublishExtension/v5/task.json b/BuildTasks/PublishExtension/task.json similarity index 98% rename from BuildTasks/PublishExtension/v5/task.json rename to BuildTasks/PublishExtension/task.json index e792cbf0..9253ae25 100644 --- a/BuildTasks/PublishExtension/v5/task.json +++ b/BuildTasks/PublishExtension/task.json @@ -303,11 +303,11 @@ ], "execution": { "Node20_1": { - "target": "PublishExtension/v5/PublishExtension.js", + "target": "PublishExtension/PublishExtension.js", "argumentFormat": "" }, "Node16": { - "target": "PublishExtension/v5/PublishExtension.js", + "target": "PublishExtension/PublishExtension.js", "argumentFormat": "" } }, diff --git a/BuildTasks/PublishExtension/v5/tsconfig.json b/BuildTasks/PublishExtension/tsconfig.json similarity index 79% rename from BuildTasks/PublishExtension/v5/tsconfig.json rename to BuildTasks/PublishExtension/tsconfig.json index 1bf48af9..e14b0396 100644 --- a/BuildTasks/PublishExtension/v5/tsconfig.json +++ b/BuildTasks/PublishExtension/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/PublishExtension/v5/vsixeditor.ts b/BuildTasks/PublishExtension/vsixeditor.ts similarity index 99% rename from BuildTasks/PublishExtension/v5/vsixeditor.ts rename to BuildTasks/PublishExtension/vsixeditor.ts index 024278c1..2e6639ea 100644 --- a/BuildTasks/PublishExtension/v5/vsixeditor.ts +++ b/BuildTasks/PublishExtension/vsixeditor.ts @@ -3,7 +3,7 @@ import path from "node:path"; import os from "node:os"; 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 common from "../Common/Common.js"; interface VsixManifest { PackageManifest: { diff --git a/BuildTasks/PublishVSExtension/v5/PublishVSExtension.ts b/BuildTasks/PublishVSExtension/PublishVSExtension.ts similarity index 100% rename from BuildTasks/PublishVSExtension/v5/PublishVSExtension.ts rename to BuildTasks/PublishVSExtension/PublishVSExtension.ts diff --git a/BuildTasks/PublishVSExtension/v5/Utils.ts b/BuildTasks/PublishVSExtension/Utils.ts similarity index 100% rename from BuildTasks/PublishVSExtension/v5/Utils.ts rename to BuildTasks/PublishVSExtension/Utils.ts diff --git a/BuildTasks/PublishVSExtension/v5/icon.png b/BuildTasks/PublishVSExtension/icon.png similarity index 100% rename from BuildTasks/PublishVSExtension/v5/icon.png rename to BuildTasks/PublishVSExtension/icon.png diff --git a/BuildTasks/PublishVSExtension/v5/package-lock.json b/BuildTasks/PublishVSExtension/package-lock.json similarity index 100% rename from BuildTasks/PublishVSExtension/v5/package-lock.json rename to BuildTasks/PublishVSExtension/package-lock.json diff --git a/BuildTasks/PublishVSExtension/v5/package.json b/BuildTasks/PublishVSExtension/package.json similarity index 100% rename from BuildTasks/PublishVSExtension/v5/package.json rename to BuildTasks/PublishVSExtension/package.json diff --git a/BuildTasks/PublishVSExtension/v5/readme.md b/BuildTasks/PublishVSExtension/readme.md similarity index 100% rename from BuildTasks/PublishVSExtension/v5/readme.md rename to BuildTasks/PublishVSExtension/readme.md diff --git a/BuildTasks/PublishVSExtension/v5/screenshot.png b/BuildTasks/PublishVSExtension/screenshot.png similarity index 100% rename from BuildTasks/PublishVSExtension/v5/screenshot.png rename to BuildTasks/PublishVSExtension/screenshot.png diff --git a/BuildTasks/PublishVSExtension/v5/task.json b/BuildTasks/PublishVSExtension/task.json similarity index 96% rename from BuildTasks/PublishVSExtension/v5/task.json rename to BuildTasks/PublishVSExtension/task.json index 0de5c0af..afe8378a 100644 --- a/BuildTasks/PublishVSExtension/v5/task.json +++ b/BuildTasks/PublishVSExtension/task.json @@ -86,14 +86,14 @@ ], "execution": { "Node20_1": { - "target": "PublishVSExtension/v5/PublishVSExtension.js", + "target": "PublishVSExtension/PublishVSExtension.js", "argumentFormat": "", "platforms": [ "windows" ] }, "Node16": { - "target": "PublishVSExtension/v5/PublishVSExtension.js", + "target": "PublishVSExtension/PublishVSExtension.js", "argumentFormat": "", "platforms": [ "windows" diff --git a/BuildTasks/PublishVSExtension/v5/tsconfig.json b/BuildTasks/PublishVSExtension/tsconfig.json similarity index 77% rename from BuildTasks/PublishVSExtension/v5/tsconfig.json rename to BuildTasks/PublishVSExtension/tsconfig.json index e9528d8c..8f5bb9af 100644 --- a/BuildTasks/PublishVSExtension/v5/tsconfig.json +++ b/BuildTasks/PublishVSExtension/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/ShareExtension/v5/ShareExtension.ts b/BuildTasks/ShareExtension/ShareExtension.ts similarity index 84% rename from BuildTasks/ShareExtension/v5/ShareExtension.ts rename to BuildTasks/ShareExtension/ShareExtension.ts index 3e9ebe90..b93c344a 100644 --- a/BuildTasks/ShareExtension/v5/ShareExtension.ts +++ b/BuildTasks/ShareExtension/ShareExtension.ts @@ -1,6 +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"; +import * as common from "../Common/Common.js"; +import * as commonAuth from "../Common-Auth/CommonAuth.js"; await common.runTfx(async tfx => { tfx.arg(["extension", "share", "--no-color"]); diff --git a/BuildTasks/ShareExtension/v5/icon.png b/BuildTasks/ShareExtension/icon.png similarity index 100% rename from BuildTasks/ShareExtension/v5/icon.png rename to BuildTasks/ShareExtension/icon.png diff --git a/BuildTasks/ShareExtension/v5/package-lock.json b/BuildTasks/ShareExtension/package-lock.json similarity index 100% rename from BuildTasks/ShareExtension/v5/package-lock.json rename to BuildTasks/ShareExtension/package-lock.json diff --git a/BuildTasks/ShareExtension/v5/package.json b/BuildTasks/ShareExtension/package.json similarity index 100% rename from BuildTasks/ShareExtension/v5/package.json rename to BuildTasks/ShareExtension/package.json diff --git a/BuildTasks/ShareExtension/v5/task.json b/BuildTasks/ShareExtension/task.json similarity index 97% rename from BuildTasks/ShareExtension/v5/task.json rename to BuildTasks/ShareExtension/task.json index c0f21e1e..00e6c8b9 100644 --- a/BuildTasks/ShareExtension/v5/task.json +++ b/BuildTasks/ShareExtension/task.json @@ -149,11 +149,11 @@ ], "execution": { "Node20_1": { - "target": "ShareExtension/v5/ShareExtension.js", + "target": "ShareExtension/ShareExtension.js", "argumentFormat": "" }, "Node16": { - "target": "ShareExtension/v5/ShareExtension.js", + "target": "ShareExtension/ShareExtension.js", "argumentFormat": "" } }, diff --git a/BuildTasks/ShareExtension/v5/tsconfig.json b/BuildTasks/ShareExtension/tsconfig.json similarity index 76% rename from BuildTasks/ShareExtension/v5/tsconfig.json rename to BuildTasks/ShareExtension/tsconfig.json index e69fca07..6ac4ead4 100644 --- a/BuildTasks/ShareExtension/v5/tsconfig.json +++ b/BuildTasks/ShareExtension/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/TfxInstaller/v5/.npmrc b/BuildTasks/TfxInstaller/.npmrc similarity index 100% rename from BuildTasks/TfxInstaller/v5/.npmrc rename to BuildTasks/TfxInstaller/.npmrc diff --git a/BuildTasks/TfxInstaller/v5/TfxInstaller.ts b/BuildTasks/TfxInstaller/TfxInstaller.ts similarity index 100% rename from BuildTasks/TfxInstaller/v5/TfxInstaller.ts rename to BuildTasks/TfxInstaller/TfxInstaller.ts diff --git a/BuildTasks/TfxInstaller/v5/icon.png b/BuildTasks/TfxInstaller/icon.png similarity index 100% rename from BuildTasks/TfxInstaller/v5/icon.png rename to BuildTasks/TfxInstaller/icon.png diff --git a/BuildTasks/TfxInstaller/v5/package-lock.json b/BuildTasks/TfxInstaller/package-lock.json similarity index 100% rename from BuildTasks/TfxInstaller/v5/package-lock.json rename to BuildTasks/TfxInstaller/package-lock.json diff --git a/BuildTasks/TfxInstaller/v5/package.json b/BuildTasks/TfxInstaller/package.json similarity index 100% rename from BuildTasks/TfxInstaller/v5/package.json rename to BuildTasks/TfxInstaller/package.json diff --git a/BuildTasks/TfxInstaller/v5/task.json b/BuildTasks/TfxInstaller/task.json similarity index 93% rename from BuildTasks/TfxInstaller/v5/task.json rename to BuildTasks/TfxInstaller/task.json index 09a5b9e4..e159c211 100644 --- a/BuildTasks/TfxInstaller/v5/task.json +++ b/BuildTasks/TfxInstaller/task.json @@ -52,11 +52,11 @@ ], "execution": { "Node20_1": { - "target": "TfxInstaller/v5/TfxInstaller.js", + "target": "TfxInstaller/TfxInstaller.js", "argumentFormat": "" }, "Node16": { - "target": "TfxInstaller/v5/TfxInstaller.js", + "target": "TfxInstaller/TfxInstaller.js", "argumentFormat": "" } } diff --git a/BuildTasks/TfxInstaller/v5/tsconfig.json b/BuildTasks/TfxInstaller/tsconfig.json similarity index 76% rename from BuildTasks/TfxInstaller/v5/tsconfig.json rename to BuildTasks/TfxInstaller/tsconfig.json index 4acefe76..8985bb3f 100644 --- a/BuildTasks/TfxInstaller/v5/tsconfig.json +++ b/BuildTasks/TfxInstaller/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts b/BuildTasks/UnpublishExtension/UnpublishExtension.ts similarity index 83% rename from BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts rename to BuildTasks/UnpublishExtension/UnpublishExtension.ts index 4b6d5da1..3a584bf1 100644 --- a/BuildTasks/UnpublishExtension/v5/UnpublishExtension.ts +++ b/BuildTasks/UnpublishExtension/UnpublishExtension.ts @@ -1,6 +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"; +import * as common from "../Common/Common.js"; +import * as commonAuth from "../Common-Auth/CommonAuth.js"; await common.runTfx(async tfx => { try { diff --git a/BuildTasks/UnpublishExtension/v5/icon.png b/BuildTasks/UnpublishExtension/icon.png similarity index 100% rename from BuildTasks/UnpublishExtension/v5/icon.png rename to BuildTasks/UnpublishExtension/icon.png diff --git a/BuildTasks/UnpublishExtension/v5/package-lock.json b/BuildTasks/UnpublishExtension/package-lock.json similarity index 100% rename from BuildTasks/UnpublishExtension/v5/package-lock.json rename to BuildTasks/UnpublishExtension/package-lock.json diff --git a/BuildTasks/UnpublishExtension/v5/package.json b/BuildTasks/UnpublishExtension/package.json similarity index 100% rename from BuildTasks/UnpublishExtension/v5/package.json rename to BuildTasks/UnpublishExtension/package.json diff --git a/BuildTasks/UnpublishExtension/v5/task.json b/BuildTasks/UnpublishExtension/task.json similarity index 97% rename from BuildTasks/UnpublishExtension/v5/task.json rename to BuildTasks/UnpublishExtension/task.json index 843be374..cd3a40aa 100644 --- a/BuildTasks/UnpublishExtension/v5/task.json +++ b/BuildTasks/UnpublishExtension/task.json @@ -144,11 +144,11 @@ ], "execution": { "Node20_1": { - "target": "UnpublishExtension/v5/UnpublishExtension.js", + "target": "UnpublishExtension/UnpublishExtension.js", "argumentFormat": "" }, "Node16": { - "target": "UnpublishExtension/v5/UnpublishExtension.js", + "target": "UnpublishExtension/UnpublishExtension.js", "argumentFormat": "" } }, diff --git a/BuildTasks/UnpublishExtension/v5/tsconfig.json b/BuildTasks/UnpublishExtension/tsconfig.json similarity index 77% rename from BuildTasks/UnpublishExtension/v5/tsconfig.json rename to BuildTasks/UnpublishExtension/tsconfig.json index 1e89c1ed..bd8cb7ed 100644 --- a/BuildTasks/UnpublishExtension/v5/tsconfig.json +++ b/BuildTasks/UnpublishExtension/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.v5.json", + "extends": "../tsconfig.v5.json", "compilerOptions": { "outDir": "./", "sourceRoot": "./" diff --git a/BuildTasks/tsconfig.v5.json b/BuildTasks/tsconfig.v5.json index e832129e..85c6fe45 100644 --- a/BuildTasks/tsconfig.v5.json +++ b/BuildTasks/tsconfig.v5.json @@ -17,11 +17,11 @@ ] }, "include": [ - "./Common/v5/Common.ts", - "./Common/v5/uuidv5.d.ts", - "./Common-Auth/v5/CommonAuth.ts" + "./Common/Common.ts", + "./Common/uuidv5.d.ts", + "./Common-Auth/CommonAuth.ts" ], "exclude": [ - "*/v5/**/*.js" + "*/**/*.js" ] } diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 0d83e775..e4dfde10 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -76,11 +76,11 @@ stages: "*.md", "tsconfig.tsbuildinfo", "@types" - ) -recurse BuildTasks\*\v* + ) -recurse BuildTasks\*\ del -include @( "msal-browser" - ) -recurse BuildTasks\*\v*\node_modules\@azure\ + ) -recurse BuildTasks\*\node_modules\@azure\ del -include @( ".package-lock.json", @@ -104,11 +104,11 @@ stages: "LICENSE", "license", "AUTHORS" - ) -recurse BuildTasks\*\v*\node_modules -force + ) -recurse BuildTasks\*\node_modules -force del -include @( "*.pem" - ) -recurse BuildTasks\*\v*\node_modules\azure-pipelines-tasks-azure-arm-rest\openssl*\PEM\ -force + ) -recurse BuildTasks\*\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 829b3bb6..4be51b44 100644 --- a/package.json +++ b/package.json @@ -15,17 +15,17 @@ "initdev": "npm run initdev:npm", "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\"", + "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:v5", - "compile:tasks:v5": "glob-exec \"BuildTasks/*/v5/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", + "compile:tasks:v5": "glob-exec \"BuildTasks/*/tsconfig.json\" -- \"tsc -b {{files.join(' ')}}\"", "postcompile:tasks": "npm run lint:tasks", "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}}']}\"", + "lint:tasks:v5": "glob-exec --parallel --foreach \"BuildTasks/*/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", "build:clean": "npm run clean && npm run initdev && npm run build", "build:tasks": "npm run compile:tasks", - "package": "glob-exec --parallel --foreach \"BuildTasks/*/*/tsconfig.json\" -- \"cd {{file.dir}} && npm dedupe && npm prune --omit=dev\"", + "package": "glob-exec --parallel --foreach \"BuildTasks/*/tsconfig.json\" -- \"cd {{file.dir}} && npm dedupe && npm prune --omit=dev\"", "clean": "git clean -fdX" }, "author": "Microsoft Corporation", diff --git a/test-extensionversion.cmd b/test-extensionversion.cmd index ac826bf4..252bb0be 100644 --- a/test-extensionversion.cmd +++ b/test-extensionversion.cmd @@ -1,14 +1,17 @@ set INPUT_EXTENSIONID=vsts-ensure-tests-tasks set INPUT_EXTENSIONVERSION=8.9.10 set INPUT_PUBLISHERID=jessehouwing -set INPUT_ROOTFOLDER=C:\Users\jesse\source\repos\vsts-ping-task-demo +set INPUT_ROOTFOLDER=D:\azure-devops-extension-tasks set INPUT_UPDATETASKSID=true set INPUT_UPDATETASKSVERSION=true set INPUT_UPDATETASKSVERSIONTYPE=minor SET INPUT_CONNECTEDSERVICENAME=A -SET INPUT_VERSION=0.x +SET INPUT_VERSION=builtin +set azdo_token= SET ENDPOINT_URL_A=https://marketplace.visualstudio.com -SET ENDPOINT_AUTH_A={ "parameters": { "apitoken": "token", "username": "user", "password": "password" }, "Scheme": "basic" } +SET ENDPOINT_AUTH_A={ "parameters": { "password": "%azdo_token%" }, "Scheme": "basic" } +set __TFXPATH=%~dp0BuildTasks\TfxInstaller\v5\node_modules\.bin +set PATH=%__TFXPATH%;%PATH% set AGENT_WORKFOLDER=%temp%\agent\work set AGENT_TOOLSDIRECTORY=%temp%\agent\tools @@ -24,11 +27,11 @@ set NO_UPDATE_NOTIFIER=true REM cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v5\TfxInstaller\v5 +pushd BuildTasks\TfxInstaller\TfxInstaller node TfxInstaller.js popd -pushd BuildTasks\ExtensionVersion\v5\ExtensionVersion\v5 +pushd BuildTasks\ExtensionVersion\ExtensionVersion node ExtensionVersion.js popd \ No newline at end of file diff --git a/test-isvalid.cmd b/test-isvalid.cmd index dec78f0c..0aad2f71 100644 --- a/test-isvalid.cmd +++ b/test-isvalid.cmd @@ -24,7 +24,7 @@ set NO_UPDATE_NOTIFIER=true REM cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v5\TfxInstaller\v5 +pushd BuildTasks\TfxInstaller\v5\TfxInstaller node TfxInstaller.js popd @@ -33,7 +33,7 @@ echo. echo ======================================== echo Testing IsValidExtension v5 echo ======================================== -pushd BuildTasks\IsValidExtensionAgent\v5\IsValidExtensionAgent\v5 +pushd BuildTasks\IsValidExtensionAgent\IsValidExtensionAgent\v5 node IsValidExtension.js popd @@ -42,7 +42,7 @@ echo. echo ======================================== echo Testing IsValidExtension v5 with TFX_TRACE=1 echo ======================================== -pushd BuildTasks\IsValidExtensionAgent\v5\IsValidExtensionAgent\v5 +pushd BuildTasks\IsValidExtensionAgent\IsValidExtensionAgent\v5 node IsValidExtension.js popd set TFX_TRACE= diff --git a/test-packaging.cmd b/test-packaging.cmd index 9214b959..3267bb0d 100644 --- a/test-packaging.cmd +++ b/test-packaging.cmd @@ -1,4 +1,4 @@ -set INPUT_VERSION=v0.7.x +set INPUT_VERSION=builtin set INPUT_PUBLISHERID=meA set AGENT_VERSION=2.211.2 @@ -16,20 +16,21 @@ set NO_UPDATE_NOTIFIER=true cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v5\TfxInstaller\v5 +pushd BuildTasks\TfxInstaller\TfxInstaller node TfxInstaller.js popd -set __TFXPATH=C:\Users\JESSEH~1\AppData\Local\Temp\agent\tools\tfx\0.18.0\x64\ +set __TFXPATH=%~dp0BuildTasks\TfxInstaller\node_modules\.bin +set PATH=%__TFXPATH%;%PATH% set INPUT_EXTENSIONID=ext set INPUT_EXTENSIONVERSION=8.9.10 -set INPUT_ROOTFOLDER=C:\Users\jesse\source\repos\vsts-ping-task-demo +set INPUT_ROOTFOLDER=D:\azure-devops-extension-tasks\ set INPUT_UPDATETASKSID=true set INPUT_UPDATETASKSVERSION=true set INPUT_UPDATETASKSVERSIONTYPE=minor -set INPUT_PATTERNMANIFEST=vss-extension*.json -pushd BuildTasks\PackageExtension\v5\PackageExtension\v5 +set INPUT_PATTERNMANIFEST=vss-extension.json +pushd BuildTasks\PackageExtension\PackageExtension node PackageExtension.js popd \ No newline at end of file diff --git a/test-publishing.cmd b/test-publishing.cmd index 2a497444..18530f8b 100644 --- a/test-publishing.cmd +++ b/test-publishing.cmd @@ -1,7 +1,7 @@ -SET SYSTEM_DEFAULTWORKINGDIRECTORY=E:\azure-devops-extension-tasks\ -set INPUT_CWD=E:\azure-devops-extension-tasks\ -set INPUT_ROOTFOLDER=E:\azure-devops-extension-tasks\ -set INPUT_VSIXFILE=E:\azure-devops-extension-tasks\ms-devlabs.vsts-developer-tools-build-tasks-5.0.0.vsix +SET SYSTEM_DEFAULTWORKINGDIRECTORY=D:\azure-devops-extension-tasks\ +set INPUT_CWD=D:\azure-devops-extension-tasks\ +set INPUT_ROOTFOLDER=D:\azure-devops-extension-tasks\ +set INPUT_VSIXFILE=D:\azure-devops-extension-tasks\jessehouwing.vsts-developer-tools-build-tasks-5.0.0.vsix SET INPUT_CONNECTTO=VsTeam SET INPUT_FILETYPE=vsix SET INPUT_EXTENSIONVISIBILITY=default @@ -9,8 +9,14 @@ SET INPUT_EXTENSIONVERSION=3.26.23 SET INPUT_UPDATETASKSVERSION=true SET INPUT_UPDATETASKSVERSIONTYPE=minor SET INPUT_CONNECTEDSERVICENAME=A + +SET INPUT_VERSION=builtin +set azdo_token= SET ENDPOINT_URL_A=https://marketplace.visualstudio.com -SET ENDPOINT_AUTH_A={ "parameters": { "apitoken": "token", "username": "user", "password": "password" }, "Scheme": "basic" } +SET ENDPOINT_AUTH_A={ "parameters": { "password": "%azdo_token%" }, "Scheme": "basic" } + +set __TFXPATH=%~dp0BuildTasks\TfxInstaller\node_modules\.bin +set PATH=%__TFXPATH%;%PATH% set NODE_ENV=production set NO_UPDATE_NOTIFIER=true @@ -28,8 +34,7 @@ fnm use v20 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\v5\PublishExtension\v5 +pushd BuildTasks\PublishExtension\PublishExtension node PublishExtension.js popd \ No newline at end of file diff --git a/test-tfxinstaller.cmd b/test-tfxinstaller.cmd index 73d82270..19d5322b 100644 --- a/test-tfxinstaller.cmd +++ b/test-tfxinstaller.cmd @@ -19,21 +19,21 @@ fnm use v20 cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v5\ +pushd BuildTasks\TfxInstaller\ set INPUT_VERSION=0.21.1 set INPUT_CHECKLATEST=true -node TfxInstaller\v5\TfxInstaller.js +node TfxInstaller\TfxInstaller.js set INPUT_VERSION=0.21.x set INPUT_CHECKLATEST=true -node TfxInstaller\v5\TfxInstaller.js +node TfxInstaller\TfxInstaller.js set INPUT_VERSION=latest set INPUT_CHECKLATEST=true -node TfxInstaller\v5\TfxInstaller.js +node TfxInstaller\TfxInstaller.js set INPUT_VERSION=builtin -node TfxInstaller\v5\TfxInstaller.js +node TfxInstaller\TfxInstaller.js popd From 31e0adb4e599abc8ba9739a1302067689809d45d Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Mon, 10 Nov 2025 21:10:29 +0100 Subject: [PATCH 19/24] Pus vswhere in the right location --- azure-pipelines.yml | 8 ++++---- test-extensionversion.cmd | 2 +- test-isvalid.cmd | 8 ++++---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index e4dfde10..aab5878a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -37,8 +37,8 @@ stages: $vswhereLatest = "https://github.com/Microsoft/vswhere/releases/latest/download/vswhere.exe" $targets = @( - ".\BuildTasks\PublishVSExtension\v5\tools\" - ".\BuildTasks\PublishVSExtension\v5\PublishVSExtension\v5\tools\" + ".\BuildTasks\PublishVSExtension\tools\" + ".\BuildTasks\PublishVSExtension\PublishVSExtension\tools\" ) invoke-webrequest $vswhereLatest -OutFile $env:temp\vswhere.exe @@ -65,8 +65,8 @@ stages: - pwsh: | $erroractionpreference = "silentlycontinue" - del BuildTasks\PublishExtension\v5\node_modules\7zip-bin\linux -recurse - del BuildTasks\PublishExtension\v5\node_modules\7zip-bin\mac -recurse + del BuildTasks\PublishExtension\node_modules\7zip-bin\linux -recurse + del BuildTasks\PublishExtension\node_modules\7zip-bin\mac -recurse del -include @( "package-lock.json", "*.ts", diff --git a/test-extensionversion.cmd b/test-extensionversion.cmd index 252bb0be..d039585e 100644 --- a/test-extensionversion.cmd +++ b/test-extensionversion.cmd @@ -10,7 +10,7 @@ SET INPUT_VERSION=builtin set azdo_token= SET ENDPOINT_URL_A=https://marketplace.visualstudio.com SET ENDPOINT_AUTH_A={ "parameters": { "password": "%azdo_token%" }, "Scheme": "basic" } -set __TFXPATH=%~dp0BuildTasks\TfxInstaller\v5\node_modules\.bin +set __TFXPATH=%~dp0BuildTasks\TfxInstaller\node_modules\.bin set PATH=%__TFXPATH%;%PATH% set AGENT_WORKFOLDER=%temp%\agent\work diff --git a/test-isvalid.cmd b/test-isvalid.cmd index 0aad2f71..c06af52c 100644 --- a/test-isvalid.cmd +++ b/test-isvalid.cmd @@ -12,7 +12,7 @@ set AGENT_WORKFOLDER=%temp%\agent\work set AGENT_TOOLSDIRECTORY=%temp%\agent\tools SET AGENT_TEMPDIRECTORY=%temp%\agent\tmp REM Use a relative path to make the script portable -set __TFXPATH=%~dp0BuildTasks\TfxInstaller\v5\node_modules\.bin +set __TFXPATH=%~dp0BuildTasks\TfxInstaller\node_modules\.bin set PATH=%__TFXPATH%;%PATH% md %temp%\agent md %AGENT_WORKFOLDER% @@ -24,7 +24,7 @@ set NO_UPDATE_NOTIFIER=true REM cmd /c "npm run build:tasks" -pushd BuildTasks\TfxInstaller\v5\TfxInstaller +pushd BuildTasks\TfxInstaller\TfxInstaller node TfxInstaller.js popd @@ -33,7 +33,7 @@ echo. echo ======================================== echo Testing IsValidExtension v5 echo ======================================== -pushd BuildTasks\IsValidExtensionAgent\IsValidExtensionAgent\v5 +pushd BuildTasks\IsValidExtensionAgent\IsValidExtensionAgent node IsValidExtension.js popd @@ -42,7 +42,7 @@ echo. echo ======================================== echo Testing IsValidExtension v5 with TFX_TRACE=1 echo ======================================== -pushd BuildTasks\IsValidExtensionAgent\IsValidExtensionAgent\v5 +pushd BuildTasks\IsValidExtensionAgent\IsValidExtensionAgent node IsValidExtension.js popd set TFX_TRACE= From 0c01c56f23e03aab8f3be2d27f7017fcd1fc37e6 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Mon, 10 Nov 2025 21:13:25 +0100 Subject: [PATCH 20/24] Adding a debug build for publisher jessehouwing --- azure-pipelines.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index aab5878a..ea311c6a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -144,6 +144,19 @@ stages: extensionTag: '-dev' extensionVisibility: 'private' + - task: PackageAzureDevOpsExtension@5 + name: 'packagedebug' + displayName: 'Package the private extension' + inputs: + rootFolder: '$(Build.SourcesDirectory)' + outputPath: '$(Build.ArtifactStagingDirectory)\jessehouwing.vsts-developer-tools-build-tasks-dev.vsix' + publisherId: 'jessehouwing' + extensionName: 'Azure DevOps Extension Tasks' + extensionId: 'vsts-developer-tools-build-tasks' + extensionVersion: '$(Build.BuildNumber)' + extensionTag: '-dev' + extensionVisibility: 'private' + - task: PackageAzureDevOpsExtension@5 displayName: 'Package the public extension' name: 'packagepublic' From 678dcfdcadb3794a452e235babbc2f2fc68d9486 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Tue, 11 Nov 2025 09:15:49 +0100 Subject: [PATCH 21/24] Move all cruft out of the root directory --- .env.example | 11 ------- SECURITY.md => .github/SECURITY.md | 0 .github/copilot-instructions.md | 2 +- .github/renovate.json | 31 ------------------ .snyk | 10 ------ add-task.png => Metadata/Images/add-task.png | Bin .../Images/new-icons.psd | Bin .../Images/permissions.png | Bin .../Images/screenshot-packagetask.png | Bin .../Images/screenshot-pipeline.png | Bin .../Images/screenshot-tfsmarketplace.png | Bin .../Images/screenshot-vstsmarketplace.png | Bin .../Images/tools-icon.png | Bin overview.md => Metadata/overview.md | 6 ++-- README.md | 2 +- foreach-task.ps1 => Scripts/foreach-task.ps1 | 0 .../test-extensionversion.cmd | 0 test-isvalid.cmd => Scripts/test-isvalid.cmd | 0 .../test-packaging.cmd | 0 .../test-publishing.cmd | 0 .../test-tfxinstaller.cmd | 0 vss-extension.json | 8 ++--- 22 files changed, 9 insertions(+), 61 deletions(-) delete mode 100644 .env.example rename SECURITY.md => .github/SECURITY.md (100%) delete mode 100644 .github/renovate.json delete mode 100644 .snyk rename add-task.png => Metadata/Images/add-task.png (100%) rename new-icons.psd => Metadata/Images/new-icons.psd (100%) rename permissions.png => Metadata/Images/permissions.png (100%) rename screenshot-packagetask.png => Metadata/Images/screenshot-packagetask.png (100%) rename screenshot-pipeline.png => Metadata/Images/screenshot-pipeline.png (100%) rename screenshot-tfsmarketplace.png => Metadata/Images/screenshot-tfsmarketplace.png (100%) rename screenshot-vstsmarketplace.png => Metadata/Images/screenshot-vstsmarketplace.png (100%) rename tools-icon.png => Metadata/Images/tools-icon.png (100%) rename overview.md => Metadata/overview.md (91%) rename foreach-task.ps1 => Scripts/foreach-task.ps1 (100%) rename test-extensionversion.cmd => Scripts/test-extensionversion.cmd (100%) rename test-isvalid.cmd => Scripts/test-isvalid.cmd (100%) rename test-packaging.cmd => Scripts/test-packaging.cmd (100%) rename test-publishing.cmd => Scripts/test-publishing.cmd (100%) rename test-tfxinstaller.cmd => Scripts/test-tfxinstaller.cmd (100%) diff --git a/.env.example b/.env.example deleted file mode 100644 index 6e66e01b..00000000 --- a/.env.example +++ /dev/null @@ -1,11 +0,0 @@ -NODE_ENV="development" -INPUT_ConnectedServiceName="ConnectedServiceName" -ENDPOINT_URL_ConnectedServiceName="https://marketplace.visualstudio.com" -ENDPOINT_AUTH_PARAMETER_ConnectedServiceName_password="pat-token" - -INPUT_vsixFile="C:\_Utkarsh\GitHub\InfoBarDemo\InfoBarDemo.vsix" -INPUT_rootFolder="C:\_Utkarsh\GitHub\InfoBarDemo" -INPUT_manifestFile="C:\_Utkarsh\GitHub\InfoBarDemo\extension.manifest.json" -INPUT_ignoreWarnings="VSIXValidatorWarning03" -INPUT_publisherId="onlyutkarsh" -SYSTEM_DEBUG="true" diff --git a/SECURITY.md b/.github/SECURITY.md similarity index 100% rename from SECURITY.md rename to .github/SECURITY.md diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 2186bdee..3cfca734 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -45,7 +45,7 @@ Purpose: Help agents quickly contribute to Azure DevOps Extension Tasks (publish ## 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). +- 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 diff --git a/.github/renovate.json b/.github/renovate.json deleted file mode 100644 index bc8efc1d..00000000 --- a/.github/renovate.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": ["config:base"], - "azure-pipelines": {"enabled": true}, - "github-actions": {"enabled": false}, - "packageRules": [ - { - "datasources": ["github-releases", "github-tags", "github-release-attachments"], - "enabled": false - }, - { - "rangeStrategy": "bump", - "matchDatasources": ["npm"] - }, - { - "matchPackageNames": ["azure-pipelines-task-lib", "azure-pipelines-tool-lib", "@types/node"], - "matchUpdateTypes": ["major"], - "enabled": false - }, - { - "matchPackageNames": ["@types/fs-extra", "fs-extra"], - "matchPaths": ["BuildTasks/*/v3/**/package.json", "+(package.json)"], - "matchUpdateTypes": ["major"], - "enabled": false - }, - { - "matchDatasources": ["azure-pipelines-tasks"], - "extractVersion": "^(?\\d+)" - } - ] -} diff --git a/.snyk b/.snyk deleted file mode 100644 index c3a4d873..00000000 --- a/.snyk +++ /dev/null @@ -1,10 +0,0 @@ -# Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. -version: v1.25.0 -# ignores vulnerabilities until expiry date; change duration by modifying expiry date -ignore: - SNYK-JS-MOCKERY-3043117: - - '*': - reason: None Given - expires: 2023-04-02T12:23:18.191Z - created: 2023-03-03T12:23:18.195Z -patch: {} diff --git a/add-task.png b/Metadata/Images/add-task.png similarity index 100% rename from add-task.png rename to Metadata/Images/add-task.png diff --git a/new-icons.psd b/Metadata/Images/new-icons.psd similarity index 100% rename from new-icons.psd rename to Metadata/Images/new-icons.psd diff --git a/permissions.png b/Metadata/Images/permissions.png similarity index 100% rename from permissions.png rename to Metadata/Images/permissions.png diff --git a/screenshot-packagetask.png b/Metadata/Images/screenshot-packagetask.png similarity index 100% rename from screenshot-packagetask.png rename to Metadata/Images/screenshot-packagetask.png diff --git a/screenshot-pipeline.png b/Metadata/Images/screenshot-pipeline.png similarity index 100% rename from screenshot-pipeline.png rename to Metadata/Images/screenshot-pipeline.png diff --git a/screenshot-tfsmarketplace.png b/Metadata/Images/screenshot-tfsmarketplace.png similarity index 100% rename from screenshot-tfsmarketplace.png rename to Metadata/Images/screenshot-tfsmarketplace.png diff --git a/screenshot-vstsmarketplace.png b/Metadata/Images/screenshot-vstsmarketplace.png similarity index 100% rename from screenshot-vstsmarketplace.png rename to Metadata/Images/screenshot-vstsmarketplace.png diff --git a/tools-icon.png b/Metadata/Images/tools-icon.png similarity index 100% rename from tools-icon.png rename to Metadata/Images/tools-icon.png diff --git a/overview.md b/Metadata/overview.md similarity index 91% rename from overview.md rename to Metadata/overview.md index 5de31a45..f5daa473 100644 --- a/overview.md +++ b/Metadata/overview.md @@ -4,7 +4,7 @@ This extension provides build and release tasks for packaging and publishing Azu After installing the extension, you can add one (or more) of the tasks to [your pipeline](https://docs.microsoft.com/en-us/azure/devops/pipelines/?WT.mc_id=DOP-MVP-5001511&view=azure-devops). You can find an [example YAML pipeline in the form of the pipeline which publishes this extension](https://github.com/microsoft/azure-devops-extension-tasks/blob/main/azure-pipelines.yml). -![add-task](add-task.png) +![add-task](./Images/add-task.png) If you plan to publish to the Marketplace, you will need to [create a personal access token](https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?WT.mc_id=DOP-MVP-5001511&view=azure-devops&tabs=preview-page). @@ -35,7 +35,7 @@ Visual Studio * **Query Version**: `All accessible organisations`, `Marketplace (read)` * **Is Valid**: `All accessible organisations`, `Marketplace (read)` -![Permissions](permissions.png) +![Permissions](./Images/permissions.png) ## Get the source @@ -47,4 +47,4 @@ This extension was created by Microsoft with help from the community. We'd like ## Feedback and issues -If you have feedback or issues, please [send an email](mailto:jhouwing@xpirit.com) or file an issue on [GitHub](https://github.com/Microsoft/azure-devops-extension-tasks/issues) +If you have feedback or issues, please [send an email](mailto:jesse.houwing@xebia.com) or file an issue on [GitHub](https://github.com/Microsoft/azure-devops-extension-tasks/issues) diff --git a/README.md b/README.md index 56879292..4c373487 100644 --- a/README.md +++ b/README.md @@ -33,7 +33,7 @@ Visual Studio * **Query Version**: `All accessible organizations`, `Marketplace (read)` * **Is Valid**: `All accessible organizations`, `Marketplace (read)` -![Permissions](permissions.png) +![Permissions](./Metadata/Images/permissions.png) ## Contribute diff --git a/foreach-task.ps1 b/Scripts/foreach-task.ps1 similarity index 100% rename from foreach-task.ps1 rename to Scripts/foreach-task.ps1 diff --git a/test-extensionversion.cmd b/Scripts/test-extensionversion.cmd similarity index 100% rename from test-extensionversion.cmd rename to Scripts/test-extensionversion.cmd diff --git a/test-isvalid.cmd b/Scripts/test-isvalid.cmd similarity index 100% rename from test-isvalid.cmd rename to Scripts/test-isvalid.cmd diff --git a/test-packaging.cmd b/Scripts/test-packaging.cmd similarity index 100% rename from test-packaging.cmd rename to Scripts/test-packaging.cmd diff --git a/test-publishing.cmd b/Scripts/test-publishing.cmd similarity index 100% rename from test-publishing.cmd rename to Scripts/test-publishing.cmd diff --git a/test-tfxinstaller.cmd b/Scripts/test-tfxinstaller.cmd similarity index 100% rename from test-tfxinstaller.cmd rename to Scripts/test-tfxinstaller.cmd diff --git a/vss-extension.json b/vss-extension.json index 8a4775c9..882c176d 100644 --- a/vss-extension.json +++ b/vss-extension.json @@ -20,7 +20,7 @@ "Visual Studio Extensions" ], "icons": { - "default": "tools-icon.png" + "default": "Metadata/Images/tools-icon.png" }, "public": true, "targets": [ @@ -34,7 +34,7 @@ ], "content": { "details": { - "path": "overview.md" + "path": "Metadata/overview.md" }, "license": { "path": "license.txt" @@ -94,11 +94,11 @@ "path": "BuildTasks/TfxInstaller" }, { - "path": "add-task.png", + "path": "Metadata/Images/add-task.png", "addressable": true }, { - "path": "permissions.png", + "path": "Metadata/Images/permissions.png", "addressable": true } ], From d153d14a73bbfd36355ee3f3823c6e8ec42fc3ed Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Thu, 13 Nov 2025 20:52:38 +0100 Subject: [PATCH 22/24] Fixing publication issue by deleting the tfx-cli tests --- azure-pipelines.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index ea311c6a..924b97d3 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -82,6 +82,10 @@ stages: "msal-browser" ) -recurse BuildTasks\*\node_modules\@azure\ + del -include @( + "_tests" + ) -recurse BuildTasks\TfxInstaller\node_modules\tfx-cli\ + del -include @( ".package-lock.json", "*.map", From 8edc8a2a374f0967f321aae84d20e668160c809f Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Thu, 13 Nov 2025 20:55:44 +0100 Subject: [PATCH 23/24] Delete more stuff --- azure-pipelines.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 924b97d3..23096f55 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -107,7 +107,10 @@ stages: "LICENSE-MIT", "LICENSE", "license", - "AUTHORS" + "AUTHORS", + "tfx-cli-0.22.2.tgz", + "typings", + "browser" ) -recurse BuildTasks\*\node_modules -force del -include @( From 27df262cec86e3335eae463d01782cc1950a2bf5 Mon Sep 17 00:00:00 2001 From: Jesse Houwing Date: Thu, 13 Nov 2025 21:41:40 +0100 Subject: [PATCH 24/24] Fixing `tfx` lookup after moving. --- BuildTasks/TfxInstaller/TfxInstaller.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildTasks/TfxInstaller/TfxInstaller.ts b/BuildTasks/TfxInstaller/TfxInstaller.ts index 862995ce..35eb3a1c 100644 --- a/BuildTasks/TfxInstaller/TfxInstaller.ts +++ b/BuildTasks/TfxInstaller/TfxInstaller.ts @@ -42,7 +42,7 @@ catch (error: any) { async function getTfx(versionSpec: string, checkLatest: boolean): Promise { if (versionSpec === "builtin") { const currentDir = path.dirname(fileURLToPath(import.meta.url)); - const builtInTfxPath = findTfxExecutablePath(path.join(currentDir, "..", "..")); + const builtInTfxPath = findTfxExecutablePath(path.join(currentDir, "..")); if (os.platform() !== "win32") {