|
| 1 | +"use strict"; |
| 2 | +Object.defineProperty(exports, "__esModule", { value: true }); |
| 3 | +var path = require("path"); |
| 4 | +var child_process_1 = require("child_process"); |
| 5 | +var fs = require("fs-extra"); |
| 6 | +var async_1 = require("async"); |
| 7 | +var extension_version_1 = require("./extension-version"); |
| 8 | +var tasks_1 = require("./tasks"); |
| 9 | +var configuration_1 = require("./configuration"); |
| 10 | +var endpoints_1 = require("./endpoints"); |
| 11 | +var currentDirectory = process.cwd(); |
| 12 | +var buildOutputDirectory = path.join(currentDirectory, '.BuildOutput'); |
| 13 | +var extensionDirectory = path.join(currentDirectory, 'Extension'); |
| 14 | +var tasksDirectory = path.join(currentDirectory, 'Tasks'); |
| 15 | +fs.ensureDirSync(buildOutputDirectory); |
| 16 | +var version = extension_version_1.getSemanticVersion(); |
| 17 | +var configuration = configuration_1.getConfiguration(); |
| 18 | +var createExtensionTasks = configuration.environments.map(function (env) { |
| 19 | + var environmentDirectory = path.join(buildOutputDirectory, env.Name); |
| 20 | + var environmentTasksDirectory = path.join(environmentDirectory, 'Tasks'); |
| 21 | + fs.ensureDirSync(environmentDirectory); |
| 22 | + fs.copySync(extensionDirectory, environmentDirectory, { overwrite: true, dereference: true }); |
| 23 | + fs.copySync(tasksDirectory, environmentTasksDirectory, { overwrite: true, dereference: true }); |
| 24 | + var extensionFilePath = path.join(environmentDirectory, 'vss-extension.json'); |
| 25 | + var extension = fs.readJsonSync(extensionFilePath); |
| 26 | + extension.id += env.VssExtensionIdSuffix; |
| 27 | + extension.name += env.DisplayNamesSuffix; |
| 28 | + extension.version = version.getVersionString(); |
| 29 | + extension.galleryFlags = env.VssExtensionGalleryFlags; |
| 30 | + if (extension.contributions === undefined) { |
| 31 | + extension.contributions = []; |
| 32 | + } |
| 33 | + var endpointMap = {}; |
| 34 | + endpoints_1.getEndpoints().forEach(function (endpoint) { |
| 35 | + endpointMap["connectedService:" + endpoint.name] = "connectedService:" + endpoint.name + env.VssExtensionIdSuffix; |
| 36 | + var config = endpoint.manifest; |
| 37 | + config.id = config.id + env.VssExtensionIdSuffix; |
| 38 | + config.properties.name = endpoint.name + env.VssExtensionIdSuffix; |
| 39 | + config.properties.displayName = config.properties.displayName + env.DisplayNamesSuffix; |
| 40 | + extension.contributions.push(config); |
| 41 | + }); |
| 42 | + tasks_1.getTasks(environmentTasksDirectory).map(function (taskDirectory) { |
| 43 | + var taskFilePath = path.join(taskDirectory.directory, 'task.json'); |
| 44 | + var task = fs.readJsonSync(taskFilePath); |
| 45 | + task.id = env.TaskIds[taskDirectory.name]; |
| 46 | + if (task.id) { |
| 47 | + task.friendlyName += env.DisplayNamesSuffix; |
| 48 | + task.version = { |
| 49 | + Major: version.major, |
| 50 | + Minor: version.minor, |
| 51 | + Patch: version.patch, |
| 52 | + }; |
| 53 | + if (task.helpMarkDown) { |
| 54 | + task.helpMarkDown = task.helpMarkDown.replace('#{Version}#', version.getVersionString()); |
| 55 | + } |
| 56 | + if (task.inputs) { |
| 57 | + task.inputs.forEach(function (input) { |
| 58 | + var mappedType = endpointMap[input.type]; |
| 59 | + if (mappedType) { |
| 60 | + input.type = mappedType; |
| 61 | + } |
| 62 | + }); |
| 63 | + } |
| 64 | + fs.writeJsonSync(taskFilePath, task); |
| 65 | + var taskLocFilePath = path.join(taskDirectory.directory, 'task.loc.json'); |
| 66 | + if (fs.existsSync(taskLocFilePath)) { |
| 67 | + var taskLoc = fs.readJsonSync(taskLocFilePath); |
| 68 | + taskLoc.id = env.TaskIds[taskDirectory.name]; |
| 69 | + taskLoc.friendlyName += env.DisplayNamesSuffix; |
| 70 | + taskLoc.version.Major = version.major; |
| 71 | + taskLoc.version.Minor = version.minor; |
| 72 | + taskLoc.version.Patch = version.patch; |
| 73 | + if (taskLoc.helpMarkDown) { |
| 74 | + taskLoc.helpMarkDown = taskLoc.helpMarkDown.replace('#{Version}#', version.getVersionString()); |
| 75 | + } |
| 76 | + fs.writeJsonSync(taskLocFilePath, taskLoc); |
| 77 | + var locfilesDirectory = path.join(taskDirectory.directory, 'Strings/resources.resjson'); |
| 78 | + if (fs.existsSync(locfilesDirectory)) { |
| 79 | + var langs = fs.readdirSync(locfilesDirectory); |
| 80 | + for (var index = 0; index < langs.length; index++) { |
| 81 | + var element = langs[index]; |
| 82 | + var resourceFile = path.join(locfilesDirectory, element, "resources.resjson"); |
| 83 | + if (fs.existsSync(resourceFile)) { |
| 84 | + var resource = fs.readJsonSync(resourceFile); |
| 85 | + resource["loc.helpMarkDown"] = resource["loc.helpMarkDown"].replace('#{Version}#', version.getVersionString()); |
| 86 | + fs.writeJsonSync(resourceFile, resource); |
| 87 | + } |
| 88 | + } |
| 89 | + } |
| 90 | + } |
| 91 | + var taskId = taskDirectory.name.replace(/([A-Z])/g, '-$1').toLowerCase().replace(/^[-]+/, ""); |
| 92 | + extension.contributions.push({ |
| 93 | + id: taskId + "-task", |
| 94 | + type: "ms.vss-distributed-task.task", |
| 95 | + description: task.description, |
| 96 | + targets: [ |
| 97 | + "ms.vss-distributed-task.tasks" |
| 98 | + ], |
| 99 | + properties: { |
| 100 | + "name": "Tasks/" + taskDirectory.name |
| 101 | + } |
| 102 | + }); |
| 103 | + } |
| 104 | + else { |
| 105 | + fs.removeSync(taskDirectory.directory); |
| 106 | + } |
| 107 | + }); |
| 108 | + fs.writeJsonSync(extensionFilePath, extension); |
| 109 | + var cmdline = 'tfx extension create --root "' + environmentDirectory |
| 110 | + + '" --manifest-globs "' + extensionFilePath |
| 111 | + + '" --output-path "' + environmentDirectory + '"'; |
| 112 | + return function (done) { |
| 113 | + var child = child_process_1.exec(cmdline, {}, function (error, stdout, stderr) { |
| 114 | + if (error) { |
| 115 | + console.error("exec error: " + error); |
| 116 | + done(error); |
| 117 | + return; |
| 118 | + } |
| 119 | + console.log("tfx extension create done for " + env.Name); |
| 120 | + if (stdout) { |
| 121 | + console.log(stdout); |
| 122 | + } |
| 123 | + if (stderr) { |
| 124 | + console.error(stderr); |
| 125 | + } |
| 126 | + done(); |
| 127 | + }); |
| 128 | + }; |
| 129 | +}); |
| 130 | +async_1.series(createExtensionTasks, function (err) { |
| 131 | + if (err) { |
| 132 | + console.error("Failed to create extensions."); |
| 133 | + throw err; |
| 134 | + } |
| 135 | +}); |
0 commit comments