[webui] chown in gitdir for deployment
[opensuse:build-service.git] / src / webui / config / deploy.rb
1 require 'net/smtp'
2
3 set :application, "obs-webui"
4
5 # git settings
6 set :scm, :git
7 set :repository,  "git://gitorious.org/opensuse/build-service.git"
8 set :branch, "2.1"
9 set :deploy_via, :remote_cache
10 set :git_enable_submodules, 1
11 set :git_subdir, '/src/webui'
12 set :migrate_target, :current
13
14 set :deploy_notification_to, ['tschmidt@suse.de', 'coolo@suse.de', 'adrian@suse.de', 'speilicke@suse.de']
15 server "buildserviceapi.suse.de", :app, :web, :db, :primary => true
16
17 # If you aren't deploying to /u/apps/#{application} on the target
18 # servers (which is the default), you can specify the actual location
19 # via the :deploy_to variable:
20 set :deploy_to, "/srv/www/vhosts/opensuse.org/#{application}"
21 set :runit_name, "webclient"
22 set :static, "build2.o.o"
23
24 # set variables for different target deployments
25 task :stage do
26   set :deploy_to, "/srv/www/vhosts/opensuse.org/stage/#{application}"
27   set :runit_name, "webclient_stage"
28   set :branch, "master"
29   set :static, "build.o.o-stage/stage"
30 end
31
32 ssh_options[:forward_agent] = true
33 default_run_options[:pty] = true
34 set :normalize_asset_timestamps, false
35
36 # tasks are run with this user
37 set :user, "root"
38 # spinner is run with this user
39 set :runner, "root"
40
41 after "deploy:update_code", "config:symlink_shared_config"
42 after "deploy:update_code", "config:sync_static"
43 after "deploy:symlink", "config:permissions"
44
45 # workaround because we are using a subdirectory of the git repo as rails root
46 before "deploy:finalize_update", "deploy:use_subdir"
47 after "deploy:finalize_update", "deploy:reset_subdir"
48 after "deploy:finalize_update", "deploy:notify"
49
50 after :deploy, 'deploy:cleanup' # only keep 5 releases
51 before "deploy:update_code", "deploy:test_suite"
52
53 namespace :config do
54
55   desc "Install saved configs from /shared/ dir"
56   task :symlink_shared_config do
57     run "rm #{release_path}#{git_subdir}/config/options.yml"
58     run "ln -s #{shared_path}/options.yml #{release_path}#{git_subdir}/config/"
59     run "ln -s #{shared_path}/secret.key #{release_path}#{git_subdir}/config/"
60     run "rm -f #{release_path}#{git_subdir}/config/environments/production.rb"
61     run "ln -s #{shared_path}/production.rb #{release_path}#{git_subdir}/config/environments/"
62     run "ln -s #{shared_path}/database.db #{release_path}#{git_subdir}/db/"
63     run "ln -s #{shared_path}/repositories.rb #{release_path}#{git_subdir}/config/"
64     #not in git anymore
65     #run "rm -fr #{release_path}#{git_subdir}/app/views/maintenance"
66     run "ln -s #{shared_path}/maintenance #{release_path}#{git_subdir}/app/views"
67     run "ln -s #{shared_path}/database.yml #{release_path}#{git_subdir}/config/database.yml"
68   end
69
70   desc "Patch local changes"
71   task :patch_build_opensuse_org do
72     run "cd #{current_path}; patch -p3 < config/build.opensuse.org.diff"
73   end
74
75   desc "Set permissions"
76   task :permissions do
77     run "chown -R lighttpd #{current_path}/db #{current_path}/tmp #{release_path}#{git_subdir}/public/main"
78   end
79
80   desc "Sync public to static.o.o"
81   task :sync_static do
82     `rsync  --delete-after --exclude=themes -av public/ -e 'ssh -p2212' proxy-opensuse.suse.de:/srv/www/vhosts/static.opensuse.org/hosts/#{static}`
83   end
84
85 end
86
87 # server restarting
88 namespace :deploy do
89   task :start do
90     run "sv start /service/#{runit_name}-*"
91     run "sv start /service/delayed_job_#{runit_name}"
92   end
93
94   task :restart do
95     run "for i in /service/#{runit_name}-*; do sv restart $i; sleep 5; done"
96     run "sv 1 /service/delayed_job_#{runit_name}"
97   end
98
99   task :stop do
100     run "sv stop /service/#{runit_name}-*"
101     run "sv stop /service/delayed_job_#{runit_name}"
102   end
103
104   task :use_subdir do
105     set :latest_release_bak, latest_release
106     set :latest_release, "#{latest_release}#{git_subdir}"
107     run "cp #{latest_release_bak}/REVISION #{latest_release}"
108   end
109
110   task :reset_subdir do
111     set :latest_release, latest_release_bak
112   end
113
114   task :symlink, :except => { :no_release => true } do
115     on_rollback do
116       if previous_release
117         run "rm -f #{current_path}; ln -s #{previous_release}#{git_subdir} #{current_path}; true"
118       else
119         logger.important "no previous release to rollback to, rollback of symlink skipped"
120       end
121     end
122
123     run "rm -f #{current_path} && ln -s #{latest_release}#{git_subdir} #{current_path}"
124   end
125
126   desc "Send email notification of deployment"
127   task :notify do
128     #diff = `#{source.local.diff(current_revision)}`
129     diff_log = `#{source.local.log( source.next_revision(current_revision) )}`
130     user = `whoami`
131     body = %Q[From: obs-webui-deploy@suse.de
132 To: #{deploy_notification_to.join(", ")}
133 Subject: obs-#{runit_name} deployed by #{user}
134
135 Git log:
136 #{diff_log}]
137
138     Net::SMTP.start('relay.suse.de', 25) do |smtp|
139       smtp.send_message body, 'obs-webui-deploy@suse.de', deploy_notification_to
140     end
141   end
142   
143   task :test_suite do
144     Dir.glob('**/*.rb').each do |f|
145       if !system("ruby -c -d #{f} > /dev/null")
146          puts "syntax error in #{f} - will not deploy"
147          exit 1
148       end
149     end
150     if !system("rake --trace check_syntax")
151       puts "Error in syntax check - will not deploy"
152       exit 1
153     end
154     if !system("rake test")
155       puts "Error on rake test - will not deploy"
156       exit 1
157     end
158   end
159
160 end
161
162