2023-01-02 01:02:44 +01:00
|
|
|
const { exec } = require('child_process');
|
|
|
|
|
2023-01-02 11:41:31 +01:00
|
|
|
const { privateKey, sshServer, githubWorkspace } = require('./inputs');
|
2023-01-02 01:02:44 +01:00
|
|
|
const { writeToFile } = require('./helpers');
|
|
|
|
|
2023-01-02 12:57:35 +01:00
|
|
|
const handleError = (errorMessage, isRequired, callback) => {
|
|
|
|
const message = `⚠️ [CMD] Remote script failed: ${errorMessage}`;
|
|
|
|
if (isRequired) {
|
|
|
|
callback(new Error(message));
|
|
|
|
} else {
|
|
|
|
console.log(message);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
const remoteCmd = async (content, label, isRequired) => new Promise((resolve, reject) => {
|
2023-01-02 01:12:37 +01:00
|
|
|
const filename = `local_ssh_script-${label}.sh`;
|
2023-01-02 01:02:44 +01:00
|
|
|
try {
|
2023-01-02 01:12:37 +01:00
|
|
|
writeToFile({ dir: githubWorkspace, filename, content });
|
2023-01-02 01:02:44 +01:00
|
|
|
|
2023-01-02 12:57:35 +01:00
|
|
|
exec(`ssh -i ${privateKey} ${sshServer} 'RSYNC_STDOUT=${process.env.RSYNC_STDOUT} bash -s' < ${filename}`, (err, data, stderr) => {
|
2023-01-02 01:02:44 +01:00
|
|
|
if (err) {
|
2023-01-02 12:57:35 +01:00
|
|
|
handleError(err.message, isRequired, reject);
|
2023-01-02 01:02:44 +01:00
|
|
|
} else {
|
|
|
|
console.log('✅ [CMD] Remote script executed. \n', data, stderr);
|
2023-01-02 12:57:35 +01:00
|
|
|
resolve(data);
|
2023-01-02 01:02:44 +01:00
|
|
|
}
|
|
|
|
});
|
|
|
|
} catch (err) {
|
2023-01-02 12:57:35 +01:00
|
|
|
handleError(err.message, isRequired, reject);
|
2023-01-02 01:02:44 +01:00
|
|
|
}
|
2023-01-02 12:57:35 +01:00
|
|
|
});
|
2023-01-02 01:02:44 +01:00
|
|
|
|
|
|
|
module.exports = {
|
2023-01-02 12:57:35 +01:00
|
|
|
remoteCmdBefore: async (cmd, isRequired) => remoteCmd(cmd, 'before', isRequired),
|
|
|
|
remoteCmdAfter: async (cmd, isRequired) => remoteCmd(cmd, 'after', isRequired)
|
2023-01-02 01:02:44 +01:00
|
|
|
};
|