cf-deploy 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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: []