5 Commits

Author SHA1 Message Date
Bo-Yi Wu
eb443bd494 feat: avoid redundant binary downloads and notify when skipping (#210)
Some checks failed
v1 version / test scp action (push) Failing after 7s
v1 version / test deploy artifact (push) Failing after 1s
v1 version / test changed-files (push) Failing after 2s
v1 version / test target folder (push) Failing after 2s
v1 version / test Multiple Host (push) Failing after 2s
lint and test / test scp action (push) Failing after 2s
lint and test / test deploy artifact (push) Failing after 2s
lint and test / test changed-files (push) Failing after 1s
lint and test / test target folder (push) Failing after 2s
lint and test / test Multiple Host (push) Failing after 2s
* feat: avoid redundant binary downloads and notify when skipping

- Skip downloading the binary if it already exists, and print a message instead

Signed-off-by: appleboy <appleboy.tw@gmail.com>

* Update entrypoint.sh

Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>

---------

Signed-off-by: appleboy <appleboy.tw@gmail.com>
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
2025-08-31 10:31:45 +08:00
appleboy
9132c85c5f ci: update GitHub Actions to latest major versions
- Update actions/checkout to version 5 throughout workflow files
- Update actions/download-artifact to version 5
- Update tj-actions/changed-files to version 46 in the testing workflow

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-08-31 10:04:38 +08:00
appleboy
7f18bf0ec8 docs: add v1 workflow version badge to all README files
- Add a v1 version badge for the stable workflow to all README files

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-04-27 12:46:41 +08:00
appleboy
35c03a241d ci: rename testing workflow to clarify versioning
- Update workflow name from "testing v1" to "v1 version"

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-04-27 12:46:01 +08:00
appleboy
8b7c180c3f ci: add comprehensive GitHub Actions tests for scp-action
- Add GitHub Actions workflow to test multiple scp-action configurations and scenarios
- Include job to test deployment of uploaded and downloaded artifacts via scp
- Include job to copy only changed files detected by tj-actions/changed-files
- Add test for stripping leading path components when copying files
- Add coverage for copying files to single and multiple hosts, including target folder variations
- Test scp-action usage with both SSH key and password authentication, with and without passphrases, and option for insecure cipher

Signed-off-by: appleboy <appleboy.tw@gmail.com>
2025-04-27 12:45:00 +08:00
6 changed files with 166 additions and 9 deletions

150
.github/workflows/stable.yml vendored Normal file
View File

@@ -0,0 +1,150 @@
name: v1 version
on: [push]
jobs:
testing:
name: test scp action
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v5
- name: copy file via ssh password
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD }}
port: ${{ secrets.PORT }}
source: "tests/a.txt,tests/b.txt"
target: "test"
- name: copy file via ssh key
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
source: "tests/a.txt,tests/b.txt"
target: "test"
- name: remove the specified number of leading path elements
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
source: "tests/a.txt,tests/b.txt"
target: "foobar"
strip_components: 1
- name: ssh key with passphrase
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH2 }}
passphrase: ${{ secrets.PASSPHRASE }}
port: ${{ secrets.PORT }}
source: "tests/a.txt,tests/b.txt"
target: "test"
- name: use insecure cipher
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.SSH2 }}
passphrase: ${{ secrets.PASSPHRASE }}
port: ${{ secrets.PORT }}
source: "tests/a.txt,tests/b.txt"
target: "test"
use_insecure_cipher: true
deploy:
name: test deploy artifact
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v5
- run: echo hello > world.txt
- uses: actions/upload-artifact@v4
with:
name: my-artifact
path: world.txt
- uses: actions/download-artifact@v5
with:
name: my-artifact
path: distfiles
- name: copy file to server
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
source: distfiles/*
target: test
changes:
name: test changed-files
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v5
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
with:
since_last_remote_commit: true
separator: ","
- name: copy file to server
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
source: ${{ steps.changed-files.outputs.all_changed_files }}
target: test
target:
name: test target folder
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v5
- name: copy file to server
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
source: tests/a.txt,tests/b.txt
target: foobar foobar 1234
multipleHost:
name: test Multiple Host
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v5
- name: copy file to server
uses: appleboy/scp-action@v1
with:
host: ${{ secrets.HOST }}:${{ secrets.PORT }},${{ secrets.HOST }}:${{ secrets.PORT }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: 1024
source: tests/a.txt,tests/b.txt
target: foobar

View File

@@ -6,7 +6,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: copy file via ssh password
uses: ./
@@ -67,7 +67,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- run: echo hello > world.txt
@@ -76,7 +76,7 @@ jobs:
name: my-artifact
path: world.txt
- uses: actions/download-artifact@v4
- uses: actions/download-artifact@v5
with:
name: my-artifact
path: distfiles
@@ -96,11 +96,11 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: Get changed files
id: changed-files
uses: tj-actions/changed-files@v45
uses: tj-actions/changed-files@v46
with:
since_last_remote_commit: true
separator: ","
@@ -120,7 +120,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: copy file to server
uses: ./
@@ -137,7 +137,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4
uses: actions/checkout@v5
- name: copy file to server
uses: ./

View File

@@ -4,6 +4,7 @@
[GitHub Action](https://github.com/features/actions) for copying files and artifacts via SSH.
[![v1 version](https://github.com/appleboy/scp-action/actions/workflows/stable.yml/badge.svg)](https://github.com/appleboy/scp-action/actions/workflows/stable.yml)
[![lint and test](https://github.com/appleboy/scp-action/actions/workflows/testing.yml/badge.svg)](https://github.com/appleboy/scp-action/actions/workflows/testing.yml)
> **Note:** Only supports **Linux** [docker](https://www.docker.com/) containers.

View File

@@ -4,6 +4,7 @@
[GitHub Action](https://github.com/features/actions) 用于通过 SSH 复制文件和构建产物。
[![v1 version](https://github.com/appleboy/scp-action/actions/workflows/stable.yml/badge.svg)](https://github.com/appleboy/scp-action/actions/workflows/stable.yml)
[![lint and test](https://github.com/appleboy/scp-action/actions/workflows/testing.yml/badge.svg)](https://github.com/appleboy/scp-action/actions/workflows/testing.yml)
> **注意:** 仅支持 **Linux** [docker](https://www.docker.com/) 容器。

View File

@@ -4,6 +4,7 @@
[GitHub Action](https://github.com/features/actions) 用於透過 SSH 複製檔案與產物。
[![v1 version](https://github.com/appleboy/scp-action/actions/workflows/stable.yml/badge.svg)](https://github.com/appleboy/scp-action/actions/workflows/stable.yml)
[![lint and test](https://github.com/appleboy/scp-action/actions/workflows/testing.yml/badge.svg)](https://github.com/appleboy/scp-action/actions/workflows/testing.yml)
> **注意:** 只支援 **Linux** [docker](https://www.docker.com/) 容器。

View File

@@ -39,8 +39,12 @@ if [[ "${INPUT_CURL_INSECURE}" == 'true' ]]; then
INSECURE_OPTION="--insecure"
fi
curl -fsSL --retry 5 --keepalive-time 2 ${INSECURE_OPTION} "${DOWNLOAD_URL_PREFIX}/${CLIENT_BINARY}" -o "${TARGET}"
chmod +x "${TARGET}"
if [[ ! -x "${TARGET}" ]]; then
curl -fsSL --retry 5 --keepalive-time 2 ${INSECURE_OPTION} "${DOWNLOAD_URL_PREFIX}/${CLIENT_BINARY}" -o "${TARGET}"
chmod +x "${TARGET}"
else
echo "Binary ${CLIENT_BINARY} already exists and is executable, skipping download."
fi
echo "======= CLI Version Information ======="
"${TARGET}" --version