Merge pull request #1 from fmal/feat/remote-port

add optional `REMOTE_PORT` env to configuration
main
Dragan Filipović 2020-01-09 22:19:49 +01:00 committed by GitHub
commit 445db7826b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 44 additions and 33 deletions

View File

@ -4,7 +4,7 @@ Deploy code with rsync over ssh, using NodeJS.
NodeJS version is more than a minute `faster` than simple Docker version. NodeJS version is more than a minute `faster` than simple Docker version.
This GitHub Action deploys specific directory from `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh, using NodeJS. This GitHub Action deploys specific directory from `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh, using NodeJS.
This action would usually follow a build/test action which leaves deployable code in `GITHUB_WORKSPACE`, eg `dist`; This action would usually follow a build/test action which leaves deployable code in `GITHUB_WORKSPACE`, eg `dist`;
@ -16,14 +16,18 @@ Pass configuration with `env` vars
This should be the private key part of an ssh key pair. The public key part should be added to the authorized_keys file on the server that receives the deployment. This should be the private key part of an ssh key pair. The public key part should be added to the authorized_keys file on the server that receives the deployment.
2. `REMOTE_HOST` [required] 2. `REMOTE_HOST` [required]
eg: mydomain.com eg: mydomain.com
3. `REMOTE_USER` [required] 3. `REMOTE_USER` [required]
eg: myusername eg: myusername
3. `REMOTE_PORT` (optional, default '22')
eg: '59184'
2. `ARGS` (optional, default '-rltgoDzvO') 2. `ARGS` (optional, default '-rltgoDzvO')
For any initial/required rsync flags, eg: `-avzr --delete` For any initial/required rsync flags, eg: `-avzr --delete`
@ -85,6 +89,6 @@ jobs:
## Disclaimer ## Disclaimer
If you're using GitHub Actions, you'll probably already know that it's still in limited public beta, and GitHub advise against using Actions in production. If you're using GitHub Actions, you'll probably already know that it's still in limited public beta, and GitHub advise against using Actions in production.
So, check your keys. Check your deployment paths. And use at your own risk. So, check your keys. Check your deployment paths. And use at your own risk.

View File

@ -1,28 +1,31 @@
name: 'ssh deploy' name: "ssh deploy"
description: 'NodeJS action for FAST deployment with rsync/ssh' description: "NodeJS action for FAST deployment with rsync/ssh"
author: 'easingthemes' author: "easingthemes"
inputs: inputs:
SSH_PRIVATE_KEY: # Private Key SSH_PRIVATE_KEY: # Private Key
description: 'Private Key' description: "Private Key"
required: true required: true
REMOTE_HOST: REMOTE_HOST:
description: 'Remote host' description: "Remote host"
required: true required: true
REMOTE_USER: REMOTE_USER:
description: 'Remote user' description: "Remote user"
required: true required: true
REMOTE_PORT:
description: "Remote port"
default: "22"
SOURCE: SOURCE:
description: 'Source directory' description: "Source directory"
default: '' default: ""
TARGET: TARGET:
description: 'Target directory' description: "Target directory"
default: '/home/REMOTE_USER/' default: "/home/REMOTE_USER/"
outputs: outputs:
status: status:
description: 'Status' description: "Status"
runs: runs:
using: 'node12' using: "node12"
main: 'dist/index.js' main: "dist/index.js"
branding: branding:
color: 'green' color: "green"
icon: 'truck' icon: "truck"

12
dist/index.js vendored
View File

