Compare commits

...

232 Commits

Author SHA1 Message Date
Dragan Filipovic
245b7a9d2f fix: fix manual release action 2023-01-06 21:50:25 +01:00
Dragan Filipović
4c8eee72bd Merge pull request #105 from npiasecki/fix-remote-port
Add remote port
2023-01-05 20:21:22 +01:00
Nicholas Piasecki
0a1df91f97 Add remote port 2023-01-04 12:18:09 -05:00
github-actions
845b7f6f1f chore(release): 4.0.4 [skip ci]
## [4.0.4](https://github.com/easingthemes/ssh-deploy/compare/v4.0.3...v4.0.4) (2023-01-03)

### Bug Fixes

* update sub dependencies ([2a32c8d](2a32c8dcde))
2023-01-03 22:41:11 +00:00
Dragan Filipovic
2a32c8dcde fix: update sub dependencies 2023-01-03 23:40:24 +01:00
github-actions
0b63b85565 chore(release): 4.0.3 [skip ci]
## [4.0.3](https://github.com/easingthemes/ssh-deploy/compare/v4.0.2...v4.0.3) (2023-01-03)

### Bug Fixes

* update v3 e2e test ([450bf42](450bf423f3))
2023-01-03 22:16:09 +00:00
Dragan Filipovic
450bf423f3 fix: update v3 e2e test 2023-01-03 23:15:21 +01:00
github-actions
affc58a8b7 chore(release): 4.0.2 [skip ci]
## [4.0.2](https://github.com/easingthemes/ssh-deploy/compare/v4.0.1...v4.0.2) (2023-01-03)

### Bug Fixes

* add githubWorkspace as default source root ([3ef66d0](3ef66d0be9))
2023-01-03 22:08:02 +00:00
github-actions
8c12d45929 patch: Trigger Manual Release 2023-01-03 22:07:41 +00:00
Dragan Filipović
85987f4567 Merge pull request #101 from easingthemes/bugfix/src-dir
fix: add githubWorkspace as default source root
2023-01-03 23:05:33 +01:00
Dragan Filipovic
3ef66d0be9 fix: add githubWorkspace as default source root 2023-01-03 23:02:41 +01:00
github-actions
79363f2b74 chore(release): 4.0.1 [skip ci]
## [4.0.1](https://github.com/easingthemes/ssh-deploy/compare/v4.0.0...v4.0.1) (2023-01-03)

### Bug Fixes

* fix default source if empty ([9f191f4](9f191f4263))
2023-01-03 20:57:09 +00:00
Dragan Filipović
7c21074882 Merge pull request #99 from easingthemes/bugfix/fix-empty-src
fix: fix default source if empty
2023-01-03 21:56:33 +01:00
Dragan Filipovic
9f191f4263 fix: fix default source if empty 2023-01-03 21:55:45 +01:00
Dragan Filipovic
006cf3021d Add v3 e2e 2023-01-03 19:29:28 +01:00
github-actions
8be4106fce chore(release): 4.0.0 [skip ci]
# [4.0.0](https://github.com/easingthemes/ssh-deploy/compare/v3.4.3...v4.0.0) (2023-01-03)

### Bug Fixes

* rebuild ([2169399](2169399fef))

### Performance Improvements

* update default rsync options ([2be7efb](2be7efb376))

### BREAKING CHANGES

* Default rsync options updated to speed up default deployments.
from `rltgoDzvO` to `-rlgoDzvc -i`
2023-01-03 08:34:27 +00:00
Dragan Filipović
7c9b40539e Merge pull request #96 from easingthemes/feature/default-rsync-options
feat: update default rsync options
2023-01-03 09:33:49 +01:00
Dragan Filipovic
2169399fef fix: rebuild 2023-01-03 09:25:16 +01:00
Dragan Filipovic
2be7efb376 perf: update default rsync options
BREAKING CHANGE: Default rsync options updated to speed up default deployments.
from `rltgoDzvO` to `-rlgoDzvc -i`
2023-01-03 09:21:19 +01:00
Dragan Filipovic
e6e41a57ec Merge branch 'temp3' 2023-01-03 03:39:52 +01:00
github-actions
c8d57ec8b4 chore(release): 3.4.3 [skip ci]
## [3.4.3](https://github.com/easingthemes/ssh-deploy/compare/v3.4.2...v3.4.3) (2023-01-03)

### Bug Fixes

* move e2e tests typo branch name ([6d3554b](6d3554b01e))
2023-01-03 03:38:43 +01:00
github-actions
8bf58fb293 chore(release): 3.4.3 [skip ci]
## [3.4.3](https://github.com/easingthemes/ssh-deploy/compare/v3.4.2...v3.4.3) (2023-01-03)

### Bug Fixes

* move e2e tests typo branch name ([6d3554b](6d3554b01e))
2023-01-03 02:29:31 +00:00
Dragan Filipovic
6d3554b01e fix: move e2e tests typo branch name 2023-01-03 03:28:39 +01:00
github-actions
8ad0b68b03 chore(release): 3.4.2 [skip ci]
## [3.4.2](https://github.com/easingthemes/ssh-deploy/compare/v3.4.1...v3.4.2) (2023-01-03)

### Bug Fixes

* Update changelog ([765f5ff](765f5ffd31))
2023-01-03 02:26:00 +00:00
Dragan Filipovic
765f5ffd31 fix: Update changelog 2023-01-03 03:25:23 +01:00
github-actions
bd84b4a501 chore(release): 3.4.1 [skip ci]
## [3.4.1](https://github.com/easingthemes/ssh-deploy/compare/v3.4.0...v3.4.1) (2023-01-03)

### Bug Fixes

* move e2e tests to main branch ([0069fae](0069faea9f))
2023-01-03 02:13:05 +00:00
Dragan Filipovic
0069faea9f fix: move e2e tests to main branch 2023-01-03 03:11:47 +01:00
github-actions
f6dd2006c5 chore(release): 3.4.0 [skip ci]
# [3.4.0](https://github.com/easingthemes/ssh-deploy/compare/v3.3.4...v3.4.0) (2023-01-03)

### Bug Fixes

* yaml step name ([5c13615](5c13615d4b))

### Features

* Add multi source and multi target support ([73a65ec](73a65ec97c))
2023-01-03 02:10:04 +00:00
Dragan Filipović
923bc68f1a Merge pull request #95 from easingthemes/feature/multi-src
feat: Add multi source and multi target support
2023-01-03 03:09:17 +01:00
Dragan Filipovic
5c13615d4b fix: yaml step name 2023-01-03 03:03:07 +01:00
Dragan Filipovic
73a65ec97c feat: Add multi source and multi target support 2023-01-03 02:49:54 +01:00
Dragan Filipovic
98ee38d52e BREAKING CHANGE: Update inputs for multi src and pattern args 2023-01-02 23:50:02 +01:00
Dragan Filipovic
bfa025c10c improve echo in e2e 2023-01-02 23:08:06 +01:00
github-actions
a73c81ee7b chore(release): 3.3.4 [skip ci]
## [3.3.4](https://github.com/easingthemes/ssh-deploy/compare/v3.3.3...v3.3.4) (2023-01-02)

### Bug Fixes

* Add visible Rsync CMD for debugging ([91b6d28](91b6d280ae))
2023-01-02 21:59:55 +00:00
Dragan Filipovic
91b6d280ae fix: Add visible Rsync CMD for debugging 2023-01-02 22:59:19 +01:00
Dragan Filipovic
4f233a7f45 add bigger test files 2023-01-02 22:40:20 +01:00
github-actions
47f78aa96e chore(release): 3.3.3 [skip ci]
## [3.3.3](https://github.com/easingthemes/ssh-deploy/compare/v3.3.2...v3.3.3) (2023-01-02)

### Bug Fixes

* log buffer from rsync stdout ([8e19e0d](8e19e0d6bc))
2023-01-02 21:31:56 +00:00
Dragan Filipovic
8e19e0d6bc fix: log buffer from rsync stdout 2023-01-02 22:30:57 +01:00
Dragan Filipovic
da62405174 fix wrong args 2023-01-02 22:05:57 +01:00
Dragan Filipovic
2a85c96230 add more complex e2e tests 2023-01-02 22:02:16 +01:00
github-actions
ac90bba983 chore(release): 3.3.2 [skip ci]
## [3.3.2](https://github.com/easingthemes/ssh-deploy/compare/v3.3.1...v3.3.2) (2023-01-02)

### Bug Fixes

* Add manual inputs for e2e test ([8f71595](8f715957ab))
2023-01-02 20:46:02 +00:00
Dragan Filipovic
05ddb64347 Rebuild 2023-01-02 21:45:14 +01:00
Dragan Filipovic
8f715957ab fix: Add manual inputs for e2e test 2023-01-02 21:44:34 +01:00
github-actions
1b29e52589 chore(release): 3.3.1 [skip ci]
## [3.3.1](https://github.com/easingthemes/ssh-deploy/compare/v3.3.0...v3.3.1) (2023-01-02)

### Bug Fixes

* Log rsync command ([85f4a96](85f4a96743))
2023-01-02 20:38:50 +00:00
Dragan Filipovic
18abe921d8 Merge branch 'bckp2' 2023-01-02 21:38:07 +01:00
Dragan Filipovic
85f4a96743 fix: Log rsync command 2023-01-02 21:37:23 +01:00
github-actions
c59d8e4eeb chore(release): 3.3.0 [skip ci]
# [3.3.0](https://github.com/easingthemes/ssh-deploy/compare/v3.2.0...v3.3.0) (2023-01-02)

### Features

* Add SSH_CMD_ARGS support ([51a0063](51a00631e2))
2023-01-02 20:33:17 +00:00
Dragan Filipovic
5c0c73092e Merge branch 'bckp' 2023-01-02 21:32:08 +01:00
Dragan Filipovic
51a00631e2 feat: Add SSH_CMD_ARGS support 2023-01-02 21:31:04 +01:00
Dragan Filipović
4a7a6fbdf2 Update CHANGELOG.md 2023-01-02 21:21:04 +01:00
Dragan Filipović
fe4bee416c Update CHANGELOG.md 2023-01-02 21:17:40 +01:00
github-actions
18600dc04b chore(release): 3.2.0 [skip ci]
# [3.2.0](https://github.com/easingthemes/ssh-deploy/compare/v3.1.1...v3.2.0) (2023-01-02)

### Features

* Add SSH remote script support -  before and after rsync ([2cd8a82](2cd8a820e2))
2023-01-02 20:14:22 +00:00
Dragan Filipovic
2cd8a820e2 feat: Add SSH remote script support - before and after rsync
fix: remove _unsafe _dirname

feat: add sshCmdArgs option

fix: Add promise instead of callback

fix: improve logs

fix: Add simple command exists instead of a plugin

fix: add non interactive install

feat: add onStderr and onStdout logs

fix: Improve reject messages

feat: Add RSYNC_STDOUT env variable

feat: Update emojis

fix: update workflow actions
2023-01-02 21:13:46 +01:00
github-actions
f4029512e4 chore(release): 3.1.1 [skip ci]
## [3.1.1](https://github.com/easingthemes/ssh-deploy/compare/v3.1.0...v3.1.1) (2023-01-02)

