cf-deploy 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: c13f96911baa9e48367e8364a4bd5a0cab6bfee2
4
+ data.tar.gz: 40048b9a6f91b11c8c6eea1083ce708e1c68e988
5
+ SHA512:
6
+ metadata.gz: 78b67eb6b3e8cffb7a73f443baca3f9170c65d6e49c0cce6fe0f5019605489bf09806a598cd0853a7db94377cc5ba57468311cd42615f263714126726abc0a4c
7
+ data.tar.gz: 5a68c1ca42162ecd53bf1cbc964589e9888ff575da732b0711792a6c1bed0e3e7212c3d2e3fdd776d26f580cb8be584e6f8de916d482ef5174166c3c97e34a81
data/README.md CHANGED
@@ -1,20 +1,25 @@
1
- # Rake tasks for deploying to CloudFoundry v6+
1
+ # CloudFoundry Rails Deployment
2
2
 
3
- [![Code Climate](https://codeclimate.com/github/madebymade/cf-deploy/badges/gpa.svg)](https://codeclimate.com/github/madebymade/cf-deploy)
4
- [![Build Status](https://travis-ci.org/madebymade/cf-deploy.svg?branch=master)](https://travis-ci.org/madebymade/cf-deploy)
5
- [![Test Coverage](https://codeclimate.com/github/madebymade/cf-deploy/badges/coverage.svg)](https://codeclimate.com/github/madebymade/cf-deploy)
3
+ [![Code Climate](https://codeclimate.com/github/madetech/cf-deploy/badges/gpa.svg)](https://codeclimate.com/github/madetech/cf-deploy)
4
+ [![Build Status](https://travis-ci.org/madetech/cf-deploy.svg?branch=master)](https://travis-ci.org/madetech/cf-deploy)
5
+ [![Test Coverage](https://codeclimate.com/github/madetech/cf-deploy/badges/coverage.svg)](https://codeclimate.com/github/madetech/cf-deploy/coverage)
6
6
 
7
- This gem provides the functionality you need to deploy your rails application to
8
- a [CloudFoundry][CloudFoundry] provider like [Pivotal][Pivotal].
7
+ `cf-deploy` is the tool you use to deploy your rails app to
8
+ [CloudFoundry][CloudFoundry] providers like [Pivotal][Pivotal]. It works with
9
+ rails 4.2 and older versions as far back as rails 3.
9
10
 
10
- With `cf-deploy` you can:
11
+ ```
12
+ rake cf:deploy:production
13
+ ```
11
14
 
12
- * Define your CloudFoundry connection details in your Rakefile or using
13
- environment variables
14
- * Implement blue/green deployment
15
- * Hook into your existing rake tasks for preparing deploys/syncing assets
15
+ ## `cf-deploy` makes it easy to:
16
16
 
17
- ## Basics
17
+ * Deploy your rails app with one rake command
18
+ * Implement blue/green deployments
19
+ * Run asset precompiles before deploying your app
20
+ * Automate your rails deploys using jenkins, circle-ci, codeship
21
+
22
+ ## Getting Started
18
23
 
19
24
  The functionality comes in the shape of generated rake tasks. You require this
20
25
  gem in your `Rakefile` and call the `.rake_tasks!` setup method.
@@ -33,10 +38,10 @@ bundle exec rake cf:deploy:staging
33
38
  bundle exec rake cf:deploy:production
34
39
  ```
35
40
 
36
- This however mimics the commands `cf push -f manifests/staging.yml` and
37
- `cf push -f manifests/production.yml`. Not really anything helpful or new.
38
- Things start to get more exciting when you define your environments in your
39
- `Rakefile` along with their task dependencies just like normal rake task syntax.
41
+ You now have rake tasks that run `cf push -f manifests/staging.yml` and
42
+ `cf push -f manifests/production.yml`. Things start to get more exciting
43
+ when you define your environments in your `Rakefile` along with their task
44
+ dependencies just like normal rake task syntax.
40
45
 
41
46
  ``` ruby
42
47
  require 'cf-deploy'
@@ -108,6 +113,9 @@ CF::Deploy.rake_tasks! do
108
113
  route 'example-app.io', flip: true
109
114
  route 'example-app.io', 'www', flip: true
110
115
  route 'example-app.io', 'www-origin', flip: true
116
+
117
+ route 'example-app.io', 'blue', blue: true
118
+ route 'example-app.io', 'green', green: true
111
119
  end
112
120
  end
113
121
  ```
@@ -56,6 +56,12 @@ module CF
56
56
  cf.map_route(route, app_name)
57
57
  end
58
58
  end
59
+
60
+ unless env[:runtime_memory].nil?
61
+ deployment[:app_names].each do |app_name|
62
+ cf.scale_memory(app_name, env[:runtime_memory])
63
+ end
64
+ end
59
65
  end
60
66
  end
61
67
  end
@@ -53,12 +53,18 @@ module CF
53
53
  env[:routes].select { |r| r[:flip] == true }
54
54
  end
55
55
 
56
+ def flip_routes_sorted_by_hostname(env)
57
+ flip_routes(env).sort do |a, b|
58
+ a[:hostname] && a[:hostname].length > 0 ? -1 : 1
59
+ end
60
+ end
61
+
56
62
  def match_flip_route_grep(env)
57
63
  if flip_routes(env).empty?
58
64
  raise 'Blue/green deploys require at least one flip_route'
59
65
  end
60
66
 
61
- flip_routes(env).first.values_at(:hostname, :domain).compact.join(' *')
67
+ flip_routes_sorted_by_hostname(env).first.values_at(:hostname, :domain).compact.join(' *')
62
68
  end
63
69
 
64
70
  def live_color(env)
@@ -19,6 +19,10 @@ module CF
19
19
  Kernel.system("cf stop #{app_name}")
20
20
  end
21
21
 
22
+ def scale_memory(app_name, memory)
23
+ Kernel.system("cf scale #{app_name} -m #{memory}")
24
+ end
25
+
22
26
  def map_route(route, app_name)
23
27
  Kernel.system(route_cmd(:map, route, app_name))
24
28
  end
@@ -13,6 +13,7 @@ module CF
13
13
  task_name: EnvConfig.task_name(name),
14
14
  deps: deps,
15
15
  routes: [],
16
+ runtime_memory: nil,
16
17
  manifests: manifests)
17
18
 
18
19
  instance_eval(&block) if block_given?
@@ -74,6 +75,10 @@ module CF
74
75
  self[:manifests].concat(manifests)
75
76
  end
76
77
 
78
+ def runtime_memory(memory)
79
+ self[:runtime_memory] = memory
80
+ end
81
+
77
82
  def route(domain, hostname_or_options = nil, options = nil)
78
83
  if options.nil?
79
84
  if hostname_or_options.nil?
@@ -1,5 +1,5 @@
1
1
  module CF
2
2
  class Deploy
3
- VERSION = '0.1.4'
3
+ VERSION = '0.1.5'
4
4
  end
5
5
  end
@@ -28,7 +28,7 @@ describe CF::Deploy do
28
28
  it 'should deploy blue if not currently deployed' do
29
29
  rake_tasks!
30
30
  expect(Kernel).to receive(:system).with('cf login').ordered
31
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(read: '', close: nil) }
31
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: '', close: nil) }
32
32
  expect(Kernel).to receive(:system).with('cf push -f manifests/production_blue.yml').and_return(true).ordered
33
33
  Rake::Task['cf:deploy:production'].invoke
34
34
  end
@@ -36,7 +36,7 @@ describe CF::Deploy do
36
36
  it 'should deploy blue if green currently deployed' do
37
37
  rake_tasks!
38
38
  expect(Kernel).to receive(:system).with('cf login').ordered
39
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(read: 'production-green-app', close: nil) }
39
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: 'production-green-app', close: nil) }
40
40
  expect(Kernel).to receive(:system).with('cf push -f manifests/production_blue.yml').and_return(true).ordered
41
41
  Rake::Task['cf:deploy:production'].invoke
42
42
  end
@@ -44,7 +44,7 @@ describe CF::Deploy do
44
44
  it 'should deploy green if blue currently deployed' do
45
45
  rake_tasks!
46
46
  expect(Kernel).to receive(:system).with('cf login').ordered
47
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(read: 'production-blue-app', close: nil) }
47
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: 'production-blue-app', close: nil) }
48
48
  expect(Kernel).to receive(:system).with('cf push -f manifests/production_green.yml').and_return(true).ordered
49
49
  Rake::Task['cf:deploy:production'].invoke
50
50
  end
@@ -65,6 +65,21 @@ describe CF::Deploy do
65
65
  Rake::Task['cf:deploy:test'].invoke
66
66
  end
67
67
 
68
+ it 'should change memory after deployment if runtime_memory specified' do
69
+ Dir.chdir('spec/') do
70
+ described_class.rake_tasks! do
71
+ environment :staging do
72
+ runtime_memory '256M'
73
+ end
74
+ end
75
+ end
76
+
77
+ expect(Kernel).to receive(:system).with('cf login').ordered
78
+ expect(Kernel).to receive(:system).with('cf push -f manifests/staging.yml').and_return(true).ordered
79
+ expect(Kernel).to receive(:system).with('cf scale staging-app -m 256M').and_return(true).ordered
80
+ Rake::Task['cf:deploy:staging'].invoke
81
+ end
82
+
68
83
  it 'should not map routes if push command fails' do
69
84
  Dir.chdir('spec/') do
70
85
  described_class.rake_tasks! do
@@ -23,11 +23,11 @@ describe CF::Deploy do
23
23
  rake_tasks!
24
24
  expect(Kernel).to receive(:system).with('cf login').ordered
25
25
 
26
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(:read => 'production-green-app', :close => nil) }
26
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: 'production-green-app', close: nil) }
27
27
  expect(Kernel).to receive(:system).with('cf map-route production-blue-app yourwebsite.com').ordered
28
28
  expect(Kernel).to receive(:system).with('cf unmap-route production-green-app yourwebsite.com').ordered
29
29
 
30
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(:read => 'production-green-app', :close => nil) }
30
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: 'production-green-app', close: nil) }
31
31
  expect(Kernel).to receive(:system).with('cf map-route production-blue-app yourwebsite.com -n www').ordered
32
32
  expect(Kernel).to receive(:system).with('cf unmap-route production-green-app yourwebsite.com -n www').ordered
33
33
 
@@ -43,11 +43,11 @@ describe CF::Deploy do
43
43
  rake_tasks!
44
44
  expect(Kernel).to receive(:system).with('cf login').ordered
45
45
 
46
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(:read => 'production-blue-app', :close => nil) }
46
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: 'production-blue-app', close: nil) }
47
47
  expect(Kernel).to receive(:system).with('cf map-route production-green-app yourwebsite.com').ordered
48
48
  expect(Kernel).to receive(:system).with('cf unmap-route production-blue-app yourwebsite.com').ordered
49
49
 
50
- expect(IO).to receive(:popen).with("cf routes | grep 'yourwebsite.com'") { double(:read => 'production-blue-app', :close => nil) }
50
+ expect(IO).to receive(:popen).with(/cf routes \| grep '(www|www-origin) \*yourwebsite.com'/) { double(read: 'production-blue-app', close: nil) }
51
51
  expect(Kernel).to receive(:system).with('cf map-route production-green-app yourwebsite.com -n www').ordered
52
52
  expect(Kernel).to receive(:system).with('cf unmap-route production-blue-app yourwebsite.com -n www').ordered
53
53
 
@@ -16,7 +16,7 @@ describe CF::Deploy do
16
16
  end
17
17
  end
18
18
 
19
- it 'should stop green if green is currently mapped' do
19
+ it 'should stop blue if green is currently mapped' do
20
20
  Dir.chdir('spec/') do
21
21
  rake_tasks!
22
22
  expect(Kernel).to receive(:system).with('cf login').ordered
@@ -26,7 +26,7 @@ describe CF::Deploy do
26
26
  end
27
27
  end
28
28
 
29
- it 'should stop to blue if blue is currently mapped' do
29
+ it 'should stop green if blue is currently mapped' do
30
30
  Dir.chdir('spec/') do
31
31
  rake_tasks!
32
32
  expect(Kernel).to receive(:system).with('cf login').ordered
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cf-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
5
- prerelease:
4
+ version: 0.1.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Luke Morton
@@ -10,86 +9,76 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2015-05-05 00:00:00.000000000 Z
12
+ date: 2015-07-02 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: rake
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
- - - ! '>='
18
+ - - ">="
21
19
  - !ruby/object:Gem::Version
22
20
  version: '0'
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
- - - ! '>='
25
+ - - ">="
29
26
  - !ruby/object:Gem::Version
30
27
  version: '0'
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: bundler
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
- - - ~>
32
+ - - "~>"
37
33
  - !ruby/object:Gem::Version
38
34
  version: '1.5'
39
35
  type: :development
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
- - - ~>
39
+ - - "~>"
45
40
  - !ruby/object:Gem::Version
46
41
  version: '1.5'
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rspec
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
- - - ~>
46
+ - - "~>"
53
47
  - !ruby/object:Gem::Version
54
48
  version: 3.0.0
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
- - - ~>
53
+ - - "~>"
61
54
  - !ruby/object:Gem::Version
62
55
  version: 3.0.0
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: simplecov
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
- - - ~>
60
+ - - "~>"
69
61
  - !ruby/object:Gem::Version
70
62
  version: 0.7.1
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
- - - ~>
67
+ - - "~>"
77
68
  - !ruby/object:Gem::Version
78
69
  version: 0.7.1
79
70
  - !ruby/object:Gem::Dependency
80
71
  name: codeclimate-test-reporter
81
72
  requirement: !ruby/object:Gem::Requirement
82
- none: false
83
73
  requirements:
84
- - - ! '>='
74
+ - - ">="
85
75
  - !ruby/object:Gem::Version
86
76
  version: '0'
87
77
  type: :development
88
78
  prerelease: false
89
79
  version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
80
  requirements:
92
- - - ! '>='
81
+ - - ">="
93
82
  - !ruby/object:Gem::Version
94
83
  version: '0'
95
84
  description:
@@ -100,13 +89,15 @@ executables: []
100
89
  extensions: []
101
90
  extra_rdoc_files: []
102
91
  files:
92
+ - LICENSE
93
+ - README.md
94
+ - lib/cf-deploy.rb
95
+ - lib/cf/deploy.rb
103
96
  - lib/cf/deploy/blue_green.rb
104
97
  - lib/cf/deploy/commands.rb
105
98
  - lib/cf/deploy/config.rb
106
99
  - lib/cf/deploy/env_config.rb
107
100
  - lib/cf/deploy/version.rb
108
- - lib/cf/deploy.rb
109
- - lib/cf-deploy.rb
110
101
  - spec/blue_green_task_spec.rb
111
102
  - spec/deploy_task_spec.rb
112
103
  - spec/flip_task_spec.rb
@@ -114,31 +105,28 @@ files:
114
105
  - spec/rake_tasks_spec.rb
115
106
  - spec/spec_helper.rb
116
107
  - spec/stop_idle_task_spec.rb
117
- - LICENSE
118
- - README.md
119
108
  homepage: https://github.com/madebymade/cf-deploy
120
109
  licenses:
121
110
  - MIT
111
+ metadata: {}
122
112
  post_install_message:
123
113
  rdoc_options: []
124
114
  require_paths:
125
115
  - lib
126
116
  required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
117
  requirements:
129
- - - ! '>='
118
+ - - ">="
130
119
  - !ruby/object:Gem::Version
131
120
  version: '0'
132
121
  required_rubygems_version: !ruby/object:Gem::Requirement
133
- none: false
134
122
  requirements:
135
- - - ! '>='
123
+ - - ">="
136
124
  - !ruby/object:Gem::Version
137
125
  version: '0'
138
126
  requirements: []
139
127
  rubyforge_project:
140
- rubygems_version: 1.8.23
128
+ rubygems_version: 2.4.5
141
129
  signing_key:
142
- specification_version: 3
130
+ specification_version: 4
143
131
  summary: Rake tasks for deploying to CloudFoundry v6+
144
132
  test_files: []