@ -480,16 +480,16 @@ const commandExists = __webpack_require__(677);
const nodeCmd = __webpack_require__(428); const nodeCmd = __webpack_require__(428);
const nodeRsync = __webpack_require__(250); const nodeRsync = __webpack_require__(250);
const { REMOTE_HOST, REMOTE_USER, SSH_PRIVATE_KEY, DEPLOY_KEY_NAME, SOURCE, TARGET, ARGS, GITHUB_WORKSPACE, HOME } = process.env; const { REMOTE_HOST, REMOTE_USER, REMOTE_PORT, SSH_PRIVATE_KEY, DEPLOY_KEY_NAME, SOURCE, TARGET, ARGS, GITHUB_WORKSPACE, HOME } = process.env;
console.log('GITHUB_WORKSPACE', GITHUB_WORKSPACE); console.log('GITHUB_WORKSPACE', GITHUB_WORKSPACE);
const sshDeploy = (() => { const sshDeploy = (() => {
const rsync = ({ privateKey, src, dest, args }) => { const rsync = ({ privateKey, port, src, dest, args }) => {
console.log(`Starting Rsync Action: ${src} to ${dest}`); console.log(`Starting Rsync Action: ${src} to ${dest}`);
try { try {
// RSYNC COMMAND // RSYNC COMMAND
nodeRsync({ src, dest, args, privateKey, ssh: true, sshCmdArgs: ['-o StrictHostKeyChecking=no'], recursive: true }, (error, stdout, stderr, cmd) => { nodeRsync({ src, dest, args, privateKey, ssh: true, port, sshCmdArgs: ['-o StrictHostKeyChecking=no'], recursive: true }, (error, stdout, stderr, cmd) => {
if (error) { if (error) {
console.error('⚠️ Rsync error', error.message); console.error('⚠️ Rsync error', error.message);
process.abort(); process.abort();
@ -509,14 +509,15 @@ const sshDeploy = (() => {
args, args,
host = 'localhost', host = 'localhost',
username, username,
privateKeyContent privateKeyContent,
port
}) => { }) => {
validateRsync(() => { validateRsync(() => {
const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key'); const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key');
const remoteDest = username + '@' + host + ':' + dest; const remoteDest = username + '@' + host + ':' + dest;
rsync({ privateKey, src, dest: remoteDest, args }); rsync({ privateKey, port, src, dest: remoteDest, args });
}); });
}; };
@ -616,6 +617,7 @@ const run = () => {
dest: TARGET || '/home/' + REMOTE_USER + '/', dest: TARGET || '/home/' + REMOTE_USER + '/',
args: [ARGS] || false, args: [ARGS] || false,
host: REMOTE_HOST, host: REMOTE_HOST,
port: REMOTE_PORT || '22',
username: REMOTE_USER, username: REMOTE_USER,
privateKeyContent: SSH_PRIVATE_KEY, privateKeyContent: SSH_PRIVATE_KEY,
}); });

2
package-lock.json generated
View File

@ -1,6 +1,6 @@
{ {
"name": "ssh-deploy", "name": "ssh-deploy",
"version": "2.0.0", "version": "2.1.0",
"lockfileVersion": 1, "lockfileVersion": 1,
"requires": true, "requires": true,
"dependencies": { "dependencies": {

View File

@ -1,6 +1,6 @@
{ {
"name": "ssh-deploy", "name": "ssh-deploy",
"version": "2.0.7", "version": "2.1.0",
"description": "This GitHub Action deploys specific directory from `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh.", "description": "This GitHub Action deploys specific directory from `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh.",
"main": "src/index.js", "main": "src/index.js",
"dependencies": { "dependencies": {

View File

@ -5,16 +5,16 @@ const commandExists = require('command-exists');
const nodeCmd = require('node-cmd'); const nodeCmd = require('node-cmd');
const nodeRsync = require('rsyncwrapper'); const nodeRsync = require('rsyncwrapper');
const { REMOTE_HOST, REMOTE_USER, SSH_PRIVATE_KEY, DEPLOY_KEY_NAME, SOURCE, TARGET, ARGS, GITHUB_WORKSPACE, HOME } = process.env; const { REMOTE_HOST, REMOTE_USER, REMOTE_PORT, SSH_PRIVATE_KEY, DEPLOY_KEY_NAME, SOURCE, TARGET, ARGS, GITHUB_WORKSPACE, HOME } = process.env;
console.log('GITHUB_WORKSPACE', GITHUB_WORKSPACE); console.log('GITHUB_WORKSPACE', GITHUB_WORKSPACE);
const sshDeploy = (() => { const sshDeploy = (() => {
const rsync = ({ privateKey, src, dest, args }) => { const rsync = ({ privateKey, port, src, dest, args }) => {
console.log(`Starting Rsync Action: ${src} to ${dest}`); console.log(`Starting Rsync Action: ${src} to ${dest}`);
try { try {
// RSYNC COMMAND // RSYNC COMMAND
nodeRsync({ src, dest, args, privateKey, ssh: true, sshCmdArgs: ['-o StrictHostKeyChecking=no'], recursive: true }, (error, stdout, stderr, cmd) => { nodeRsync({ src, dest, args, privateKey, ssh: true, port, sshCmdArgs: ['-o StrictHostKeyChecking=no'], recursive: true }, (error, stdout, stderr, cmd) => {
if (error) { if (error) {
console.error('⚠️ Rsync error', error.message); console.error('⚠️ Rsync error', error.message);
process.abort(); process.abort();
@ -34,14 +34,15 @@ const sshDeploy = (() => {
args, args,
host = 'localhost', host = 'localhost',
username, username,
privateKeyContent privateKeyContent,
port
}) => { }) => {
validateRsync(() => { validateRsync(() => {
const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key'); const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key');
const remoteDest = username + '@' + host + ':' + dest; const remoteDest = username + '@' + host + ':' + dest;
rsync({ privateKey, src, dest: remoteDest, args }); rsync({ privateKey, port, src, dest: remoteDest, args });
}); });
}; };
@ -141,6 +142,7 @@ const run = () => {
dest: TARGET || '/home/' + REMOTE_USER + '/', dest: TARGET || '/home/' + REMOTE_USER + '/',
args: [ARGS] || ['-rltgoDzvO'], args: [ARGS] || ['-rltgoDzvO'],
host: REMOTE_HOST, host: REMOTE_HOST,
port: REMOTE_PORT || '22',
username: REMOTE_USER, username: REMOTE_USER,
privateKeyContent: SSH_PRIVATE_KEY, privateKeyContent: SSH_PRIVATE_KEY,
}); });