wlixcc / sftp-deploy-action Goto Github PK
View Code? Open in Web Editor NEWDeploy files to server use GitHub actions & SFTP
Deploy files to server use GitHub actions & SFTP
Invalid key format.
I'm sure the key is correct: I use it personally to connect to the server.
on: push
name: Deploy to CI over SFTP
jobs:
FTP-Deploy-Action:
name: FTP-Deploy-Action
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
fetch-depth: 2
- name: deploy file
uses: wlixcc/[email protected]
with:
username: 'aeris'
server: 'ci-apps-dev.yunohost.org'
private_key: ${{ secrets.DeployKey }}
local_path: './*'
remote_path: '/data/pterodactyl_ynh' #make sure dir exist
args: '-o ConnectTimeout=5'
sftp start
Warning: Permanently added 'ci-apps-dev.yunohost.org,51.15.209.133' (ECDSA) to the list of known hosts.
Debian GNU/Linux 9
Load key "../private_key.pem": invalid format
[email protected]: Permission denied (publickey,password).
Connection closed
Same problem as in #48. What could be causing this issue?
Hello
I just started using your action, and I never used any action with github before, so I'm a complete beginner here.
I found without any issue how to generate ssh key and use it, however I now face a new error: stat ./*: No such file or directory
. But as you can see, I only used the default value for the local_path parameter (I also tried to remove it, in order to force the default value). And my repo is definitively not empty.
If anyone has any idea, please let me know!
打包部署的话,之前旧的文件还是保留的
if [[ "$LC_TERMINAL" = "ShellFish" ]]; then
ios_printURIComponent() {
awk 'BEGIN {while (y++ < 125) z[sprintf("%c", y)] = y
while (y = substr(ARGV[1], ++j, 1))
q = y ~ /[a-zA-Z0-9]/ ? q y : q sprintf("%%%02X", z[y])
printf("%s", q)}' "$1"
}
ios_printBase64Component() {
echo -n "$1" | base64
}
which printf > /dev/null
ios_hasPrintf=$?
ios_printf() {
if [ $ios_hasPrintf ]; then
printf "$1"
else
awk "BEGIN {printf "$1"}"
fi
}
ios_sequence() {
if [[ -n "$TMUX" ]]; then
OUTPUT=$(
ios_printf '\033Ptmux;\033\033]'
echo -n "$1" | tr -d '[:space:]'
ios_printf '\a\033\' )
else
OUTPUT=$(
ios_printf '\033]'
echo -n "$1" | tr -d '[:space:]'
ios_printf '\a' )
fi
if [ -t 1 ] ; then
echo -n $OUTPUT
elif [[ -n "$SSH_TTY" ]]; then
echo -n $OUTPUT > $SSH_TTY
else
echo >&2 'Standard output is not tty and there is no $SSH_TTY'
fi
}
ios_sequence_spaced() {
if [[ -n "$TMUX" ]]; then
OUTPUT=$(
ios_printf '\033Ptmux;\033\033]'
echo -n "$1"
ios_printf '\a\033\' )
else
OUTPUT=$(
ios_printf '\033]'
echo -n "$1"
ios_printf '\a' )
fi
if [ -t 1 ] ; then
echo -n $OUTPUT
elif [[ -n "$SSH_TTY" ]]; then
echo -n $OUTPUT > $SSH_TTY
else
echo >&2 'Standard output is not tty and there is no $SSH_TTY'
fi
}
ios_prepareResult() {
FIFO=$(mktemp)
rm -f $FIFO
mkfifo $FIFO
echo $FIFO
}
ios_handleResult() {
FIFO=$1
if [ -n "$FIFO" ]; then
read <$FIFO -s
rm -f $FIFO
if [[ $REPLY = error* ]]; then
echo "${REPLY#error=}" | base64 >&2 -d
return 1
fi
if [[ $REPLY = result* ]]; then
echo "${REPLY#result=}" | base64 -d
fi
fi
}
sharesheet() {
if [[ $# -eq 0 ]]; then
if tty -s; then
cat <<EOF
Usage: sharesheet [FILE]...
Present share sheet for files and directories. Alternatively you can pipe in text and call it without arguments.
If arguments exist inside the Files app changes made are written back to the server.
EOF
return 0
fi
fi
FIFO=$(ios_prepareResult)
OUTPUT=$(
awk 'BEGIN {printf "6;sharesheet://?ver=2&respond="}'
ios_printBase64Component "$FIFO"
awk 'BEGIN {printf "&pwd="}'
ios_printBase64Component "$PWD"
awk 'BEGIN {printf "&home="}'
ios_printBase64Component "$HOME"
for var in "$@"
do
awk 'BEGIN {printf "&path="}'
ios_printBase64Component "$var"
done
if [[ $# -eq 0 ]]; then
text=$(cat -)
awk 'BEGIN {printf "&text="}'
ios_printBase64Component "$text"
fi
)
ios_sequence "$OUTPUT"
ios_handleResult "$FIFO"
}
quicklook() {
if [[ $# -eq 0 ]]; then
if tty -s; then
cat <<EOF
Usage: quicklook [FILE]...
Show QuickLook preview for files and directories. Alternatively you can pipe in text and call it without arguments.
EOF
return 0
fi
fi
FIFO=$(ios_prepareResult)
OUTPUT=$(
awk 'BEGIN {printf "6;quicklook://?ver=2&respond="}'
ios_printBase64Component "$FIFO"
awk 'BEGIN {printf "&pwd="}'
ios_printBase64Component "$PWD"
awk 'BEGIN {printf "&home="}'
ios_printBase64Component "$HOME"
for var in "$@"
do
awk 'BEGIN {printf "&path="}'
ios_printBase64Component "$var"
done
if [[ $# -eq 0 ]]; then
text=$(cat -)
awk 'BEGIN {printf "&text="}'
ios_printBase64Component "$text"
fi
)
ios_sequence "$OUTPUT"
ios_handleResult "$FIFO"
}
textastic() {
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: textastic
Open in Textastic 9.5 or later.
File must be in directory represented in the Files app to allow writing back edits.
EOF
else
if [ ! -e "$1" ]; then
touch "$1"
fi
OUTPUT=$(
awk 'BEGIN {printf "6;textastic://?ver=2&pwd="}'
ios_printBase64Component "$PWD"
awk 'BEGIN {printf "&home="}'
ios_printBase64Component "$HOME"
awk 'BEGIN {printf "&path="}'
ios_printBase64Component "$1"
)
ios_sequence "$OUTPUT"
fi
}
setbarcolor() {
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: setbarcolor
Set color of terminal toolbar color with values such as
red, #f00, #ff0000, rgb(255,0,0), color(p3 1.0 0.0 0.0)
EOF
else
OUTPUT=$(
awk 'BEGIN {printf "6;settoolbar://?ver=2&color="}'
ios_printBase64Component "$1"
)
ios_sequence "$OUTPUT"
fi
}
openUrl() {
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: openUrl
Open URL on iOS.
EOF
else
FIFO=$(ios_prepareResult)
OUTPUT=$(
awk 'BEGIN {printf "6;open://?ver=2&respond="}'
ios_printBase64Component "$FIFO"
awk 'BEGIN {printf "&url="}'
ios_printBase64Component "$1"
)
ios_sequence "$OUTPUT"
ios_handleResult "$FIFO"
fi
}
runShortcut() {
local baseUrl="shortcuts://run-shortcut"
if [[ $1 == "--x-callback" ]]; then
local baseUrl="shortcuts://x-callback-url/run-shortcut"
shift
fi
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: runShortcut [--x-callback] [input-for-shortcut]
Run in Shortcuts app bringing back results if --x-callback is included.
EOF
else
local name=$(ios_printURIComponent "$1")
shift
if [[ $* == "-" ]]; then
local text=$(cat -)
local input=$(ios_printURIComponent "$text")
else
local input=$(ios_printURIComponent "$*")
fi
openUrl "$baseUrl?name=$name&input=$input"
fi
}
pbcopy() {
OUTPUT=$(
awk 'BEGIN {printf "52;c;"} '
if [ $# -eq 0 ]; then
base64 | tr -d '\n'
else
echo -n "$@" | base64 | tr -d '\n'
fi
)
ios_sequence "$OUTPUT"
}
pbpaste() {
FIFO=$(ios_prepareResult)
OUTPUT=$(
awk 'BEGIN {printf "6;pbpaste://?ver=2&respond="}'
ios_printBase64Component "$FIFO"
)
ios_sequence "$OUTPUT"
ios_handleResult "$FIFO"
}
snip() {
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: snip
EOF
else
OUTPUT=$(
awk 'BEGIN {printf "6;addsnippet://?ver=2&text="}'
ios_printBase64Component "$*"
)
ios_sequence "$OUTPUT"
fi
}
export COLORTERM=truecolor
if [[ -n "$TMUX" ]]; then
# ignore error from old versions of tmux without this command
tmux 2> /dev/null set -g allow-passthrough on || true
fi
if [[ -z "$INSIDE_EMACS" && $- = i ]]; then
# tmux mouse mode enables scrolling with
# swipe and mouse wheel
if [[ -n "$TMUX" ]]; then
tmux set -g mouse on
fi
# send the current directory using OSC 7 when showing prompt to
# make filename detection work better for interactive shell
update_terminal_cwd() {
ios_sequence $(
awk "BEGIN {printf \"7;%s\", \"file://$HOSTNAME\"}"
ios_printURIComponent "$PWD"
)
}
if [ -n "$ZSH_VERSION" ]; then
precmd() { update_terminal_cwd; }
elif [[ $PROMPT_COMMAND != *"update_terminal_cwd"* ]]; then
PROMPT_COMMAND="update_terminal_cwd${PROMPT_COMMAND:+; $PROMPT_COMMAND}"
fi
fi
fi
widget() {
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: widget [target] ...
Update widget on device from which this function was installed with a number of content parameters that can be string, progress, icon, target or color.
Each argument type is derived from input, where the first argument is assumed to be a target if it matches a target configured on the widget.
Progress has the form: 50% or 110/220
Icon must match valid SF Symbol name such as globe or terminal.fill
Colors must be hex colours such as #000 #ff00ff where the color is used for later content and 'foreground' switches back to default colour
Target is used to send different content to different widgets after configuring the widgets with different target identifiers which requires the pro unlock. The target parameter is never assumed unless --target is used and is effective until next --target parameter allowing updates of several widgets with a single command
String is the fallback type if nothing else matches, but content type can be forced for next parameter with --progress, --icon, --color, --text or --target with something like:
widget --text "50/100"
You can update several widgets at once by using --target to send all parameters until the next --target to a particular widget. Updating several widgets at once allows more total updates per day.
EOF
return 0
fi
local key=16fa6e6188715764135103183f30fee7cc392e1e99e78e3a5f4ffc167632b3f0
local user=0zK864dPbP15ZjhN7Sb5KTXuLhGwYCduJLyp2rGh
local iv=ab5bbeb426015da7eedcee8bee3dffb7
local plain=$(
echo Secure ShellFish Widget 1.0
for var in "$@"
do
echo "$var"
done)
local base64=$(echo "$plain" | openssl enc -aes-256-cbc -base64 -K $key -iv $iv)
curl -sS -X POST -H "Content-Type: text/plain" --data "$base64" "https://secureshellfish.app/push/?user=$user"
}
notify() {
if [[ $# -eq 0 ]]; then
cat <<EOF
Usage: notify [title] ...
EOF
return 0
fi
local key=16fa6e6188715764135103183f30fee7cc392e1e99e78e3a5f4ffc167632b3f0
local user=0zK864dPbP15ZjhN7Sb5KTXuLhGwYCduJLyp2rGh
local iv=ab5bbeb426015da7eedcee8bee3dffb7
local plain=$(
echo Secure ShellFish Notify 1.0
for var in "$@"
do
echo "$var"
done)
local base64=$(echo "$plain" | openssl enc -aes-256-cbc -base64 -K $key -iv $iv)
curl -sS -X POST -H "Content-Type: text/plain" --data "$base64" "https://secureshellfish.app/push/?user=$user"
}
Hey,
I try to upload my build to a non-existing output folder.
Unfortunately it seems this is not supported. Any way I could accomplish that?
sftp upload error! Error: Remote Error: No such directory
The README says about delete_remote_files
:
Set
true
will delete all files in the remote path before upload.
However, this is not quite accurate: it deletes the entire remote path rather than all files in it.
The line in entrypoint.sh calls rm -rf $6
, but based on the documentation, I would expect rm -rf $6/*
.
This is problematic in cases where permissions are only granted for that specific folder in the remote path - the folder cannot be recreated after deleting it.
I think the call should either be changed to rm -rf $6/*
, or the documentation needs to be updated.
So my publickey - privatekey pair also requires a password as I set it up to use one when generating the key pair so I am unaware of where I would specify the password that the keys need in order to be authorized.
Hi,
I'm having an issue where I want to upload a file which uses a variable for it's name and sftp throws an error: No such file or directory
e.g. filename - test-${var}.zip
Before I run the action I ran ls
command and the file is there with the correct variable in the name, but when sftp action runs it doesn't find it.
Cheers!
use sshpass
(1/1) Installing sshpass (1.06-r0)
Executing busybox-1.32.1-r9.trigger
OK: 12 MiB in 24 packages
Connection via sftp protocol only, skip the command to create a directory
SFTP Start
Warning: Permanently added '[***]:***,[128.199.157.[14](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:4:15)9]:***' (ED255[19](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:4:20)) to the list of known hosts.
sftp> put -r /home/runner/download/FormInteractionFix.phar plugins/FormInteractionFix.phar
stat /home/runner/download/FormInteractionFix.phar: No such file or directory
/home/runner/download
└── FormInteractionFix.phar
0 directories, 1 file
File: /home/runner/download/FormInteractionFix.phar
Size: 102333 Blocks: 200 IO Block: 409[6](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:5:7) regular file
Device: 801h/2049d Inode: 295815 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 1001/ runner) Gid: ( 121/ docker)
Access: ***-11-04 0[7](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:5:8):32:0[9](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:5:10).33[11](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:5:12)50397 +0000
Modify: ***-11-04 07:32:09.363151173 +0000
Change: ***-11-04 07:32:09.363[15](https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286#step:5:16)1173 +0000
Birth: -
裡面使用了 Context ,是它沒有支援嗎?
https://github.com/Endermanbugzjfc/FormInteractionFix/actions/runs/3391995688/jobs/5637715286
How set a specific permission for the uploaded files by chmod? I tried to add chmod 777 to argument after ConnectionTimeout, but not work.
Existing files should be deletable.
- name: Deploy to Server
uses: wlixcc/[email protected]
with:
local_path: blank/blank-*
remote_path: /github
server: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
port: ${{ secrets.SERVER_PORT }}
ssh_private_key: ${{ secrets.SERVER_IDENTITY_FILE }}
Create directory if needed
Warning: Permanently added '[***]:***' (ECDSA) to the list of known hosts.
Load key "../private_key.pem": invalid format
***@***: Permission denied (publickey).
ed25519_256 pk without password
any idea?
Is is possible to exclude any files or folders when executing the script?
Hello there,
I just created the action on my project and configured everything over there, but unfortunately I'm getting a message like this into the 'deploy file' section> ssh: connect to host ec2-MYIP.us-east-2.compute.amazonaws.com port 22: Operation timed out
Good thing is that I know what's happening. I have to allow as an Inbound Rule the following:
Type: SSH / Protocol: TCP / Post range: 22 / Source: ::/0;
As you can see below, it works fine when not specifying the source...
But obviously I don't want to do that for security reasons, so I need to find out the source I need to put there.
I've tried a lot of Github IP addresses already, but all of them were unsuccessful.
Does anyone here know what's the right source for it to work in a protected way?
Thanks in advance.
Run wlixcc/[email protected]:
sftp start
Warning: Permanently added 'IP' (ECDSA) to the list of known hosts.
root@IP: Permission denied (password).
Connection closed
Action Example uses 'private key' instead of 'ssh_private_key', which leads to a failure when transmitting.
Need update Alpine version from 3.10 to 3.13
dotnet/core#6133
https://en.wikipedia.org/wiki/Alpine_Linux
If the directory specified through remote_path
does not exist then it should be created by the action. It should also create missing parent directories as mkdir -p
does.
Hello, Is there any possbility not repeating the unchanged file just upload changed file. How we do it i didn't found anything in the documentation
什么时候能更新密码登录的
It's possible to exclude files?
Thanks for the wonderful script.
Is it possible to deploy only the changed files since the last deployment instead of copying the whole repo every time?
The action is running on a self hosted runner on AWS, and seems to be working until it tries to copy out of the local directory where it cannot find it. Below is the error message. Each "hidden" in it is just from me changing that for security, but the path is correct. Here's a screenshot from the EC2 terminal showing the directory is there: https://lms-data-axle-dpr.d.pr/RWDGf9
Could not chdir to home directory sftpgroup: No such file or directory
SFTP Start
sftp> put -r /usr/bin/actions-runner/_work/apps/apps/backend/projects/hidden/hidden/build-artifact/* data/dev/hidden/hidden
stat /usr/bin/actions-runner/_work/apps/apps/backend/projects/hidden/hidden/build-artifact/*: No such file or directory
Why can't we use usename and password, as standard SSH?
Thanks,
No error here. Many thanks to the author.
For anyone who cares, this works well in sending a file to Sourceforge.
I used the password
method.
- name: Deploy Files
uses: wlixcc/[email protected]
with:
username: 'andremikulec,andremikulec.u'
server: 'frs.sourceforge.net'
port: 22
local_path: './readme_Test_SFTP_Deploy_Files.md'
remote_path: '/home/frs/project/andremikulec'
sftp_only: true
password: ${{ env.SF_ANDREMIKULEC_PWD }}
Run result:
https://github.com/AndreMikulec/testGithubActions/runs/7377842142?check_suite_focus=true#step:6:23
File is transferred:
https://sourceforge.net/projects/andremikulec/files/
This sftp target is the same as what I use to get a file that is built on Appveyor to Sourceforge.
- provider: FTP
host: frs.sourceforge.net
protocol: sftp
# https://sourceforge.net/projects/andremikulec/files/
username: andremikulec,andremikulec.u
password:
secure: AZOInJ/FinCYx+tbyshJR5VWUISswlz5yiGDqfgEXLg=
artifact: "%APPVEYOR_PROJECT_SLUG%_%appveyor_build_version%_%version%_%DEPLOYNAME%.7z"
folder: /home/frs/project/andremikulec
application:
active_mode: false
When I try(test) manually from the command line, this works fine, too.
Cygwin:
AnonymousUser@ANONYMOUST ~
$ sftp andremikulec,[email protected]
(andremikulec,[email protected]) Password:
Connected to frs.sourceforge.net.
sftp> pwd
Remote working directory: /
sftp> cd /home/frs/project/andremikulec
sftp> pwd
Remote working directory: /home/pfs/project/andremikulec
sftp>
PSFTP (from PuTTy tools)
psftp: no hostname specified; use "open host.name" to connect
psftp> open frs.sourceforge.net
login as: andremikulec,andremikulec.u
Keyboard-interactive authentication prompts from server:
| Password:
End of keyboard-interactive prompts from server
Remote working directory is /
psftp> cd /home/frs/project/andremikulec
psftp> pwd
Remote directory is /home/pfs/project/andremikulec
psftp>
Andre Mikulec
Hello
every deploy is 20 min. when I push a file github. Just I edit a file. Why do I wait 20 min after deploy? What is wrong?
I think If I changed a file. just It should deploy in server. right?
on:
push:
branches: [ "develop" ]
jobs:
web-deploy:
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Deploy file
uses: wlixcc/[email protected]
with:
server: ${{ secrets.TEST_FTP_IP }}
remote_path: ${{ secrets.TEST_FTP_DIR }}
username: ${{ secrets.TEST_FTP_USERNAME }}
password: ${{ secrets.TEST_FTP_PASS }}
how to pass private key "passphrase" please?
I need to ignore some files like
./vendor
.README..nd
Is there a way we can only push up the latest commit? or the new changes and files rather than the whole repo everytime?
Attempting to send changes in a Github Repository to a Cloud Machine using SFTP.
I generated a keypair with ssh-keygen -t rsa -b 4096 -C "applecake"
-m PEM`
I copied the public key to the server's authorized keys under /home/applecake/.ssh/authorized_keys
I then uploaded the private key as an Action Secret
Note
The key came out in this format [some parts marked redacted]
-----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: [redacteddek] [redactedkey] -----END RSA PRIVATE KEY-----
but I also tried
-----BEGIN RSA PRIVATE KEY----- [redactedkey] -----END RSA PRIVATE KEY-----
Both failed.
I uploaded and committed a file to test it.
All jobs were successful except "SFTP Deploy"
These were the logs(redacted).
Run wlixcc/[email protected] with: username: *** server: *** port: 22 ssh_private_key: *** local_path: .[redacted] remote_path: [redacted] args: -o ConnectTimeout=5 /usr/bin/docker run --name e21d20576865b4dd686589f1848177b27_30f637 --label 84217e --workdir /github/workspace --rm -e INPUT_USERNAME -e INPUT_SERVER -e INPUT_PORT -e INPUT_SSH_PRIVATE_KEY -e INPUT_LOCAL_PATH -e INPUT_REMOTE_PATH -e INPUT_ARGS -e HOME -e GITHUB_JOB -e GITHUB_REF -e GITHUB_SHA -e GITHUB_REPOSITORY -e GITHUB_REPOSITORY_OWNER -e GITHUB_RUN_ID -e GITHUB_RUN_NUMBER -e GITHUB_RETENTION_DAYS -e GITHUB_RUN_ATTEMPT -e GITHUB_ACTOR -e GITHUB_WORKFLOW -e GITHUB_HEAD_REF -e GITHUB_BASE_REF -e GITHUB_EVENT_NAME -e GITHUB_SERVER_URL -e GITHUB_API_URL -e GITHUB_GRAPHQL_URL -e GITHUB_REF_NAME -e GITHUB_REF_PROTECTED -e GITHUB_REF_TYPE -e GITHUB_WORKSPACE -e GITHUB_ACTION -e GITHUB_EVENT_PATH -e GITHUB_ACTION_REPOSITORY -e GITHUB_ACTION_REF -e GITHUB_PATH -e GITHUB_ENV -e RUNNER_OS -e RUNNER_ARCH -e RUNNER_NAME -e RUNNER_TOOL_CACHE -e RUNNER_TEMP -e RUNNER_WORKSPACE -e ACTIONS_RUNTIME_URL -e ACTIONS_RUNTIME_TOKEN -e ACTIONS_CACHE_URL -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/RMCC/RMCC":"/github/workspace" 84217e:21d20576865b4dd686589f1848177b27 "***" "***" "22" "***" "[redacted] "[redacted]***[redacted]" "-o ConnectTimeout=5" ssh start Warning: Permanently added '***' (ECDSA) to the list of known hosts. ***@***: Permission denied (publickey).
my private key need passphrase
What should be used for remote_path
to reference current/working directory on remote server without need for an absolute path?
Following variants did not work:
''
'.'
'./'
'/'
I don't see any option to overwrite files in the remote directory. How do I accomplish this? I cannot use the delete_remote_files
input as some of the files in the remote directory cannot be deleted as they are not contained in the SFTP deployment.
Where do I get my SSH_PRIVATE_KEY from?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.