From d1fda48913698fdc065585e0e67181906315ba9e Mon Sep 17 00:00:00 2001 From: SamKirkland Date: Sat, 5 Jan 2019 00:48:18 -0600 Subject: [PATCH] Initial commit --- Dockerfile | 17 +++++++++++ README.md | 73 ++++++++++++++++++++++++++++++++++++++++++++++ entrypoint.sh | 15 ++++++++++ images/action.png | Bin 0 -> 15062 bytes images/env.png | Bin 0 -> 17826 bytes 5 files changed, 105 insertions(+) create mode 100644 Dockerfile create mode 100644 README.md create mode 100644 entrypoint.sh create mode 100644 images/action.png create mode 100644 images/env.png diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..c04a060 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM alpine:latest + +LABEL version="1.0.0" +LABEL repository="https://github.com/SamKirkland/FTP-Deploy-Action" +LABEL homepage="https://github.com/SamKirkland/FTP-Deploy-Action" +LABEL maintainer="Sam Kirkland " + +LABEL "com.github.actions.name"="FTP Deploy Action" +LABEL "com.github.actions.description"="Deploy your website via FTP" +LABEL "com.github.actions.icon"="upload-cloud" +LABEL "com.github.actions.color"="orange" + +RUN apk add lftp + +COPY entrypoint.sh /entrypoint.sh +RUN chmod 777 entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..842bc23 --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# FTP Deploy for GitHub Actions + +Automate deploying websites and more with this GitHub action. + +![Action](images/action.png) + +### Usage +``` +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 +- Install docker for windows +- Open powershell +- Navigate to the repo folder +- Run `docker build --tag action .` +- (Optional) This step is only required when editing entrypoint.sh due to windows editors saving the file with windows line breaks instead of linux line breaks + - Download http://dos2unix.sourceforge.net/ + - In another powershell window nagivate to the dos2unix folder /bin + - Run this command every time you modify entrypoint.sh `.\dos2unix.exe "{FULL_PATH_TO_REPO\entrypoint.sh}"` +- Run `docker run action` + +###### Instructions for 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 + +Pull Requests Welcome! + +### License +---- + +MIT diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..0f332ed --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,15 @@ +#!/bin/sh + +# "to avoid continuing when errors or undefined variables are present" +set -eu + +echo "Starting FTP Deploy" +echo "Uploading files..." + +WDEFAULT_LOCAL_DIR=${LOCAL_DIR:-"."} +WDEFAULT_REMOTE_DIR=${REMOTE_DIR:-"."} + +lftp $FTP_SERVER -u $FTP_USERNAME,$FTP_PASSWORD -e "set ftp:ssl-allow no; mirror -R $WDEFAULT_LOCAL_DIR $WDEFAULT_REMOTE_DIR; quit" + +echo "FTP Deploy Complete" +exit 0 \ No newline at end of file diff --git a/images/action.png b/images/action.png new file mode 100644 index 0000000000000000000000000000000000000000..4ae9832ed185617ba5ee3bc2ad5f1c0d099a1562 GIT binary patch literal 15062 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 literal 0 HcmV?d00001 diff --git a/images/env.png b/images/env.png new file mode 100644 index 0000000000000000000000000000000000000000..18fbfa915b49cb1a092bdea5c82fdbfff22f231e GIT binary patch literal 17826 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