airvzxf/FTP Deployment

Copy all the files and folders via FTP from your Git project to your server in a specific path, delete remote folder before.

View on GitHub

Trust Signals

Scorecard Score
not yet scored
Maintenance Recency
Stale
License
None
namedescriptionrequireddefault
serverFTP Server.yes
userFTP User.yes
passwordFTP Password.yes
local_dirLocal directory.no./
remote_dirRemote directory.no./
deleteDelete all the files inside of the remote directory.nofalse
max_retriesNumber of times the lftp command will be executed on error. `0` means retry forever (the only exits are lftp success or the global 5h timeout). `1` means no retries.no10
no_symlinksDo not create symbolic links.notrue
mirror_verboseMirror verbosity level (0-3). Passed as --verbose=N to lftp mirror.no1
ftp_ssl_allowFTP - Allow SSL encryption.notrue
ssl_verify_certificateVerify SSL certificate.notrue
ssl_check_hostnameCheck certificate hostname.notrue
ftp_passive_modeFTP - This can be useful if you are behind a firewall or a dumb masquerading router.notrue
ftp_use_featFTP - FEAT: Determining what extended features the FTP server supports.nofalse
ftp_nop_intervalFTP - Delay in seconds between NOOP commands when downloading tail of a file.no2
net_max_retriesNET - Maximum number of operation without success. 0 unlimited. 1 no retries.no1
net_persist_retriesNET - Ignore hard errors. When reply 5xx errors or there is too many users.no5
net_timeoutNET - Sets the network protocol timeout.no15s
dns_max_retriesDNS - 0 no limit trying to lookup an address otherwise try only this number of times.no8
dns_fatal_timeoutDNS - Time for DNS queries. Set to "never" to disable.no10s
lftp_settingsAdditional raw lftp settings, e.g. "set cache:cache-empty-listings true; set cmd:status-interval 1s;". Use with care: this is appended to the lftp `-e` command and not validated.no""
excludeComma-separated glob patterns to exclude from the upload. Translated to `set mirror:exclude <value>;` in lftp. Files matching any pattern are neither uploaded nor deleted. Example: "*.map,node_modules/**,.git/**". Globs are case-sensitive (lftp native syntax).no""
exclude_deleteComma-separated glob patterns to protect from deletion when `delete: true` is set. Translated to `set mirror:exclude-file <value>;` in lftp. Independent of `exclude`: files matching these patterns are still uploaded if present locally, but are not removed by `--delete`. Example: "*.log,uploads/**".no""
debugIf "true", print resolved input values to the log. Default is "false" (only show which inputs were received, not their values).nofalse
fail_on_deprecatedIf "true", exit 1 when the ref used to invoke this action is end-of-life (v1.0-alpha.*, v1.1, v1.2.0, v1.3.*). Useful for orgs with a "no EOL versions" policy. The deprecation warning is still printed either way; this input only controls whether the action fails.nofalse
dry_runIf "true", perform a dry run: lftp will compute the mirror plan but not transfer or delete any file. Useful to preview what the action would change before a destructive run. The action still exits 0 on success (i.e. on a clean dry-run plan) and 1 on a hard error.nofalse
upload_log_on_failureIf "true" (default), when the action is about to exit 1, the captured lftp log file is uploaded to the current workflow run as a workflow artifact named "ftp-deployment-action-log-<run-attempt>". Requires the step to expose GITHUB_TOKEN via `env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}`. If the token (or any of the other GitHub-Actions env vars) is missing, the upload is silently skipped with a notice and the action still exits 1 normally. If the upload request itself fails (network, 4xx, 5xx), a warning is printed and the action still exits 1. Set to "false" to disable the upload entirely (the log file is still captured under ~/.lftp-logs/ for the runner to inspect).notrue
concurrency_lockIf "true", serialize concurrent deployments to the same FTP server by acquiring a server-side sentinel directory before the mirror. Implementation: lftp issues `quote MKD <path>` before the mirror and `quote RMD <path>` after; while MKD returns 550 (lock held), the action polls up to `concurrency_lock_timeout` seconds. Uses RFC 959 MKD/RMD which every FTP server supports. The lock is released on any exit path (success, error, SIGINT, 5h timeout) by the cleanup trap. Default is "false" (no cross-runner serialization). For zero-config serialization, prefer the GitHub Actions `concurrency:` block in your workflow. Stale-lock auto-recovery (v2.9.0): if the previous holder died before RMD (runner OOM, SIGKILL, 6h job limit), a timestamp-encoded sentinel file is left at the FTP root; the next runner detects it as stale (older than `concurrency_lock_timeout`) and takes over automatically. See README "Concurrency / deployment lock" for details.nofalse
concurrency_lock_pathPath of the sentinel directory used by `concurrency_lock`. Relative paths are resolved against the FTP user's home; absolute paths are accepted. Must be a valid FTP path (no `..`, no shell metacharacters, no leading dash). Default: ".lftp-deployment.lock" (a hidden directory alongside the deployed files). The directory will be created and removed by the action; do not use a path that holds user data.no.lftp-deployment.lock
concurrency_lock_timeoutMaximum seconds to wait for the lock when `concurrency_lock` is "true" and another run is currently holding it. After this, the action exits 1 with a clear error. Set to "0" to fail immediately when the lock is held (no waiting). Default is 300 (5 minutes), which is long enough to ride out a transient concurrent run, short enough that a stale lock surfaces within a normal workflow run.no300
concurrency_lock_poll_intervalSeconds between lock acquisition attempts when `concurrency_lock` is "true". Default is 5, which gives 60 attempts over the default 300-second timeout. Lower values reduce the time-to-acquire after the holder releases; higher values reduce the number of MKD round-trips against the server.no5

no outputs