heroploy 0.0.5 → 0.0.6
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/README.md +4 -1
- data/heroploy.gemspec +1 -0
- data/lib/heroploy/commands/checks.rb +9 -0
- data/lib/heroploy/config/deployment_config.rb +2 -0
- data/lib/heroploy/config/environment_checks.rb +2 -0
- data/lib/heroploy/tasks/check_task_lib.rb +11 -0
- data/lib/heroploy/version.rb +1 -1
- data/spec/factories.rb +22 -0
- data/spec/lib/heroploy/commands/checks_spec.rb +27 -0
- data/spec/lib/heroploy/config/deployment_config_spec.rb +5 -0
- data/spec/lib/heroploy/config/environment_checks_spec.rb +4 -2
- data/spec/lib/heroploy/tasks/check_all_spec.rb +15 -1
- data/spec/lib/heroploy/tasks/check_config_spec.rb +7 -0
- data/spec/lib/heroploy/tasks/check_travis_spec.rb +15 -0
- metadata +20 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 43d2a2c41a7f6cf4df2a3bd702909a8f3187e86b
|
|
4
|
+
data.tar.gz: d38defbf1034e876710827b2df4f389f4775e614
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: fc5fd21d2bdd1642f9c5c1abc145072b07d7744df3b51d76be6a9d17562bf1e325accadbd4536910f4538d15fa1974b238d543f54387ec74197f9dc05f80bc10
|
|
7
|
+
data.tar.gz: c34743eeda303b04f3865f83f1efdb8951df103b086c0d2dbda6b7280c5e174a0fb2eb97244fed6eb5a2a705b9acd167ee24f6014008de52e94f660163ba692a
|
data/README.md
CHANGED
|
@@ -35,6 +35,8 @@ If you're running Rails, you can use this generator to add an example config fil
|
|
|
35
35
|
Here's an example ```heroploy.yml``` file:
|
|
36
36
|
|
|
37
37
|
```yaml
|
|
38
|
+
travis_repo: my-travis-user/my-travis-repo
|
|
39
|
+
|
|
38
40
|
environments:
|
|
39
41
|
development:
|
|
40
42
|
app: my-development-app
|
|
@@ -52,6 +54,7 @@ environments:
|
|
|
52
54
|
pushed: true
|
|
53
55
|
branch: master
|
|
54
56
|
staged: true
|
|
57
|
+
travis: true
|
|
55
58
|
```
|
|
56
59
|
|
|
57
60
|
This file:
|
|
@@ -59,7 +62,7 @@ This file:
|
|
|
59
62
|
* Describes ```development```, ```staging``` and ```production``` deployment rules for three Heroku apps (named ```my-development-app```, ```my-staging-app``` and ```my-production-app``` on Heroku).
|
|
60
63
|
* Allows any branch to be pushed directly to ```development```.
|
|
61
64
|
* Only allows ```master``` to be pushed to ```staging```, and requires all changes to have first been pushed to ```origin```.
|
|
62
|
-
* Only allows deployment to ```production``` if the changes have first been staged on ```staging
|
|
65
|
+
* Only allows deployment to ```production``` if the changes have first been staged on ```staging``` and the Travis build is passing.
|
|
63
66
|
|
|
64
67
|
To deploy to one of these environments, run ```rake heroploy:<environment>:deploy```. For example:
|
|
65
68
|
|
data/heroploy.gemspec
CHANGED
|
@@ -19,6 +19,7 @@ Gem::Specification.new do |spec|
|
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
21
|
spec.add_dependency "bundler", "~> 1.3"
|
|
22
|
+
spec.add_dependency "travis", "~> 1.6"
|
|
22
23
|
spec.add_development_dependency "rake"
|
|
23
24
|
spec.add_development_dependency "rails"
|
|
24
25
|
spec.add_development_dependency "rspec"
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
require 'travis'
|
|
2
|
+
|
|
1
3
|
module Heroploy
|
|
2
4
|
module Commands
|
|
3
5
|
module Checks
|
|
@@ -37,6 +39,13 @@ module Heroploy
|
|
|
37
39
|
end
|
|
38
40
|
end
|
|
39
41
|
end
|
|
42
|
+
|
|
43
|
+
def check_travis(branch_name, travis_repo_name)
|
|
44
|
+
travis_repo = Travis::Repository.find(travis_repo_name)
|
|
45
|
+
unless travis_repo.branch(branch_name).green?
|
|
46
|
+
raise "Failing Travis build for branch #{branch_name}"
|
|
47
|
+
end
|
|
48
|
+
end
|
|
40
49
|
end
|
|
41
50
|
end
|
|
42
51
|
end
|
|
@@ -6,6 +6,7 @@ require 'heroploy/config/remote_config'
|
|
|
6
6
|
module Heroploy
|
|
7
7
|
module Config
|
|
8
8
|
class DeploymentConfig
|
|
9
|
+
attr_accessor :travis_repo
|
|
9
10
|
attr_accessor :environments
|
|
10
11
|
attr_accessor :shared_env
|
|
11
12
|
attr_accessor :remote_configs
|
|
@@ -15,6 +16,7 @@ module Heroploy
|
|
|
15
16
|
end
|
|
16
17
|
|
|
17
18
|
def initialize(attrs = {})
|
|
19
|
+
@travis_repo = attrs['travis_repo']
|
|
18
20
|
unless attrs['environments'].nil?
|
|
19
21
|
@environments = attrs['environments'].map { |name, env_attrs| Environment.new(name, env_attrs) }
|
|
20
22
|
end
|
|
@@ -4,12 +4,14 @@ module Heroploy
|
|
|
4
4
|
attr_accessor :pushed
|
|
5
5
|
attr_accessor :branch
|
|
6
6
|
attr_accessor :staged
|
|
7
|
+
attr_accessor :travis
|
|
7
8
|
|
|
8
9
|
def initialize(attrs = {})
|
|
9
10
|
attrs ||= {}
|
|
10
11
|
@pushed = attrs['pushed']
|
|
11
12
|
@branch = attrs['branch']
|
|
12
13
|
@staged = attrs['staged'] == true ? 'staging' : attrs['staged']
|
|
14
|
+
@travis = attrs['travis']
|
|
13
15
|
end
|
|
14
16
|
end
|
|
15
17
|
end
|
|
@@ -30,6 +30,7 @@ module Heroploy
|
|
|
30
30
|
define_branch_check
|
|
31
31
|
define_staged_check
|
|
32
32
|
define_config_check
|
|
33
|
+
define_travis_check
|
|
33
34
|
define_all_check
|
|
34
35
|
end
|
|
35
36
|
|
|
@@ -82,6 +83,16 @@ module Heroploy
|
|
|
82
83
|
end
|
|
83
84
|
@defined_tasks << :config
|
|
84
85
|
end
|
|
86
|
+
|
|
87
|
+
def define_travis_check
|
|
88
|
+
if env_config.checks.travis then
|
|
89
|
+
desc "check the travis build for the current branch"
|
|
90
|
+
task :travis do
|
|
91
|
+
check_travis(current_branch, deploy_config.travis_repo)
|
|
92
|
+
end
|
|
93
|
+
@defined_tasks << :travis
|
|
94
|
+
end
|
|
95
|
+
end
|
|
85
96
|
|
|
86
97
|
def define_all_check
|
|
87
98
|
desc "do all the checks for #{env_config.name}"
|
data/lib/heroploy/version.rb
CHANGED
data/spec/factories.rb
CHANGED
|
@@ -3,23 +3,27 @@ FactoryGirl.define do
|
|
|
3
3
|
pushed false
|
|
4
4
|
staged false
|
|
5
5
|
branch nil
|
|
6
|
+
travis false
|
|
6
7
|
|
|
7
8
|
trait :development do
|
|
8
9
|
pushed false
|
|
9
10
|
staged false
|
|
10
11
|
branch nil
|
|
12
|
+
travis false
|
|
11
13
|
end
|
|
12
14
|
|
|
13
15
|
trait :staging do
|
|
14
16
|
pushed true
|
|
15
17
|
staged false
|
|
16
18
|
branch 'master'
|
|
19
|
+
travis true
|
|
17
20
|
end
|
|
18
21
|
|
|
19
22
|
trait :production do
|
|
20
23
|
pushed true
|
|
21
24
|
staged true
|
|
22
25
|
branch 'master'
|
|
26
|
+
travis true
|
|
23
27
|
end
|
|
24
28
|
end
|
|
25
29
|
|
|
@@ -36,6 +40,8 @@ FactoryGirl.define do
|
|
|
36
40
|
end
|
|
37
41
|
|
|
38
42
|
factory :deployment_config, :class => Heroploy::Config::DeploymentConfig do
|
|
43
|
+
travis_repo "my-travis-user/my-travis-repo"
|
|
44
|
+
|
|
39
45
|
environments {
|
|
40
46
|
[
|
|
41
47
|
build(:environment, :development),
|
|
@@ -44,4 +50,20 @@ FactoryGirl.define do
|
|
|
44
50
|
]
|
|
45
51
|
}
|
|
46
52
|
end
|
|
53
|
+
|
|
54
|
+
factory :travis_build, :class => Travis::Client::Build do
|
|
55
|
+
[:passed, :failed].each do |t|
|
|
56
|
+
trait t do
|
|
57
|
+
after(:build) do |build|
|
|
58
|
+
build.state = t.to_s
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
initialize_with { Travis::Client::Build.new(Travis::Client::Session.new, 123) }
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
factory :travis_repo, :class => Travis::Client::Repository do
|
|
67
|
+
initialize_with { Travis::Client::Repository.new(Travis::Client::Session.new, 123) }
|
|
68
|
+
end
|
|
47
69
|
end
|
|
@@ -136,4 +136,31 @@ describe Heroploy::Commands::Checks do
|
|
|
136
136
|
end
|
|
137
137
|
end
|
|
138
138
|
end
|
|
139
|
+
|
|
140
|
+
describe "#check_travis" do
|
|
141
|
+
let(:travis_repo_name) { 'travis/repo' }
|
|
142
|
+
let(:travis_repo) { build(:travis_repo) }
|
|
143
|
+
|
|
144
|
+
before { Travis::Repository.stub(:find).and_return(travis_repo) }
|
|
145
|
+
|
|
146
|
+
context "if the build is failing for the given branch" do
|
|
147
|
+
let(:failed_build) { build(:travis_build, :failed) }
|
|
148
|
+
before { expect(travis_repo).to receive(:branch).and_return(failed_build) }
|
|
149
|
+
|
|
150
|
+
it "raises an error" do
|
|
151
|
+
expect{
|
|
152
|
+
commands.check_travis('my-branch', 'travis/repo')
|
|
153
|
+
}.to raise_error("Failing Travis build for branch my-branch")
|
|
154
|
+
end
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
context "if the build is passing for the given branch" do
|
|
158
|
+
let(:passed_build) { build(:travis_build, :passed) }
|
|
159
|
+
before { expect(travis_repo).to receive(:branch).and_return(passed_build) }
|
|
160
|
+
|
|
161
|
+
it "executes successfully" do
|
|
162
|
+
commands.check_travis('my-branch', 'travis/repo')
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
end
|
|
139
166
|
end
|
|
@@ -5,6 +5,7 @@ describe Heroploy::Config::DeploymentConfig do
|
|
|
5
5
|
|
|
6
6
|
let(:attrs) do
|
|
7
7
|
{
|
|
8
|
+
'travis_repo' => 'travis/my-repo',
|
|
8
9
|
'environments' => {
|
|
9
10
|
'staging' => {},
|
|
10
11
|
'production' => {
|
|
@@ -30,6 +31,10 @@ describe Heroploy::Config::DeploymentConfig do
|
|
|
30
31
|
its('shared_env.required') { should eq(['my-var']) }
|
|
31
32
|
its('shared_env.variables') { should eq({'my-var' => 'some-value'}) }
|
|
32
33
|
end
|
|
34
|
+
|
|
35
|
+
context "it initializes the travis repo" do
|
|
36
|
+
its(:travis_repo) { should eq('travis/my-repo') }
|
|
37
|
+
end
|
|
33
38
|
end
|
|
34
39
|
|
|
35
40
|
describe "#[]" do
|
|
@@ -6,19 +6,21 @@ describe Heroploy::Config::EnvironmentChecks do
|
|
|
6
6
|
let(:pushed) { true }
|
|
7
7
|
let(:branch_name) { 'my-branch' }
|
|
8
8
|
let(:staging_env_name) { 'my-staging-environment' }
|
|
9
|
-
let(:
|
|
9
|
+
let(:travis) { true }
|
|
10
|
+
let(:attrs) { {'pushed' => pushed, 'branch' => branch_name, 'staged' => staging_env_name, 'travis' => travis} }
|
|
10
11
|
|
|
11
12
|
subject(:environment_checks) { Heroploy::Config::EnvironmentChecks.new(attrs) }
|
|
12
13
|
|
|
13
14
|
its(:pushed) { should eq(pushed) }
|
|
14
15
|
its(:branch) { should eq(branch_name) }
|
|
15
16
|
its(:staged) { should eq(staging_env_name) }
|
|
17
|
+
its(:travis) { should eq(travis) }
|
|
16
18
|
end
|
|
17
19
|
|
|
18
20
|
context "if no staging environment name is given" do
|
|
19
21
|
subject(:environment_checks) { Heroploy::Config::EnvironmentChecks.new({'staged' => true}) }
|
|
20
22
|
|
|
21
|
-
it "
|
|
23
|
+
it "assumes the staging environment is called 'staging'" do
|
|
22
24
|
expect(environment_checks.staged).to eq('staging')
|
|
23
25
|
end
|
|
24
26
|
end
|
|
@@ -41,10 +41,24 @@ describe "check:all" do
|
|
|
41
41
|
its(:prerequisites) { should include('branch') }
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
context "if checks.
|
|
44
|
+
context "if checks.branch is not set" do
|
|
45
45
|
before { environment.checks.branch = nil }
|
|
46
46
|
include_context "rake"
|
|
47
47
|
|
|
48
48
|
its(:prerequisites) { should_not include('branch') }
|
|
49
49
|
end
|
|
50
|
+
|
|
51
|
+
context "if checks.travis is set" do
|
|
52
|
+
before { environment.checks.travis = true }
|
|
53
|
+
include_context "rake"
|
|
54
|
+
|
|
55
|
+
its(:prerequisites) { should include('travis') }
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
context "if checks.travis is not set" do
|
|
59
|
+
before { environment.checks.travis = nil }
|
|
60
|
+
include_context "rake"
|
|
61
|
+
|
|
62
|
+
its(:prerequisites) { should_not include('travis') }
|
|
63
|
+
end
|
|
50
64
|
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe "check:travis" do
|
|
4
|
+
let(:environment) { build(:environment, :production) }
|
|
5
|
+
include_context "rake"
|
|
6
|
+
|
|
7
|
+
it "invokes :check_travis" do
|
|
8
|
+
Heroploy::Tasks::CheckTaskLib.any_instance.stub(:current_branch).and_return("my-branch")
|
|
9
|
+
|
|
10
|
+
expect_any_instance_of(Heroploy::Tasks::CheckTaskLib).to receive(:check_travis)
|
|
11
|
+
.with("my-branch", "my-travis-user/my-travis-repo")
|
|
12
|
+
|
|
13
|
+
task.invoke
|
|
14
|
+
end
|
|
15
|
+
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.6
|
|
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-02-
|
|
11
|
+
date: 2014-02-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - ~>
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '1.3'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: travis
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ~>
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '1.6'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ~>
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '1.6'
|
|
27
41
|
- !ruby/object:Gem::Dependency
|
|
28
42
|
name: rake
|
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -157,9 +171,11 @@ files:
|
|
|
157
171
|
- spec/lib/heroploy/config/shared_env_spec.rb
|
|
158
172
|
- spec/lib/heroploy/tasks/check_all_spec.rb
|
|
159
173
|
- spec/lib/heroploy/tasks/check_branch_spec.rb
|
|
174
|
+
- spec/lib/heroploy/tasks/check_config_spec.rb
|
|
160
175
|
- spec/lib/heroploy/tasks/check_pushed_spec.rb
|
|
161
176
|
- spec/lib/heroploy/tasks/check_remote_spec.rb
|
|
162
177
|
- spec/lib/heroploy/tasks/check_staged_spec.rb
|
|
178
|
+
- spec/lib/heroploy/tasks/check_travis_spec.rb
|
|
163
179
|
- spec/spec_helper.rb
|
|
164
180
|
- spec/support/customer_matchers/environment_matcher.rb
|
|
165
181
|
- spec/support/helpers/deploy_config_helper.rb
|
|
@@ -204,9 +220,11 @@ test_files:
|
|
|
204
220
|
- spec/lib/heroploy/config/shared_env_spec.rb
|
|
205
221
|
- spec/lib/heroploy/tasks/check_all_spec.rb
|
|
206
222
|
- spec/lib/heroploy/tasks/check_branch_spec.rb
|
|
223
|
+
- spec/lib/heroploy/tasks/check_config_spec.rb
|
|
207
224
|
- spec/lib/heroploy/tasks/check_pushed_spec.rb
|
|
208
225
|
- spec/lib/heroploy/tasks/check_remote_spec.rb
|
|
209
226
|
- spec/lib/heroploy/tasks/check_staged_spec.rb
|
|
227
|
+
- spec/lib/heroploy/tasks/check_travis_spec.rb
|
|
210
228
|
- spec/spec_helper.rb
|
|
211
229
|
- spec/support/customer_matchers/environment_matcher.rb
|
|
212
230
|
- spec/support/helpers/deploy_config_helper.rb
|