ssh-deploy/dist/index.js

526 lines
15 KiB
JavaScript
Raw Normal View History

2019-10-03 00:52:52 +03:00
#!/usr/bin/env node
2022-12-30 16:29:31 +03:00
(() => {
var e = {
569: (e, r, t) => {
e.exports = t(325);
},
325: (e, r, t) => {
"use strict";
var n = t(81).exec;
var s = t(81).execSync;
var o = t(147);
var c = t(17);
var i = o.access;
var a = o.accessSync;
var u = o.constants || o;
var l = process.platform == "win32";
var fileNotExists = function (e, r) {
i(e, u.F_OK, function (e) {
r(!e);
});
};
var fileNotExistsSync = function (e) {
try {
a(e, u.F_OK);
return false;
} catch (e) {
return true;
}
};
var localExecutable = function (e, r) {
i(e, u.F_OK | u.X_OK, function (e) {
r(null, !e);
});
};
var localExecutableSync = function (e) {
try {
a(e, u.F_OK | u.X_OK);
return true;
} catch (e) {
return false;
}
};
var commandExistsUnix = function (e, r, t) {
fileNotExists(e, function (s) {
if (!s) {
var o = n("command -v " + r + " 2>/dev/null" + " && { echo >&1 " + r + "; exit 0; }", function (e, r, n) {
t(null, !!r);
});
return;
}
localExecutable(e, t);
});
};
var commandExistsWindows = function (e, r, t) {
if (!/^(?!(?:.*\s|.*\.|\W+)$)(?:[a-zA-Z]:)?(?:(?:[^<>:"\|\?\*\n])+(?:\/\/|\/|\\\\|\\)?)+$/m.test(e)) {
t(null, false);
return;
}
var s = n("where " + r, function (e) {
if (e !== null) {
t(null, false);
} else {
t(null, true);
}
});
};
var commandExistsUnixSync = function (e, r) {
if (fileNotExistsSync(e)) {
try {
var t = s("command -v " + r + " 2>/dev/null" + " && { echo >&1 " + r + "; exit 0; }");
return !!t;
} catch (e) {
return false;
}
}
return localExecutableSync(e);
};
var commandExistsWindowsSync = function (e, r, t) {
if (!/^(?!(?:.*\s|.*\.|\W+)$)(?:[a-zA-Z]:)?(?:(?:[^<>:"\|\?\*\n])+(?:\/\/|\/|\\\\|\\)?)+$/m.test(e)) {
return false;
}
try {
var n = s("where " + r, { stdio: [] });
return !!n;
} catch (e) {
return false;
}
};
var cleanInput = function (e) {
if (/[^A-Za-z0-9_\/:=-]/.test(e)) {
e = "'" + e.replace(/'/g, "'\\''") + "'";
e = e.replace(/^(?:'')+/g, "").replace(/\\'''/g, "\\'");
}
return e;
};
if (l) {
cleanInput = function (e) {
var r = /[\\]/.test(e);
if (r) {
var t = '"' + c.dirname(e) + '"';
var n = '"' + c.basename(e) + '"';
return t + ":" + n;
}
return '"' + e + '"';
};
}
e.exports = function commandExists(e, r) {
var t = cleanInput(e);
if (!r && typeof Promise !== "undefined") {
return new Promise(function (r, t) {
commandExists(e, function (n, s) {
if (s) {
r(e);
} else {
t(n);
}
});
});
}
if (l) {
commandExistsWindows(e, t, r);
} else {
commandExistsUnix(e, t, r);
}
};
e.exports.sync = function (e) {
var r = cleanInput(e);
if (l) {
return commandExistsWindowsSync(e, r);
} else {
return commandExistsUnixSync(e, r);
}
};
},
748: (e, r, t) => {
const { exec: n, execSync: s } = t(81);
const o = { run: runCommand, runSync: runSync };
function runCommand(e, r) {
return n(
e,
(function () {
return function (e, t, n) {
if (!r) return;
r(e, t, n);
};
})(r)
);
}
function runSync(e) {
try {
return { data: s(e).toString(), err: null, stderr: null };
} catch (e) {
return { data: null, err: e.stderr.toString(), stderr: e.stderr.toString() };
}
}
e.exports = o;
},
898: (e, r, t) => {
"use strict";
var n = t(81).spawn;
var s = t(837);
var escapeSpaces = function (e) {
if (typeof e === "string") {
return e.replace(/\b\s/g, "\\ ");
} else {
return e;
}
};
var escapeSpacesInOptions = function (e) {
["src", "dest", "include", "exclude", "excludeFirst"].forEach(function (r) {
var t = e[r];
if (typeof t === "string") {
e[r] = escapeSpaces(t);
} else if (Array.isArray(t) === true) {
e[r] = t.map(escapeSpaces);
}
});
return e;
};
e.exports = function (e, r) {
e = e || {};
e = s._extend({}, e);
e = escapeSpacesInOptions(e);
var t = e.platform || process.platform;
var o = t === "win32";
if (typeof e.src === "undefined") {
throw new Error("'src' directory is missing from options");
}
if (typeof e.dest === "undefined") {
throw new Error("'dest' directory is missing from options");
}
var c = e.dest;
if (typeof e.host !== "undefined") {
c = e.host + ":" + e.dest;
}
if (!Array.isArray(e.src)) {
e.src = [e.src];
}
var i = [].concat(e.src);
i.push(c);
var a = (e.args || []).find(function (e) {
return e.match(/--chmod=/);
});
if (o && !a) {
i.push("--chmod=ugo=rwX");
}
if (typeof e.host !== "undefined" || e.ssh) {
i.push("--rsh");
var u = "ssh";
if (typeof e.port !== "undefined") {
u += " -p " + e.port;
}
if (typeof e.privateKey !== "undefined") {
u += " -i " + e.privateKey;
}
if (typeof e.sshCmdArgs !== "undefined") {
u += " " + e.sshCmdArgs.join(" ");
}
i.push(u);
}
if (e.recursive === true) {
i.push("--recursive");
}
if (e.times === true) {
i.push("--times");
}
if (e.syncDest === true || e.deleteAll === true) {
i.push("--delete");
i.push("--delete-excluded");
}
if (e.syncDestIgnoreExcl === true || e.delete === true) {
i.push("--delete");
}
if (e.dryRun === true) {
i.push("--dry-run");
i.push("--verbose");
}
if (typeof e.excludeFirst !== "undefined" && s.isArray(e.excludeFirst)) {
e.excludeFirst.forEach(function (e, r) {
i.push("--exclude=" + e);
});
}
if (typeof e.include !== "undefined" && s.isArray(e.include)) {
e.include.forEach(function (e, r) {
i.push("--include=" + e);
});
}
if (typeof e.exclude !== "undefined" && s.isArray(e.exclude)) {
e.exclude.forEach(function (e, r) {
i.push("--exclude=" + e);
});
}
switch (e.compareMode) {
case "sizeOnly":
i.push("--size-only");
break;
case "checksum":
i.push("--checksum");
break;
}
if (typeof e.args !== "undefined" && s.isArray(e.args)) {
i = [...new Set([...i, ...e.args])];
}
i = [...new Set(i)];
var noop = function () {};
var l = e.onStdout || noop;
var d = e.onStderr || noop;
var f = "rsync ";
i.forEach(function (e) {
if (e.substr(0, 4) === "ssh ") {
e = '"' + e + '"';
}
f += e + " ";
});
f = f.trim();
if (e.noExec) {
r(null, null, null, f);
return;
}
try {
var p = "";
var y = "";
var v;
if (o) {
v = n("cmd.exe", ["/s", "/c", '"' + f + '"'], {
windowsVerbatimArguments: true,
stdio: [process.stdin, "pipe", "pipe"],
});
} else {
v = n("/bin/sh", ["-c", f]);
}
v.stdout.on("data", function (e) {
l(e);
p += e;
});
v.stderr.on("data", function (e) {
d(e);
y += e;
});
v.on("exit", function (e) {
var t = null;
if (e !== 0) {
t = new Error("rsync exited with code " + e);
t.code = e;
}
r(t, p, y, f);
});
} catch (e) {
r(e, null, null, f);
}
};
},
505: (e, r, t) => {
const { existsSync: n, mkdirSync: s, writeFileSync: o } = t(147);
const { GITHUB_WORKSPACE: c } = process.env;
const validateDir = (e) => {
if (!n(e)) {
console.log(`[SSH] Creating ${e} dir in `, c);
s(e);
console.log("✅ [SSH] dir created.");
} else {
console.log(`[SSH] ${e} dir exist`);
}
};
const validateFile = (e) => {
if (!n(e)) {
console.log(`[SSH] Creating ${e} file in `, c);
try {
o(e, "", { encoding: "utf8", mode: 384 });
console.log("✅ [SSH] file created.");
} catch (r) {
console.error("⚠️ [SSH] writeFileSync error", e, r.message);
process.abort();
}
} else {
console.log(`[SSH] ${e} file exist`);
}
};
e.exports = { validateDir: validateDir, validateFile: validateFile };
},
229: (e) => {
const r = [
"REMOTE_HOST",
"REMOTE_USER",
"REMOTE_PORT",
"SSH_PRIVATE_KEY",
"DEPLOY_KEY_NAME",
"SOURCE",
"TARGET",
"ARGS",
"EXCLUDE",
];
const t = { GITHUB_WORKSPACE: process.env.GITHUB_WORKSPACE };
r.forEach((e) => {
t[e] = process.env[e] || process.env[`INPUT_${e}`];
});
e.exports = t;
},
447: (e, r, t) => {
const { sync: n } = t(569);
const { get: s } = t(748);
const validateRsync = (e = () => {}) => {
const r = n("rsync");
console.log('⚠️ [CLI] Rsync doesn\'t exists. Start installation with "apt-get" \n');
console.log("nodeCmd: ", s);
if (!r) {
s("sudo apt-get --no-install-recommends install rsync", (r, t, n) => {
if (r) {
console.log("⚠️ [CLI] Rsync installation failed. Aborting ... ", r.message);
process.abort();
} else {
console.log("✅ [CLI] Rsync installed. \n", t, n);
e();
}
});
} else {
e();
}
};
const validateInputs = (e) => {
const r = Object.keys(e);
const t = r.filter((r) => {
const t = e[r];
if (!t) {
console.error(`⚠️ [INPUTS] ${r} is mandatory`);
}
return t;
});
if (t.length !== r.length) {
console.error("⚠️ [INPUTS] Inputs not valid, aborting ...");
process.abort();
}
};
e.exports = { validateRsync: validateRsync, validateInputs: validateInputs };
},
822: (e, r, t) => {
const { writeFileSync: n } = t(147);
const { join: s } = t(17);
const { validateDir: o, validateFile: c } = t(505);
const { HOME: i } = process.env;
const addSshKey = (e, r) => {
const t = s(i || __dirname, ".ssh");
const a = s(t, r);
o(t);
c(`${t}/known_hosts`);
try {
n(a, e, { encoding: "utf8", mode: 384 });
} catch (e) {
console.error("⚠️ writeFileSync error", a, e.message);
process.abort();
}
console.log("✅ Ssh key added to `.ssh` dir ", a);
return a;
};
e.exports = { addSshKey: addSshKey };
},
81: (e) => {
"use strict";
e.exports = require("child_process");
},
147: (e) => {
"use strict";
e.exports = require("fs");
},
17: (e) => {
"use strict";
e.exports = require("path");
},
837: (e) => {
"use strict";
e.exports = require("util");
},
};
var r = {};
function __nccwpck_require__(t) {
var n = r[t];
if (n !== undefined) {
return n.exports;
}
var s = (r[t] = { exports: {} });
var o = true;
try {
e[t](s, s.exports, __nccwpck_require__);
o = false;
} finally {
if (o) delete r[t];
}
return s.exports;
}
if (typeof __nccwpck_require__ !== "undefined") __nccwpck_require__.ab = __dirname + "/";
var t = {};
(() => {
const e = __nccwpck_require__(898);
const { validateRsync: r, validateInputs: t } = __nccwpck_require__(447);
const { addSshKey: n } = __nccwpck_require__(822);
const {
REMOTE_HOST: s,
REMOTE_USER: o,
REMOTE_PORT: c,
SSH_PRIVATE_KEY: i,
DEPLOY_KEY_NAME: a,
SOURCE: u,
TARGET: l,
ARGS: d,
EXCLUDE: f,
GITHUB_WORKSPACE: p,
} = __nccwpck_require__(229);
const y = { ssh: true, sshCmdArgs: ["-o StrictHostKeyChecking=no"], recursive: true };
console.log("[general] GITHUB_WORKSPACE: ", p);
const v = (() => {
const rsync = ({ privateKey: r, port: t, src: n, dest: s, args: o, exclude: c }) => {
console.log(`[Rsync] Starting Rsync Action: ${n} to ${s}`);
if (c) console.log(`[Rsync] exluding folders ${c}`);
try {
e({ src: n, dest: s, args: o, privateKey: r, port: t, excludeFirst: c, ...y }, (e, r, t, n) => {
if (e) {
console.error("⚠️ [Rsync] error: ", e.message);
console.log("⚠️ [Rsync] stderr: ", t);
console.log("⚠️ [Rsync] stdout: ", r);
console.log("⚠️ [Rsync] cmd: ", n);
process.abort();
} else {
console.log("✅ [Rsync] finished.", r);
}
});
} catch (e) {
console.error("⚠️ [Rsync] command error: ", e.message, e.stack);
process.abort();
}
};
const init = ({
src: e,
dest: t,
args: s,
host: o = "localhost",
port: c,
username: i,
privateKeyContent: u,
exclude: l = [],
}) => {
r(() => {
const r = n(u, a || "deploy_key");
const d = `${i}@${o}:${t}`;
rsync({ privateKey: r, port: c, src: e, dest: d, args: s, exclude: l });
});
};
return { init: init };
})();
const run = () => {
t({ SSH_PRIVATE_KEY: i, REMOTE_HOST: s, REMOTE_USER: o });
v.init({
src: `${p}/${u || ""}`,
dest: l || `/home/${o}/`,
args: d ? [d] : ["-rltgoDzvO"],
host: s,
port: c || "22",
username: o,
privateKeyContent: i,
exclude: (f || "").split(",").map((e) => e.trim()),
});
};
run();
})();
module.exports = t;
})();