Compare commits

13 Commits

Author SHA1 Message Date
Sam Kirkland
b4e9e0afae Merge pull request #11 from Misiu/patch-1
Fix WDEFAULT_ARGS
2019-09-17 08:05:42 -05:00
Tomasz Jagusz
24ffd9c7f3 Fix WDEFAULT_ARGS 2019-09-17 09:00:42 +02:00
Sam Kirkland
e60ff92ee6 Added excluding .git files to FAQ 2019-09-16 15:48:45 -05:00
Sam Kirkland
851cc8a897 Update README.md 2019-09-16 10:49:29 -05:00
Sam Kirkland
aa0baf9dc1 Update entrypoint.sh
Default ARGS
2019-09-16 10:44:36 -05:00
Sam Kirkland
bef03c32a5 Update README.md
Changing fTP to FTP
2019-09-16 10:42:35 -05:00
SamKirkland
0fae300950 Updating ReadMe 2019-09-16 00:55:22 -05:00
SamKirkland
f00166c73a Updated README 2019-09-16 00:00:25 -05:00
SamKirkland
2c3915c100 ARGS pass through props feature
Added ARGS option
Added some more examples
2019-09-15 23:56:38 -05:00
Sam Kirkland
25b4cb7043 Updating readme 2019-08-31 17:11:09 -05:00
Sam Kirkland
fe67ba0caa Updating README to reflect .yaml changes 2019-08-29 00:21:07 -05:00
Sam Kirkland
d6a63fd397 Merge pull request #2 from filiptronicek/patch-1
Explanation not explination
2019-08-08 15:52:04 -05:00
Filip Troníček
dc0ff7b167 Explanation not explination
Corrected a grammar mistake in README.md
2019-08-08 22:43:57 +02:00
7 changed files with 174 additions and 50 deletions

View File

@@ -1,4 +1,4 @@
FROM alpine:latest
FROM alpine:3.10
LABEL version="1.0.0"
LABEL repository="https://github.com/SamKirkland/FTP-Deploy-Action"

181
README.md
View File