### Bug Fixes

* use main branch for e2e testes ([21451fe](21451fec97))
2023-01-02 20:09:00 +00:00
Dragan Filipovic
21451fec97 fix: use main branch for e2e testes 2023-01-02 21:08:00 +01:00
Dragan Filipović
ec9347f8c6 Feature/ssh cmd (#94)
* feat: Add SSH remote script support -  before and after rsync

* fix: remove __dirname

* feat: add sshCmdArgs option

* Add promise instead of callback

* fix: improve logs

* fix: Add simple command exists instead of a plugin

* add non interactive install

* feat: add onStderr and onStdout logs

* Improve reject messages

* feat: Add RSYNC_STDOUT env variable

* emoji updates

* fix: update workflow actions
2023-01-02 21:06:33 +01:00
Dragan Filipović
a5d8edb941 Update README.md 2022-12-31 15:20:15 +01:00
Dragan Filipović
38b80f1762 Update README.md 2022-12-31 15:13:32 +01:00
Dragan Filipović
cde8aae19c Add stale issues Action 2022-12-31 15:11:04 +01:00
github-actions
5d811fd34f chore(release): 3.1.0 [skip ci]
# [3.1.0](https://github.com/easingthemes/ssh-deploy/compare/v3.0.1...v3.1.0) (2022-12-31)

### Features

* add e2e tests ([40f855a](40f855a08b))
2022-12-31 09:34:03 +00:00
Dragan Filipovic
40f855a08b feat: add e2e tests 2022-12-31 10:33:16 +01:00
Dragan Filipovic
45bf266280 Remove Key log 2022-12-31 10:30:19 +01:00
Dragan Filipović
650beff82c Merge pull request #93 from easingthemes/feature/add-tests
Feature/add tests
2022-12-31 10:27:15 +01:00
Dragan Filipovic
b6ac6f5c98 readd workflows 2022-12-31 10:25:56 +01:00
Dragan Filipovic
58395110fa revert wrong package 2022-12-31 10:24:28 +01:00
Dragan Filipovic
34a75bf467 remove unused package 2022-12-31 10:23:56 +01:00
Dragan Filipovic
dd4fa994f1 switch back to main 2022-12-31 10:22:36 +01:00
Dragan Filipovic
fe5dbcff69 Remove ssh test 2022-12-31 10:22:07 +01:00
Dragan Filipovic
148d625f1d permissions fix 2022-12-31 10:20:28 +01:00
Dragan Filipovic
c685549dfc persmissions fix 2022-12-31 10:19:52 +01:00
Dragan Filipovic
4eea1db3aa mkdir remote 2022-12-31 10:17:50 +01:00
Dragan Filipovic
caa0281bf4 build it again 2022-12-31 10:15:39 +01:00
Dragan Filipovic
2121ba96bc update apt 2022-12-31 10:15:28 +01:00
Dragan Filipovic
b65c6688d1 host rsync 2022-12-31 10:14:04 +01:00
Dragan Filipovic
3e2f0214fc build it! 2022-12-31 10:07:22 +01:00
Dragan Filipovic
45eb75d449 inherit 2022-12-31 10:06:06 +01:00
Dragan Filipovic
4b6681d89c {stdio: 'inherit'} 2022-12-31 10:04:57 +01:00
Dragan Filipovic
70415f9f9d rsyncVersion 2022-12-31 10:02:46 +01:00
Dragan Filipovic
5403dab9a0 rsync check 2022-12-31 10:00:32 +01:00
Dragan Filipovic
11f58724d7 Build Action 2022-12-31 09:54:38 +01:00
Dragan Filipovic
5404854e81 envz 2022-12-31 09:53:43 +01:00
Dragan Filipovic
4efe6b6c40 print vars 2022-12-31 09:48:17 +01:00
Dragan Filipovic
a52870b487 test 2022-12-31 03:16:48 +01:00
Dragan Filipovic
d85914e1f9 test 2022-12-31 03:15:04 +01:00
Dragan Filipovic
152ee9d6b2 test 2022-12-31 02:43:57 +01:00
Dragan Filipovic
aeee708bee test 2022-12-31 02:43:17 +01:00
Dragan Filipovic
fd8e654d7e eval ssh-agent -s 2022-12-30 16:04:25 +01:00
Dragan Filipovic
0f6376161f add key 2022-12-30 16:01:47 +01:00
Dragan Filipovic
4d8753359e test ssh 2022-12-30 15:59:05 +01:00
Dragan Filipovic
f67f2211cb env3 2022-12-30 15:48:53 +01:00
Dragan Filipovic
e577b525ca env2 2022-12-30 15:46:37 +01:00
Dragan Filipovic
a3ddddcc15 env 2022-12-30 15:44:38 +01:00
Dragan Filipovic
68642e11e3 env 2022-12-30 15:44:09 +01:00
Dragan Filipovic
2f8e6000d2 env vars test 2022-12-30 15:40:28 +01:00
Dragan Filipovic
8073f2b34c test env vars 2022-12-30 15:36:34 +01:00
Dragan Filipovic
25ffb03f81 run on current branch 2022-12-30 15:26:24 +01:00
Dragan Filipovic
6662bf770e run on main branch 2022-12-30 15:25:45 +01:00
Dragan Filipovic
c7bd38757d replace nodeCMD with exec 2022-12-30 15:23:23 +01:00
Dragan Filipovic
692d3fee7d start nginx for testing 2022-12-30 14:29:31 +01:00
Dragan Filipovic
f7c067b07e fix env 2022-12-30 11:21:24 +01:00
Dragan Filipovic
d334a45df7 fix paths 2022-12-30 10:29:20 +01:00
Dragan Filipovic
a3412294d1 remove unused envs 2022-12-29 23:28:40 +01:00
Dragan Filipovic
a9382b67a2 e2e docker 2022-12-29 23:14:51 +01:00
Dragan Filipovic
2fdbdb60e6 get host info 2022-12-29 16:01:41 +01:00
Dragan Filipovic
416e17545e silent ssh-keygen 2022-12-29 15:55:39 +01:00
Dragan Filipovic
5f8d616f95 fix branch name 2022-12-29 15:51:02 +01:00
Dragan Filipovic
cc49ab6239 typo fix 2022-12-29 15:50:00 +01:00
Dragan Filipovic
b1a31cce80 test on current branch 2022-12-29 15:47:33 +01:00
Dragan Filipovic
8e3acd84f2 start e2e 2022-12-29 15:46:56 +01:00
github-actions
f2f261e6bd chore(release): 3.0.1 [skip ci]
## [3.0.1](https://github.com/easingthemes/ssh-deploy/compare/v3.0.0...v3.0.1) (2022-10-28)

### Bug Fixes

* readme update ([80a7f53](80a7f53ec9)), closes [#67](https://github.com/easingthemes/ssh-deploy/issues/67)
2022-10-28 02:16:55 +00:00
Dragan Filipovic
80a7f53ec9 fix: readme update
Fixes #67
2022-10-28 04:16:02 +02:00
github-actions
d4d82006e8 chore(release): 3.0.0 [skip ci]
# [3.0.0](https://github.com/easingthemes/ssh-deploy/compare/v2.2.11...v3.0.0) (2022-10-28)

### Bug Fixes

* plugins versions ([2f40dde](2f40dde84f))

* Merge pull request #83 from easingthemes/feature/#82-update-node-version ([76660a8](76660a8456)), closes [#83](https://github.com/easingthemes/ssh-deploy/issues/83) [easingthemes/feature/#82](https://github.com/easingthemes/feature//issues/82)

### BREAKING CHANGES

* update to use nodeJS v16
2022-10-28 02:03:03 +00:00
Dragan Filipović
2de13b41b4 Merge pull request #84 from easingthemes/feature/#82-update-node-version
fix: plugins versions
2022-10-28 04:02:32 +02:00
Dragan Filipovic
2f40dde84f fix: plugins versions 2022-10-28 04:01:24 +02:00
Dragan Filipović
76660a8456 Merge pull request #83 from easingthemes/feature/#82-update-node-version
BREAKING CHANGE: update to use nodeJS v16
2022-10-28 03:48:26 +02:00
Dragan Filipovic
12adb9b839 BREAKING CHANGE: update to use nodeJS v16
Since it's used in Github environment it should not have any impact in usage.
Just in case major version updated.

Fixes #82
2022-10-28 03:44:28 +02:00
github-actions
c711f2c339 chore(release): 2.2.11 [skip ci]
## [2.2.11](https://github.com/easingthemes/ssh-deploy/compare/v2.2.10...v2.2.11) (2021-05-28)

### Bug Fixes

* remove change npm to public ([3c36af7](3c36af7577))
2021-05-28 00:23:46 +00:00
Dragan Filipović
824072bc5a Merge pull request #60 from easingthemes/feature/package-json-automation-6
fix: remove change npm to public
2021-05-28 02:22:56 +02:00
Dragan Filipovic
3c36af7577 fix: remove change npm to public 2021-05-28 02:22:36 +02:00
github-actions
649339f4bb chore(release): 2.2.10 [skip ci]
## [2.2.10](https://github.com/easingthemes/ssh-deploy/compare/v2.2.9...v2.2.10) (2021-05-27)

### Bug Fixes

* add assets to semantic-release git ([0867b12](0867b12954))
2021-05-27 23:24:30 +00:00
Dragan Filipović
66e6843055 Merge pull request #59 from easingthemes/feature/package-json-automation-5
fix: add assets to semantic-release git
2021-05-28 01:23:43 +02:00
Dragan Filipovic
0867b12954 fix: add assets to semantic-release git 2021-05-28 01:23:17 +02:00
github-actions
d71ce0f0b2 chore(release): 2.2.9 [skip ci]
## [2.2.9](https://github.com/easingthemes/ssh-deploy/compare/v2.2.8...v2.2.9) (2021-05-27)

### Bug Fixes

* change npm to public ([191c82d](191c82d9b4))
2021-05-27 22:38:16 +00:00
Dragan Filipović
382db98e53 Merge pull request #58 from easingthemes/feature/package-json-automation-4
fix: change npm to public
2021-05-28 00:37:29 +02:00
Dragan Filipovic
191c82d9b4 fix: change npm to public 2021-05-28 00:37:06 +02:00
github-actions
5109c975e9 chore(release): 2.2.8 [skip ci]
## [2.2.8](https://github.com/easingthemes/ssh-deploy/compare/v2.2.7...v2.2.8) (2021-05-27)

### Bug Fixes

* update npm package name ([9c4e411](9c4e4119ad))
2021-05-27 22:33:51 +00:00
Dragan Filipović
76882263e5 Merge pull request #57 from easingthemes/feature/package-json-automation-3
fix: update npm package name
2021-05-28 00:33:13 +02:00
Dragan Filipovic
9c4e4119ad fix: update npm package name 2021-05-28 00:32:37 +02:00
github-actions
fbeaefca08 chore(release): 2.2.7 [skip ci]
## [2.2.7](https://github.com/easingthemes/ssh-deploy/compare/v2.2.6...v2.2.7) (2021-05-27)

### Bug Fixes

* minify dist ([87551c3](87551c3893))
2021-05-27 22:24:50 +00:00
Dragan Filipović
f04642c1f5 Merge pull request #56 from easingthemes/feature/package-json-automation-2
Feature/package json automation 2
2021-05-28 00:24:06 +02:00
Dragan Filipovic
fdf6057d5e ci: try package.json npm enabled 2021-05-28 00:23:28 +02:00
Dragan Filipovic
87551c3893 fix: minify dist 2021-05-28 00:23:04 +02:00
github-actions
83d848a9e4 chore(release): 2.2.6 [skip ci]
## [2.2.6](https://github.com/easingthemes/ssh-deploy/compare/v2.2.5...v2.2.6) (2021-05-27)

### Bug Fixes

* add NPM token ([2197bc6](2197bc60ef))
2021-05-27 22:02:20 +00:00
Dragan Filipović
9c02ed6208 Merge pull request #55 from easingthemes/feature/package-json-automation-1
fix: add NPM token
2021-05-28 00:01:28 +02:00
Dragan Filipovic
2197bc60ef fix: add NPM token 2021-05-27 23:57:27 +02:00
github-actions
eb4a19604b chore(release): 2.2.5 [skip ci]
## [2.2.5](https://github.com/easingthemes/ssh-deploy/compare/v2.2.4...v2.2.5) (2021-05-27)

### Bug Fixes

* semantic-release/npm update config ([40096bf](40096bf224))
2021-05-27 21:40:47 +00:00
Dragan Filipović
09342ca039 Merge pull request #54 from easingthemes/feature/package-json-automation
fix: semantic-release/npm update config
2021-05-27 23:40:02 +02:00
Dragan Filipovic
40096bf224 fix: semantic-release/npm update config 2021-05-27 23:39:43 +02:00
github-actions
4383250122 chore(release): 2.2.4 [skip ci]
## [2.2.4](https://github.com/easingthemes/ssh-deploy/compare/v2.2.3...v2.2.4) (2021-05-27)

### Bug Fixes

* add branch instead of a version in a readme ([8218c8e](8218c8ed95))
2021-05-27 21:35:25 +00:00
Dragan Filipović
142b71c9e1 Merge pull request #53 from easingthemes/feature/readme-update
fix: add branch instead of a version in a readme
2021-05-27 23:34:31 +02:00
Dragan Filipovic
8218c8ed95 fix: add branch instead of a version in a readme 2021-05-27 23:33:55 +02:00
github-actions
b75a6aac49 chore(release): 2.2.3 [skip ci]
## [2.2.3](https://github.com/easingthemes/ssh-deploy/compare/v2.2.2...v2.2.3) (2021-05-27)

### Bug Fixes

* codeql yaml syntax update ([87ad671](87ad6713b5))
2021-05-27 21:20:23 +00:00
Dragan Filipović
a0be71d296 Merge pull request #52 from easingthemes/feature/codeql-fix
fix: codeql yaml syntax update
2021-05-27 23:19:39 +02:00
Dragan Filipovic
87ad6713b5 fix: codeql yaml syntax update 2021-05-27 23:16:38 +02:00
github-actions
b12dcbe93c chore(release): 2.2.2 [skip ci]
## [2.2.2](https://github.com/easingthemes/ssh-deploy/compare/v2.2.1...v2.2.2) (2021-05-27)

### Bug Fixes

* codeql build ([5e456a4](5e456a475a))
2021-05-27 21:14:04 +00:00
Dragan Filipović
c984a47bf5 Merge pull request #51 from easingthemes/feature/codeql-fix
fix: codeql build
2021-05-27 23:13:23 +02:00
Dragan Filipovic
5e456a475a fix: codeql build 2021-05-27 23:12:03 +02:00
github-actions
a9eda89ad7 chore(release): 2.2.1 [skip ci]
## [2.2.1](https://github.com/easingthemes/ssh-deploy/compare/v2.2.0...v2.2.1) (2021-05-27)

### Bug Fixes

* add package json auto updates ([ce56d75](ce56d75fc1))
2021-05-27 21:08:10 +00:00
Dragan Filipović
3cfa1cdc25 Merge pull request #50 from easingthemes/feature/release-npm-update
fix: add package json auto updates
2021-05-27 23:07:30 +02:00
Dragan Filipovic
ce56d75fc1 fix: add package json auto updates 2021-05-27 23:06:40 +02:00
github-actions
74b3a2aba4 chore(release): 2.2.0 [skip ci]
# [2.2.0](https://github.com/easingthemes/ssh-deploy/compare/v2.1.7...v2.2.0) (2021-05-27)

### Bug Fixes

* only=prod package json ([95f4dc8](95f4dc8069))
* replace i with ci ([50d1f57](50d1f576f9))
* update ncc ([20a0cae](20a0cae1ae))
* update plugins ([b2adc00](b2adc00c92))
* update plugins ([a50a999](a50a999528))

### Features

* add semantic-release-action ([ac3c9b5](ac3c9b51d5))
2021-05-27 21:00:10 +00:00
Dragan Filipović
77bfc8c169 Merge pull request #49 from easingthemes/feature/release-ci-update
feat: add semantic-release-action
2021-05-27 22:59:32 +02:00
Dragan Filipovic
ac3c9b51d5 feat: add semantic-release-action 2021-05-27 22:56:27 +02:00
Dragan Filipović
a0be893c82 Merge pull request #48 from easingthemes/feature/dependencies-update
Feature/dependencies update
2021-05-27 22:38:28 +02:00
Dragan Filipovic
50d1f576f9 fix: replace i with ci 2021-05-27 22:08:42 +02:00
Dragan Filipovic
20a0cae1ae fix: update ncc 2021-05-27 22:04:06 +02:00
Dragan Filipovic
95f4dc8069 fix: only=prod package json 2021-05-27 22:03:15 +02:00
Dragan Filipovic
b2adc00c92 fix: update plugins 2021-05-27 21:51:19 +02:00
Dragan Filipovic
a50a999528 fix: update plugins 2021-05-27 21:51:10 +02:00
github-actions
1242867d7a 2.1.9 2021-04-16 23:24:55 +00:00
Dragan Filipovic
33648ba2ca CI - test tags 2021-04-17 01:03:01 +02:00
github-actions
40a3789c05 2.1.8 2021-04-16 22:56:33 +00:00
github-actions
7e2c0f29d6 2.1.7 2021-04-16 22:41:08 +00:00
Dragan Filipovic
e9c43c6900 CI - use ci instead of install 2021-04-17 00:39:39 +02:00
Dragan Filipovic
9ae3c340cb CI add git user data 2021-04-17 00:36:22 +02:00
Dragan Filipovic
386c8766a0 CI - split git commands 2021-04-17 00:28:36 +02:00
Dragan Filipovic
130901534a CI - typo fix 2021-04-17 00:24:54 +02:00
Dragan Filipovic
8b977327bb CI - split git commands 2021-04-17 00:22:34 +02:00
Dragan Filipović
880f3b6b88 Merge pull request #43 from easingthemes/feature/CI-add-tag-action
Feature/ci add tag action
2021-04-17 00:18:03 +02:00
Dragan Filipovic
ec4a00fe02 CI - typo fix 2021-04-17 00:17:27 +02:00
Dragan Filipovic
a04c641775 CI - add steps names 2021-04-17 00:12:22 +02:00
Dragan Filipovic
9483c83d88 CI fix input vars 2021-04-17 00:08:19 +02:00
Dragan Filipovic
e41d593e15 CI add actions for build and tag 2021-04-17 00:06:00 +02:00
Dragan Filipović
9ab3993555 Merge pull request #35 from easingthemes/feature/RSYNC-exclude-option
RSYNC use excludeFirst instead of exclude
2021-03-24 18:50:40 +01:00
Dragan Filipovic
07265c8c95 RSYNC use excludeFirst instead of exclude 2021-03-24 18:48:12 +01:00
Dragan Filipović
a27b8667de Merge pull request #32 from peterkracik/master
Exclude folder parameter
2021-03-15 09:54:06 +01:00
Peter Kracik
2b38f7bf7a Added exclude parameter 2021-03-12 07:42:12 +01:00
Peter Kracik
cd3b869a28 Update action.yml 2021-03-12 07:26:41 +01:00
Dragan Filipovic
191986574c [DOCS] Readme update 2020-09-18 23:35:33 +02:00
Dragan Filipovic
d41b136666 [BUILD] rebuild 2020-09-18 23:31:43 +02:00
Dragan Filipovic
1ac1bcb558 [VERSION] version bump 2020-09-18 23:31:31 +02:00
Dragan Filipovic
c14eb85faf [DOCS] Readme update 2020-09-18 23:29:28 +02:00
Dragan Filipovic
2bc5e10d4d [Formatting] formatting updates 2020-09-18 23:26:31 +02:00
Dragan Filipović
4f928a3efc Merge pull request #15 from easingthemes/dependabot/npm_and_yarn/lodash-4.17.19
Bump lodash from 4.17.15 to 4.17.19
2020-08-16 22:52:37 +02:00
dependabot[bot]
aac4cbf0db Bump lodash from 4.17.15 to 4.17.19
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.15 to 4.17.19.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.15...4.17.19)

Signed-off-by: dependabot[bot] <support@github.com>
2020-07-21 08:46:30 +00:00
Dragan Filipovic
4042d3876f [build] update package lock 2020-07-01 01:01:48 +02:00
Dragan Filipovic
68f9da66f0 [version] prepare rc.1 2020-07-01 00:56:10 +02:00
Dragan Filipovic
073bd0b6f6 [build] rebuild 2020-07-01 00:54:42 +02:00
Dragan Filipovic
14eb503e62 [action] get input vars from ENV or WITH workflow settings 2020-07-01 00:54:24 +02:00
Dragan Filipovic
a9e37f3cb5 [version] increase version 2020-07-01 00:20:13 +02:00
Dragan Filipović
ff615959b6 Merge pull request #11 from aperezdc/master
action.yml: Add mising declaration for the ARGS parameter
2020-07-01 00:17:59 +02:00
Adrian Perez de Castro
5c4b90e3f8 action.yml: Add mising declaration for the ARGS parameter 2020-06-30 23:03:20 +03:00
Dragan Filipović
66b3ffb0f7 Merge pull request #10 from easingthemes/9-Readme-update-ssh-keys
#9 Add link to more info about SSH keys
2020-06-29 21:10:59 +02:00
Dragan Filipovic
037d157977 #9 Add link to more info about SSH keys 2020-06-29 21:09:04 +02:00
Dragan Filipović
e34308df6c Merge pull request #6 from perlun/patch-1
README.md: fix typo
2020-06-15 22:03:58 +02:00
Per Lundberg
ad838db71f README.md: fix typo 2020-06-06 23:36:28 +03:00
Dragan Filipovic
7f1c0e0111 [docs] Update version naming 2020-04-11 23:20:56 +02:00
Dragan Filipovic
54f2361d27 [docs] Update readme 2020-04-11 23:08:36 +02:00
Dragan Filipovic
101b6c13a0 [code] hotfix dist 2020-04-11 17:44:56 +02:00
Dragan Filipovic
ac4f0895a6 [code] hotfix 2020-04-11 17:42:37 +02:00
Dragan Filipović
0711330570 Merge pull request #5 from easingthemes/feature/SSH-DEPLOY-refactor
Feature/ssh deploy refactor
2020-04-11 17:25:18 +02:00
Dragan Filipovic
62063532be Merge branch 'master' into feature/SSH-DEPLOY-refactor
# Conflicts:
#	.gitignore
#	README.md
#	dist/index.js
#	src/index.js
2020-04-11 16:54:21 +02:00
Dragan Filipović
1a29114d7b Merge pull request #4 from GarryOne/patch-1
Improved error handling. Added to README.md PM key generation details
2020-04-11 16:40:33 +02:00
Dragan Filipovic
e23436526e [readme] update Readme 2020-04-11 16:33:22 +02:00
Dragan Filipovic
bf3218eb12 [readme] update Readme 2020-04-11 16:30:28 +02:00
Dragan Filipovic
7269cb396a [dist] rebuild 2020-04-11 16:30:11 +02:00
Dragan Filipovic
460751d7c3 [code] split helpers into separate files 2020-04-11 16:29:20 +02:00
Dragan Filipovic
9cdc72374b [action] add required params 2020-04-11 16:27:09 +02:00
Dragan Filipovic
19689edd76 [tests] add editorconfig and eslint 2020-04-11 16:26:19 +02:00
Mardari Igor
53c00dce2b Update README.md 2020-04-11 13:11:34 +03:00
GarryOne
140e959df8 Added key generation details to README.md 2020-03-27 01:17:37 +02:00
GarryOne
00e4d7e856 Added cmd to rsync error output 2020-03-27 01:10:01 +02:00
GarryOne
37e21b5b6b Added error display for rsync 2020-03-27 00:05:33 +02:00
GarryOne
19dbe22d4f Removed console.log 2020-03-26 23:47:55 +02:00
GarryOne
733f9fc153 Added console.log(process.env) 2020-03-26 23:27:22 +02:00
GarryOne
749cc36d5d Added .idea to .gitignore 2020-03-25 05:33:08 +02:00
GarryOne
f09a8d0277 Removed console.log() 2020-03-25 05:28:27 +02:00
GarryOne
82ccbba7dc Added field key to validation message 2020-03-25 05:20:29 +02:00
GarryOne
ff832e4e77 Built src/index.js 2020-03-25 05:08:01 +02:00
Mardari Igor
3f84fa4ae1 Set ssh to false 2020-03-25 04:50:26 +02:00
Dragan Filipović
c28aa7215e Merge pull request #3 from JZLeung/patch-1
fix: 修复 ARGS 为空时导致 rsync 执行错误问题。
2020-03-24 00:04:15 +01:00
Leung-JZ
caaa95b651 fix: 修复 ARGS 为空时导致 rsync 执行错误问题。
由于 ARGS 非必填,当其为空时,报错:

⚠️ An error happened:(. Cannot read property 'match' of undefined TypeError: Cannot read property 'match' of undefined
2020-03-12 09:16:23 +08:00
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
Dragan Filipovic
b5d54bf446 [action] fix node version 2019-10-03 00:24:52 +02:00
Dragan Filipovic
a20c19a8d1 [version] Readme update 2019-10-03 00:17:19 +02:00
26 changed files with 4783 additions and 873 deletions

11
.editorconfig Normal file
View File

@@ -0,0 +1,11 @@
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 120
tab_width = 4
trim_trailing_whitespace = true

25
.eslintrc.js Normal file
View File

@@ -0,0 +1,25 @@
module.exports = {
env: {
commonjs: true,
es6: true,
node: true
},
extends: [
'airbnb-base'
],
globals: {
Atomics: 'readonly',
SharedArrayBuffer: 'readonly'
},
parserOptions: {
ecmaVersion: 2018
},
rules: {
'comma-dangle': [
'error',
'never'
],
'no-console': 'off',
'object-curly-newline': 'off'
}
};

31
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,31 @@
name: Build
on:
push:
branches: [ '**' ]
pull_request:
branches: [ $default-branch ]
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest]
node-version: [16.x]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm ci
- name: Build Library
run: npm run build
- name: Run Tests
run: npm test --if-present

47
.github/workflows/codeql-analysis.yml vendored Normal file
View File

@@ -0,0 +1,47 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ main ]
schedule:
- cron: '20 12 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'javascript' ]
steps:
- name: Checkout
uses: actions/checkout@v3
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
- run: |
npm ci
npm run build --if-present
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2

