-
Notifications
You must be signed in to change notification settings - Fork 3
/
redmine_install.sh
234 lines (195 loc) · 7.07 KB
/
redmine_install.sh
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
#/bin/bash
# Script to setup redmine base setup for testing with Jenkins/Travis
# "Stolen" from <https://raw.github.com/backlogs/redmine_backlogs/master/redmine_install.sh>
trap "cleanup" EXIT
cleanup()
{
for log in $REDMINE_ROOT/cuke*.log; do
if [ -f "$log" ]; then
sed '/^
$/d' -i $log # empty lines
sed 's/
$//' -i $log # ^Ms at end of lines
sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" -i $log # ansi coloring
fi
done
}
if [[ -e "$HOME/.password_tool.rc" ]]; then
source "$HOME/.password_tool.rc"
fi
if [[ -z "$REDMINE_VER" ]]; then
echo "You have not set REDMINE_VER"
exit 1
fi
if [[ ! "$REDMINE_ROOT" = /* ]] ||
[[ ! "$PATH_TO_REDMINE" = /* ]] ||
[[ ! "$PATH_TO_PASSWORD_TOOL" = /* ]];
then
echo "You should set"\
" REDMINE_VER, REDMINE_ROOT, PATH_TO_REDMINE, PATH_TO_PASSWORD_TOOL"\
" environment variables"
echo "You set:"\
"$REDMINE_ROOT"\
"$PATH_TO_REDMINE"\
"$PATH_TO_PASSWORD_TOOL"
exit 1;
fi
export RAILS_ENV=test
export IN_RBL_TESTENV=true
case $REDMINE_VER in
1.4.*) export PATH_TO_PLUGINS=./vendor/plugins # for redmine < 2.0
export GENERATE_SECRET=generate_session_store
export MIGRATE_PLUGINS=db:migrate_plugins
export REDMINE_TARBALL=https://github.com/edavis10/redmine/archive/$REDMINE_VER.tar.gz
;;
2.*) export PATH_TO_PLUGINS=./plugins # for redmine 2.0
export GENERATE_SECRET=generate_secret_token
export MIGRATE_PLUGINS=redmine:plugins:migrate
export REDMINE_TARBALL=https://github.com/edavis10/redmine/archive/$REDMINE_VER.tar.gz
;;
master) export PATH_TO_PLUGINS=./plugins
export GENERATE_SECRET=generate_secret_token
export MIGRATE_PLUGINS=redmine:plugins:migrate
export REDMINE_GIT_REPO=git://github.com/edavis10/redmine.git
export REDMINE_GIT_TAG=master
;;
v3.3.0) export PATH_TO_PLUGINS=./vendor/plugins
export GENERATE_SECRET=generate_session_store
export MIGRATE_PLUGINS=db:migrate:plugins
export REDMINE_TARBALL=https://github.com/chiliproject/chiliproject/archive/$REDMINE_VER.tar.gz
;;
*) echo "Unsupported platform $REDMINE_VER"
exit 1
;;
esac
export BUNDLE_GEMFILE=$PATH_TO_REDMINE/Gemfile
clone_redmine()
{
set -e # exit if clone fails
rm -rf $PATH_TO_REDMINE
if [ ! "$VERBOSE" = "yes" ]; then
QUIET=--quiet
fi
if [ -n "${REDMINE_GIT_TAG}" ]; then
git clone -b $REDMINE_GIT_TAG --depth=100 $QUIET $REDMINE_GIT_REPO $PATH_TO_REDMINE
cd $PATH_TO_REDMINE
git checkout $REDMINE_GIT_TAG
else
mkdir -p $PATH_TO_REDMINE
wget $REDMINE_TARBALL -O- | tar -C $PATH_TO_REDMINE -xz --strip=1 --show-transformed -f -
fi
}
run_tests()
{
# exit if tests fail
set -e
cd $PATH_TO_REDMINE
# create a link to cucumber features
ln -sf $PATH_TO_PASSWORD_TOOL/features/ .
mkdir -p coverage
ln -sf `pwd`/coverage $REDMINE_ROOT
if [ "$VERBOSE" = "yes" ]; then
TRACE=--trace
fi
bundle exec rake redmine:plugins:test CI=1 $TRACE
}
uninstall()
{
set -e # exit if migrate fails
cd $PATH_TO_REDMINE
# clean up database
if [ "$VERBOSE" = "yes" ]; then
TRACE=--trace
fi
bundle exec rake $TRACE $MIGRATE_PLUGINS NAME=redmine_password_tool VERSION=0
}
run_install()
{
# exit if install fails
set -e
# cd to redmine folder
cd $PATH_TO_REDMINE
echo current directory is `pwd`
# create a link to the password_tool plugin, but avoid recursive link.
if [ -L "$PATH_TO_PLUGINS/redmine_password_tool" ]; then rm "$PATH_TO_PLUGINS/redmine_password_tool"; fi
ln -s "$PATH_TO_PASSWORD_TOOL" "$PATH_TO_PLUGINS/redmine_password_tool"
# copy database.yml
cp $REDMINE_ROOT/database.yml config/
if [ "$RUBYVER" = "1.8" ]; then
sed -i -e 's/mysql2/mysql/g' config/database.yml
fi
export DBNAME=`ruby -e "require 'yaml'; puts YAML::load(open('config/database.yml'))['$RAILS_ENV']['database']"`
export DBTYPE=`ruby -e "require 'yaml'; puts YAML::load(open('config/database.yml'))['$RAILS_ENV']['adapter']"`
if [ "$CLEARDB" = "yes" ]; then
if [ "$DBTYPE" = "mysql2" ] || [ "$DBTYPE" = "mysql" ]; then
mysqladmin -f -u root -p$DBROOTPW drop $DBNAME
mysqladmin -u root -p$DBROOTPW create $DBNAME
fi
if [ "$DBTYPE" = "postgresql" ] ; then
echo "drop database if exists $DBNAME" | psql postgres root
echo "create database $DBNAME" | psql postgres root
fi
fi
if [ "$DB_TO_RESTORE" = "" ]; then
export story_trackers=Story
export task_tracker=Task
else
if [ "$DBTYPE" = "mysql2" ] || [ "$DBTYPE" = "mysql" ]; then
mysqladmin -f -u root -p$DBROOTPW drop $DBNAME
mysqladmin -u root -p$DBROOTPW create $DBNAME
mysql -u root -p$DBROOTPW $DBNAME < $DB_TO_RESTORE
fi
if [ "$DBTYPE" = "postgresql" ] ; then
echo "drop database if exists $DBNAME" | psql postgres root
echo "create database $DBNAME" | psql postgres root
psql $DBNAME root < $DB_TO_RESTORE
fi
fi
# Workarounds for test-unit versions, for Rails 2 - e.g in case we still support Chiliproject.
# TODO: review if this is only for CP, if so remove this and adjust condition in our Gemfile
# 20130120 patrick: using test-unit > 1.2.3 has the complete dependency hell going to cucumber.
# 1) ignore redmine-master's test-unit dependency, we need 1.2.3..
sed -i -e 's=.*gem ["'\'']test-unit["'\''].*==g' ${PATH_TO_REDMINE}/Gemfile
# 2) tell out Gemfile that we're testing: so force test-unit 1.2.3 #done globally above by setting IN_RBL_TESTENV=true
#capybara 2 breaks our tests. too much has changed.
sed -i -e 's=.*gem ["'\'']capybara["'\''].*==g' ${PATH_TO_REDMINE}/Gemfile
# install gems
mkdir -p $REDMINE_ROOT/../bundle
bundle install --path $REDMINE_ROOT/../bundle
if [ "$DBTYPE" = "mysql" -a "$RUBYVER" = "1.8" ] ; then
bundle exec gem install -v=2.8.1 mysql
echo y | bundle exec gem uninstall -v=2.9.0 mysql
echo 'boing'
fi
sed -i -e 's/fail "GONE"/#fail "GONE"/' `find . -type f -exec grep -l 'fail "GONE"' {} \;` README.rdoc
if [ "$VERBOSE" = "yes" ]; then echo 'Gems installed'; fi
if [ "$VERBOSE" = "yes" ]; then
export TRACE=--trace
fi
# run redmine database migrations
if [ "$VERBOSE" = "yes" ]; then echo 'Migrations'; fi
bundle exec rake db:migrate $TRACE
# install redmine database
if [ "$VERBOSE" = "yes" ]; then echo 'Load defaults'; fi
bundle exec rake redmine:load_default_data REDMINE_LANG=en $TRACE
if [ "$VERBOSE" = "yes" ]; then echo 'Tokens'; fi
# generate session store/secret token
bundle exec rake $GENERATE_SECRET $TRACE
# run password_tool database migrations
if [ "$VERBOSE" = "yes" ]; then echo 'Plugin migrations'; fi
bundle exec rake $MIGRATE_PLUGINS $TRACE
# install password_tool
if [ "$VERBOSE" = "yes" ]; then echo 'Generate Password Tool Secret install'; fi
rm -f $PATH_TO_PLUGINS/redmine_password_tool/config/password_tool_secret.yml
bundle exec rake redmine:password_tool:create_secret $TRACE
if [ "$VERBOSE" = "yes" ]; then echo 'Done!'; fi
}
while getopts :irtu opt
do case "$opt" in
r) clone_redmine; exit 0;;
i) run_install; exit 0;;
t) run_tests $2; exit 0;;
u) uninstall; exit 0;;
[?]) echo "i: install; r: clone redmine; t: run tests; u: uninstall";;
esac
done