78 lines
2.3 KiB
JavaScript
78 lines
2.3 KiB
JavaScript
#!/usr/bin/env node
|
|
const nodeRsync = require('rsyncwrapper');
|
|
|
|
const { validateRsync, validateInputs } = require('./rsyncCli');
|
|
const { addSshKey } = require('./sshKey');
|
|
|
|
const {
|
|
REMOTE_HOST, REMOTE_USER,
|
|
REMOTE_PORT, SSH_PRIVATE_KEY, DEPLOY_KEY_NAME,
|
|
SOURCE, TARGET, ARGS, EXCLUDE,
|
|
GITHUB_WORKSPACE
|
|
} = require('./inputs');
|
|
|
|
const defaultOptions = {
|
|
ssh: true,
|
|
sshCmdArgs: ['-o StrictHostKeyChecking=no'],
|
|
recursive: true
|
|
};
|
|
|
|
console.log('[general] GITHUB_WORKSPACE: ', GITHUB_WORKSPACE);
|
|
|
|
const sshDeploy = (() => {
|
|
const rsync = ({ privateKey, port, src, dest, args, exclude }) => {
|
|
console.log(`[Rsync] Starting Rsync Action: ${src} to ${dest}`);
|
|
if (exclude) console.log(`[Rsync] exluding folders ${exclude}`);
|
|
|
|
try {
|
|
// RSYNC COMMAND
|
|
nodeRsync({
|
|
src, dest, args, privateKey, port, excludeFirst: exclude, ...defaultOptions
|
|
}, (error, stdout, stderr, cmd) => {
|
|
if (error) {
|
|
console.error('⚠️ [Rsync] error: ', error.message);
|
|
console.log('⚠️ [Rsync] stderr: ', stderr);
|
|
console.log('⚠️ [Rsync] stdout: ', stdout);
|
|
console.log('⚠️ [Rsync] cmd: ', cmd);
|
|
process.abort();
|
|
} else {
|
|
console.log('✅ [Rsync] finished.', stdout);
|
|
}
|
|
});
|
|
} catch (err) {
|
|
console.error('⚠️ [Rsync] command error: ', err.message, err.stack);
|
|
process.abort();
|
|
}
|
|
};
|
|
|
|
const init = ({ src, dest, args, host = 'localhost', port, username, privateKeyContent, exclude = [] }) => {
|
|
validateRsync(() => {
|
|
const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME || 'deploy_key');
|
|
const remoteDest = `${username}@${host}:${dest}`;
|
|
|
|
rsync({ privateKey, port, src, dest: remoteDest, args, exclude });
|
|
});
|
|
};
|
|
|
|
return {
|
|
init
|
|
};
|
|
})();
|
|
|
|
const run = () => {
|
|
validateInputs({ SSH_PRIVATE_KEY, REMOTE_HOST, REMOTE_USER });
|
|
|
|
sshDeploy.init({
|
|
src: `${GITHUB_WORKSPACE}/${SOURCE || ''}`,
|
|
dest: TARGET || `/home/${REMOTE_USER}/`,
|
|
args: ARGS ? [ARGS] : ['-rltgoDzvO'],
|
|
host: REMOTE_HOST,
|
|
port: REMOTE_PORT || '22',
|
|
username: REMOTE_USER,
|
|
privateKeyContent: SSH_PRIVATE_KEY,
|
|
exclude: (EXCLUDE || '').split(',').map((item) => item.trim()) // split by comma and trim whitespace
|
|
});
|
|
};
|
|
|
|
run();
|