104
.github/workflows/e2e-manual.yml vendored Normal file
View File

@@ -0,0 +1,104 @@
name: e2e Manual Test
on:
workflow_dispatch:
inputs:
ARGS:
description: 'ARGS'
required: true
default: '-rlgoDzvc -i --delete --chmod=ugo+rwX --progress'
EXCLUDE:
description: 'EXCLUDE'
required: true
default: 'skip_dir/, /node_modules/'
SSH_CMD_ARGS:
description: 'SSH_CMD_ARGS'
required: true
default: '-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null'
env:
TEST_HOST_DOCKER: ./test
TEST_USER: test
jobs:
e2e-manual:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# ----------------------------------------------------------------
# START E2E Test Specific - steps
# ----------------------------------------------------------------
- name: E2E Test Specific - Clean up old test files
run: |
docker stop ssh-host-container || true && docker rm ssh-host-container || true
- name: E2E Test Specific - Create ssh keys
run: |
echo $HOME
ls -la $HOME
ssh-keygen -m PEM -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
eval `ssh-agent -s`
ssh-add "$HOME/.ssh/id_rsa"
ssh-add -l
echo "SSH_PRIVATE_KEY<<EOF" >> $GITHUB_ENV
cat $HOME/.ssh/id_rsa >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: E2E Test Specific - Build Host Server Image
working-directory: ${{ env.TEST_HOST_DOCKER }}
run: |
docker build \
-t ssh-host-image . \
--build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)"
docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image
docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt
echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV
cat ip.txt >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
shell: bash
- name: E2E Test Specific - Create project file
run: |
mkdir test_project2 && cd "$_"
truncate -s 5MB info2.txt
cd ../
mkdir test_project && cd "$_"
touch index.html
date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html
truncate -s 50MB image.svg
truncate -s 5MB info.txt
truncate -s 500MB big_file.txt
mkdir skip_dir && cd "$_"
truncate -s 5MB text_in_skip_dir.txt
cd ../
cat index.html
echo "test_project:" && ls -lR
echo "skip_dir:" && ls -lR skip_dir
# ----------------------------------------------------------------
# END E2E Test Specific - steps
# ----------------------------------------------------------------
- name: e2e Test ssh-deploy action
uses: easingthemes/ssh-deploy@main
env:
# ENV Vars created in previous steps:
# SSH_PRIVATE_KEY: $EXAMPLE_SSH_PRIVATE_KEY
# REMOTE_HOST: $EXAMPLE_REMOTE_HOST
REMOTE_USER: ${{ env.TEST_USER }}
ARGS: ${{ github.event.inputs.ARGS }}
SSH_CMD_ARGS: ${{ github.event.inputs.SSH_CMD_ARGS }}
SOURCE: test_project/ test_project2/
TARGET: /var/www/html/
EXCLUDE: ${{ github.event.inputs.EXCLUDE }}
SCRIPT_BEFORE: |
whoami
ls -lR /var/www/html/
SCRIPT_AFTER: |
ls -lR /var/www/html/
echo $RSYNC_STDOUT

