15 Commits
v0.1.6 ... docs

Author SHA1 Message Date
appleboy
4241e60706 docs: improve documentation and testing configurations
- Add example for using environment variables with `scp-action` in README.md

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-12-24 22:06:36 +08:00
appleboy
b03d7257ae style: improve readability and functionality across multiple components
- Remove an empty line in the jobs section
- Reformat the list of SCP options for better readability
- Reformat the list of SSH proxy settings for better readability
- Reformat the instructions for SSH login without a password for better readability

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-12-24 22:05:54 +08:00
appleboy
f042d742db ci(github): improve system performance and stability
- Downgrade `tj-actions/changed-files` action from version `v46` to `v45`

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-10-29 21:22:29 +08:00
appleboy
ad9a378b7f docs(readme): enhance IP protocol configuration options
- Add protocol option description for IP protocol usage in the main configuration
- Add proxy_protocol option description for IP protocol usage in the SSH Proxy Setting

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-10-28 22:38:25 +08:00
appleboy
172d4632fe feat(actions): improve API robustness and testing coverage
- Add `protocol` input with description and default value `tcp`

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-10-28 22:33:53 +08:00
appleboy
93e17a47f9 refactor(actions): standardize configuration file formatting and defaults
- Change single quotes to double quotes for consistency in `name`, `description`, and `author` fields
- Update `port` and `proxy_port` default values to be strings instead of numbers
- Remove default values for `use_insecure_cipher`, `rm`, `debug`, `strip_components`, `overwrite`, and `tar_dereference` fields
- Add default value `"tar"` for `tar_exec` field

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-10-28 22:28:31 +08:00
appleboy
c6ff96b7f6 ci: implement automated release workflow with GoReleaser
- Add GitHub Actions workflow for GoReleaser
- Configure GoReleaser to skip builds
- Set up changelog groups for features, bug fixes, enhancements, refactors, build process updates, and documentation updates

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2024-10-07 22:41:36 +08:00
Bo-Yi Wu
7622c01418 chore: update tj-actions/changed-files action version
- Update the version of the `tj-actions/changed-files` action from `v44` to `v46`

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2024-08-27 21:02:52 +08:00
dependabot[bot]
9ba62064d2 chore(deps): bump tj-actions/changed-files from 43 to 44 (#171)
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 43 to 44.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v43...v44)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-06 08:11:24 +08:00
dependabot[bot]
f314a5399e chore(deps): bump tj-actions/changed-files from 42 to 43 (#170)
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 42 to 43.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v42...v43)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-03-19 09:42:58 +08:00
dependabot[bot]
699fa1181c chore(deps): bump tj-actions/changed-files from 41 to 42 (#165)
Bumps [tj-actions/changed-files](https://github.com/tj-actions/changed-files) from 41 to 42.
- [Release notes](https://github.com/tj-actions/changed-files/releases)
- [Changelog](https://github.com/tj-actions/changed-files/blob/main/HISTORY.md)
- [Commits](https://github.com/tj-actions/changed-files/compare/v41...v42)

---
updated-dependencies:
- dependency-name: tj-actions/changed-files
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-01-27 11:08:08 +08:00
Ilya Brin
9f34cc3e55 docs(readme): update dependency in example (#159)
Bumped GitHub Actions in README
2024-01-01 13:46:55 +08:00
Bo-Yi Wu
917f8b81df chore: update dependencies and improve compatibility with latest versions
- Update the version of `appleboy/scp-action` from `v0.1.6` to `v0.1.7`

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2024-01-01 13:45:26 +08:00
Bo-Yi Wu
78e7f475f3 chore: update base image in Dockerfile to version 1.6.14
- Update the base image from `1.6.13` to `1.6.14` in the Dockerfile

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2024-01-01 13:44:54 +08:00
Bo-Yi Wu
dfde1f50eb chore: refine CI/CD workflows and tests configuration
- Update `appleboy/scp-action` version from `v0.1.5` to `v0.1.6` in README examples

Signed-off-by: Bo-Yi Wu <appleboy.tw@gmail.com>
2023-12-26 14:48:33 +08:00
6 changed files with 186 additions and 114 deletions

View File

@@ -100,7 +100,7 @@ jobs:
- name: Get changed files - name: Get changed files
id: changed-files id: changed-files
uses: tj-actions/changed-files@v41 uses: tj-actions/changed-files@v45
with: with:
since_last_remote_commit: true since_last_remote_commit: true
separator: "," separator: ","

33
.github/workflows/goreleaser.yml vendored Normal file
View File

@@ -0,0 +1,33 @@
name: Goreleaser
on:
push:
tags:
- "*"
permissions:
contents: write
jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup go
uses: actions/setup-go@v5
with:
go-version: "^1"
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v6
with:
# either 'goreleaser' (default) or 'goreleaser-pro'
distribution: goreleaser
version: latest
args: release --clean
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

28
.goreleaser.yaml Normal file
View File

@@ -0,0 +1,28 @@
builds:
- # If true, skip the build.
# Useful for library projects.
# Default is false
skip: true
changelog:
use: github
groups:
- title: Features
regexp: "^.*feat[(\\w)]*:+.*$"
order: 0
- title: "Bug fixes"
regexp: "^.*fix[(\\w)]*:+.*$"
order: 1
- title: "Enhancements"
regexp: "^.*chore[(\\w)]*:+.*$"
order: 2
- title: "Refactor"
regexp: "^.*refactor[(\\w)]*:+.*$"
order: 3
- title: "Build process updates"
regexp: ^.*?(build|ci)(\(.+\))??!?:.+$
order: 4
- title: "Documentation updates"
regexp: ^.*?docs?(\(.+\))??!?:.+$
order: 4
- title: Others

View File

@@ -1,4 +1,4 @@
FROM ghcr.io/appleboy/drone-scp:1.6.13 FROM ghcr.io/appleboy/drone-scp:1.6.14
COPY entrypoint.sh /bin/entrypoint.sh COPY entrypoint.sh /bin/entrypoint.sh

145
README.md
View File

@@ -14,59 +14,60 @@ Copy files and artifacts via SSH:
name: scp files name: scp files
on: [push] on: [push]
jobs: jobs:
build: build:
name: Build name: Build
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- name: copy file via ssh password - name: copy file via ssh password
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }} password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }} port: ${{ secrets.PORT }}
source: "tests/a.txt,tests/b.txt" source: "tests/a.txt,tests/b.txt"
target: your_server_target_folder_path target: your_server_target_folder_path
``` ```
## Input variables ## Input variables
See the [action.yml](./action.yml) file for more detail information. See the [action.yml](./action.yml) file for more detail information.
* host - scp remote host - host - scp remote host
* port - scp remote port, default is `22` - port - scp remote port, default is `22`
* username - scp username - username - scp username
* password - scp password - password - scp password
* passphrase - the passphrase is usually to encrypt the private key - passphrase - the passphrase is usually to encrypt the private key
* fingerprint - fingerprint SHA256 of the host public key, default is to skip verification - protocol - The IP protocol to use. Valid values are `tcp`. `tcp4` or `tcp6`. Default to `tcp`.
* timeout - timeout for ssh to remote host, default is `30s` - fingerprint - fingerprint SHA256 of the host public key, default is to skip verification
* command_timeout - timeout for scp command, default is `10m` - timeout - timeout for ssh to remote host, default is `30s`
* key - content of ssh private key. ex raw content of ~/.ssh/id_rsa - command_timeout - timeout for scp command, default is `10m`
* key_path - path of ssh private key - key - content of ssh private key. ex raw content of ~/.ssh/id_rsa
* target - target path on the server, must be a directory (**required**) - key_path - path of ssh private key
* source - scp file list (**required**) - target - target path on the server, must be a directory (**required**)
* rm - remove target folder before upload data, default is `false` - source - scp file list (**required**)
* strip_components - remove the specified number of leading path elements. - rm - remove target folder before upload data, default is `false`
* overwrite - use `--overwrite` flag with tar, overwrite existing files when extracting - strip_components - remove the specified number of leading path elements.
* tar_tmp_path - temporary path for tar file on the dest host - overwrite - use `--overwrite` flag with tar, overwrite existing files when extracting
* tar_exec - path to tar executable on the dest host. default is `tar` - tar_tmp_path - temporary path for tar file on the dest host
* tar_dereference - use `--dereference` flag with tar, follow symlinks; archive and dump the files they point to - tar_exec - path to tar executable on the dest host. default is `tar`
* use_insecure_cipher - include more ciphers with use_insecure_cipher (see [#15](https://github.com/appleboy/scp-action/issues/15)) - tar_dereference - use `--dereference` flag with tar, follow symlinks; archive and dump the files they point to
- use_insecure_cipher - include more ciphers with use_insecure_cipher (see [#15](https://github.com/appleboy/scp-action/issues/15))
SSH Proxy Setting: SSH Proxy Setting:
* proxy_host - proxy host - proxy_host - proxy host
* proxy_port - proxy port, default is `22` - proxy_port - proxy port, default is `22`
* proxy_username - proxy username - proxy_username - proxy username
* proxy_password - proxy password - proxy_password - proxy password
* proxy_passphrase - the passphrase is usually to encrypt the private key - proxy_protocol - The IP protocol to use. Valid values are `tcp`. `tcp4` or `tcp6`. Default to `tcp`.
* proxy_timeout - timeout for ssh to proxy host, default is `30s` - proxy_passphrase - the passphrase is usually to encrypt the private key
* proxy_key - content of ssh proxy private key. - proxy_timeout - timeout for ssh to proxy host, default is `30s`
* proxy_key_path - path of ssh proxy private key - proxy_key - content of ssh proxy private key.
* proxy_fingerprint - fingerprint SHA256 of the host public key, default is to skip verification - proxy_key_path - path of ssh proxy private key
* proxy_use_insecure_cipher - include more ciphers with use_insecure_cipher (see [#15](https://github.com/appleboy/scp-action/issues/15)) - proxy_fingerprint - fingerprint SHA256 of the host public key, default is to skip verification
- proxy_use_insecure_cipher - include more ciphers with use_insecure_cipher (see [#15](https://github.com/appleboy/scp-action/issues/15))
## Setting up a SSH Key ## Setting up a SSH Key
@@ -106,9 +107,9 @@ See the detail information about [SSH login without password](http://www.linuxpr
**A note** from one of our readers: Depending on your version of SSH you might also have to do the following changes: **A note** from one of our readers: Depending on your version of SSH you might also have to do the following changes:
* Put the public key in `.ssh/authorized_keys2` - Put the public key in `.ssh/authorized_keys2`
* Change the permissions of `.ssh` to 700 - Change the permissions of `.ssh` to 700
* Change the permissions of `.ssh/authorized_keys2` to 640 - Change the permissions of `.ssh/authorized_keys2` to 640
### If you are using OpenSSH ### If you are using OpenSSH
@@ -137,7 +138,7 @@ Copy file via a SSH password:
```yaml ```yaml
- name: copy file via ssh password - name: copy file via ssh password
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: example.com host: example.com
username: foo username: foo
@@ -147,11 +148,25 @@ Copy file via a SSH password:
target: your_server_target_folder_path target: your_server_target_folder_path
``` ```
Using the environment variables
```yaml
- name: copy file via ssh password
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ env.HOST }}
username: ${{ env.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ env.PORT }}
source: "tests/a.txt,tests/b.txt"
target: ${{ env.TARGET_PATH }}
```
Copy file via a SSH key: Copy file via a SSH key:
```yaml ```yaml
- name: copy file via ssh key - name: copy file via ssh key
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@@ -165,7 +180,7 @@ Example configuration for ignore list:
```yaml ```yaml
- name: copy file via ssh key - name: copy file via ssh key
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@@ -178,7 +193,7 @@ Example configuration for ignore list:
Example configuration for multiple servers: Example configuration for multiple servers:
```diff ```diff
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
- host: "example.com" - host: "example.com"
+ host: "foo.com,bar.com" + host: "foo.com,bar.com"
@@ -192,7 +207,7 @@ Example configuration for multiple servers:
Example configuration for exclude custom files: Example configuration for exclude custom files:
```yaml ```yaml
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: "example.com" host: "example.com"
username: foo username: foo
@@ -206,27 +221,27 @@ Example configuration for exclude custom files:
Upload artifact files to remote server: Upload artifact files to remote server:
```yaml ```yaml
deploy: deploy:
name: deploy artifact name: deploy artifact
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: checkout - name: checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- run: echo hello > world.txt - run: echo hello > world.txt
- uses: actions/upload-artifact@v3 - uses: actions/upload-artifact@v4
with: with:
name: my-artifact name: my-artifact
path: world.txt path: world.txt
- uses: actions/download-artifact@v3 - uses: actions/download-artifact@v4
with: with:
name: my-artifact name: my-artifact
path: distfiles path: distfiles
- name: copy file to server - name: copy file to server
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@@ -240,7 +255,7 @@ Remove the specified number of leading path elements:
```yaml ```yaml
- name: remove the specified number of leading path elements - name: remove the specified number of leading path elements
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@@ -271,12 +286,12 @@ foobar
Only copy files that are newer than the corresponding destination files: Only copy files that are newer than the corresponding destination files:
```yaml ```yaml
changes: changes:
name: test changed-files name: test changed-files
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: checkout - name: checkout
uses: actions/checkout@v3 uses: actions/checkout@v4
- name: Get changed files - name: Get changed files
id: changed-files id: changed-files
@@ -286,7 +301,7 @@ Only copy files that are newer than the corresponding destination files:
separator: "," separator: ","
- name: copy file to server - name: copy file to server
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@@ -300,7 +315,7 @@ Protecting a Private Key. The purpose of the passphrase is usually to encrypt th
```diff ```diff
- name: ssh key with passphrase - name: ssh key with passphrase
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}
@@ -329,7 +344,7 @@ Convert the target path to a Unix path: `/c/path/to/target/`
```diff ```diff
- name: Copy to Windows - name: Copy to Windows
uses: appleboy/scp-action@v0.1.5 uses: appleboy/scp-action@v0.1.7
with: with:
host: ${{ secrets.HOST }} host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }} username: ${{ secrets.USERNAME }}

View File

@@ -1,84 +1,80 @@
name: 'SCP Command to Transfer Files' name: "SCP Command to Transfer Files"
description: 'How to Use SCP Command to Transfer Files/Folders in Linux' description: "How to Use SCP Command to Transfer Files/Folders in Linux"
author: 'Bo-Yi Wu' author: "Bo-Yi Wu"
inputs: inputs:
host: host:
description: 'scp remote host' description: "scp remote host"
port: port:
description: 'scp remote port' description: "scp remote port"
default: 22 default: "22"
username: username:
description: 'scp username' description: "scp username"
password: password:
description: 'scp password' description: "scp password"
protocol:
description: "The IP protocol to use. Valid values are 'tcp'. 'tcp4' or 'tcp6'. Default to tcp."
default: "tcp"
timeout: timeout:
description: 'timeout for ssh to remote host' description: "timeout for ssh to remote host"
default: "30s" default: "30s"
command_timeout: command_timeout:
description: 'timeout for scp command' description: "timeout for scp command"
default: "10m" default: "10m"
key: key:
description: 'content of ssh private key. ex raw content of ~/.ssh/id_rsa' description: "content of ssh private key. ex raw content of ~/.ssh/id_rsa"
key_path: key_path:
description: 'path of ssh private key' description: "path of ssh private key"
passphrase: passphrase:
description: 'ssh key passphrase' description: "ssh key passphrase"
fingerprint: fingerprint:
description: 'fingerprint SHA256 of the host public key, default is to skip verification' description: "fingerprint SHA256 of the host public key, default is to skip verification"
use_insecure_cipher: use_insecure_cipher:
description: 'include more ciphers with use_insecure_cipher' description: "include more ciphers with use_insecure_cipher"
default: false
target: target:
description: 'target path on the server, must be a directory path.' description: "target path on the server, must be a directory path."
source: source:
description: 'scp file list' description: "scp file list"
rm: rm:
description: 'remove target folder before upload data' description: "remove target folder before upload data"
default: false
debug: debug:
description: 'enable debug message' description: "enable debug message"
default: false
strip_components: strip_components:
description: 'remove the specified number of leading path elements' description: "remove the specified number of leading path elements"
default: 0
overwrite: overwrite:
description: 'use --overwrite flag with tar' description: "use --overwrite flag with tar"
default: false
tar_dereference: tar_dereference:
description: 'use --dereference flag with tar' description: "use --dereference flag with tar"
default: false
tar_tmp_path: tar_tmp_path:
description: 'temporary path for tar file on the dest host' description: "temporary path for tar file on the dest host"
tar_exec: tar_exec:
description: 'temporary path for tar file on the dest host' description: "temporary path for tar file on the dest host"
default: 'tar' default: "tar"
proxy_host: proxy_host:
description: 'ssh proxy remote host' description: "ssh proxy remote host"
proxy_port: proxy_port:
description: 'ssh proxy remote port' description: "ssh proxy remote port"
default: 22 default: "22"
proxy_username: proxy_username:
description: 'ssh proxy username' description: "ssh proxy username"
proxy_password: proxy_password:
description: 'ssh proxy password' description: "ssh proxy password"
proxy_passphrase: proxy_passphrase:
description: 'ssh proxy key passphrase' description: "ssh proxy key passphrase"
proxy_timeout: proxy_timeout:
description: 'timeout for ssh to proxy host' description: "timeout for ssh to proxy host"
default: "30s" default: "30s"
proxy_key: proxy_key:
description: 'content of ssh proxy private key. ex raw content of ~/.ssh/id_rsa' description: "content of ssh proxy private key. ex raw content of ~/.ssh/id_rsa"
proxy_key_path: proxy_key_path:
description: 'path of ssh proxy private key' description: "path of ssh proxy private key"
proxy_fingerprint: proxy_fingerprint:
description: 'fingerprint SHA256 of the host public key, default is to skip verification' description: "fingerprint SHA256 of the host public key, default is to skip verification"
proxy_use_insecure_cipher: proxy_use_insecure_cipher:
description: 'include more ciphers with use_insecure_cipher' description: "include more ciphers with use_insecure_cipher"
default: false
runs: runs:
using: 'docker' using: "docker"
image: 'Dockerfile' image: "Dockerfile"
branding: branding:
icon: 'copy' icon: "copy"
color: 'gray-dark' color: "gray-dark"