heroploy 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/README.md +9 -4
- data/heroploy.gemspec +3 -0
- data/lib/generators/heroploy/install/USAGE +8 -0
- data/lib/generators/heroploy/install/install_generator.rb +9 -0
- data/lib/generators/heroploy/install/templates/config/heroploy.yml +35 -0
- data/lib/heroploy/config/env_config.rb +2 -2
- data/lib/{railtie.rb → heroploy/engine.rb} +3 -3
- data/lib/heroploy/tasks/check_task_lib.rb +36 -9
- data/lib/heroploy/tasks/deploy_task_lib.rb +15 -1
- data/lib/heroploy/tasks/env_task_lib.rb +42 -23
- data/lib/heroploy/tasks/tasks.rake +6 -2
- data/lib/heroploy/version.rb +1 -1
- data/lib/heroploy.rb +3 -1
- data/spec/lib/generators/heroploy/install_generator_spec.rb +14 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/support/shared_contexts/generator.rb +17 -0
- metadata +53 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 356baf2c9b896ba5dddc86702c4b549e7af81824
|
4
|
+
data.tar.gz: 79fb1cea8d3206b14e22c37f087bf967702bcd99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c0963dd5196fffa11e2307f5481dbd02bd0d75b794bba7427a487fa2657a5154c524fa1d7639c080862d29da35bc199dca2c7007fdcde3df1cf26444c7458960
|
7
|
+
data.tar.gz: 14460f37d4ebe158c98d8a3c4dce756f83064a1b9d96cd8dc10658a1a0cf5d763ffe4fc846fdbc5771542066dfe9e88aa5ba8a6d76aa23c175b3271fe0a69c3e
|
data/.coveralls.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
service_name: travis-ci
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](https://travis-ci.org/jbrunton/heroploy)
|
4
4
|
[](https://gemnasium.com/jbrunton/heroploy)
|
5
5
|
[](https://codeclimate.com/github/jbrunton/heroploy)
|
6
|
+
[](https://coveralls.io/r/jbrunton/heroploy?branch=master)
|
6
7
|
|
7
8
|
A few helpful rake tasks to manage deploying Rails apps to development, staging and production Heroku servers.
|
8
9
|
|
@@ -24,21 +25,25 @@ Or install it yourself as:
|
|
24
25
|
|
25
26
|
Add a ```heroploy.yml``` file to your application's config directory which describes the Heroku apps you will deploy to, and the checks you would like when deploying to each.
|
26
27
|
|
27
|
-
|
28
|
+
If you're running Rails, you can use this generator to add an example config file:
|
29
|
+
|
30
|
+
rails generate heroploy:install
|
31
|
+
|
32
|
+
Here's an example ```heroploy.yml``` file:
|
28
33
|
|
29
34
|
```yaml
|
30
35
|
environments:
|
31
36
|
development:
|
32
|
-
|
37
|
+
app: my-development-app
|
33
38
|
|
34
39
|
staging:
|
35
|
-
|
40
|
+
app: my-staging-app
|
36
41
|
checks:
|
37
42
|
pushed: true
|
38
43
|
branch: master
|
39
44
|
|
40
45
|
production:
|
41
|
-
|
46
|
+
app: my-production-app
|
42
47
|
tag: 'RELEASE_%Y%m%dT%H%M%S%z'
|
43
48
|
checks:
|
44
49
|
pushed: true
|
data/heroploy.gemspec
CHANGED
@@ -20,6 +20,9 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_dependency "bundler", "~> 1.3"
|
22
22
|
spec.add_development_dependency "rake"
|
23
|
+
spec.add_development_dependency "rails"
|
23
24
|
spec.add_development_dependency "rspec"
|
24
25
|
spec.add_development_dependency "factory_girl"
|
26
|
+
spec.add_development_dependency "generator_spec"
|
27
|
+
spec.add_development_dependency "coveralls"
|
25
28
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
environments:
|
2
|
+
|
3
|
+
# Add a development environment, to which you can deploy anything:
|
4
|
+
#
|
5
|
+
# development:
|
6
|
+
# app: my-development-app
|
7
|
+
|
8
|
+
# You may also want a staging environment, to which you can only deploy pushed
|
9
|
+
# commits from master:
|
10
|
+
#
|
11
|
+
# staging:
|
12
|
+
# app: my-staging-app
|
13
|
+
# checks:
|
14
|
+
# pushed: true
|
15
|
+
# branch: master
|
16
|
+
|
17
|
+
# And here's a possible production app, which requires changes to have first
|
18
|
+
# been staged:
|
19
|
+
|
20
|
+
# production:
|
21
|
+
# app: my-production-app
|
22
|
+
# tag: 'RELEASE_%Y%m%dT%H%M%S%z'
|
23
|
+
# checks:
|
24
|
+
# pushed: true
|
25
|
+
# branch: master
|
26
|
+
# staged: true
|
27
|
+
|
28
|
+
# Finally, if you have a single Heroku app, this should work for now:
|
29
|
+
|
30
|
+
heroku:
|
31
|
+
app: my-heroku-app-name
|
32
|
+
tag: 'RELEASE_%Y%m%dT%H%M%S%z'
|
33
|
+
checks:
|
34
|
+
pushed: true
|
35
|
+
branch: master
|
@@ -3,7 +3,7 @@ require 'heroploy/config/checks_config'
|
|
3
3
|
class EnvConfig
|
4
4
|
attr_accessor :name
|
5
5
|
attr_accessor :remote
|
6
|
-
attr_accessor :
|
6
|
+
attr_accessor :app
|
7
7
|
attr_accessor :tag
|
8
8
|
attr_accessor :checks
|
9
9
|
|
@@ -12,7 +12,7 @@ class EnvConfig
|
|
12
12
|
|
13
13
|
config.name = name
|
14
14
|
config.remote = attrs['remote'] || name
|
15
|
-
config.
|
15
|
+
config.app = attrs['app']
|
16
16
|
config.tag = attrs['tag']
|
17
17
|
config.checks = ChecksConfig.parse(attrs['checks'])
|
18
18
|
|
@@ -14,43 +14,70 @@ module Heroploy
|
|
14
14
|
include Commands::Heroku
|
15
15
|
include Commands::Checks
|
16
16
|
|
17
|
+
attr_accessor :deploy_config
|
18
|
+
attr_accessor :env_config
|
19
|
+
attr_accessor :defined_tasks
|
20
|
+
|
17
21
|
def initialize(deploy_config, env_config)
|
22
|
+
@deploy_config = deploy_config
|
23
|
+
@env_config = env_config
|
24
|
+
@defined_tasks = []
|
25
|
+
define
|
26
|
+
end
|
27
|
+
|
28
|
+
def define
|
29
|
+
define_remote_check
|
30
|
+
define_pushed_check
|
31
|
+
define_branch_check
|
32
|
+
define_staged_check
|
33
|
+
define_all_check
|
34
|
+
end
|
35
|
+
|
36
|
+
def define_remote_check
|
18
37
|
desc "check remote exists for #{env_config.name}"
|
19
38
|
task :remote do
|
20
39
|
remote = env_config.remote
|
21
40
|
check_remote(remote)
|
22
41
|
end
|
23
42
|
|
24
|
-
|
25
|
-
|
43
|
+
@defined_tasks << :remote
|
44
|
+
end
|
45
|
+
|
46
|
+
def define_pushed_check
|
26
47
|
if env_config.checks.pushed then
|
27
48
|
desc "check changes have been pushed to origin"
|
28
49
|
task :pushed do
|
29
50
|
check_pushed(current_branch)
|
30
51
|
end
|
31
|
-
|
52
|
+
@defined_tasks << :pushed
|
32
53
|
end
|
33
|
-
|
54
|
+
end
|
55
|
+
|
56
|
+
def define_branch_check
|
34
57
|
if env_config.checks.branch then
|
35
58
|
desc "check we can deploy to #{env_config.name} from the current branch"
|
36
59
|
task :branch do
|
37
60
|
valid_branch = env_config.checks.branch
|
38
61
|
check_branch(current_branch, valid_branch, env_config.name)
|
39
62
|
end
|
40
|
-
|
63
|
+
@defined_tasks << :branch
|
41
64
|
end
|
42
|
-
|
65
|
+
end
|
66
|
+
|
67
|
+
def define_staged_check
|
43
68
|
if env_config.checks.staged then
|
44
69
|
desc "check the changes have already been staged"
|
45
70
|
task :staged do
|
46
71
|
staging_env_config = deploy_config[env_config.checks.staged]
|
47
72
|
check_staged(staging_env_config.remote, current_branch, staging_env_config.name)
|
48
73
|
end
|
49
|
-
|
74
|
+
@defined_tasks << :staged
|
50
75
|
end
|
51
|
-
|
76
|
+
end
|
77
|
+
|
78
|
+
def define_all_check
|
52
79
|
desc "do all the checks for #{env_config.name}"
|
53
|
-
task :all =>
|
80
|
+
task :all => @defined_tasks
|
54
81
|
end
|
55
82
|
end
|
56
83
|
end
|
@@ -11,12 +11,26 @@ module Heroploy
|
|
11
11
|
class DeployTaskLib < ::Rake::TaskLib
|
12
12
|
include ::Rake::DSL if defined?(::Rake::DSL)
|
13
13
|
|
14
|
+
attr_accessor :deploy_config
|
15
|
+
|
14
16
|
def initialize(deploy_config)
|
17
|
+
@deploy_config = deploy_config
|
18
|
+
define
|
19
|
+
end
|
20
|
+
|
21
|
+
def define
|
22
|
+
define_fetch_task
|
23
|
+
define_env_tasks
|
24
|
+
end
|
25
|
+
|
26
|
+
def define_fetch_task
|
15
27
|
desc 'do a git fetch'
|
16
28
|
task :fetch do
|
17
29
|
git_fetch
|
18
30
|
end
|
19
|
-
|
31
|
+
end
|
32
|
+
|
33
|
+
def define_env_tasks
|
20
34
|
deploy_config.environments.each do |env_config|
|
21
35
|
EnvTaskLib.new(deploy_config, env_config)
|
22
36
|
end
|
@@ -15,34 +15,53 @@ module Heroploy
|
|
15
15
|
include Commands::Heroku
|
16
16
|
include Commands::Checks
|
17
17
|
|
18
|
+
attr_accessor :deploy_config
|
19
|
+
attr_accessor :env_config
|
20
|
+
|
18
21
|
def initialize(deploy_config, env_config)
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
desc "push the current branch to master on #{env_config.name}"
|
25
|
-
task :push do
|
26
|
-
git_push_to_master(env_config.remote, current_branch)
|
27
|
-
end
|
22
|
+
@deploy_config = deploy_config
|
23
|
+
@env_config = env_config
|
24
|
+
define
|
25
|
+
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
27
|
+
def define
|
28
|
+
namespace env_config.name do
|
29
|
+
define_check_tasks
|
30
|
+
define_git_tasks
|
31
|
+
define_heroku_tasks
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def define_check_tasks
|
36
|
+
namespace :check do
|
37
|
+
CheckTaskLib.new(deploy_config, env_config)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def define_git_tasks
|
42
|
+
desc "push the current branch to master on #{env_config.name}"
|
43
|
+
task :push do
|
44
|
+
git_push_to_master(env_config.remote, current_branch)
|
45
|
+
end
|
33
46
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
47
|
+
desc "tag the deployment to #{env_config.name}"
|
48
|
+
task :tag do
|
49
|
+
if env_config.tag then
|
50
|
+
tag = DateTime.now.strftime(env_config.tag)
|
51
|
+
git_tag(tag, "Deployed #{current_branch} to #{env_config.name}")
|
52
|
+
git_push_tag(tag)
|
41
53
|
end
|
42
|
-
|
43
|
-
desc "deploy to #{env_config.name}"
|
44
|
-
task :deploy => ['check:all', :push, :migrate, :tag]
|
45
54
|
end
|
46
55
|
end
|
56
|
+
|
57
|
+
def define_heroku_tasks
|
58
|
+
desc "run database migrations on #{env_config.name}"
|
59
|
+
task :migrate do
|
60
|
+
heroku_migrate(env_config.app)
|
61
|
+
end
|
62
|
+
|
63
|
+
desc "deploy to #{env_config.name}"
|
64
|
+
task :deploy => ['check:all', :push, :migrate, :tag]
|
65
|
+
end
|
47
66
|
end
|
48
67
|
end
|
@@ -1,6 +1,10 @@
|
|
1
1
|
require 'heroploy/tasks/deploy_task_lib'
|
2
2
|
|
3
3
|
namespace :heroploy do
|
4
|
-
|
5
|
-
|
4
|
+
begin
|
5
|
+
deploy_config = DeployConfig.load
|
6
|
+
Heroploy::DeployTaskLib.new(deploy_config)
|
7
|
+
rescue Errno::ENOENT
|
8
|
+
puts "Warning: no config file present for Heroploy. Run 'rails generate heroploy:install' or add a heroploy.yml file to your project."
|
9
|
+
end
|
6
10
|
end
|
data/lib/heroploy/version.rb
CHANGED
data/lib/heroploy.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
require "rails"
|
2
|
+
|
1
3
|
require "heroploy/version"
|
2
|
-
require
|
4
|
+
require "heroploy/engine" if defined?(Rails) && Rails::VERSION::MAJOR >= 3
|
3
5
|
|
4
6
|
module Heroploy
|
5
7
|
def self.root
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require File.expand_path('../../../../../lib/generators/heroploy/install/install_generator', __FILE__)
|
3
|
+
|
4
|
+
describe Heroploy::InstallGenerator do
|
5
|
+
include_context "generator"
|
6
|
+
|
7
|
+
it "copies the heroploy.yml template" do
|
8
|
+
destination_root.should have_structure {
|
9
|
+
directory 'config' do
|
10
|
+
file 'heroploy.yml'
|
11
|
+
end
|
12
|
+
}
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,13 +1,25 @@
|
|
1
|
+
require 'coveralls'
|
2
|
+
Coveralls.wear! do
|
3
|
+
add_filter '/spec/'
|
4
|
+
end
|
5
|
+
|
1
6
|
require 'factory_girl'
|
7
|
+
require 'rails/generators'
|
8
|
+
|
9
|
+
require "generator_spec/test_case"
|
10
|
+
require "generator_spec/matcher"
|
2
11
|
|
3
12
|
require 'heroploy'
|
4
13
|
require 'heroploy/tasks/deploy_task_lib'
|
5
14
|
|
6
15
|
require 'support/shell_support'
|
7
16
|
require 'support/shared_contexts/rake'
|
17
|
+
require 'support/shared_contexts/generator'
|
8
18
|
|
9
19
|
FactoryGirl.find_definitions
|
10
20
|
|
21
|
+
TMP_ROOT = Pathname.new(File.expand_path('../tmp', __FILE__))
|
22
|
+
|
11
23
|
RSpec.configure do |config|
|
12
24
|
config.color_enabled = true
|
13
25
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
shared_context "generator" do
|
2
|
+
include GeneratorSpec::TestCase
|
3
|
+
destination TMP_ROOT
|
4
|
+
|
5
|
+
before(:all) do
|
6
|
+
prepare_destination
|
7
|
+
|
8
|
+
APP_CONFIG_PATH = TMP_ROOT.join('config')
|
9
|
+
FileUtils.mkpath APP_CONFIG_PATH
|
10
|
+
|
11
|
+
run_generator
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:all) do
|
15
|
+
FileUtils.rm_rf TMP_ROOT
|
16
|
+
end
|
17
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: heroploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Brunton
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-01
|
11
|
+
date: 2014-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rails
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: rspec
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,34 @@ dependencies:
|
|
66
80
|
- - '>='
|
67
81
|
- !ruby/object:Gem::Version
|
68
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: generator_spec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: coveralls
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
69
111
|
description: Helpful rake tasks to manage deploying to development, staging and production
|
70
112
|
Heroku servers
|
71
113
|
email:
|
@@ -74,6 +116,7 @@ executables: []
|
|
74
116
|
extensions: []
|
75
117
|
extra_rdoc_files: []
|
76
118
|
files:
|
119
|
+
- .coveralls.yml
|
77
120
|
- .gitignore
|
78
121
|
- .travis.yml
|
79
122
|
- Gemfile
|
@@ -81,6 +124,9 @@ files:
|
|
81
124
|
- README.md
|
82
125
|
- Rakefile
|
83
126
|
- heroploy.gemspec
|
127
|
+
- lib/generators/heroploy/install/USAGE
|
128
|
+
- lib/generators/heroploy/install/install_generator.rb
|
129
|
+
- lib/generators/heroploy/install/templates/config/heroploy.yml
|
84
130
|
- lib/heroploy.rb
|
85
131
|
- lib/heroploy/commands/checks.rb
|
86
132
|
- lib/heroploy/commands/git.rb
|
@@ -89,13 +135,14 @@ files:
|
|
89
135
|
- lib/heroploy/config/checks_config.rb
|
90
136
|
- lib/heroploy/config/deploy_config.rb
|
91
137
|
- lib/heroploy/config/env_config.rb
|
138
|
+
- lib/heroploy/engine.rb
|
92
139
|
- lib/heroploy/tasks/check_task_lib.rb
|
93
140
|
- lib/heroploy/tasks/deploy_task_lib.rb
|
94
141
|
- lib/heroploy/tasks/env_task_lib.rb
|
95
142
|
- lib/heroploy/tasks/tasks.rake
|
96
143
|
- lib/heroploy/version.rb
|
97
|
-
- lib/railtie.rb
|
98
144
|
- spec/factories.rb
|
145
|
+
- spec/lib/generators/heroploy/install_generator_spec.rb
|
99
146
|
- spec/lib/heroploy/commands/checks_spec.rb
|
100
147
|
- spec/lib/heroploy/commands/git_spec.rb
|
101
148
|
- spec/lib/heroploy/commands/heroku_spec.rb
|
@@ -107,6 +154,7 @@ files:
|
|
107
154
|
- spec/lib/heroploy/tasks/check_staged_spec.rb
|
108
155
|
- spec/spec_helper.rb
|
109
156
|
- spec/support/helpers/deploy_config_helper.rb
|
157
|
+
- spec/support/shared_contexts/generator.rb
|
110
158
|
- spec/support/shared_contexts/rake.rb
|
111
159
|
- spec/support/shell_support.rb
|
112
160
|
homepage: ''
|
@@ -135,6 +183,7 @@ specification_version: 4
|
|
135
183
|
summary: Helpful rake tasks for deploying to Heroku
|
136
184
|
test_files:
|
137
185
|
- spec/factories.rb
|
186
|
+
- spec/lib/generators/heroploy/install_generator_spec.rb
|
138
187
|
- spec/lib/heroploy/commands/checks_spec.rb
|
139
188
|
- spec/lib/heroploy/commands/git_spec.rb
|
140
189
|
- spec/lib/heroploy/commands/heroku_spec.rb
|
@@ -146,5 +195,6 @@ test_files:
|
|
146
195
|
- spec/lib/heroploy/tasks/check_staged_spec.rb
|
147
196
|
- spec/spec_helper.rb
|
148
197
|
- spec/support/helpers/deploy_config_helper.rb
|
198
|
+
- spec/support/shared_contexts/generator.rb
|
149
199
|
- spec/support/shared_contexts/rake.rb
|
150
200
|
- spec/support/shell_support.rb
|