173
.github/workflows/e2e.yml vendored Normal file
View File

@@ -0,0 +1,173 @@
name: e2e Test
on:
push:
branches: [ 'main' ]
env:
TEST_HOST_DOCKER: ./test
TEST_USER: test
TEST_USER2: test2
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# : ---------------------------------------------------------------
# : START E2E Test Specific - steps
# : ----------------------------------------------------------------
- name: E2E Test Specific - Clean up old test files
run: |
docker stop ssh-host-container || true && docker rm ssh-host-container || true
- name: E2E Test Specific - Create ssh keys
run: |
echo $HOME
ls -la $HOME
ssh-keygen -m PEM -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
eval `ssh-agent -s`
ssh-add "$HOME/.ssh/id_rsa"
ssh-add -l
echo "SSH_PRIVATE_KEY<<EOF" >> $GITHUB_ENV
cat $HOME/.ssh/id_rsa >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: E2E Test Specific - Build Host Server Image
working-directory: ${{ env.TEST_HOST_DOCKER }}
run: |
docker build \
-t ssh-host-image . \
--build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)"
docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image
docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt
echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV
cat ip.txt >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
shell: bash
- name: E2E Test Specific - Create project file
run: |
mkdir test_project2 && cd "$_"
truncate -s 5MB info2.txt
cd ../
mkdir test_project && cd "$_"
touch index.html
date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html
truncate -s 50MB image.svg
truncate -s 5MB info.txt
truncate -s 500MB big_file.txt
mkdir skip_dir && cd "$_"
truncate -s 5MB text_in_skip_dir.txt
cd ../
cat index.html
echo "test_project:" && ls -lR
echo "skip_dir:" && ls -lR skip_dir
# ----------------------------------------------------------------
# END E2E Test Specific - steps
# ----------------------------------------------------------------
- name: set shared ENV variables for multi target deployment
run: |
echo "ARGS=-rlgoDzvcR -i --delete --chmod=ugo+rwX --progress" >> $GITHUB_ENV
echo "SSH_CMD_ARGS=-o StrictHostKeyChecking=no, -o UserKnownHostsFile=/dev/null" >> $GITHUB_ENV
echo "SOURCE=test_project/ test_project2/" >> $GITHUB_ENV
echo "EXCLUDE=skip_dir/, /node_modules/" >> $GITHUB_ENV
echo "SCRIPT_BEFORE<<EOF" >> $GITHUB_ENV
echo "whoami" >> $GITHUB_ENV
echo "ls -lR /var/www/html/" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
echo "SCRIPT_AFTER<<EOF" >> $GITHUB_ENV
echo $RSYNC_STDOUT >> $GITHUB_ENV
echo "ls -lR /var/www/html/" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: e2e Test ssh-deploy action - Target 1
uses: easingthemes/ssh-deploy@main
env:
# Shared ENV Vars created in previous steps
REMOTE_USER: ${{ env.TEST_USER }}
TARGET: /var/www/html/${{ env.TEST_USER }}
- name: e2e Test ssh-deploy action - Target 2
uses: easingthemes/ssh-deploy@main
env:
# Shared ENV Vars created in previous steps
REMOTE_USER: ${{ env.TEST_USER2 }}
TARGET: /var/www/html/${{ env.TEST_USER2 }}
e2e-v3:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
# : ---------------------------------------------------------------
# : START E2E Test Specific - steps
# : ----------------------------------------------------------------
- name: E2E Test Specific - Clean up old test files
run: |
docker stop ssh-host-container || true && docker rm ssh-host-container || true
- name: E2E Test Specific - Create ssh keys
run: |
echo $HOME
ls -la $HOME
ssh-keygen -m PEM -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
eval `ssh-agent -s`
ssh-add "$HOME/.ssh/id_rsa"
ssh-add -l
echo "SSH_PRIVATE_KEY<<EOF" >> $GITHUB_ENV
cat $HOME/.ssh/id_rsa >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: E2E Test Specific - Build Host Server Image
working-directory: ${{ env.TEST_HOST_DOCKER }}
run: |
docker build \
-t ssh-host-image . \
--build-arg SSH_PUB_KEY="$(cat $HOME/.ssh/id_rsa.pub)"
docker run -d -p 8822:22 --name=ssh-host-container ssh-host-image
docker exec ssh-host-container sh -c "hostname --ip-address" > ip.txt
echo "REMOTE_HOST<<EOF" >> $GITHUB_ENV
cat ip.txt >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
shell: bash
- name: E2E Test Specific - Create project file
run: |
mkdir test_project2 && cd "$_"
truncate -s 5MB info2.txt
cd ../
mkdir test_project && cd "$_"
touch index.html
date +"%Y-%m-%d %H:%M:%S,%3N" >> index.html
truncate -s 50MB image.svg
truncate -s 5MB info.txt
truncate -s 500MB big_file.txt
mkdir skip_dir && cd "$_"
truncate -s 5MB text_in_skip_dir.txt
cd ../
cat index.html
echo "test_project:" && ls -lR
echo "skip_dir:" && ls -lR skip_dir
# ----------------------------------------------------------------
# END E2E Test Specific - steps
# ----------------------------------------------------------------
- name: e2e Test ssh-deploy action - Target 1
uses: easingthemes/ssh-deploy@v3
env:
# Shared ENV Vars created in previous steps
REMOTE_USER: ${{ env.TEST_USER }}
TARGET: /var/www/html/${{ env.TEST_USER }}
SOURCE: test_project/
EXCLUDE: skip_dir/, /node_modules/
ARGS: -rlgoDzvcO

