travis-deploy 0.1.0 → 0.2.0
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.
- data/.travis.yml +0 -1
- data/lib/travis/deploy.rb +4 -1
- data/lib/travis/deploy/config.rb +15 -9
- data/lib/travis/deploy/config/builder.rb +33 -0
- data/lib/travis/keychain.rb +23 -0
- data/spec/travis/deploy/config/builder_spec.rb +41 -0
- data/spec/travis/deploy/config_spec.rb +2 -2
- data/travis-deploy.gemspec +1 -1
- metadata +6 -4
data/.travis.yml
CHANGED
data/lib/travis/deploy.rb
CHANGED
@@ -17,9 +17,12 @@ module Travis
|
|
17
17
|
method_option :env, :aliases => '-e', :type => :string
|
18
18
|
method_option :source, :aliases => '-s', :type => :string
|
19
19
|
method_option :backup, :aliases => '-b', :type => :boolean, :default => false
|
20
|
+
method_option :pretend, :type => :boolean, :default => false
|
21
|
+
method_option :app, :type => :string
|
20
22
|
|
21
23
|
def config(remote)
|
22
|
-
Config.new(shell, remote, options)
|
24
|
+
config = Config.new(shell, remote, options)
|
25
|
+
options[:pretend] ? config.pretend : config.invoke
|
23
26
|
end
|
24
27
|
|
25
28
|
desc 'deploy', 'Deploy to the given remote'
|
data/lib/travis/deploy/config.rb
CHANGED
@@ -4,6 +4,7 @@ require 'yaml'
|
|
4
4
|
module Travis
|
5
5
|
class Deploy
|
6
6
|
class Config
|
7
|
+
autoload :Builder, 'travis/deploy/config/builder'
|
7
8
|
include Helper
|
8
9
|
|
9
10
|
attr_reader :shell, :remote, :env, :options
|
@@ -20,18 +21,23 @@ module Travis
|
|
20
21
|
push
|
21
22
|
end
|
22
23
|
|
24
|
+
def pretend
|
25
|
+
say 'Config to upload:'
|
26
|
+
say YAML.dump(config)
|
27
|
+
end
|
28
|
+
|
23
29
|
protected
|
24
30
|
|
25
31
|
def app
|
26
|
-
@app ||=
|
27
|
-
app = File.basename(Dir.pwd).gsub('travis-', '')
|
28
|
-
app = 'web' if app == 'ci'
|
29
|
-
app
|
30
|
-
end
|
32
|
+
@app ||= options[:app] || File.basename(Dir.pwd).gsub('travis-', '')
|
31
33
|
end
|
32
34
|
|
33
35
|
def config
|
34
|
-
@config ||= source
|
36
|
+
@config ||= source ? YAML.load(source) : Builder.new(keychain, env).build
|
37
|
+
end
|
38
|
+
|
39
|
+
def yaml_config
|
40
|
+
@yaml_config ||= source || keychain.source
|
35
41
|
end
|
36
42
|
|
37
43
|
def source
|
@@ -44,13 +50,13 @@ module Travis
|
|
44
50
|
|
45
51
|
def store
|
46
52
|
backup if backup?
|
47
|
-
File.open(filename, 'w+') { |f| f.write(
|
53
|
+
File.open(filename, 'w+') { |f| f.write(yaml_config) }
|
48
54
|
end
|
49
55
|
|
50
56
|
def push
|
51
57
|
say 'Configuring the app ...'
|
52
|
-
|
53
|
-
run "heroku config:add travis_config=#{
|
58
|
+
yaml = Shellwords.escape(YAML.dump(config))
|
59
|
+
run "heroku config:add travis_config=#{yaml} -r #{remote}", :echo => "heroku config:add travis_config=... -r #{remote}"
|
54
60
|
end
|
55
61
|
|
56
62
|
def backup
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class Travis::Deploy::Config
|
2
|
+
class Builder
|
3
|
+
attr_reader :config, :env, :keychain
|
4
|
+
|
5
|
+
def initialize(keychain, env)
|
6
|
+
@keychain = keychain
|
7
|
+
@config = YAML.load(keychain.source)
|
8
|
+
@env = env
|
9
|
+
end
|
10
|
+
|
11
|
+
def build
|
12
|
+
includes = []
|
13
|
+
|
14
|
+
includes << config.delete('includes') if config['includes']
|
15
|
+
includes << env_config.delete('includes') if env_config['includes']
|
16
|
+
|
17
|
+
includes.flatten!
|
18
|
+
|
19
|
+
result = env_config
|
20
|
+
includes.each do |name|
|
21
|
+
include_config = keychain.includes(name)
|
22
|
+
result.merge! include_config['all'] || {}
|
23
|
+
result.merge! include_config[env] || {}
|
24
|
+
end
|
25
|
+
|
26
|
+
result
|
27
|
+
end
|
28
|
+
|
29
|
+
def env_config
|
30
|
+
config.fetch env, {}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/travis/keychain.rb
CHANGED
@@ -15,8 +15,31 @@ module Travis
|
|
15
15
|
read
|
16
16
|
end
|
17
17
|
|
18
|
+
def source
|
19
|
+
@source ||= fetch
|
20
|
+
end
|
21
|
+
|
22
|
+
def includes(name)
|
23
|
+
include_files[name]
|
24
|
+
end
|
25
|
+
|
18
26
|
protected
|
19
27
|
|
28
|
+
def include_files
|
29
|
+
@include_files ||= begin
|
30
|
+
contents = {}
|
31
|
+
|
32
|
+
chdir do
|
33
|
+
Dir['config/includes/*.yml'].each do |path|
|
34
|
+
name = File.basename(path).sub(/\.yml$/, '')
|
35
|
+
contents[name] = YAML.load(File.read(path))
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
contents
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
20
43
|
def pull
|
21
44
|
error 'There are unstaged changes in your travis-keychain working directory.' unless clean?
|
22
45
|
say 'Fetching the keychain ...'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class Travis::Deploy::Config
|
4
|
+
describe Builder do
|
5
|
+
let(:env) { 'staging' }
|
6
|
+
let(:config) { "staging:\n foo: bar" }
|
7
|
+
let(:keychain) { stub(:keychain, source: @config || config) }
|
8
|
+
let(:builder) { Builder.new(keychain, env) }
|
9
|
+
|
10
|
+
it 'loads config for given env' do
|
11
|
+
builder.build.should == { 'foo' => 'bar' }
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'includes files specified at a top level' do
|
15
|
+
@config = YAML.dump 'includes' => ['pusher'], 'staging' => { 'foo' => 'bar' }
|
16
|
+
pusher_config = {
|
17
|
+
'all' => { 'bar' => 'baz', 'baz' => 'should be overwritten' },
|
18
|
+
'staging' => { 'baz' => 'qux' },
|
19
|
+
'development' => { 'no' => 'no' }
|
20
|
+
}
|
21
|
+
keychain.should_receive(:includes).with('pusher').and_return(pusher_config)
|
22
|
+
|
23
|
+
builder.build.should == { 'foo' => 'bar', 'bar' => 'baz', 'baz' => 'qux' }
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'includes files specified for an env' do
|
27
|
+
@config = YAML.dump 'staging' => { 'foo' => 'bar', 'includes' => ['pusher'] },
|
28
|
+
'production' => { 'includes' => ['encryption'] }
|
29
|
+
|
30
|
+
pusher_config = {
|
31
|
+
'all' => { 'bar' => 'baz', 'baz' => 'should be overwritten' },
|
32
|
+
'staging' => { 'baz' => 'qux' },
|
33
|
+
'development' => { 'no' => 'no' }
|
34
|
+
}
|
35
|
+
keychain.should_receive(:includes).with('pusher').and_return(pusher_config)
|
36
|
+
|
37
|
+
builder.build.should == { 'foo' => 'bar', 'bar' => 'baz', 'baz' => 'qux' }
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -7,14 +7,14 @@ describe Travis::Deploy::Config do
|
|
7
7
|
before :each do
|
8
8
|
Travis::Deploy::Config.any_instance.stub(:clean? => true)
|
9
9
|
Travis::Deploy::Config.any_instance.stub(:run)
|
10
|
-
Travis::Keychain.any_instance.stub(:
|
10
|
+
Travis::Keychain.any_instance.stub(:source => config)
|
11
11
|
File.stub(:open)
|
12
12
|
end
|
13
13
|
|
14
14
|
describe 'sync' do
|
15
15
|
it 'fetches the config from the keychain' do
|
16
16
|
command = Travis::Deploy::Config.new(shell, 'staging', {})
|
17
|
-
command.send(:keychain).should_receive(:
|
17
|
+
command.send(:keychain).should_receive(:source).and_return(config)
|
18
18
|
command.invoke
|
19
19
|
end
|
20
20
|
|
data/travis-deploy.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: travis-deploy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-01
|
12
|
+
date: 2013-02-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: thor
|
@@ -92,12 +92,14 @@ files:
|
|
92
92
|
- bin/travis-deploy
|
93
93
|
- lib/travis/deploy.rb
|
94
94
|
- lib/travis/deploy/config.rb
|
95
|
+
- lib/travis/deploy/config/builder.rb
|
95
96
|
- lib/travis/deploy/deploy.rb
|
96
97
|
- lib/travis/deploy/helper.rb
|
97
98
|
- lib/travis/deploy/secure_key.rb
|
98
99
|
- lib/travis/keychain.rb
|
99
100
|
- lib/travis_cli.rb
|
100
101
|
- spec/spec_helper.rb
|
102
|
+
- spec/travis/deploy/config/builder_spec.rb
|
101
103
|
- spec/travis/deploy/config_spec.rb
|
102
104
|
- spec/travis/deploy/deploy_spec.rb
|
103
105
|
- spec/travis/deploy/secure_key_spec.rb
|
@@ -123,14 +125,14 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
125
|
version: '0'
|
124
126
|
requirements: []
|
125
127
|
rubyforge_project:
|
126
|
-
rubygems_version: 1.8.
|
128
|
+
rubygems_version: 1.8.24
|
127
129
|
signing_key:
|
128
130
|
specification_version: 3
|
129
131
|
summary: A command-line interface to Travis CI
|
130
132
|
test_files:
|
131
133
|
- spec/spec_helper.rb
|
134
|
+
- spec/travis/deploy/config/builder_spec.rb
|
132
135
|
- spec/travis/deploy/config_spec.rb
|
133
136
|
- spec/travis/deploy/deploy_spec.rb
|
134
137
|
- spec/travis/deploy/secure_key_spec.rb
|
135
138
|
- spec/travis/keychain_spec.rb
|
136
|
-
has_rdoc:
|