ssh-deploy/src/index.js

80 lines
2.4 KiB
JavaScript
Raw Normal View History

2019-10-03 00:52:52 +03:00
#!/usr/bin/env node
const nodeRsync = require('rsyncwrapper');
const { validateRsync, validateInputs } = require('./rsyncCli');
const { addSshKey } = require('./sshKey');
2019-10-03 00:52:52 +03:00
const {
REMOTE_HOST, REMOTE_USER,
REMOTE_PORT, SSH_PRIVATE_KEY, DEPLOY_KEY_NAME,
2021-03-12 09:42:12 +03:00
SOURCE, TARGET, ARGS, EXCLUDE,
GITHUB_WORKSPACE
} = require('./inputs');
2019-10-03 00:52:52 +03:00
const defaultOptions = {
ssh: true,
sshCmdArgs: ['-o StrictHostKeyChecking=no'],
recursive: true
};
2019-10-03 00:52:52 +03:00
2022-12-31 11:53:43 +03:00
console.log('GITHUB_WORKSPACE: ', GITHUB_WORKSPACE);
2022-12-31 11:48:17 +03:00
console.log('REMOTE_HOST: ', process.env.REMOTE_HOST);
console.log('REMOTE_USER: ', process.env.REMOTE_USER);
2019-10-03 00:52:52 +03:00
const sshDeploy = (() => {
2021-03-12 09:42:12 +03:00
const rsync = ({ privateKey, port, src, dest, args, exclude }) => {
console.log(`[Rsync] Starting Rsync Action: ${src} to ${dest}`);
2021-03-12 09:42:12 +03:00
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();
2019-10-03 00:52:52 +03:00
} else {
console.log('✅ [Rsync] finished.', stdout);
2019-10-03 00:52:52 +03:00
}
});
} catch (err) {
console.error('⚠️ [Rsync] command error: ', err.message, err.stack);
process.abort();
2019-10-03 00:52:52 +03:00
}
};
2019-10-03 00:52:52 +03:00
2021-03-12 09:42:12 +03:00
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}`;
2019-10-03 00:52:52 +03:00
2021-03-12 09:42:12 +03:00
rsync({ privateKey, port, src, dest: remoteDest, args, exclude });
2019-10-03 00:52:52 +03:00
});
};
2019-10-03 00:52:52 +03:00
return {
init
};
})();
2019-10-03 00:52:52 +03:00
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,
2021-03-12 09:42:12 +03:00
privateKeyContent: SSH_PRIVATE_KEY,
exclude: (EXCLUDE || '').split(',').map((item) => item.trim()) // split by comma and trim whitespace
});
2019-10-03 00:52:52 +03:00
};
run();