UNPKG

turbo-gulp

Version:

Gulp tasks to boost high-quality projects.

89 lines (87 loc) 13.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const incident_1 = require("incident"); const node_async_1 = require("./node-async"); async function execGit(cmd, args = [], options) { return new node_async_1.SpawnedProcess("git", [cmd, ...args], Object.assign({ stdio: "pipe" }, options)).toPromise(); } exports.execGit = execGit; async function assertCleanBranch(allowedBranches) { let stdout; stdout = (await execGit("symbolic-ref", ["HEAD"])).stdout; let onAllowedBranch = false; for (const branch of allowedBranches) { if (stdout.toString("utf8").trim() === `refs/heads/${branch}`) { onAllowedBranch = true; } } if (!onAllowedBranch) { throw new Error(`HEAD must be on one of the branches: ${JSON.stringify(allowedBranches)}`); } stdout = (await execGit("status", ["--porcelain"])).stdout; if (stdout.toString("utf8").trim().length > 0) { throw new Error("Working copy is dirty"); } } exports.assertCleanBranch = assertCleanBranch; /** * Get the hash of the HEAD commit. * * @return The hash of the HEAD commit. */ async function getHeadHash() { return (await execGit("rev-parse", ["--verify", "HEAD"])).stdout.toString("utf8").trim(); } exports.getHeadHash = getHeadHash; async function tagExists(tag) { return (await execGit("tag", ["-l", tag])).stdout.toString("utf8").trim().length > 0; } exports.tagExists = tagExists; /** * Clone a repository into a new directory */ async function gitClone(options) { const args = []; if (options.branch !== undefined) { args.push("--branch", options.branch); } if (options.depth !== undefined) { args.push("--depth", options.depth.toString(10)); } args.push(options.repository, options.directory); const result = await execGit("clone", args); if (result.exit.type === "code" && result.exit.code !== 0) { throw new incident_1.Incident("GitClone", { options, result }, result.stderr.toString("utf8")); } } exports.gitClone = gitClone; /** * Clone a repository into a new directory */ async function gitAdd(options) { const args = ["--", ...options.paths]; const result = await execGit("add", args, { cwd: options.repository }); if (result.exit.type === "code" && result.exit.code !== 0) { throw new incident_1.Incident("GitAdd", { options, result }, result.stderr.toString("utf8")); } } exports.gitAdd = gitAdd; async function gitCommit(options) { const args = ["-m", options.message]; if (options.author !== undefined) { args.push("--author", options.author); } const result = await execGit("commit", args, { cwd: options.repository }); if (result.exit.type === "code" && result.exit.code !== 0) { throw new incident_1.Incident("GitCommit", { options, result }, result.stderr.toString("utf8")); } } exports.gitCommit = gitCommit; async function gitPush(options) { const result = await execGit("push", [options.remote], { cwd: options.local }); if (result.exit.type === "code" && result.exit.code !== 0) { throw new incident_1.Incident("GitPush", { options, result }, result.stderr.toString("utf8")); } } exports.gitPush = gitPush; //# sourceMappingURL=data:application/json;charset=utf8;base64,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Q0FBQztBQUNILENBQUM7QUFMRCwwQkFLQyIsImZpbGUiOiJ1dGlscy9naXQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmNpZGVudCB9IGZyb20gXCJpbmNpZGVudFwiO1xuaW1wb3J0IHsgQWJzUG9zaXhQYXRoIH0gZnJvbSBcIi4uL3R5cGVzXCI7XG5pbXBvcnQgeyBTcGF3bmVkUHJvY2VzcywgU3Bhd25PcHRpb25zLCBTcGF3blJlc3VsdCB9IGZyb20gXCIuL25vZGUtYXN5bmNcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4ZWNHaXQoY21kOiBzdHJpbmcsIGFyZ3M6IHN0cmluZ1tdID0gW10sIG9wdGlvbnM/OiBTcGF3bk9wdGlvbnMpOiBQcm9taXNlPFNwYXduUmVzdWx0PiB7XG4gIHJldHVybiBuZXcgU3Bhd25lZFByb2Nlc3MoXG4gICAgXCJnaXRcIixcbiAgICBbY21kLCAuLi5hcmdzXSxcbiAgICB7c3RkaW86IFwicGlwZVwiLCAuLi5vcHRpb25zfSxcbiAgKS50b1Byb21pc2UoKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzc2VydENsZWFuQnJhbmNoKGFsbG93ZWRCcmFuY2hlczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IHN0ZG91dDogQnVmZmVyO1xuICBzdGRvdXQgPSAoYXdhaXQgZXhlY0dpdChcInN5bWJvbGljLXJlZlwiLCBbXCJIRUFEXCJdKSkuc3Rkb3V0O1xuICBsZXQgb25BbGxvd2VkQnJhbmNoOiBib29sZWFuID0gZmFsc2U7XG4gIGZvciAoY29uc3QgYnJhbmNoIG9mIGFsbG93ZWRCcmFuY2hlcykge1xuICAgIGlmIChzdGRvdXQudG9TdHJpbmcoXCJ1dGY4XCIpLnRyaW0oKSA9PT0gYHJlZnMvaGVhZHMvJHticmFuY2h9YCkge1xuICAgICAgb25BbGxvd2VkQnJhbmNoID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKCFvbkFsbG93ZWRCcmFuY2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhFQUQgbXVzdCBiZSBvbiBvbmUgb2YgdGhlIGJyYW5jaGVzOiAke0pTT04uc3RyaW5naWZ5KGFsbG93ZWRCcmFuY2hlcyl9YCk7XG4gIH1cbiAgc3Rkb3V0ID0gKGF3YWl0IGV4ZWNHaXQoXCJzdGF0dXNcIiwgW1wiLS1wb3JjZWxhaW5cIl0pKS5zdGRvdXQ7XG4gIGlmIChzdGRvdXQudG9TdHJpbmcoXCJ1dGY4XCIpLnRyaW0oKS5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiV29ya2luZyBjb3B5IGlzIGRpcnR5XCIpO1xuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBoYXNoIG9mIHRoZSBIRUFEIGNvbW1pdC5cbiAqXG4gKiBAcmV0dXJuIFRoZSBoYXNoIG9mIHRoZSBIRUFEIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEhlYWRIYXNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZXhlY0dpdChcInJldi1wYXJzZVwiLCBbXCItLXZlcmlmeVwiLCBcIkhFQURcIl0pKS5zdGRvdXQudG9TdHJpbmcoXCJ1dGY4XCIpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRhZ0V4aXN0cyh0YWc6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gKGF3YWl0IGV4ZWNHaXQoXCJ0YWdcIiwgW1wiLWxcIiwgdGFnXSkpLnN0ZG91dC50b1N0cmluZyhcInV0ZjhcIikudHJpbSgpLmxlbmd0aCA+IDA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0Q2xvbmVPcHRpb25zIHtcbiAgYnJhbmNoPzogc3RyaW5nO1xuICBkZXB0aD86IG51bWJlcjtcbiAgcmVwb3NpdG9yeTogc3RyaW5nO1xuICBkaXJlY3Rvcnk6IEFic1Bvc2l4UGF0aDtcbn1cblxuLyoqXG4gKiBDbG9uZSBhIHJlcG9zaXRvcnkgaW50byBhIG5ldyBkaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdpdENsb25lKG9wdGlvbnM6IEdpdENsb25lT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtdO1xuICBpZiAob3B0aW9ucy5icmFuY2ggIT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3MucHVzaChcIi0tYnJhbmNoXCIsIG9wdGlvbnMuYnJhbmNoKTtcbiAgfVxuICBpZiAob3B0aW9ucy5kZXB0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXJncy5wdXNoKFwiLS1kZXB0aFwiLCBvcHRpb25zLmRlcHRoLnRvU3RyaW5nKDEwKSk7XG4gIH1cbiAgYXJncy5wdXNoKG9wdGlvbnMucmVwb3NpdG9yeSwgb3B0aW9ucy5kaXJlY3RvcnkpO1xuICBjb25zdCByZXN1bHQ6IFNwYXduUmVzdWx0ID0gYXdhaXQgZXhlY0dpdChcImNsb25lXCIsIGFyZ3MpO1xuICBpZiAocmVzdWx0LmV4aXQudHlwZSA9PT0gXCJjb2RlXCIgJiYgcmVzdWx0LmV4aXQuY29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBJbmNpZGVudChcIkdpdENsb25lXCIsIHtvcHRpb25zLCByZXN1bHR9LCByZXN1bHQuc3RkZXJyLnRvU3RyaW5nKFwidXRmOFwiKSk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBHaXRBZGRPcHRpb25zIHtcbiAgcGF0aHM6IHN0cmluZ1tdO1xuICByZXBvc2l0b3J5OiBBYnNQb3NpeFBhdGg7XG59XG5cbi8qKlxuICogQ2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXcgZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaXRBZGQob3B0aW9uczogR2l0QWRkT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBhcmdzOiBzdHJpbmdbXSA9IFtcIi0tXCIsIC4uLm9wdGlvbnMucGF0aHNdO1xuICBjb25zdCByZXN1bHQ6IFNwYXduUmVzdWx0ID0gYXdhaXQgZXhlY0dpdChcImFkZFwiLCBhcmdzLCB7Y3dkOiBvcHRpb25zLnJlcG9zaXRvcnl9KTtcbiAgaWYgKHJlc3VsdC5leGl0LnR5cGUgPT09IFwiY29kZVwiICYmIHJlc3VsdC5leGl0LmNvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJHaXRBZGRcIiwge29wdGlvbnMsIHJlc3VsdH0sIHJlc3VsdC5zdGRlcnIudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdpdENvbW1pdE9wdGlvbnMge1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIGF1dGhvcj86IHN0cmluZztcbiAgcmVwb3NpdG9yeTogQWJzUG9zaXhQYXRoO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2l0Q29tbWl0KG9wdGlvbnM6IEdpdENvbW1pdE9wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgYXJnczogc3RyaW5nW10gPSBbXCItbVwiLCBvcHRpb25zLm1lc3NhZ2VdO1xuICBpZiAob3B0aW9ucy5hdXRob3IgIT09IHVuZGVmaW5lZCkge1xuICAgIGFyZ3MucHVzaChcIi0tYXV0aG9yXCIsIG9wdGlvbnMuYXV0aG9yKTtcbiAgfVxuICBjb25zdCByZXN1bHQ6IFNwYXduUmVzdWx0ID0gYXdhaXQgZXhlY0dpdChcImNvbW1pdFwiLCBhcmdzLCB7Y3dkOiBvcHRpb25zLnJlcG9zaXRvcnl9KTtcbiAgaWYgKHJlc3VsdC5leGl0LnR5cGUgPT09IFwiY29kZVwiICYmIHJlc3VsdC5leGl0LmNvZGUgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgSW5jaWRlbnQoXCJHaXRDb21taXRcIiwge29wdGlvbnMsIHJlc3VsdH0sIHJlc3VsdC5zdGRlcnIudG9TdHJpbmcoXCJ1dGY4XCIpKTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdpdFB1c2hPcHRpb25zIHtcbiAgbG9jYWw6IEFic1Bvc2l4UGF0aDtcbiAgcmVtb3RlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaXRQdXNoKG9wdGlvbnM6IEdpdFB1c2hPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlc3VsdDogU3Bhd25SZXN1bHQgPSBhd2FpdCBleGVjR2l0KFwicHVzaFwiLCBbb3B0aW9ucy5yZW1vdGVdLCB7Y3dkOiBvcHRpb25zLmxvY2FsfSk7XG4gIGlmIChyZXN1bHQuZXhpdC50eXBlID09PSBcImNvZGVcIiAmJiByZXN1bHQuZXhpdC5jb2RlICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEluY2lkZW50KFwiR2l0UHVzaFwiLCB7b3B0aW9ucywgcmVzdWx0fSwgcmVzdWx0LnN0ZGVyci50b1N0cmluZyhcInV0ZjhcIikpO1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6Ii4uIn0=