72
.github/workflows/manual-release.yml vendored Normal file
View File

@@ -0,0 +1,72 @@
name: Manual Release
on:
workflow_dispatch:
inputs:
version:
description: 'Version'
type: choice
required: true
default: fix
options:
- fix
- feat
dryRun:
description: 'DryRun'
type: boolean
default: true
# ENV and Config
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GIT_AUTHOR_NAME: github-actions
GIT_AUTHOR_EMAIL: github-actions@github.com
GIT_COMMITTER_NAME: github-actions
GIT_COMMITTER_EMAIL: github-actions@github.com
CI: true
CONFIG_NODE_VERSION: '["lts/*"]'
CONFIG_OS: '["ubuntu-latest"]'
# Main Job
jobs:
config:
runs-on: ubuntu-latest
outputs:
NODE_VERSION: ${{ steps.set-config.outputs.CONFIG_NODE_VERSION }}
OS: ${{ steps.set-config.outputs.CONFIG_OS }}
steps:
- id: set-config
run: |
echo "CONFIG_NODE_VERSION=${{ toJSON(env.CONFIG_NODE_VERSION) }}" >> $GITHUB_OUTPUT
echo "CONFIG_OS=${{ toJSON(env.CONFIG_OS) }}" >> $GITHUB_OUTPUT
release-manual:
name: Test, Build and force Release
needs: config
runs-on: ${{ matrix.OS }}
strategy:
matrix:
OS: ${{ fromJSON(needs.config.outputs.OS) }}
NODE_VERSION: ${{ fromJSON(needs.config.outputs.NODE_VERSION) }}
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup Node.js ${{ matrix.NODE_VERSION }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.NODE_VERSION }}
- name: Commit trigger
run: |
git commit --allow-empty -m "${{ github.event.inputs.version }}: Trigger Manual Release"
- name: Install dependencies
run: npm ci
- name: Build Library
run: npm run build --if-present
- name: Run Tests
run: npm test --if-present
- name: Create a release - ${{ github.event.inputs.version }}
uses: cycjimmy/semantic-release-action@v3
with:
dry_run: ${{ github.event.inputs.dryRun == 'true' }}
extra_plugins: |
@semantic-release/changelog
@semantic-release/git

44
.github/workflows/release.yml vendored Normal file
View File

@@ -0,0 +1,44 @@
name: Release
on:
push:
branches:
- main
jobs:
release:
name: Test, Build and Release
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest ]
node-version: [ 16.x ]
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Setup Node.js
uses: actions/setup-node@v3
with:
node-version: ${{ matrix['node-version'] }}
- name: Install dependencies
run: npm ci
- name: Build Library
run: npm run build --if-present
- name: Run Tests
run: npm test --if-present
- name: Release
uses: cycjimmy/semantic-release-action@v3
with:
dry_run: false
extra_plugins: |
@semantic-release/changelog
@semantic-release/git
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GIT_AUTHOR_NAME: github-actions
GIT_AUTHOR_EMAIL: github-actions@github.com
GIT_COMMITTER_NAME: github-actions
GIT_COMMITTER_EMAIL: github-actions@github.com
CI: true

26
.github/workflows/stale.yml vendored Normal file
View File

@@ -0,0 +1,26 @@
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Close stale issues
on:
schedule:
- cron: '30 1 * * *'
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
steps:
- uses: actions/stale@v7
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days.'
days-before-stale: 30
days-before-close: 5
stale-issue-label: 'stale'

3
.gitignore vendored
View File

@@ -17,3 +17,6 @@ node_modules/
.env
.env.test
# IDE
.idea
.vscode

22
.releaserc Normal file
View File

@@ -0,0 +1,22 @@
{
"branches": ["main"],
"plugins": [
"@semantic-release/commit-analyzer",
"@semantic-release/release-notes-generator",
[
"@semantic-release/changelog",
{
"changelogFile": "docs/CHANGELOG.md"
}
],
["@semantic-release/npm", {
"npmPublish": false
}],
[
"@semantic-release/git",
{
"assets": ["docs/CHANGELOG.md", "package.json"]
}
]
]
}

163
README.md
View File

@@ -1,37 +1,106 @@
# ssh deployments
This GitHub Action deploys specific directory from `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh.
Deploy code with rsync over ssh.
Execute remote scripts before or after rsync
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`;
In addition to rsync, this action provides scripts execution on remote host before and/or after rsync.
# Configuration
Pass configuration with `env` vars
1. `DEPLOY_KEY`
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.
##### 1. `SSH_PRIVATE_KEY` [required]
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.
More info for SSH keys: https://www.ssh.com/ssh/public-key-authentication
The keys should be generated using the PEM format. You can use this command
```
ssh-keygen -m PEM -t rsa -b 4096
```
##### 2. `REMOTE_HOST` [required]
eg: mydomain.com
##### 3. `REMOTE_USER` [required]
eg: myusername
##### 4. `REMOTE_PORT` (optional, default '22')
eg: '59184'
##### 5. `ARGS` (optional, default '-rlgoDzvc -i')
2. `ARGS`
For any initial/required rsync flags, eg: `-avzr --delete`
3. `SOURCE`
The source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist`
##### 6. `SOURCE` (optional, default '')
4. `TARGET`
The target directory, in the format`[USER]@[HOST]:[PATH]`
The source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/`.
Multiple sources should be separated by space.
##### 7. `TARGET` (optional, default '/home/REMOTE_USER/')
The target directory
##### 8. `EXCLUDE` (optional, default '')
path to exclude separated by `,`, ie: `/dist/, /node_modules/`
##### 9. `SCRIPT_BEFORE` (optional, default '')
Script to run on host machine before rsync. Single line or multiline commands.
Execution is preformed by storing commands in `.sh` file and executing it via `.bash` over `ssh`
If you have issues with `ssh` connection, use this var, eg `SCRIPT_BEFORE: ls`.
This will force `known_hosts` update, adding your host via `ssh-keyscan`.
##### 10. `SCRIPT_AFTER` (optional, default '')
Script to run on host machine after rsync.
Rsync output is stored in `$RSYNC_STDOUT` env variable.
##### 11. `SSH_CMD_ARGS` (optional, default '-o StrictHostKeyChecking=no')
A list of ssh arguments, they must be prefixed with -o and separated by a comma, for example: -o SomeArgument=no, -o SomeOtherArgument=5
# Usage
Use the latest version from Marketplace,eg: ssh-deploy@v2
or use the latest version from a branch, eg: ssh-deploy@main
```
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@v1.0.0
env:
DEPLOY_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-rltgoDzvO --delete"
SOURCE: "dist"
TARGET: ${{ secrets.SERVER_STAGING }}
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
EXCLUDE: "/dist/, /node_modules/"
SCRIPT_BEFORE: |
whoami
ls -al
SCRIPT_AFTER: |
whoami
ls -al
echo $RSYNC_STDOUT
```
# Example usage
# Example usage in workflow
```
name: Node CI
@@ -43,33 +112,55 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
- name: Install Node.js
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
node-version: '10.x'
- name: Install npm dependencies
run: |
npm install
run: npm install
- name: Run build task
run: |
npm run build --if-present
- name: Deploy to Staging server
uses: easingthemes/ssh-deploy@v1.0.0
env:
DEPLOY_KEY: ${{ secrets.SERVER_SSH_KEY }}
ARGS: "-rltgoDzvO --delete"
SOURCE: "dist"
TARGET: ${{ secrets.SERVER_STAGING }}
run: npm run build --if-present
- name: Deploy to Server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rlgoDzvc -i --delete"
SOURCE: "dist/"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }}
EXCLUDE: "/dist/, /node_modules/"
```
## Issues
This is a GitHub Action wrapping `rsync` via `ssh`. Only issues with action functionality can be fixed here.
Almost 95% of the issues are related to wrong SSH connection or `rsync` params and permissions.
These issues are not related to the action itself.
- Check manually your ssh connection from your client before opening a bug report.
- Check `rsync` params for your use-case. Default params are not going to be enough wor everyone, it highly depends on your setup.
- Check manually your rsync command from your client before opening a bug report.
I've added e2e test for this action.
Real example is executed on every PR merge to `main`.
Check actions tab for example.
More info for SSH keys: https://www.ssh.com/ssh/public-key-authentication
## Tips
- Optional ENV variables are created for simple requirements.
For complex use cases, use `ARGS` and `SSH_CMD_ARGS` to fully configure `rsync` with all possible options.
- If you need to use multiple steps, eg multi targets deployment, save shared ENV variables in `>> $GITHUB_ENV`.
Check .github/workflows/e2e.yml for an example
- For multi sources, use -R ARG to manipulate folders structure.
- Great post about `rsync` options specific to usage of this action: https://logansnotes.com/2020/gh-action-site-deploy/
## 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.
So, check your keys. Check your deployment paths. And use at your own risk.
Check your keys. Check your deployment paths. And use at your own risk.

View File

@@ -1,27 +1,54 @@
name: 'ssh deploy'
description: 'For deploying code over ssh'
name: "ssh deploy"
description: "NodeJS action for FAST deployment with rsync/ssh and remote script execution before/after rsync"
author: "easingthemes"
inputs:
SSH_PRIVATE_KEY: # Private Key
description: 'Private Key'
SSH_PRIVATE_KEY:
description: "Private key part of an SSH key pair"
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"
required: false
default: "22"
SOURCE:
description: 'Source directory'
default: ''
description: "Source directory, path relative to `$GITHUB_WORKSPACE` root, eg: `dist/`"
required: false
default: ""
TARGET:
description: 'Target directory'
default: '/home/REMOTE_USER/'
description: "Target directory"
required: false
default: "/home/REMOTE_USER/"
ARGS:
description: "Arguments to pass to rsync"
required: false
default: "-rlgoDzvc -i"
SSH_CMD_ARGS:
description: "An array of ssh arguments, they must be prefixed with -o and separated by a comma, for example: -o SomeArgument=no, -o SomeOtherArgument=5 "
required: false
default: "-o StrictHostKeyChecking=no"
EXCLUDE:
description: "paths to exclude separated by `,`, ie: `/dist/, /node_modules/`"
required: false
default: ""
SCRIPT_BEFORE:
description: "Script to run on host machine before rsync"
required: false
default: ""
SCRIPT_AFTER:
description: "Script to run on host machine after rsync"
required: false
default: ""
outputs:
status:
description: 'Status'
description: "Status"
runs:
using: 'node10'
main: 'dist/index.js'
using: "node16"
main: "dist/index.js"
branding:
color: 'green'
icon: 'truck'
color: "green"
icon: "truck"

646
dist/index.js vendored

File diff suppressed because one or more lines are too long

270
docs/CHANGELOG.md Normal file
View File

