recap 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,45 @@
1
+ Capistrano::Configuration.instance(:must_exist).load do
2
+ namespace :foreman do
3
+ set(:procfile) {"#{deploy_to}/Procfile"}
4
+ set(:foreman_export_format, "upstart")
5
+ set(:foreman_export_location, "/etc/init")
6
+
7
+ namespace :export do
8
+ task :if_changed do
9
+ if deployed_file_changed?(procfile)
10
+ top.foreman.export.default
11
+ end
12
+ end
13
+
14
+ task :default, :roles => :app do
15
+ if deployed_file_exists?(procfile)
16
+ tmp = "#{deploy_to}/tmp/foreman"
17
+ as_app "./bin/foreman export #{foreman_export_format} #{tmp} --procfile #{procfile} --app #{application} --user #{application_user} --log #{deploy_to}/log"
18
+ sudo "rm -f #{foreman_export_location}/#{application}*"
19
+ sudo "cp #{tmp}/* #{foreman_export_location}"
20
+ end
21
+ end
22
+ end
23
+
24
+ task :start, :roles => :app do
25
+ if deployed_file_exists?(procfile)
26
+ sudo "start #{application}"
27
+ end
28
+ end
29
+
30
+ task :restart, :roles => :app do
31
+ if deployed_file_exists?(procfile)
32
+ sudo "restart #{application} || sudo start #{application}"
33
+ end
34
+ end
35
+
36
+ task :stop, :roles => :app do
37
+ if deployed_file_exists?(procfile)
38
+ sudo "stop #{application}"
39
+ end
40
+ end
41
+
42
+ after 'deploy:update_code', 'foreman:export:if_changed'
43
+ after 'deploy:restart', 'foreman:restart'
44
+ end
45
+ end
@@ -0,0 +1,68 @@
1
+ # Before `recap` will work correctly, a small amount of setup work needs to be performed on
2
+ # all target servers.
3
+ #
4
+ # First, each user who can deploy the app needs to have an account on each server, and must be able
5
+ # to ssh into the box. They'll also each need to be sudoers.
6
+ #
7
+ # Secondly, each deploying user should set their git `user.name` and `user.email`. This can easily
8
+ # be done by running:
9
+ #
10
+ # `git config --global user.email "you@example.com"`
11
+ # `git config --global user.name "Your Name"`
12
+ #
13
+ # Finally, a user and group representing the application (and usually with the same name) should be
14
+ # created. Where possible, the application user will run application code, while the group will own
15
+ # application specific files. Each deploying user should be added to the application group.
16
+ #
17
+ # This preflight recipe checks each of these things in turn, and attempts to give helpful advice
18
+ # should a check fail.
19
+
20
+ Capistrano::Configuration.instance(:must_exist).load do
21
+ # The preflight check is pretty quick, so run it before every `deploy:setup` and `deploy`
22
+ before 'deploy:setup', 'preflight:check'
23
+ before 'deploy', 'preflight:check'
24
+
25
+ set(:remote_username) { capture('whoami').strip }
26
+
27
+ namespace :preflight do
28
+ task :check do
29
+ # First check the `application_user` exists
30
+ if capture("id #{application_user} > /dev/null 2>&1; echo $?").strip != "0"
31
+ abort %{
32
+ The application user '#{application_user}' doesn't exist. You can create this user by logging into the server and running:
33
+
34
+ sudo useradd #{application_user}
35
+ \n}
36
+ end
37
+
38
+ # Then the `application_group`
39
+ if capture("id -g #{application_group} > /dev/null 2>&1; echo $?").strip != "0"
40
+ abort %{
41
+ The application group '#{application_group}' doesn't exist. You can create this group by logging into the server and running:
42
+
43
+ sudo groupadd #{application_group}
44
+ sudo usermod --append -G #{application_group} #{application_user}
45
+ \n}
46
+ end
47
+
48
+ # Check the git configuration exists
49
+ if capture('git config user.name || true').strip.empty? || capture('git config user.email || true').strip.empty?
50
+ abort %{
51
+ Your remote user must have a git user.name and user.email set. You can set these by logging into the server as #{remote_username} and running:
52
+
53
+ git config --global user.email "you@example.com"
54
+ git config --global user.name "Your Name"
55
+ \n}
56
+ end
57
+
58
+ # And finally check the remote user is a member of the `application_group`
59
+ unless capture('groups').split(" ").include?(application_group)
60
+ abort %{
61
+ Your remote user must be a member of the '#{application_group}' group in order to perform deployments. You can add yourself to this group by logging into the server and running:
62
+
63
+ sudo usermod --append -G #{application_group} #{remote_username}
64
+ \n}
65
+ end
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,22 @@
1
+ require 'recap/deploy'
2
+
3
+ Capistrano::Configuration.instance(:must_exist).load do
4
+ namespace :rails do
5
+ namespace :db do
6
+ task :load_schema do
7
+ if deployed_file_exists?("db/schema.rb")
8
+ as_app './bin/rake db:create db:schema:load'
9
+ end
10
+ end
11
+
12
+ task :migrate do
13
+ if deployed_file_changed?("db/schema.rb")
14
+ as_app './bin/rake db:migrate'
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ after "deploy:clone_code", "rails:db:load_schema"
21
+ after "deploy:update_code", "rails:db:migrate"
22
+ end
@@ -0,0 +1,3 @@
1
+ module Recap
2
+ VERSION = "0.1.0"
3
+ end
data/recap.gemspec ADDED
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "recap/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "recap"
7
+ s.version = Recap::VERSION
8
+ s.authors = ["Tom Ward"]
9
+ s.email = ["tom@popdog.net"]
10
+ s.homepage = "https://github.com/freerange/recap"
11
+ s.summary = %q{GIT based deployment recipes for Capistrano}
12
+ s.description = %q{GIT based deployment recipes for Capistrano}
13
+
14
+ s.rubyforge_project = "recap"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency('capistrano', '~>2.6.0')
22
+ s.add_dependency('thor')
23
+ s.add_development_dependency('rake', '~>0.9.2')
24
+ s.add_development_dependency('rocco', '~>0.8.1')
25
+ end
metadata ADDED
@@ -0,0 +1,126 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: recap
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Tom Ward
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-24 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: capistrano
16
+ requirement: &70207555688740 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 2.6.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70207555688740
25
+ - !ruby/object:Gem::Dependency
26
+ name: thor
27
+ requirement: &70207555688320 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70207555688320
36
+ - !ruby/object:Gem::Dependency
37
+ name: rake
38
+ requirement: &70207555687780 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: 0.9.2
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70207555687780
47
+ - !ruby/object:Gem::Dependency
48
+ name: rocco
49
+ requirement: &70207555687280 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.8.1
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70207555687280
58
+ description: GIT based deployment recipes for Capistrano
59
+ email:
60
+ - tom@popdog.net
61
+ executables:
62
+ - tomafro-deploy
63
+ extensions: []
64
+ extra_rdoc_files: []
65
+ files:
66
+ - .gitignore
67
+ - Gemfile
68
+ - LICENSE
69
+ - README.md
70
+ - Rakefile
71
+ - bin/tomafro-deploy
72
+ - doc/index.html
73
+ - doc/lib/recap/bundler.html
74
+ - doc/lib/recap/capistrano_extensions.html
75
+ - doc/lib/recap/cli.html
76
+ - doc/lib/recap/compatibility.html
77
+ - doc/lib/recap/deploy.html
78
+ - doc/lib/recap/env.html
79
+ - doc/lib/recap/foreman.html
80
+ - doc/lib/recap/preflight.html
81
+ - doc/lib/recap/rails.html
82
+ - doc/lib/recap/version.html
83
+ - index.rb
84
+ - lib/recap/bundler.rb
85
+ - lib/recap/capistrano_extensions.rb
86
+ - lib/recap/cli.rb
87
+ - lib/recap/compatibility.rb
88
+ - lib/recap/deploy.rb
89
+ - lib/recap/deploy/templates/Capfile.erb
90
+ - lib/recap/env.rb
91
+ - lib/recap/foreman.rb
92
+ - lib/recap/preflight.rb
93
+ - lib/recap/rails.rb
94
+ - lib/recap/version.rb
95
+ - recap.gemspec
96
+ homepage: https://github.com/freerange/recap
97
+ licenses: []
98
+ post_install_message:
99
+ rdoc_options: []
100
+ require_paths:
101
+ - lib
102
+ required_ruby_version: !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ! '>='
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ segments:
109
+ - 0
110
+ hash: -3210950917994093421
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: '0'
117
+ segments:
118
+ - 0
119
+ hash: -3210950917994093421
120
+ requirements: []
121
+ rubyforge_project: recap
122
+ rubygems_version: 1.8.7
123
+ signing_key:
124
+ specification_version: 3
125
+ summary: GIT based deployment recipes for Capistrano
126
+ test_files: []