public async exec()

in app/exec/build/tasks/create.ts [46:162]


	public async exec(): Promise<TaskCreateResult> {
		trace.debug("build-create.exec");

		return Promise.all([
			this.commandArgs.taskName.val(),
			this.commandArgs.friendlyName.val(),
			this.commandArgs.description.val(),
			this.commandArgs.author.val(),
		]).then(values => {
			const [taskName, friendlyName, description, author] = values;
			if (!taskName || !check.isAlphanumeric(taskName)) {
				throw new Error("name is a required alphanumeric string with no spaces");
			}

			if (!friendlyName || !check.isLength(friendlyName, 1, 40)) {
				throw new Error("friendlyName is a required string <= 40 chars");
			}

			if (!description || !check.isLength(description, 1, 80)) {
				throw new Error("description is a required string <= 80 chars");
			}

			if (!author || !check.isLength(author, 1, 40)) {
				throw new Error("author is a required string <= 40 chars");
			}

			let ret = <TaskCreateResult>{};

			// create definition
			trace.debug("creating folder for task");
			let tp = path.join(process.cwd(), taskName);
			trace.debug(tp);
			shell.mkdir("-p", tp);
			trace.debug("created folder");
			ret.taskPath = tp;

			trace.debug("creating definition");
			let def: any = {};
			def.id = uuid.v1();
			trace.debug("id: " + def.id);
			def.name = taskName;
			trace.debug("name: " + def.name);
			def.friendlyName = friendlyName;
			trace.debug("friendlyName: " + def.friendlyName);
			def.description = description;
			trace.debug("description: " + def.description);
			def.author = author;
			trace.debug("author: " + def.author);

			def.helpMarkDown = "Replace with markdown to show in help";
			def.category = "Utility";
			def.visibility = ["Build", "Release"];
			def.demands = [];
			def.version = { Major: "0", Minor: "1", Patch: "0" };
			def.minimumAgentVersion = "1.95.0";
			def.instanceNameFormat = taskName + " $(message)";

			let cwdInput = {
				name: "cwd",
				type: "filePath",
				label: "Working Directory",
				defaultValue: "",
				required: false,
				helpMarkDown: "Current working directory when " + taskName + " is run.",
			};

			let msgInput = {
				name: "msg",
				type: "string",
				label: "Message",
				defaultValue: "Hello World",
				required: true,
				helpMarkDown: "Message to echo out",
			};

			def.inputs = [cwdInput, msgInput];

			def.execution = {
				Node: {
					target: "sample.js",
					argumentFormat: "",
				},
				PowerShell3: {
					target: "sample.ps1",
				},
			};

			ret.definition = def;

			trace.debug("writing definition file");
			let defPath = path.join(tp, "task.json");
			trace.debug(defPath);
			try {
				let defStr = JSON.stringify(def, null, 2);
				trace.debug(defStr);
				fs.writeFileSync(defPath, defStr);
			} catch (err) {
				throw new Error("Failed creating task: " + err.message);
			}
			trace.debug("created definition file.");

			let copyResource = function(fileName) {
				let src = path.join(__dirname, "_resources", fileName);
				trace.debug("src: " + src);
				let dest = path.join(tp, fileName);
				trace.debug("dest: " + dest);
				shell.cp(src, dest);
				trace.debug(fileName + " copied");
			};

			trace.debug("creating temporary icon");
			copyResource("icon.png");
			copyResource("sample.js");
			copyResource("sample.ps1");
			return ret;
		});
	}