@@ -0,0 +1,270 @@
## [4.0.4](https://github.com/easingthemes/ssh-deploy/compare/v4.0.3...v4.0.4) (2023-01-03)
### Bug Fixes
* update sub dependencies ([2a32c8d](https://github.com/easingthemes/ssh-deploy/commit/2a32c8dcde2d64394a3577decdd9c902f37a30f8))
## [4.0.3](https://github.com/easingthemes/ssh-deploy/compare/v4.0.2...v4.0.3) (2023-01-03)
### Bug Fixes
* update v3 e2e test ([450bf42](https://github.com/easingthemes/ssh-deploy/commit/450bf423f388777bde052ad7b5bc24eca392434d))
## [4.0.2](https://github.com/easingthemes/ssh-deploy/compare/v4.0.1...v4.0.2) (2023-01-03)
### Bug Fixes
* add githubWorkspace as default source root ([3ef66d0](https://github.com/easingthemes/ssh-deploy/commit/3ef66d0be999ee45434505e8bedea4f8b5b5a909))
## [4.0.1](https://github.com/easingthemes/ssh-deploy/compare/v4.0.0...v4.0.1) (2023-01-03)
### Bug Fixes
* fix default source if empty ([9f191f4](https://github.com/easingthemes/ssh-deploy/commit/9f191f42633c4a0f66054f0fc229c9e30a08f00c))
# [4.0.0](https://github.com/easingthemes/ssh-deploy/compare/v3.4.3...v4.0.0) (2023-01-03)
### Bug Fixes
* rebuild ([2169399](https://github.com/easingthemes/ssh-deploy/commit/2169399fef9a60a2fea1ab03cce4ec8c2371e5c2))
### Performance Improvements
* update default rsync options ([2be7efb](https://github.com/easingthemes/ssh-deploy/commit/2be7efb376866327c1d1209f51eb43f34f07b354))
### BREAKING CHANGES
* Default rsync options updated to speed up default deployments.
from `rltgoDzvO` to `-rlgoDzvc -i`
## [3.4.3](https://github.com/easingthemes/ssh-deploy/compare/v3.4.2...v3.4.3) (2023-01-03)
### Bug Fixes
* move e2e tests typo branch name ([6d3554b](https://github.com/easingthemes/ssh-deploy/commit/6d3554b01e9a05de9a9d2b30274bee411a4986ed))
## [3.4.2](https://github.com/easingthemes/ssh-deploy/compare/v3.4.1...v3.4.2) (2023-01-03)
### Bug Fixes
* Update changelog ([765f5ff](https://github.com/easingthemes/ssh-deploy/commit/765f5ffd3153c76442521c61c04656cafc182731))
## [3.4.1](https://github.com/easingthemes/ssh-deploy/compare/v3.4.0...v3.4.1) (2023-01-03)
### Bug Fixes
* move e2e tests to main branch ([0069fae](https://github.com/easingthemes/ssh-deploy/commit/0069faea9ff3ea3cdd095b0f2663c9e2bcd97480))
# [3.4.0](https://github.com/easingthemes/ssh-deploy/compare/v3.3.4...v3.4.0) (2023-01-03)
**Full Changelog**: https://github.com/easingthemes/ssh-deploy/compare/v3.1.0...v3.4.1
### Features
* Add SSH remote script support - before and after rsync ([2cd8a82](https://github.com/easingthemes/ssh-deploy/commit/2cd8a820e22135b7002fbe6a47cf33f99e2d337b))
* Add multi source and multi target support ([73a65ec](https://github.com/easingthemes/ssh-deploy/commit/73a65ec97c5046a53f6b4c40823be5fd3826ede0))
* Add SSH_CMD_ARGS support ([51a0063](https://github.com/easingthemes/ssh-deploy/commit/51a00631e2b91983fb610ca2157a673b9ae03c95))
* Add manual inputs for e2e test ([8f71595](https://github.com/easingthemes/ssh-deploy/commit/8f715957ab9283ab2934dd1e5be9d78f2eaf3fae))
### Bug Fixes
* Add visible Rsync CMD for debugging ([91b6d28](https://github.com/easingthemes/ssh-deploy/commit/91b6d280aee6a7ae666a11426fb356406f4a25a5))
* log buffer from rsync stdout ([8e19e0d](https://github.com/easingthemes/ssh-deploy/commit/8e19e0d6bc9b1c332925ce0268ad64b50728fae5))
* fix e2e yaml step name ([5c13615](https://github.com/easingthemes/ssh-deploy/commit/5c13615d4b7b0bda47f622ac5f4444484d8bcdb4))
## [3.3.4](https://github.com/easingthemes/ssh-deploy/compare/v3.3.3...v3.3.4) (2023-01-02)
### Bug Fixes
* Add visible Rsync CMD for debugging ([91b6d28](https://github.com/easingthemes/ssh-deploy/commit/91b6d280aee6a7ae666a11426fb356406f4a25a5))
## [3.3.3](https://github.com/easingthemes/ssh-deploy/compare/v3.3.2...v3.3.3) (2023-01-02)
### Bug Fixes
* log buffer from rsync stdout ([8e19e0d](https://github.com/easingthemes/ssh-deploy/commit/8e19e0d6bc9b1c332925ce0268ad64b50728fae5))
## [3.3.2](https://github.com/easingthemes/ssh-deploy/compare/v3.3.1...v3.3.2) (2023-01-02)
### Bug Fixes
* Add manual inputs for e2e test ([8f71595](https://github.com/easingthemes/ssh-deploy/commit/8f715957ab9283ab2934dd1e5be9d78f2eaf3fae))
## [3.3.1](https://github.com/easingthemes/ssh-deploy/compare/v3.3.0...v3.3.1) (2023-01-02)
### Bug Fixes
* Log rsync command ([85f4a96](https://github.com/easingthemes/ssh-deploy/commit/85f4a967435d7d44edf2fea628c9f59db5e890ee))
# [3.3.0](https://github.com/easingthemes/ssh-deploy/compare/v3.2.0...v3.3.0) (2023-01-02)
### Features
* Add SSH_CMD_ARGS support ([51a0063](https://github.com/easingthemes/ssh-deploy/commit/51a00631e2b91983fb610ca2157a673b9ae03c95))
# [3.2.0](https://github.com/easingthemes/ssh-deploy/pull/94/files) (2023-01-02)
### Features
* Add SSH remote script support - before and after rsync ([2cd8a82](https://github.com/easingthemes/ssh-deploy/pull/94/files))
* feat: add sshCmdArgs option
* feat: add onStderr and onStdout logs
* feat: Add RSYNC_STDOUT env variable
* feat: Update emojis
### Bug Fixes
* fix: remove _unsafe _dirname
* fix: Add promise instead of callback
* fix: improve logs
* fix: Add simple command exists instead of a plugin
* fix: add non interactive install
* fix: Improve reject messages
* fix: update workflow actions
## [3.1.1](https://github.com/easingthemes/ssh-deploy/compare/v3.1.0...v3.1.1) (2023-01-02)
### Bug Fixes
* use main branch for e2e testes ([21451fe](https://github.com/easingthemes/ssh-deploy/commit/21451fec978a02b55672490a2c11c6c17995ff95))
# [3.1.0](https://github.com/easingthemes/ssh-deploy/compare/v3.0.1...v3.1.0) (2022-12-31)
### Features
* add e2e tests ([40f855a](https://github.com/easingthemes/ssh-deploy/commit/40f855a08b4911c3f54b7a45306af355c6d87277))
## [3.0.1](https://github.com/easingthemes/ssh-deploy/compare/v3.0.0...v3.0.1) (2022-10-28)
### Bug Fixes
* readme update ([80a7f53](https://github.com/easingthemes/ssh-deploy/commit/80a7f53ec918930fd23f0524fec0b1d4f52183bf)), closes [#67](https://github.com/easingthemes/ssh-deploy/issues/67)
# [3.0.0](https://github.com/easingthemes/ssh-deploy/compare/v2.2.11...v3.0.0) (2022-10-28)
### Bug Fixes
* plugins versions ([2f40dde](https://github.com/easingthemes/ssh-deploy/commit/2f40dde84fde36f5b9b81ededd7090c5159d9885))
* Merge pull request #83 from easingthemes/feature/#82-update-node-version ([76660a8](https://github.com/easingthemes/ssh-deploy/commit/76660a8456dbf26e6328674e25d083941ddd645e)), closes [#83](https://github.com/easingthemes/ssh-deploy/issues/83) [easingthemes/feature/#82](https://github.com/easingthemes/feature//issues/82)
### BREAKING CHANGES
* update to use nodeJS v16
## [2.2.11](https://github.com/easingthemes/ssh-deploy/compare/v2.2.10...v2.2.11) (2021-05-28)
### Bug Fixes
* remove change npm to public ([3c36af7](https://github.com/easingthemes/ssh-deploy/commit/3c36af7577e5aee231cea5a01bb6cc83717d0e74))
## [2.2.10](https://github.com/easingthemes/ssh-deploy/compare/v2.2.9...v2.2.10) (2021-05-27)
### Bug Fixes
* add assets to semantic-release git ([0867b12](https://github.com/easingthemes/ssh-deploy/commit/0867b12954dee2b8a2cccb7dfea3b8f3aa62d679))
## [2.2.9](https://github.com/easingthemes/ssh-deploy/compare/v2.2.8...v2.2.9) (2021-05-27)
### Bug Fixes
* change npm to public ([191c82d](https://github.com/easingthemes/ssh-deploy/commit/191c82d9b441e26cf43f81041376dbf5ecdc1647))
## [2.2.8](https://github.com/easingthemes/ssh-deploy/compare/v2.2.7...v2.2.8) (2021-05-27)
### Bug Fixes
* update npm package name ([9c4e411](https://github.com/easingthemes/ssh-deploy/commit/9c4e4119ad64792e5435e4dbe574c56a3e70839c))
## [2.2.7](https://github.com/easingthemes/ssh-deploy/compare/v2.2.6...v2.2.7) (2021-05-27)
### Bug Fixes
* minify dist ([87551c3](https://github.com/easingthemes/ssh-deploy/commit/87551c38936fc91c0fbe3346ca43319d8098ac09))
## [2.2.6](https://github.com/easingthemes/ssh-deploy/compare/v2.2.5...v2.2.6) (2021-05-27)
### Bug Fixes
* add NPM token ([2197bc6](https://github.com/easingthemes/ssh-deploy/commit/2197bc60ef7870d4bd494966b314eabec1615bd7))
## [2.2.5](https://github.com/easingthemes/ssh-deploy/compare/v2.2.4...v2.2.5) (2021-05-27)
### Bug Fixes
* semantic-release/npm update config ([40096bf](https://github.com/easingthemes/ssh-deploy/commit/40096bf22459d1dd82172d2bd20c0c149e70b1e1))
## [2.2.4](https://github.com/easingthemes/ssh-deploy/compare/v2.2.3...v2.2.4) (2021-05-27)
### Bug Fixes
* add branch instead of a version in a readme ([8218c8e](https://github.com/easingthemes/ssh-deploy/commit/8218c8ed9514d772933e1ab4d1c725a7c05e149f))
## [2.2.3](https://github.com/easingthemes/ssh-deploy/compare/v2.2.2...v2.2.3) (2021-05-27)
### Bug Fixes
* codeql yaml syntax update ([87ad671](https://github.com/easingthemes/ssh-deploy/commit/87ad6713b53d454bd7ad6c4576cea7b2e3e2f4f3))
## [2.2.2](https://github.com/easingthemes/ssh-deploy/compare/v2.2.1...v2.2.2) (2021-05-27)
### Bug Fixes
* codeql build ([5e456a4](https://github.com/easingthemes/ssh-deploy/commit/5e456a475a15096d08ccd2aff2734b3f1250b308))
## [2.2.1](https://github.com/easingthemes/ssh-deploy/compare/v2.2.0...v2.2.1) (2021-05-27)
### Bug Fixes
* add package json auto updates ([ce56d75](https://github.com/easingthemes/ssh-deploy/commit/ce56d75fc1b62a99d72ffba70dcb24fcc3b6b3df))
# [2.2.0](https://github.com/easingthemes/ssh-deploy/compare/v2.1.7...v2.2.0) (2021-05-27)
### Bug Fixes
* only=prod package json ([95f4dc8](https://github.com/easingthemes/ssh-deploy/commit/95f4dc8069045c1f5f726e00cb519b46e4f14267))
* replace i with ci ([50d1f57](https://github.com/easingthemes/ssh-deploy/commit/50d1f576f95c0d7e8ce99fb1b2ab68b2594973e5))
* update ncc ([20a0cae](https://github.com/easingthemes/ssh-deploy/commit/20a0cae1ae81bcc430507363e800342976307a81))
* update plugins ([b2adc00](https://github.com/easingthemes/ssh-deploy/commit/b2adc00c92f129aef41ae46441411c2bebc0dbe4))
* update plugins ([a50a999](https://github.com/easingthemes/ssh-deploy/commit/a50a999528b503846cc7fdf26210f710bd95565a))
### Features
* add semantic-release-action ([ac3c9b5](https://github.com/easingthemes/ssh-deploy/commit/ac3c9b51d5cb52f4add40e2fc2dcc5e970153afc))

3393
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,18 +1,18 @@
{
"name": "ssh-deploy",
"version": "2.0.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": {
"command-exists": "1.2.8",
"node-cmd": "3.0.0",
"rsyncwrapper": "3.0.1"
},
"devDependencies": {
"@zeit/ncc": "^0.20.5"
},
"name": "@draganfilipovic/ssh-deploy",
"version": "4.0.4",
"description": "Fast NodeJS action to deploy specific directory from `GITHUB_WORKSPACE` to a server via rsync over ssh.",
"main": "dist/index.js",
"files": [
"/dist",
"./action.yml",
"./README.md",
"LICENSE"
],
"scripts": {
"build": "ncc build ./src/index.js -o dist"
"build": "npm run lint && ncc build ./src/index.js -o dist -m",
"lint": "eslint ./src/index.js",
"lint:fix": "eslint ./src/index.js --fix"
},
"repository": {
"type": "git",
@@ -24,9 +24,18 @@
"rsync"
],
"author": "Dragan Filipovic",
"license": "ISC",
"license": "MIT",
"bugs": {
"url": "https://github.com/easingthemes/ssh-deploy/issues"
},
"homepage": "https://github.com/easingthemes/ssh-deploy#readme"
"homepage": "https://github.com/easingthemes/ssh-deploy#readme",
"dependencies": {
"rsyncwrapper": "^3.0.1"
},
"devDependencies": {
"@vercel/ncc": "^0.36.0",
"eslint": "^8.30.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-plugin-import": "^2.26.0"
}
}

71
src/helpers.js Normal file
View File

@@ -0,0 +1,71 @@
const { existsSync, mkdirSync, writeFileSync } = require('fs');
const { join } = require('path');
const validateDir = (dir) => {
if (!dir) {
console.warn('⚠️ [DIR] dir is not defined');
return;
}
if (existsSync(dir)) {
console.log(`✅ [DIR] ${dir} dir exist`);
return;
}
console.log(`[DIR] Creating ${dir} dir in workspace root`);
mkdirSync(dir);
console.log('✅ [DIR] dir created.');
};
const handleError = (message, isRequired) => {
if (isRequired) {
throw new Error(message);
}
console.warn(message);
};
const writeToFile = ({ dir, filename, content, isRequired, mode = '0644' }) => {
validateDir(dir);
const filePath = join(dir, filename);
if (existsSync(filePath)) {
const message = `⚠️ [FILE] ${filePath} Required file exist.`;
handleError(message, isRequired);
return;
}
try {
console.log(`[FILE] writing ${filePath} file ...`, content.length);
writeFileSync(filePath, content, {
encoding: 'utf8',
mode
});
} catch (error) {
const message = `⚠️[FILE] Writing to file error. filePath: ${filePath}, message: ${error.message}`;
handleError(message, isRequired);
}
};
const validateRequiredInputs = (inputs) => {
const inputKeys = Object.keys(inputs);
const validInputs = inputKeys.filter((inputKey) => {
const inputValue = inputs[inputKey];
if (!inputValue) {
console.error(`❌ [INPUTS] ${inputKey} is mandatory`);
}
return inputValue;
});
if (validInputs.length !== inputKeys.length) {
throw new Error('⚠️ [INPUTS] Inputs not valid, aborting ...');
}
};
const snakeToCamel = (str) => str.replace(/[^a-zA-Z0-9]+(.)/g, (m, chr) => chr.toUpperCase());
module.exports = {
writeToFile,
validateRequiredInputs,
snakeToCamel
};

View File

@@ -1,151 +1,47 @@
#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const commandExists = require('command-exists');
const nodeCmd = require('node-cmd');
const nodeRsync = require('rsyncwrapper');
const { sshDeploy } = require('./rsyncCli');
const { remoteCmdBefore, remoteCmdAfter } = require('./remoteCmd');
const { addSshKey, getPrivateKeyPath, updateKnownHosts } = require('./sshKey');
const { validateRequiredInputs } = require('./helpers');
const inputs = require('./inputs');
const { REMOTE_HOST, REMOTE_USER, 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 }) => {
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) => {
if (error) {
console.error('⚠️ Rsync error', error.message);
process.abort();
} else {
console.log("✅ Rsync finished.", stdout);
}
});
} catch (err) {
console.error(`⚠️ An error happened:(.`, err.message, err.stack);
process.abort();
}
};
const init = ({
src,
dest,
args,
host = 'localhost',
username,
privateKeyContent
}) => {
validateRsync(() => {
const privateKey = addSshKey(privateKeyContent, DEPLOY_KEY_NAME ||'deploy_key');
const remoteDest = username + '@' + host + ':' + dest;
rsync({ privateKey, src, dest: remoteDest, args });
});
};
const validateDir = (dir) => {
if (!fs.existsSync(dir)){
console.log(`Creating ${dir} dir in `, GITHUB_WORKSPACE);
fs.mkdirSync(dir);
} else {
console.log(`${dir} dir exist`);
}
};
const validateFile = (filePath) => {
if (!fs.existsSync(filePath)){
console.log(`Creating ${filePath} file in `, GITHUB_WORKSPACE);
try {
fs.writeFileSync(filePath, '', {
encoding: 'utf8',
mode: 0o600
});
} catch (e) {
console.error('⚠️ writeFileSync error', filePath, e.message);
process.abort();
}
} else {
console.log(`${filePath} file exist`);
}
};
const addSshKey = (key, name) => {
const sshDir = path.join(HOME || __dirname, '.ssh');
const filePath = path.join(sshDir, name);
validateDir(sshDir);
validateFile(sshDir + '/known_hosts');
try {
fs.writeFileSync(filePath, key, {
encoding: 'utf8',
mode: 0o600
});
} catch (e) {
console.error('⚠️ writeFileSync error', filePath, e.message);
process.abort();
}
console.log('✅ Ssh key added to `.ssh` dir ', filePath);
return filePath;
};
const validateRsync = (callback = () => {}) => {
const rsyncCli = commandExists.sync('rsync');
if (!rsyncCli) {
nodeCmd.get(
'sudo apt-get --no-install-recommends install rsync',
function(err, data, stderr){
if (err) {
console.log('⚠️ Rsync installation failed ', err.message);
process.abort();
} else {
console.log('✅ Rsync installed. \n', data, stderr);
callback();
}
}
);
} else {
callback();
}
};
return {
init
}
})();
const validateInputs = (inputs) => {
const validInputs = inputs.filter(input => {
if (!input) {
console.error(`⚠️ ${input} is mandatory`);
}
return input;
});
if (validInputs.length !== inputs.length) {
process.abort();
}
const run = async () => {
const {
source, remoteUser, remoteHost, remotePort,
deployKeyName, sshPrivateKey,
args, exclude, sshCmdArgs,
scriptBefore, scriptAfter,
rsyncServer
} = inputs;
// Validate required inputs
validateRequiredInputs({ sshPrivateKey, remoteHost, remoteUser });
// Add SSH key
addSshKey(sshPrivateKey, deployKeyName);
const { path: privateKeyPath } = getPrivateKeyPath(deployKeyName);
// Update known hosts if ssh command is present to avoid prompt
if (scriptBefore || scriptAfter) {
updateKnownHosts(remoteHost);
}
// Check Script before
if (scriptBefore) {
await remoteCmdBefore(scriptBefore, privateKeyPath);
}
/* eslint-disable object-property-newline */
await sshDeploy({
source, rsyncServer, exclude, remotePort,
privateKeyPath, args, sshCmdArgs
});
// Check script after
if (scriptAfter) {
await remoteCmdAfter(scriptAfter, privateKeyPath);
}
};
const run = () => {
validateInputs([SSH_PRIVATE_KEY, REMOTE_HOST, REMOTE_USER]);
sshDeploy.init({
src: GITHUB_WORKSPACE + '/' + SOURCE || '',
dest: TARGET || '/home/' + REMOTE_USER + '/',
args: [ARGS] || ['-rltgoDzvO'],
host: REMOTE_HOST,
username: REMOTE_USER,
privateKeyContent: SSH_PRIVATE_KEY,
});
};
run();
run()
.then((data = '') => {
console.log('✅ [DONE]', data);
})
.catch((error) => {
console.error('❌ [ERROR]', error.message);
process.exit(1);
});

50
src/inputs.js Normal file
View File

@@ -0,0 +1,50 @@
const { snakeToCamel } = require('./helpers');
const inputNames = [
'REMOTE_HOST', 'REMOTE_USER', 'REMOTE_PORT',
'SSH_PRIVATE_KEY', 'DEPLOY_KEY_NAME',
'SOURCE', 'TARGET', 'ARGS', 'SSH_CMD_ARGS', 'EXCLUDE',
'SCRIPT_BEFORE', 'SCRIPT_AFTER'];
const githubWorkspace = process.env.GITHUB_WORKSPACE;
const remoteUser = process.env.REMOTE_USER;
const defaultInputs = {
source: '',
target: `/home/${remoteUser}/`,
exclude: '',
args: '-rlgoDzvc -i',
sshCmdArgs: '-o StrictHostKeyChecking=no',
deployKeyName: `deploy_key_${remoteUser}_${Date.now()}`
};
const inputs = {
githubWorkspace
};
inputNames.forEach((input) => {
const inputName = snakeToCamel(input.toLowerCase());
const inputVal = process.env[input] || process.env[`INPUT_${input}`];
const validVal = inputVal === undefined ? defaultInputs[inputName] : inputVal;
let extendedVal = validVal;
// eslint-disable-next-line default-case
switch (inputName) {
case 'source':
extendedVal = validVal.split(' ').map((src) => `${githubWorkspace}/${src}`);
break;
case 'args':
extendedVal = validVal.split(' ');
break;
case 'exclude':
case 'sshCmdArgs':
extendedVal = validVal.split(',').map((item) => item.trim());
break;
}
inputs[inputName] = extendedVal;
});
inputs.sshServer = `${inputs.remoteUser}@${inputs.remoteHost}`;
inputs.rsyncServer = `${inputs.remoteUser}@${inputs.remoteHost}:${inputs.target}`;
module.exports = inputs;

40
src/remoteCmd.js Normal file
View File

@@ -0,0 +1,40 @@
const { exec } = require('child_process');
const { sshServer, githubWorkspace, remotePort } = require('./inputs');
const { writeToFile } = require('./helpers');
const handleError = (message, isRequired, callback) => {
if (isRequired) {
callback(new Error(message));
} else {
console.warn(message);
}
};
// eslint-disable-next-line max-len
const remoteCmd = async (content, privateKeyPath, isRequired, label) => new Promise((resolve, reject) => {
const filename = `local_ssh_script-${label}.sh`;
try {
writeToFile({ dir: githubWorkspace, filename, content });
console.log(`Executing remote script: ssh -i ${privateKeyPath} ${sshServer}`);
exec(
`DEBIAN_FRONTEND=noninteractive ssh -p ${(remotePort || 22)} -i ${privateKeyPath} -o StrictHostKeyChecking=no ${sshServer} 'RSYNC_STDOUT="${process.env.RSYNC_STDOUT}" bash -s' < ${filename}`,
(err, data, stderr) => {
if (err) {
const message = `⚠️ [CMD] Remote script failed: ${err.message}`;
console.warn(`${message} \n`, data, stderr);
handleError(message, isRequired, reject);
} else {
console.log('✅ [CMD] Remote script executed. \n', data, stderr);
resolve(data);
}
}
);
} catch (err) {
handleError(err.message, isRequired, reject);
}
});
module.exports = {
remoteCmdBefore: async (cmd, privateKeyPath, isRequired) => remoteCmd(cmd, privateKeyPath, isRequired, 'before'),
remoteCmdAfter: async (cmd, privateKeyPath, isRequired) => remoteCmd(cmd, privateKeyPath, isRequired, 'after')
};

86
src/rsyncCli.js Normal file
View File

@@ -0,0 +1,86 @@
const { execSync } = require('child_process');
const nodeRsync = require('rsyncwrapper');
const nodeRsyncPromise = async (config) => new Promise((resolve, reject) => {
const logCMD = (cmd) => {
console.warn('================================================================');
console.log(cmd);
console.warn('================================================================');
};
try {
nodeRsync(config, (error, stdout, stderr, cmd) => {
if (error) {
console.error('❌ [Rsync] error: ');
console.error(error);
console.error('❌ [Rsync] stderr: ');
console.error(stderr);
console.error('❌️ [Rsync] stdout: ');
console.error(stdout);
console.error('❌ [Rsync] command: ');
logCMD(cmd);
reject(new Error(`${error.message}\n\n${stderr}`));
} else {
console.log('⭐ [Rsync] command finished: ');
logCMD(cmd);
resolve(stdout);
}
});
} catch (error) {
console.error('❌ [Rsync] command error: ', error.message, error.stack);
reject(error);
}
});
const validateRsync = async () => {
try {
execSync('rsync --version', { stdio: 'inherit' });
console.log('✅️ [CLI] Rsync exists');
return;
} catch (error) {
console.warn('⚠️ [CLI] Rsync doesn\'t exists', error.message);
}
console.log('[CLI] Start rsync installation with "apt-get" \n');
try {
execSync('sudo DEBIAN_FRONTEND=noninteractive apt-get -y update && sudo DEBIAN_FRONTEND=noninteractive apt-get --no-install-recommends -y install rsync', { stdio: 'inherit' });
console.log('✅ [CLI] Rsync installed. \n');
} catch (error) {
throw new Error(`⚠️ [CLI] Rsync installation failed. Aborting ... error: ${error.message}`);
}
};
const rsyncCli = async ({
source, rsyncServer, exclude, remotePort,
privateKeyPath, args, sshCmdArgs
}) => {
console.log(`[Rsync] Starting Rsync Action: ${source} to ${rsyncServer}`);
if (exclude && exclude.length > 0) console.log(`[Rsync] excluding folders ${exclude}`);
const defaultOptions = {
ssh: true,
recursive: true,
onStdout: (data) => console.log(data.toString()),
onStderr: (data) => console.error(data.toString())
};
// RSYNC COMMAND
/* eslint-disable object-property-newline */
return nodeRsyncPromise({
...defaultOptions,
src: source, dest: rsyncServer, excludeFirst: exclude, port: remotePort,
privateKey: privateKeyPath, args, sshCmdArgs
});
};
const sshDeploy = async (params) => {
await validateRsync();
const stdout = await rsyncCli(params);
console.log('✅ [Rsync] finished.', stdout);
process.env.RSYNC_STDOUT = `${stdout}`;
return stdout;
};
module.exports = {
sshDeploy
};

43
src/sshKey.js Normal file
View File

@@ -0,0 +1,43 @@
const { join } = require('path');
const { execSync } = require('child_process');
const { writeToFile } = require('./helpers');
const KNOWN_HOSTS = 'known_hosts';
const getPrivateKeyPath = (filename = '') => {
const { HOME } = process.env;
const dir = join(HOME || '~', '.ssh');
const knownHostsPath = join(dir, KNOWN_HOSTS);
return {
dir,
filename,
path: join(dir, filename),
knownHostsPath
};
};
const addSshKey = (content, deployKeyName) => {
const { dir, filename } = getPrivateKeyPath(deployKeyName);
writeToFile({ dir, filename: KNOWN_HOSTS, content: '' });
console.log('✅ [SSH] known_hosts file ensured', dir);
writeToFile({ dir, filename, content, isRequired: true, mode: '0400' });
console.log('✅ [SSH] key added to `.ssh` dir ', dir, filename);
};
const updateKnownHosts = (host) => {
const { knownHostsPath } = getPrivateKeyPath();
console.log('[SSH] Adding host to `known_hosts` ....', host, knownHostsPath);
try {
execSync(`ssh-keyscan -H ${host} >> ${knownHostsPath}`, {
stdio: 'inherit'
});
} catch (error) {
console.error('❌ [SSH] Adding host to `known_hosts` ERROR', host, error.message);
}
console.log('✅ [SSH] Adding host to `known_hosts` DONE', host, knownHostsPath);
};
module.exports = {
getPrivateKeyPath,
updateKnownHosts,
addSshKey
};

5
test/.dockerignore Normal file
View File

@@ -0,0 +1,5 @@
/node_modules
.gitignore
.gitattributes
LICENSE
README.md

42
test/Dockerfile Normal file
View File

@@ -0,0 +1,42 @@
FROM nginx
ARG SSH_PUB_KEY
RUN apt update
RUN apt install openssh-server rsync sudo -y
RUN echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config.d/pub.conf
RUN echo "AuthorizedKeysFile .ssh/authorized_keys" >> /etc/ssh/sshd_config.d/pub.conf
RUN mkdir -p /var/www/html
RUN mkdir -p /var/www/html/test
RUN mkdir -p /var/www/html/test2
RUN chmod -R 775 /var/www/html
RUN useradd -rm -d /home/test -s /bin/bash -g root -G sudo -u 1000 test
RUN usermod -aG sudo test
RUN mkdir -p /home/test/.ssh
RUN echo "$SSH_PUB_KEY" > /home/test/.ssh/authorized_keys
RUN chmod 700 /home/test/.ssh
RUN chown -R test /home/test/.ssh
RUN useradd -rm -d /home/test2 -s /bin/bash -g root -G sudo -u 1002 test2
RUN usermod -aG sudo test2
RUN mkdir -p /home/test2/.ssh
RUN echo "$SSH_PUB_KEY" > /home/test2/.ssh/authorized_keys
RUN chmod 700 /home/test2/.ssh
RUN chown -R test2 /home/test2/.ssh
RUN service ssh start
RUN echo 'test:test' | chpasswd
RUN echo 'test2:test2' | chpasswd
EXPOSE 22
ADD entrypoint.sh /docker-entrypoint.d/entrypoint.sh
RUN chmod +x /docker-entrypoint.d/entrypoint.sh
CMD ["nginx", "-g", "daemon off;"]

3
test/entrypoint.sh Normal file
View File

@@ -0,0 +1,3 @@
#!/bin/bash
/usr/sbin/sshd -D