@@ -1,50 +1,144 @@
# FTP Deploy for GitHub Actions
# FTP Deploy GitHub Action
Automate deploying websites and more with this GitHub action.
![Action](images/action.png)
![Action](images/action-preview.gif)
### Usage
### Usage Example (Your_Project/.github/workflows/main.yml)
```shell
on: push
name: Publish Website
jobs:
FTP-Deploy-Action:
name: FTP-Deploy-Action
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: FTP-Deploy-Action
uses: SamKirkland/FTP-Deploy-Action@master
env:
FTP_SERVER: ftp.samkirkland.com
FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
ARGS: --delete
# --delete arg will delete files on the server if you've deleted them in git
```
1. Select the repository you want to add the action to
2. Select the actions tab `(currently only for beta testers)`
3. Select `Blank workflow file` or `Set up a workflow yourself`, if you don't see these options manually create a yaml file `Your_Project/.github/workflows/main.yml`
4. Paste the above code into your file and save
7. Now you need to add a few keys to the `secrets` section in your project, the following are required at a minimum. To add a `secret` go to the `Settings` tab in your project then select `Secrets`. Add a new `Secret` for each of the following
* FTP_SERVER
* FTP_USERNAME
* FTP_PASSWORD
* (see optional settings below)
### Settings
To add a `secret` go to the `Settings` tab in your project then select `Secrets`. Add a new `Secret` for each of the following.
I recommend you use a secrets to store your FTP_USERNAME and FTP_PASSWORD.
| Key Name | Required? | Example | Default | Description |
|----------------|-----------|-----------------------------|---------|-------------|
| `FTP_SERVER` | Yes | ftp.samkirkland.com | N/A | FTP server name (you may need to specify a port) |
| `FTP_USERNAME` | Yes | git-action@samkirkland.com | N/A | FTP account username |
| `FTP_PASSWORD` | Yes | CrazyUniquePassword&%123 | N/A | FTP account password |
| `LOCAL_DIR` | No | build | . (root project folder) | The local folder to copy, defaults to root project folder. Do NOT include slashes for folders. |
| `REMOTE_DIR` | No | serverFolder | . (root FTP folder) | The remote folder to copy to, deafults to root FTP folder (I recommend you configure this on your server side instead of here). Do NOT include slashes for folders. |
| `ARGS` | No | See `Commonly used ARGS` section below | N/A | Custom lftp arguments, this field is passed through directly into the lftp script. |
#### Commonly used ARGS
Custom lftp arguments, this field is passed through directly into the lftp script. See [lftp's website](https://lftp.yar.ru/lftp-man.html) for all options.
You can use as many arguments as you want, seperate them with a space
| Argument | Description |
|------------------------|------------------------------------------------------------------------------------------------------|
| `--delete` | Delete files not present at the source |
| `--transfer-all` | Transfer all files, even seemingly the same as the target site |
| `--dry-run` | Ouputs files that will be modified without making any actual changes |
| `--include=File.txt` | Include matching files, you can add multiple `--include` |
| `--exclude=File.txt` | Exclude matching files, you can add multiple `--exclude` |
| `--include-glob=*.zip` | Include matching files, you can add multiple `--include-glob` |
| `--exclude-glob=*.zip` | Exclude matching files, you can add multiple `--exclude-glob` |
| `--no-empty-dirs` | Don't create empty directories |
## Common Examples
### Build and Publish React/Angular/Vue/Node Website
Make sure you have an npm script named 'build'. This config should work for most node built websites
```shell
on: push
name: Build and Publish Front End Framework Website
jobs:
FTP-Deploy-Action:
name: FTP-Deploy-Action
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Build Project
run: |
npm install
npm run build --if-present
- name: List output files
run: ls
- name: FTP-Deploy-Action
uses: SamKirkland/FTP-Deploy-Action@master
env:
FTP_SERVER: ftp.samkirkland.com
FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
LOCAL_DIR: build
ARGS: --delete
```
### Log only dry run: Use this mode for testing
Ouputs a list of files that will be created/modified to sync your source without making any actual changes
```shell
on: push
name: Publish Website Dry Run
jobs:
FTP-Deploy-Action:
name: FTP-Deploy-Action
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- name: FTP-Deploy-Action
uses: SamKirkland/FTP-Deploy-Action@master
env:
FTP_SERVER: ftp.samkirkland.com
FTP_USERNAME: ${{ secrets.FTP_USERNAME }}
FTP_PASSWORD: ${{ secrets.FTP_PASSWORD }}
ARGS: --delete --dry-run
```
##### Want another example? Let me know by creating a github issue
## FAQ
1. `rm: Access failed: 553 Prohibited file name: ./.ftpquota`
* The `.ftpquota` file is created by some FTP Servers and cannot be modified by the user
* **Fix:** Add `--exclude=.ftpquota` to your ARGS
2. How do I exclude .git files from the publish
* **Fix:** Add `--exclude-glob=**/.git*/** --exclude-glob=**/.git**` to your ARGS
#### Deprecated main.workflow config (used for beta/legacy apps that haven't been migrated to .yaml workflows yet)
```json
action "FTP-Deploy-Action" {
uses = "SamKirkland/FTP-Deploy-Action@master"
secrets = ["FTP_USERNAME", "FTP_PASSWORD", "FTP_SERVER"]
}
```
1. Select the repository you want to add the action to
2. Select the actions tab `(currently only for beta testers)`
3. Select `Create a new workflow`
4. Select `Edit new file`
5. Paste the above code into the bottom of the file
6. Go back to the `Visual editor`
7. Click edit on the `FTP-Deploy-Action`
8. In the `secrets` section add the required params
* FTP_USERNAME
* FTP_PASSWORD
* FTP_SERVER
* (see optional settings below)
### Settings
- Options
- __FTP Username__: ${FTP_USERNAME}
- __FTP Password__: ${FTP_PASSWORD}
- __FTP Server__: ${FTP_SERVER}
- __(Optional) Local Dir__: ${LOCAL_DIR}
- __(Optional) Remote Dir__: ${REMOTE_DIR}
- Set actions by editing the action then adding them in the `secrets` section:
- ![Action](images/env.png)
### Explination of steps
- This action is triggered by a `event` on your repo
- A docker image based on `mwienk/docker-lftp` is spun up on github servers
- The docker container compresses your code into a tar.gz file
- The file is then uploaded to the remote server
- The file is then un-zipped
### Debugging locally
###### Instructions for windows
##### Instructions for debugging on windows
- Install docker for windows
- Open powershell
- Navigate to the repo folder
@@ -55,19 +149,12 @@ action "FTP-Deploy-Action" {
- Run this command every time you modify entrypoint.sh `.\dos2unix.exe "{FULL_PATH_TO_REPO\entrypoint.sh}"`
- Run `docker run action`
###### Instructions for linux
##### Instructions for debugging on linux
- Please submit a PR for linux instructions :)
### ToDo
- More config options
- Deploy Mode: ${DEPLOY_MODE} `full`|`diffs`
- SSH support
- Switch from lftp to git
#### ToDo
- SFTP example
- More examples
Pull Requests Welcome!
### License
----
MIT
#### Pull Requests Welcome!

36
action.yml Normal file
View File

@@ -0,0 +1,36 @@
name: 'FTP Deploy'
description: 'Syncs files via FTP to a remote server'
inputs:
ftp_server:
description: 'FTP server name (you may need to specify a port)'
required: true
ftp_username:
description: 'FTP account username'
required: true
ftp_password:
description: 'FTP account password'
required: true
local_dir:
description: 'The local folder to copy, defaults to root project folder'
required: false
default: ''
remote_dir:
description: 'The remote folder to copy to, deafults to root FTP folder (I recommend you configure this on your server side instead of here)'
required: false
default: ''
ARGS:
description: 'Passes through options into lftp'
required: false
default: ""
runs:
using: 'docker'
image: 'Dockerfile'
args:
- ${{ inputs.ftp_server }}
- ${{ inputs.ftp_username }}
- ${{ inputs.ftp_password }}
- ${{ inputs.local_dir }}
- ${{ inputs.remote_dir }}
branding:
icon: 'pload-cloud'
color: 'orange'

View File

@@ -8,8 +8,9 @@ echo "Uploading files..."
WDEFAULT_LOCAL_DIR=${LOCAL_DIR:-"."}
WDEFAULT_REMOTE_DIR=${REMOTE_DIR:-"."}
WDEFAULT_ARGS=${ARGS:-""}
lftp $FTP_SERVER -u $FTP_USERNAME,$FTP_PASSWORD -e "set ftp:ssl-allow no; mirror -R $WDEFAULT_LOCAL_DIR $WDEFAULT_REMOTE_DIR; quit"
lftp $FTP_SERVER -u $FTP_USERNAME,$FTP_PASSWORD -e "set ftp:ssl-allow no; mirror $WDEFAULT_ARGS -R $WDEFAULT_LOCAL_DIR $WDEFAULT_REMOTE_DIR; quit"
echo "FTP Deploy Complete"
exit 0

BIN
images/action-preview.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB