5.16.0 release notes: add boilerplate
[civicrm-core.git] / bin / setup.sh
CommitLineData
6a488035 1#!/usr/bin/env bash
5e43f8f4 2set -e
6a488035
TO
3
4CALLEDPATH=`dirname $0`
5
6# Convert to an absolute path if necessary
7case "$CALLEDPATH" in
8 .*)
9 CALLEDPATH="$PWD/$CALLEDPATH"
10 ;;
11esac
12
ea16a823
TO
13if [ ! -f "$CALLEDPATH/setup.conf" ]; then
14 echo
15 echo "Missing configuration file. Please copy $CALLEDPATH/setup.conf.txt to $CALLEDPATH/setup.conf and edit it."
16 exit 1
17fi
18
6a488035 19source "$CALLEDPATH/setup.conf"
55f7d1ec 20source "$CALLEDPATH/setup.lib.sh"
6a488035
TO
21
22if [ "$1" = '-h' ] || [ "$1" = '--help' ]; then
1b086766
TO
23 echo
24 echo "Usage: setup.sh [options] [schema file] [database data file] [database name] [database user] [database password] [database host] [database port] [additional args]"
25 echo "[options] is a mix of zero or more of following:"
e16fa8d0
TO
26 echo " -a (All) Implies -Dgsef (default)"
27 echo " -D (Download) Download dependencies"
28 echo " -g (GenCode) Generate DAO files, SQL files, etc"
29 echo " -s (Schema) Load new schema in DB"
30 echo " -d (Data-Plain) Load basic dataset in DB"
31 echo " -e (Data-Examples) Load example dataset in DB"
32 echo " -f (Flush) Flush caches and settings"
1b086766
TO
33 echo
34 echo "Example: Perform a full setup"
35 echo " setup.sh -a"
36 echo
37 echo "Example: Setup all the code but leave the DB alone"
38 echo " setup.sh -Dg"
39 echo
40 echo "Example: Keep the existing code but reset the DB"
e16fa8d0 41 echo " setup.sh -sef"
6a488035
TO
42 exit 0
43fi
44
1b086766
TO
45###############################################################################
46## Parse command line options
47
48FOUND_ACTION=
49DO_DOWNLOAD=
50DO_GENCODE=
51DO_SCHEMA=
52DO_DATA=
53DO_FLUSH=
e16fa8d0 54DEFAULT_DATA=
1b086766 55
e16fa8d0 56while getopts "aDgsdef" opt; do
1b086766
TO
57 case $opt in
58 a)
59 DO_DOWNLOAD=1
60 DO_GENCODE=1
61 DO_SCHEMA=1
62 DO_DATA=1
e48dd208 63 DEFAULT_DATA=civicrm_generated.mysql
1b086766
TO
64 DO_FLUSH=1
65 FOUND_ACTION=1
66 ;;
67 D)
68 DO_DOWNLOAD=1
69 FOUND_ACTION=1
70 ;;
71 g)
72 DO_GENCODE=1
73 FOUND_ACTION=1
74 ;;
75 s)
76 DO_SCHEMA=1
77 FOUND_ACTION=1
78 ;;
79 d)
80 DO_DATA=1
e16fa8d0
TO
81 DEFAULT_DATA=civicrm_data.mysql
82 FOUND_ACTION=1
83 ;;
84 e)
85 DO_DATA=1
86 DEFAULT_DATA=civicrm_generated.mysql
1b086766
TO
87 FOUND_ACTION=1
88 ;;
89 f)
90 DO_FLUSH=1
91 FOUND_ACTION=1
92 ;;
93 \?)
94 echo "Invalid option: -$OPTARG" >&2
95 exit 1
96 ;;
97 :)
98 echo "Option -$OPTARG requires an argument." >&2
99 exit 1
100 ;;
101 esac
102done
103if [ -z "$FOUND_ACTION" ]; then
104 DO_DOWNLOAD=1
105 DO_GENCODE=1
106 DO_SCHEMA=1
107 DO_DATA=1
108 DO_FLUSH=1
e16fa8d0 109 DEFAULT_DATA=civicrm_generated.mysql
1b086766
TO
110fi
111
112shift $((OPTIND-1))
6a488035
TO
113
114# fetch command line arguments if available
5e43f8f4
TO
115if [ ! -z "$1" ] ; then SCHEMA="$1"; fi
116if [ ! -z "$2" ] ; then DBLOAD="$2"; fi
117if [ ! -z "$3" ] ; then DBNAME="$3"; fi
118if [ ! -z "$4" ] ; then DBUSER="$4"; fi
119if [ ! -z "$5" ] ; then DBPASS="$5"; fi
28c32cc5
PH
120if [ ! -z "$6" ] ; then DBHOST="$6"; fi
121if [ ! -z "$7" ] ; then DBPORT="$7"; fi
6a488035
TO
122
123# verify if we have at least DBNAME given
124if [ -z $DBNAME ] ; then
125 echo "No database name defined!"
126 exit 1
127fi
128if [ -z $DBUSER ] ; then
129 echo "No database username defined!"
130 exit 1
131fi
132if [ -z $DBPASS ] ; then
133 read -p "Database password:"
134 DBPASS=$REPLY
135fi
136
1b086766
TO
137MYSQLCMD=$(mysql_cmd)
138###############################################################################
139## Execute tasks
140set -x
141
142if [ -n "$DO_DOWNLOAD" ]; then
143 pushd "$CALLEDPATH/.."
77665792
TO
144 COMPOSER=$(pickcmd composer composer.phar)
145 $COMPOSER install
146
147 if has_commands bower karma ; then
148 ## dev dependencies have been installed globally; don't force developer to redownload
149 npm install --production
150 else
151 npm install
152 fi
153
154 BOWER=$(pickcmd node_modules/bower/bin/bower bower)
0292a407
TO
155 if [ -f "$BOWER" ]; then
156 NODE=$(pickcmd node nodejs)
157 BOWER="$NODE $BOWER"
158 fi
7ef63143
TO
159 # Without the force flag, bower may not check for new versions or verify that installed software matches version specified in bower.json
160 # With the force flag, bower will ignore all caches and download all deps.
161 if [ -n "$OFFLINE" ]; then
162 BOWER_OPT=
163 elif [ ! -f "bower_components/.setupsh.ts" ]; then
164 ## First run -- or cleanup from failed run
165 BOWER_OPT=-f
166 elif [ "bower.json" -nt "bower_components/.setupsh.ts" ]; then
167 ## Bower.json has changed since last run
168 BOWER_OPT=-f
169 fi
170 [ -f "bower_components/.setupsh.ts" ] && rm -f "bower_components/.setupsh.ts"
171 $BOWER install $BOWER_OPT
172 touch bower_components/.setupsh.ts
1b086766
TO
173 popd
174fi
07565b0a 175
6a488035
TO
176# run code generator if it's there - which means it's
177# checkout, not packaged code
1b086766
TO
178if [ -n "$DO_GENCODE" -a -d "$CALLEDPATH/../xml" ]; then
179 pushd "$CALLEDPATH/../xml"
180 if [ -z "$DBPORT" ]; then
181 PHP_MYSQL_HOSTPORT="$DBHOST"
182 else
183 PHP_MYSQL_HOSTPORT="$DBHOST:$DBPORT"
184 fi
185 "$PHP5PATH"php -d mysql.default_host="$PHP_MYSQL_HOSTPORT" -d mysql.default_user=$DBUSER -d mysql.default_password=$DBPASS GenCode.php $SCHEMA '' ${GENCODE_CMS}
186 popd
28c32cc5
PH
187fi
188
1b086766
TO
189if [ -n "$DO_SCHEMA" ]; then
190 pushd "$CALLEDPATH/../sql"
191 echo; echo "Dropping civicrm_* tables from database $DBNAME"
192 echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'VIEW'" \
193 | $MYSQLCMD \
194 | grep '^\(civicrm_\|log_civicrm_\)' \
195 | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop view " $1 ";"}' \
196 | $MYSQLCMD
197 echo "SELECT table_name FROM information_schema.TABLES WHERE TABLE_SCHEMA='${DBNAME}' AND TABLE_TYPE = 'BASE TABLE'" \
198 | $MYSQLCMD \
199 | grep '^\(civicrm_\|log_civicrm_\)' \
200 | awk -v NOFOREIGNCHECK='SET FOREIGN_KEY_CHECKS=0;' 'BEGIN {print NOFOREIGNCHECK}{print "drop table " $1 ";"}' \
201 | $MYSQLCMD
202
203 echo; echo Creating database structure
204 $MYSQLCMD < civicrm.mysql
205 popd
6a488035
TO
206fi
207
1b086766
TO
208if [ -n "$DO_DATA" ]; then
209 pushd "$CALLEDPATH/../sql"
e16fa8d0 210 # load default data set unless system is configured with override
1b086766 211 if [ -z $DBLOAD ]; then
e16fa8d0
TO
212 echo;
213 echo "Populating database with dataset - $DEFAULT_DATA"
214 $MYSQLCMD < "$DEFAULT_DATA"
1b086766
TO
215 else
216 echo; echo Populating database with required data - civicrm_data.mysql
217 $MYSQLCMD < civicrm_data.mysql
218 echo; echo Populating database with $DBLOAD data
219 $MYSQLCMD < $DBLOAD
220 fi
221
222 # load additional script if DBADD defined
223 if [ ! -z $DBADD ]; then
224 echo; echo Loading $DBADD
225 $MYSQLCMD < $DBADD
226 fi
227 popd
6a488035
TO
228fi
229
1b086766
TO
230if [ -n "$DO_FLUSH" ]; then
231 pushd "$CALLEDPATH/.."
1b086766
TO
232 # reset config_backend and userFrameworkResourceURL which gets set
233 # when config object is initialized
234 $MYSQLCMD -e "UPDATE civicrm_domain SET config_backend = NULL; UPDATE civicrm_setting SET value = NULL WHERE name = 'userFrameworkResourceURL';"
235 popd
236fi
6a488035 237
1b086766 238echo; echo "NOTE: Logout from your CMS to avoid session conflicts."
6a488035 239