Compare commits

...

8 Commits

Author SHA1 Message Date
Dragan Filipović
d86da2b0b7 Merge pull request #2 from Triloworld/patch-1
Update README.md - version bump
2020-01-09 22:21:19 +01:00
Dragan Filipović
445db7826b Merge pull request #1 from fmal/feat/remote-port
add optional `REMOTE_PORT` env to configuration
2020-01-09 22:19:49 +01:00
Patryk Padus
4a2dc47c39 Update README.md
It is required as node10 isn't supported and generate error

Download action repository 'easingthemes/ssh-deploy@v2.0.2'
##[error]Specified argument was out of the range of valid values. (Parameter ''using: node10' is not supported, use 'docker' or 'node12' instead.')
##[error]Fail to load /home/runner/work/_actions/easingthemes/ssh-deploy/v2.0.2/action.yml
2020-01-08 15:41:02 +01:00
Filip Malinowski
0d77a6681b add optional REMOTE_PORT env to configuration 2019-12-29 18:17:28 +01:00
Dragan Filipovic
a3d2df0501 [version] Add author 2019-10-03 01:17:24 +02:00
Dragan Filipovic
7d63f7f134 [version] Description update 2019-10-03 01:07:28 +02:00
Dragan Filipovic
5fdc019220 [version] version bump 2019-10-03 00:52:55 +02:00
Dragan Filipovic
177ffc3a2a [version] Readme update 2019-10-03 00:51:32 +02:00
6 changed files with 62 additions and 36 deletions

View File

@@ -1,6 +1,10 @@
# ssh deployments
This GitHub Action deploys specific directory from `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh, using NodeJS.
Deploy code with rsync over ssh, using NodeJS.
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 action would usually follow a build/test action which leaves deployable code in `GITHUB_WORKSPACE`, eg `dist`;
@@ -9,27 +13,41 @@ This action would usually follow a build/test action which leaves deployable cod
Pass configuration with `env` vars
1. `SSH_PRIVATE_KEY` [required]
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]
3. `REMOTE_USER` [required]
2. `REMOTE_HOST` [required]
eg: mydomain.com
3. `REMOTE_USER` [required]
eg: myusername
3. `REMOTE_PORT` (optional, default '22')
eg: '59184'
2. `ARGS` (optional, default '-rltgoDzvO')
2. `ARGS` (optional)
For any initial/required rsync flags, eg: `-avzr --delete`
3. `SOURCE` (optional, default '')
The source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/`
4. `TARGET` (optional, default '/home/REMOTE_USER/')
The target directory
# Usage
```
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@v2.0.2
uses: easingthemes/ssh-deploy@v2.0.7
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-rltgoDzvO --delete"
ARGS: "-rltgoDzvO"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
@@ -59,7 +77,7 @@ jobs:
- name: Run build task
run: npm run build --if-present
- name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.0.2
uses: easingthemes/ssh-deploy@v2.0.7
env:
SSH_PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-rltgoDzvO --delete"
@@ -71,6 +89,6 @@ jobs:
## 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,27 +1,31 @@
name: 'ssh deploy'
description: 'For deploying code over ssh'
name: "ssh deploy"
description: "NodeJS action for FAST deployment with rsync/ssh"
author: "easingthemes"
inputs:
SSH_PRIVATE_KEY: # Private Key
description: 'Private Key'
SSH_PRIVATE_KEY: # Private Key
description: "Private Key"
required: true
REMOTE_HOST:
description: 'Remote host'
description: "Remote host"
required: true
REMOTE_USER:
description: 'Remote user'
description: "Remote user"
required: true
REMOTE_PORT:
description: "Remote port"
default: "22"
SOURCE:
description: 'Source directory'
default: ''
description: "Source directory"
default: ""
TARGET:
description: 'Target directory'
default: '/home/REMOTE_USER/'
description: "Target directory"
default: "/home/REMOTE_USER/"
outputs:
status:
description: 'Status'
description: "Status"
runs:
using: 'node12'
main: 'dist/index.js'
using: "node12"
main: "dist/index.js"
branding:
color: 'green'
icon: 'truck'
color: "green"
icon: "truck"

12
dist/index.js vendored
View File

@@ -480,16 +480,16 @@ const commandExists = __webpack_require__(677);
const nodeCmd = __webpack_require__(428);
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);
const sshDeploy = (() => {
const rsync = ({ privateKey, src, dest, args }) => {
const rsync = ({ privateKey, port, src, dest, args }) => {
console.log(`Starting Rsync Action: ${src} to ${dest}`);
try {
// 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) {
console.error('⚠️ Rsync error', error.message);
process.abort();
@@ -509,14 +509,15 @@ const sshDeploy = (() => {
args,
host = 'localhost',
username,
privateKeyContent
privateKeyContent,
port
}) => {
validateRsync(() => {
const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key');
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 + '/',
args: [ARGS] || false,
host: REMOTE_HOST,
port: REMOTE_PORT || '22',
username: REMOTE_USER,
privateKeyContent: SSH_PRIVATE_KEY,
});

2
package-lock.json generated
View File

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

View File

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

View File

@@ -5,16 +5,16 @@ const commandExists = require('command-exists');
const nodeCmd = require('node-cmd');
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);
const sshDeploy = (() => {
const rsync = ({ privateKey, src, dest, args }) => {
const rsync = ({ privateKey, port, src, dest, args }) => {
console.log(`Starting Rsync Action: ${src} to ${dest}`);
try {
// 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) {
console.error('⚠️ Rsync error', error.message);
process.abort();
@@ -34,14 +34,15 @@ const sshDeploy = (() => {
args,
host = 'localhost',
username,
privateKeyContent
privateKeyContent,
port
}) => {
validateRsync(() => {
const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key');
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 + '/',
args: [ARGS] || ['-rltgoDzvO'],
host: REMOTE_HOST,
port: REMOTE_PORT || '22',
username: REMOTE_USER,
privateKeyContent: SSH_PRIVATE_KEY,
});