diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a2404fb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +FROM debian:9.5-slim + + +# Update +RUN apt-get update + + +# Install packages +RUN apt-get -yq install rsync openssh-client + + +# Label +LABEL "com.github.actions.name"="rsync deployments" +LABEL "com.github.actions.description"="For deploying code to a webserver via rsync over ssh" +LABEL "com.github.actions.icon"="truck" +LABEL "com.github.actions.color"="yellow" + +LABEL "repository"="http://github.com/contention/action-rsync-deploy" +LABEL "homepage"="https://github.com/contention/action-rsync-deploy" +LABEL "maintainer"="Contention " + + +# Copy entrypoint +ADD entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] + diff --git a/README.md b/README.md index 62ba9f3..5104575 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,40 @@ -# rsync-deployments -GitHub Action for deploying code via rsync over ssh +# Contention rsync deployments over ssh + +Deploys *everything* in `GITHUB_WORKSPACE` to a folder on a server via rsync over ssh. + +This action would usually follow a build/test action which leaves deployable code in `GITHUB_WORKSPACE`. + +# Required SECRETs + +This action needs a `DEPLOY_KEY` secret variable. This should be the private key part of an ssh key pair. The public key part should be added to the authorized_keys file on the server that receives the deployment. + +# Required ARGs + +This action can receive three `ARG`s: + +1. The first is for any initial/required rsync flags, eg: `-avzr --delete` + +2. The second is for any `--exclude` flags and directory pairs, eg: `--exclude .htaccess --exclude /uploads/`. Use "" if none required. + +3. The third is for the deployment target, and should be in the format: `[USER]@[HOST]:[PATH]` + +# Example usage + +``` +workflow "All pushes" { + on = "push" + resolves = ["Deploy to Staging"] +} + +action "Deploy to Staging" { + uses = "contention/action-rsync-deploy@master" + secrets = ["DEPLOY_KEY"] + args = ["-avzr --delete", "--exclude .htaccess --exclude /uploads/", "user@server.com:/srv/myapp/public/htdocs/"] +} +``` + +## Disclaimer + +If you're using GitHub Actions, you'll probably already know that it's still in limited public beta, and GitHub advise against using Actions in production. + +So, check your keys. Check your deployment paths. And use at your own risk. \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..45fe097 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +set -eu + +# Set deploy key +SSH_PATH="$HOME/.ssh" +mkdir "$SSH_PATH" +echo "$DEPLOY_KEY" > "$SSH_PATH/deploy_key" +chmod 600 "$SSH_PATH/deploy_key" + + +# Do deployment +sh -c "rsync $1 -e 'ssh -i $SSH_PATH/deploy_key -o StrictHostKeyChecking=no' $2 $GITHUB_WORKSPACE/ $3"