summaryrefslogtreecommitdiff
path: root/deploy.sh
blob: 9aa72ff5bde9006ebe1c2194c27dc99e2bdf47c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/usr/bin/env bash

set -e

remote_host=
remote_path=
deploy_id=

show_help(){
    echo "Usage: $0 [OPTION]..." >&2
    echo "Deploys a software with rsync over ssh" >&2
    echo "The options -i, -p and -r are required" >&2
    echo "" >&2
    echo "  -h          Display this help screen" >&2
    echo "  -i <id>     Sets the id, a unique name for the deployment" >&2
    echo "  -p <path>   Define the base path on the server" >&2
    echo "  -r <host>   The remote server name and user" >&2
}

while getopts ":hi:p:r:" opt; do
    case ${opt} in
        h)
            show_help
            exit 1
            ;;
        r)
            remote_host="$OPTARG"
            ;;
        p)
            remote_path="$OPTARG"
            ;;
        i)
            deploy_id="$OPTARG"
            ;;
        \?)
            echo "Invalid option: -$OPTARG" >&2
            exit 1
            ;;
        :)
            echo "The option -$OPTARG requires an argument" >&2
            exit 1
            ;;
    esac
done

if [ -z "${remote_host}" ] || [ -z "${remote_path}" ] || [ -z "${deploy_id}" ]; then
    show_help
    exit 1
fi

echo "syncing ${PWD}/ to ${remote_host}:${remote_path}/${deploy_id}/"

rsync -vAax --exclude '.git*' --exclude .composer/ --exclude node_modules/ \
    -e "ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no" \
    ./ "${remote_host}:${remote_path}/${deploy_id}/"

ssh -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no "${remote_host}" "
    set -e

    if [[ -f \"${remote_path}/current/config/config.php\" ]]; then
        echo \"Config backup\"
        cp \"${remote_path}/current/config/config.php\" \"${deploy_id}-config.php\"
    fi

    echo \"Changing symlink\"
    unlink_cmd=\$(command -v unlink || command -v rm)
    \$unlink_cmd \"${remote_path}/current\" && ln -s \"${remote_path}/${deploy_id}\" \"${remote_path}/current\"

    if [[ -f \"${deploy_id}-config.php\" ]]; then
        echo \"Restoring config\"
        cp  \"${deploy_id}-config.php\" \"${remote_path}/current/config/config.php\"
    fi
"