Fix EG Perl deploy destination for xenial (which has Perl 5.22.1)
[sitka/sitka-tools.git] / deployment / deployfile.sh
1 #!/bin/bash
2
3 _ProdServers=" app1 app2 app3 app4 utility1 utility2 sip2 bibc-prod"
4
5 usage()
6 {
7   cat <<EOF
8 USAGE:
9 ./deployfile.sh -f filename -p /path/to/destination/ [ -u remoteuser ] [ -b ] host1 [ host2 ... ]
10 ./deployfile.sh -f evergreen.git/Open-ILS/something/something -d [ -u remoteuser ] [ -b ] host1 [ host2 ... ]
11
12 OPTIONS:
13   -f    Name of file to be deployed
14   -p    Path on remote server where file should be deployed to (overrides -d)
15   -d    Determine remote path automatically (experimental; ignored if a path is specified with -p)
16   -u    Username to use when logging into remote server; if not provided, defaults to current user
17   -b    Backup flag (optional); creates a backup instead of overwriting file on remote server
18   -P    Auto add all production machines to host list
19   -x    Do not warn when extra build steps are required
20   -h    Print this message and exit
21   -v    Verbose output - echo parameters to stdout
22 EOF
23 }
24
25 while getopts ":f:p:u:bdPxvh" opt
26 do
27   case $opt in
28     f ) FILE=$OPTARG;;
29     p ) DEST=$OPTARG;;
30     d ) AUTOPATH="d";;
31     u ) USER=$OPTARG;;
32     b ) BACKUP="-b --suffix=.`date +%Y%m%d%H%M`";;
33     P ) PROD="P";;
34     x ) SKIP_BUILD_CHECK="x";;
35     v ) VERBOSE="v";;
36     h ) usage && exit 0;;
37   esac
38 done
39 shift $(($OPTIND - 1))
40
41 if [[ -z "$FILE" ]] || ([[ -z "$DEST" ]] && [[ -z "$AUTOPATH" ]]) | ([[ $# -lt 1 ]] && [[ -z "$PROD" ]])
42 then
43   usage
44   exit 1
45 fi
46
47 if [[ -z "$SKIP_BUILD_CHECK" ]] ; then
48   if [[ $FILE = *Open-ILS/web/js/ui/default/staff* ]] ; then
49     echo "It looks like you are trying to deploy Evergreen web client JS."
50     echo "In EG 3.1+ and master, you must build JS before copying into place."
51     echo "After making changes, run 'npm run build' before deploying."
52     echo "(Re-run this script with the -x flag to skip this warning.)"
53     exit 1
54   fi
55 fi
56
57 # attempt to determine the remote destination path automatically
58 if [[ -n "$AUTOPATH" ]] && [[ -z "$DEST" ]]
59 then
60
61   AUTODEST=$FILE
62
63   # TPAC
64   if [ "$FILE" == "$AUTODEST" ]; then
65     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/src/templates/\(.*\)$|/srv/openils/var/templates/\1|')
66   fi
67
68   # perl
69   if [ "$FILE" == "$AUTODEST" ]; then
70     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/src/perlmods/lib/\(.*\)$|/usr/local/share/perl/5.22.1/\1|')
71   fi
72
73   # web
74   if [ "$FILE" == "$AUTODEST" ]; then
75     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/web/\(.*\)$|/srv/openils/var/web/\1|')
76   fi
77
78   # xul
79   if [ "$FILE" == "$AUTODEST" ]; then
80     AUTODEST=$(printf '%s' "$FILE" | sed 's|^.*Open-ILS/xul/staff_client/server/\(.*\)$|/srv/openils/var/web/xul/server/\1|')
81   fi
82
83   if [ "$FILE" == "$AUTODEST" ]; then
84     echo "Destination path could not be determined.\n"
85     exit 1
86   fi
87
88   DEST=$AUTODEST
89
90 fi
91
92 if [[ -z "$USER" ]]
93 then
94   SSH="ssh"
95   RSYNC_OPTS="-avz"
96 else
97   SSH="ssh -l${USER}"
98   RSYNC_OPTS="-rlpD --chown=${USER}:${USER}"
99 fi
100
101 if [[ -z "$PROD" ]]
102 then
103     _hosts="$@"
104 else
105   echo "adding ${_ProdServers} to hosts"
106   _hosts="$@$_ProdServers"
107 fi
108
109 for HOST in $_hosts
110 do
111   RSYNC_DEST="${HOST}:${DEST}"
112   if [[ -z "$VERBOSE" ]]; then
113     echo "deploying to ${HOST}"
114   else
115     echo -e "$HOST:\n\tFILE=$FILE\n\tDEST=$DEST\n\tUSER=$USER\n\tBACKUP=$BACKUP\n\tSSH=$SSH\n\tRSYNC_DEST=$RSYNC_DEST\n\tAUTOPATH=$AUTOPATH\n\tAUTODEST=$AUTODEST\n"
116   fi
117   rsync -e"${SSH}" $BACKUP $RSYNC_OPTS $FILE $RSYNC_DEST
118 done