travis-config 1.0.13 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/Gemfile.lock +42 -0
- data/lib/travis/config.rb +4 -2
- data/lib/travis/config/docker.rb +1 -1
- data/lib/travis/config/env.rb +89 -2
- data/lib/travis/config/files.rb +26 -10
- data/lib/travis/config/heroku.rb +9 -4
- data/lib/travis/config/heroku/database.rb +5 -0
- data/lib/travis/config/keychain.rb +9 -0
- data/lib/travis/config/serialize/env.rb +45 -0
- data/lib/travis/config/version.rb +1 -1
- data/spec/spec_helper.rb +11 -4
- data/spec/support/env.rb +24 -0
- data/spec/support/fakefs.rb +27 -0
- data/spec/travis/config/docker_spec.rb +3 -5
- data/spec/travis/config/env_spec.rb +90 -0
- data/spec/travis/config/heroku/amqp_spec.rb +1 -2
- data/spec/travis/config/heroku/database_spec.rb +194 -171
- data/spec/travis/config/heroku/memcached_spec.rb +1 -2
- data/spec/travis/config/heroku/redis_spec.rb +1 -2
- data/spec/travis/config/heroku/sentry_spec.rb +2 -5
- data/spec/travis/config/serialize/env_spec.rb +17 -0
- data/spec/travis/config_spec.rb +25 -43
- metadata +20 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aea576de8c27f7e41b5dfd80e34006f1f19295aa
|
4
|
+
data.tar.gz: 2ac9a83e70854a1afe14777f339b1942715b75d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5545ec1bd08707b7beb3a9417befe88594aa3b982b35ba0992888a0b63540980da98c01e097ef3f1d09c296bc74fbeae0a849fcaf833ff952513543f810cc860
|
7
|
+
data.tar.gz: f0429bb8d0efc0c9be9977c910d853b2c0a0e48014559fb1104894a1813f057721e61e4104ed00706c56cd5bc5ce9381e006dc75b62d91f0ce7f4bfc297e92ed
|
data/Gemfile
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
travis-config (1.0.13)
|
5
|
+
hashr (~> 2.0.0)
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
diff-lcs (1.3)
|
11
|
+
fakefs (0.10.2)
|
12
|
+
hashr (2.0.0)
|
13
|
+
metaclass (0.0.4)
|
14
|
+
mocha (1.1.0)
|
15
|
+
metaclass (~> 0.0.1)
|
16
|
+
rspec (3.3.0)
|
17
|
+
rspec-core (~> 3.3.0)
|
18
|
+
rspec-expectations (~> 3.3.0)
|
19
|
+
rspec-mocks (~> 3.3.0)
|
20
|
+
rspec-core (3.3.2)
|
21
|
+
rspec-support (~> 3.3.0)
|
22
|
+
rspec-expectations (3.3.1)
|
23
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
24
|
+
rspec-support (~> 3.3.0)
|
25
|
+
rspec-mocks (3.3.2)
|
26
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
27
|
+
rspec-support (~> 3.3.0)
|
28
|
+
rspec-support (3.3.0)
|
29
|
+
|
30
|
+
PLATFORMS
|
31
|
+
java
|
32
|
+
ruby
|
33
|
+
|
34
|
+
DEPENDENCIES
|
35
|
+
fakefs
|
36
|
+
hashr (~> 2.0.0)
|
37
|
+
mocha (~> 1.1)
|
38
|
+
rspec (~> 3.0)
|
39
|
+
travis-config!
|
40
|
+
|
41
|
+
BUNDLED WITH
|
42
|
+
1.14.5
|
data/lib/travis/config.rb
CHANGED
@@ -4,8 +4,10 @@ module Travis
|
|
4
4
|
class Config < Hashr
|
5
5
|
require 'travis/config/docker'
|
6
6
|
require 'travis/config/env'
|
7
|
+
require 'travis/config/keychain'
|
7
8
|
require 'travis/config/files'
|
8
9
|
require 'travis/config/heroku'
|
10
|
+
require 'travis/config/serialize/env'
|
9
11
|
|
10
12
|
include Hashr::Delegate::Conditional
|
11
13
|
|
@@ -30,8 +32,8 @@ module Travis
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def loaders(*names)
|
33
|
-
names = [:files, :
|
34
|
-
names.map { |name| const_get(camelize(name)).new }
|
35
|
+
names = [:files, :keychain, :heroku, :docker, :env] if names.empty?
|
36
|
+
names.map { |name| const_get(camelize(name)).new(defaults) }
|
35
37
|
end
|
36
38
|
end
|
37
39
|
|
data/lib/travis/config/docker.rb
CHANGED
data/lib/travis/config/env.rb
CHANGED
@@ -1,8 +1,95 @@
|
|
1
1
|
module Travis
|
2
2
|
class Config
|
3
|
-
class Env
|
3
|
+
class Env < Struct.new(:defaults)
|
4
|
+
class UnexpectedString < ArgumentError
|
5
|
+
MSG = 'Expected %s to be an array of hashes, but it is a string: %s'
|
6
|
+
|
7
|
+
def initialize(*args)
|
8
|
+
super(MSG % args)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class Vars < Struct.new(:defaults, :prefix)
|
13
|
+
TRUE = /^(true|yes|on)$/
|
14
|
+
FALSE = /^(false|no|off)$/
|
15
|
+
|
16
|
+
def to_h
|
17
|
+
defaults.deep_merge(hash(ENV, prefix.dup, defaults))
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def hash(env, prefix, defaults)
|
23
|
+
defaults.inject({}) do |config, (key, default)|
|
24
|
+
config.merge key => obj(env, prefix + [key], default)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def obj(env, keys, default)
|
29
|
+
case default
|
30
|
+
when Hash
|
31
|
+
hash(env, keys, default)
|
32
|
+
when Array
|
33
|
+
vars = array(env, keys, default)
|
34
|
+
vars.any? ? vars : var(env, keys, default)
|
35
|
+
else
|
36
|
+
var(env, keys, default)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def array(env, keys, defaults)
|
41
|
+
vars(env, keys, defaults).map.with_index do |var, ix|
|
42
|
+
obj(var, [], defaults[ix] || defaults[0] || {})
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def var(env, key, default)
|
47
|
+
key = key.map(&:upcase).join('_')
|
48
|
+
value = env.fetch(key, default)
|
49
|
+
raise UnexpectedString.new(key, value) if value.is_a?(String) && hashes?(default)
|
50
|
+
default.is_a?(Array) ? split(value) : cast(value)
|
51
|
+
end
|
52
|
+
|
53
|
+
def vars(env, keys, default)
|
54
|
+
pattern = /^#{keys.map(&:upcase).join('_')}_([\d]+)_/
|
55
|
+
vars = env.select { |key, _| key =~ pattern }
|
56
|
+
vars = vars.map { |key, value| [key.sub(pattern, ''), value, $1] }
|
57
|
+
vars.group_by(&:pop).values.map(&:to_h)
|
58
|
+
end
|
59
|
+
|
60
|
+
def cast(value)
|
61
|
+
case value
|
62
|
+
when /^[\d]+\.[\d]+$/
|
63
|
+
value.to_f
|
64
|
+
when /^[\d]+$/
|
65
|
+
value.to_i
|
66
|
+
when TRUE
|
67
|
+
true
|
68
|
+
when FALSE
|
69
|
+
false
|
70
|
+
when ''
|
71
|
+
nil
|
72
|
+
else
|
73
|
+
value
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def split(value)
|
78
|
+
values = value.respond_to?(:split) ? value.split(',') : Array(value)
|
79
|
+
values.map { |value| cast(value) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def hashes?(obj)
|
83
|
+
obj.is_a?(Array) && obj.first.is_a?(Hash)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def self.prefix(prefix = nil)
|
88
|
+
prefix ? @prefix = prefix : @prefix
|
89
|
+
end
|
90
|
+
|
4
91
|
def load
|
5
|
-
|
92
|
+
Vars.new(defaults, [self.class.prefix.to_s.upcase]).to_h
|
6
93
|
end
|
7
94
|
end
|
8
95
|
end
|
data/lib/travis/config/files.rb
CHANGED
@@ -3,18 +3,22 @@ require 'travis/config/helpers'
|
|
3
3
|
|
4
4
|
module Travis
|
5
5
|
class Config
|
6
|
-
class Files
|
6
|
+
class Files < Struct.new(:defaults)
|
7
7
|
include Helpers
|
8
8
|
|
9
|
+
MSGS = {
|
10
|
+
empty: <<-msg.split("\n").map(&:strip).join("\n")
|
11
|
+
Warning: config in %{filename} has no data for current env %{env}.
|
12
|
+
If you are expecting config to be loaded from this file, please make sure
|
13
|
+
your config is indented under a key of the environment (%{env}).
|
14
|
+
msg
|
15
|
+
}
|
16
|
+
|
9
17
|
def load
|
10
|
-
filenames.inject({}) do |
|
11
|
-
|
12
|
-
if
|
13
|
-
|
14
|
-
puts "If you are expecting config to be loaded from this file, please make sure"
|
15
|
-
puts "your config is indented under a key of the environment (#{Config.env})"
|
16
|
-
end
|
17
|
-
deep_merge(config, file_config[Config.env] || {})
|
18
|
+
filenames.inject({}) do |result, filename|
|
19
|
+
config = load_file(filename)
|
20
|
+
warn_empty(filename) if warn_empty? && config[env].nil?
|
21
|
+
deep_merge(result, config[env] || {})
|
18
22
|
end
|
19
23
|
end
|
20
24
|
|
@@ -27,8 +31,20 @@ module Travis
|
|
27
31
|
{}
|
28
32
|
end
|
29
33
|
|
34
|
+
def warn_empty(filename)
|
35
|
+
puts MSGS[:empty] % { filename: filename, env: env }
|
36
|
+
end
|
37
|
+
|
38
|
+
def warn_empty?
|
39
|
+
!%w(production test).include?(Config.env)
|
40
|
+
end
|
41
|
+
|
30
42
|
def filenames
|
31
|
-
@filenames ||= Dir['config/
|
43
|
+
@filenames ||= Dir['config/travis.yml'] + Dir['config/travis/*.yml'].sort
|
44
|
+
end
|
45
|
+
|
46
|
+
def env
|
47
|
+
Config.env
|
32
48
|
end
|
33
49
|
end
|
34
50
|
end
|
data/lib/travis/config/heroku.rb
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
require 'travis/config/helpers'
|
2
|
-
require 'travis/config/heroku/database'
|
3
|
-
require 'travis/config/heroku/memcached'
|
4
|
-
|
5
2
|
module Travis
|
6
3
|
class Config
|
7
|
-
class Heroku
|
4
|
+
class Heroku < Struct.new(:defaults)
|
5
|
+
require 'travis/config/heroku/database'
|
6
|
+
require 'travis/config/heroku/memcached'
|
7
|
+
|
8
8
|
include Helpers
|
9
9
|
|
10
10
|
def load
|
11
11
|
compact(
|
12
12
|
database: database,
|
13
13
|
logs_database: logs_database,
|
14
|
+
logs_readonly_database: logs_readonly_database,
|
14
15
|
amqp: amqp,
|
15
16
|
redis: redis,
|
16
17
|
memcached: memcached,
|
@@ -28,6 +29,10 @@ module Travis
|
|
28
29
|
Database.new(prefix: 'logs').config
|
29
30
|
end
|
30
31
|
|
32
|
+
def logs_readonly_database
|
33
|
+
Database.new(prefix: 'logs_readonly').config
|
34
|
+
end
|
35
|
+
|
31
36
|
def amqp
|
32
37
|
compact(Url.parse(amqp_url).to_h)
|
33
38
|
end
|
@@ -13,6 +13,7 @@ module Travis
|
|
13
13
|
config = compact(Url.parse(url).to_h)
|
14
14
|
config = deep_merge(DEFAULTS, config) unless config.empty?
|
15
15
|
config[:pool] = pool.to_i if pool
|
16
|
+
config[:prepared_statements] = prepared_statements != 'false' if prepared_statements
|
16
17
|
config
|
17
18
|
end
|
18
19
|
|
@@ -25,6 +26,10 @@ module Travis
|
|
25
26
|
def pool
|
26
27
|
env('DATABASE_POOL_SIZE', 'DB_POOL').compact.first
|
27
28
|
end
|
29
|
+
|
30
|
+
def prepared_statements
|
31
|
+
ENV['PGBOUNCER_PREPARED_STATEMENTS']
|
32
|
+
end
|
28
33
|
|
29
34
|
def env(*keys)
|
30
35
|
ENV.values_at(*keys.map { |key| prefix(key) }.flatten)
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Travis
|
2
|
+
class Config
|
3
|
+
module Serialize
|
4
|
+
class Env < Struct.new(:config, :opts)
|
5
|
+
attr_reader :config, :opts
|
6
|
+
|
7
|
+
def initialize(config, opts = {})
|
8
|
+
@config = config
|
9
|
+
@opts = opts
|
10
|
+
end
|
11
|
+
|
12
|
+
def apply
|
13
|
+
vars.to_a.map { |pair| pair.join('=') }
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def vars
|
19
|
+
collect(Array(prefix), config).map do |keys, value|
|
20
|
+
[keys.map(&:to_s).map(&:upcase).join('_'), value.to_s]
|
21
|
+
end.to_h
|
22
|
+
end
|
23
|
+
|
24
|
+
def collect(keys, config)
|
25
|
+
compact(config).inject({}) do |result, (key, value)|
|
26
|
+
case value
|
27
|
+
when Hash
|
28
|
+
result.merge collect(keys + [key], value)
|
29
|
+
else
|
30
|
+
result.merge [[keys + [key], value]].to_h
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def compact(hash)
|
36
|
+
hash.reject { |_, value| value.nil? }.to_h
|
37
|
+
end
|
38
|
+
|
39
|
+
def prefix
|
40
|
+
opts[:prefix]
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -3,15 +3,22 @@ ENV['DYNO'] = 'travis-config/specs'
|
|
3
3
|
|
4
4
|
require 'mocha'
|
5
5
|
require 'travis/config'
|
6
|
+
require 'support/env'
|
7
|
+
require 'support/fakefs'
|
6
8
|
|
7
9
|
module Travis::Test
|
8
10
|
class Config < Travis::Config
|
9
|
-
define amqp:
|
10
|
-
|
11
|
+
define amqp: { username: 'guest', password: 'guest', host: 'localhost', prefetch: 1 },
|
12
|
+
database: { adapter: 'postgresql', database: 'test', encoding: 'unicode' },
|
13
|
+
redis: { url: 'redis://localhost:6379' }
|
14
|
+
|
15
|
+
Env.prefix :travis
|
11
16
|
end
|
12
17
|
end
|
13
18
|
|
14
|
-
RSpec.configure do |
|
15
|
-
|
19
|
+
RSpec.configure do |c|
|
20
|
+
c.mock_with :mocha
|
21
|
+
c.include Support::Env
|
22
|
+
c.include Support::FakeFs
|
16
23
|
end
|
17
24
|
|
data/spec/support/env.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Support
|
2
|
+
module Env
|
3
|
+
def self.included(base)
|
4
|
+
base.send(:extend, ClassMethods)
|
5
|
+
end
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def env(vars)
|
9
|
+
before { define_env(vars) }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def define_env(vars)
|
14
|
+
vars.each do |key, value|
|
15
|
+
ENV[key.to_s] = value.is_a?(Proc) ? instance_exec(&value).to_s : value.to_s
|
16
|
+
end
|
17
|
+
self.class.after { undefine_env(vars) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def undefine_env(vars)
|
21
|
+
vars.each { |key, _| ENV.delete(key.to_s) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'pp' # https://github.com/fakefs/fakefs#fakefs-vs-pp-----typeerror-superclass-mismatch-for-class-file
|
2
|
+
require 'fakefs/safe'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
module Support
|
6
|
+
module FakeFs
|
7
|
+
def self.included(base)
|
8
|
+
base.send(:extend, ClassMethods)
|
9
|
+
base.before { FakeFS.activate! }
|
10
|
+
base.after { FakeFS.deactivate! }
|
11
|
+
base.after { FakeFS::FileSystem.clear }
|
12
|
+
end
|
13
|
+
|
14
|
+
module ClassMethods
|
15
|
+
def dir(dir)
|
16
|
+
before { FileUtils.mkdir_p(dir) }
|
17
|
+
after { FileUtils.rm_rf(dir) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def file(path, content)
|
21
|
+
before { FileUtils.mkdir_p(File.dirname(path)) }
|
22
|
+
before { File.write(path, content) }
|
23
|
+
after { FileUtils.rm_rf(File.dirname(path)) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,10 +1,8 @@
|
|
1
1
|
describe Travis::Config::Docker do
|
2
2
|
let(:config) { Travis::Test::Config.load(:docker) }
|
3
|
-
let(:vars) { %w(POSTGRESQL_PORT RABBITMQ_PORT REDIS_PORT) }
|
4
|
-
after { vars.each { |key| ENV.delete(key) } }
|
5
3
|
|
6
4
|
describe 'loads POSTGRESQL_PORT to config.database' do
|
7
|
-
|
5
|
+
env POSTGRESQL_PORT: 'tcp://172.17.0.11:5432'
|
8
6
|
|
9
7
|
it 'loads host and port from the env var' do
|
10
8
|
expect(config.database.values_at(:host, :port)).to eq(['172.17.0.11', '5432'])
|
@@ -16,7 +14,7 @@ describe Travis::Config::Docker do
|
|
16
14
|
end
|
17
15
|
|
18
16
|
describe 'loads RABBITMQ_PORT to config.amqp' do
|
19
|
-
|
17
|
+
env RABBITMQ_PORT: 'tcp://172.17.0.11:5672'
|
20
18
|
|
21
19
|
it 'loads host and port from the env var' do
|
22
20
|
expect(config.amqp.values_at(:host, :port)).to eq(['172.17.0.11', '5672'])
|
@@ -28,7 +26,7 @@ describe Travis::Config::Docker do
|
|
28
26
|
end
|
29
27
|
|
30
28
|
describe 'loads REDIS_PORT' do
|
31
|
-
|
29
|
+
env REDIS_PORT: 'tcp://172.17.0.7:6379'
|
32
30
|
|
33
31
|
it 'loads the port to redis.url' do
|
34
32
|
expect(config.redis.to_h).to eq({ url: 'tcp://172.17.0.7:6379' })
|
@@ -0,0 +1,90 @@
|
|
1
|
+
module Travis::Test::Env
|
2
|
+
class Config < Travis::Config
|
3
|
+
define database: { adapter: nil, variables: { statement_timeout: nil } },
|
4
|
+
hash: { under_scored: nil, nested: { foo: nil } },
|
5
|
+
integer: nil,
|
6
|
+
float: nil,
|
7
|
+
true: nil,
|
8
|
+
yes: nil,
|
9
|
+
on: nil,
|
10
|
+
false: nil,
|
11
|
+
no: nil,
|
12
|
+
off: nil,
|
13
|
+
nil: nil
|
14
|
+
|
15
|
+
|
16
|
+
Env.prefix :travis
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe Travis::Config::Env do
|
21
|
+
let(:config) { Travis::Test::Env::Config.load(:env) }
|
22
|
+
|
23
|
+
describe 'cast' do
|
24
|
+
env TRAVIS_HASH_UNDER_SCORED: 'under_scored',
|
25
|
+
TRAVIS_HASH_NESTED_FOO: 'foo',
|
26
|
+
TRAVIS_INTEGER: '10',
|
27
|
+
TRAVIS_FLOAT: '10.0',
|
28
|
+
TRAVIS_TRUE: 'true',
|
29
|
+
TRAVIS_YES: 'yes',
|
30
|
+
TRAVIS_ON: 'on',
|
31
|
+
TRAVIS_FALSE: 'false',
|
32
|
+
TRAVIS_NO: 'no',
|
33
|
+
TRAVIS_OFF: 'off',
|
34
|
+
TRAVIS_NIL: nil
|
35
|
+
|
36
|
+
it { expect(config.hash.under_scored).to eq 'under_scored' }
|
37
|
+
it { expect(config.hash.nested.foo).to eq 'foo' }
|
38
|
+
it { expect(config.integer).to eq 10 }
|
39
|
+
it { expect(config.float).to eq 10.0 }
|
40
|
+
it { expect(config.true).to be true }
|
41
|
+
it { expect(config.yes).to be true }
|
42
|
+
it { expect(config.on).to be true }
|
43
|
+
it { expect(config.false).to be false }
|
44
|
+
it { expect(config.no).to be false }
|
45
|
+
it { expect(config.off).to be false }
|
46
|
+
it { expect(config.nil).to be_nil }
|
47
|
+
end
|
48
|
+
|
49
|
+
describe 'database' do
|
50
|
+
env TRAVIS_DATABASE_ADAPTER: 'postgres',
|
51
|
+
TRAVIS_DATABASE_VARIABLES_STATEMENT_TIMEOUT: 10_000
|
52
|
+
|
53
|
+
it { expect(config.database.adapter).to eq 'postgres' }
|
54
|
+
it { expect(config.database.variables.statement_timeout).to eq 10_000 }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
module Travis::Test::Env::Arrays
|
59
|
+
class Config < Travis::Config
|
60
|
+
define hashes_one: [foo: 'foo'],
|
61
|
+
hashes_two: [foo: 1, bar: true],
|
62
|
+
strings: []
|
63
|
+
|
64
|
+
Env.prefix :travis
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe Travis::Config::Env, 'arrays' do
|
69
|
+
let(:config) { Travis::Test::Env::Arrays::Config.load(:env) }
|
70
|
+
|
71
|
+
describe 'cast' do
|
72
|
+
env TRAVIS_HASHES_ONE_0_FOO: 'bar',
|
73
|
+
TRAVIS_HASHES_ONE_1_FOO: 'baz',
|
74
|
+
TRAVIS_HASHES_TWO_0_FOO: 1,
|
75
|
+
TRAVIS_HASHES_TWO_0_BAR: 'true',
|
76
|
+
TRAVIS_HASHES_TWO_1_FOO: 1.1,
|
77
|
+
TRAVIS_HASHES_TWO_1_BAR: 'false',
|
78
|
+
TRAVIS_STRINGS: 'foo,bar'
|
79
|
+
|
80
|
+
it { expect(config.hashes_one).to eq [{ foo: 'bar' }, { foo: 'baz' }] }
|
81
|
+
it { expect(config.hashes_two).to eq [{ foo: 1, bar: true }, { foo: 1.1, bar: false }] }
|
82
|
+
it { expect(config.strings).to eq ['foo', 'bar'] }
|
83
|
+
end
|
84
|
+
|
85
|
+
describe 'unexpected string' do
|
86
|
+
env TRAVIS_HASHES_ONE: 'foo'
|
87
|
+
|
88
|
+
it { expect { config }.to raise_error(described_class::UnexpectedString) }
|
89
|
+
end
|
90
|
+
end
|
@@ -1,8 +1,7 @@
|
|
1
1
|
describe Travis::Config::Heroku, :Amqp do
|
2
2
|
let(:config) { Travis::Test::Config.load(:heroku) }
|
3
3
|
|
4
|
-
|
5
|
-
after { ENV.delete('RABBITMQ_URL') }
|
4
|
+
env RABBITMQ_URL: -> { url }
|
6
5
|
|
7
6
|
describe 'using amqp as a protocol' do
|
8
7
|
let(:url) { 'amqp://username:password@hostname:1234/vhost' }
|
@@ -1,199 +1,222 @@
|
|
1
1
|
describe Travis::Config::Heroku, :Database do
|
2
2
|
let(:config) { Travis::Test::Config.load(:heroku) }
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
3
|
+
env DYNO: 'app_name'
|
4
|
+
|
5
|
+
describe 'loads a TRAVIS_DATABASE_URL with a port' do
|
6
|
+
env TRAVIS_DATABASE_URL: 'postgres://username:password@hostname:1234/database'
|
7
|
+
|
8
|
+
it do
|
9
|
+
expect(config.database.to_h).to eq(
|
10
|
+
adapter: 'postgresql',
|
11
|
+
host: 'hostname',
|
12
|
+
port: 1234,
|
13
|
+
database: 'database',
|
14
|
+
username: 'username',
|
15
|
+
password: 'password',
|
16
|
+
encoding: 'unicode',
|
17
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
18
|
+
)
|
19
|
+
end
|
19
20
|
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
22
|
+
describe 'loads a DATABASE_URL with a port' do
|
23
|
+
env DATABASE_URL: 'postgres://username:password@hostname:1234/database'
|
24
|
+
|
25
|
+
it do
|
26
|
+
expect(config.database.to_h).to eq(
|
27
|
+
adapter: 'postgresql',
|
28
|
+
host: 'hostname',
|
29
|
+
port: 1234,
|
30
|
+
database: 'database',
|
31
|
+
username: 'username',
|
32
|
+
password: 'password',
|
33
|
+
encoding: 'unicode',
|
34
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
35
|
+
)
|
36
|
+
end
|
34
37
|
end
|
35
38
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
39
|
+
describe 'loads a DATABASE_URL without a port' do
|
40
|
+
env DATABASE_URL: 'postgres://username:password@hostname/database'
|
41
|
+
|
42
|
+
it do
|
43
|
+
expect(config.database.to_h).to eq(
|
44
|
+
adapter: 'postgresql',
|
45
|
+
host: 'hostname',
|
46
|
+
database: 'database',
|
47
|
+
username: 'username',
|
48
|
+
password: 'password',
|
49
|
+
encoding: 'unicode',
|
50
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
51
|
+
)
|
52
|
+
end
|
48
53
|
end
|
49
54
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
55
|
+
describe 'loads TRAVIS_DATABASE_POOL_SIZE' do
|
56
|
+
env TRAVIS_DATABASE_URL: 'postgres://username:password@hostname:1234/database'
|
57
|
+
env TRAVIS_DATABASE_POOL_SIZE: '25'
|
58
|
+
|
59
|
+
it do
|
60
|
+
expect(config.database.to_h).to eq(
|
61
|
+
adapter: 'postgresql',
|
62
|
+
host: 'hostname',
|
63
|
+
port: 1234,
|
64
|
+
database: 'database',
|
65
|
+
username: 'username',
|
66
|
+
password: 'password',
|
67
|
+
encoding: 'unicode',
|
68
|
+
pool: 25,
|
69
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
70
|
+
)
|
71
|
+
end
|
65
72
|
end
|
66
73
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
74
|
+
describe 'loads DATABASE_POOL_SIZE' do
|
75
|
+
env DATABASE_URL: 'postgres://username:password@hostname:1234/database'
|
76
|
+
env DATABASE_POOL_SIZE: '25'
|
77
|
+
|
78
|
+
it do
|
79
|
+
expect(config.database.to_h).to eq(
|
80
|
+
adapter: 'postgresql',
|
81
|
+
host: 'hostname',
|
82
|
+
port: 1234,
|
83
|
+
database: 'database',
|
84
|
+
username: 'username',
|
85
|
+
password: 'password',
|
86
|
+
encoding: 'unicode',
|
87
|
+
pool: 25,
|
88
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
89
|
+
)
|
90
|
+
end
|
82
91
|
end
|
83
92
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
93
|
+
describe 'loads DB_POOL' do
|
94
|
+
env DATABASE_URL: 'postgres://username:password@hostname:1234/database'
|
95
|
+
env DB_POOL: '25'
|
96
|
+
|
97
|
+
it do
|
98
|
+
expect(config.database.to_h).to eq(
|
99
|
+
adapter: 'postgresql',
|
100
|
+
host: 'hostname',
|
101
|
+
port: 1234,
|
102
|
+
database: 'database',
|
103
|
+
username: 'username',
|
104
|
+
password: 'password',
|
105
|
+
encoding: 'unicode',
|
106
|
+
pool: 25,
|
107
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
108
|
+
)
|
109
|
+
end
|
99
110
|
end
|
100
111
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
112
|
+
describe 'loads a TRAVIS_LOGS_DATABASE_URL with a port' do
|
113
|
+
env TRAVIS_LOGS_DATABASE_URL: 'postgres://username:password@hostname:1234/logs_database'
|
114
|
+
|
115
|
+
it do
|
116
|
+
expect(config.logs_database.to_h).to eq(
|
117
|
+
adapter: 'postgresql',
|
118
|
+
host: 'hostname',
|
119
|
+
port: 1234,
|
120
|
+
database: 'logs_database',
|
121
|
+
username: 'username',
|
122
|
+
password: 'password',
|
123
|
+
encoding: 'unicode',
|
124
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
125
|
+
)
|
126
|
+
end
|
114
127
|
end
|
115
128
|
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
+
describe 'loads a LOGS_DATABASE_URL with a port' do
|
130
|
+
env LOGS_DATABASE_URL: 'postgres://username:password@hostname:1234/logs_database'
|
131
|
+
|
132
|
+
it do
|
133
|
+
expect(config.logs_database.to_h).to eq(
|
134
|
+
adapter: 'postgresql',
|
135
|
+
host: 'hostname',
|
136
|
+
port: 1234,
|
137
|
+
database: 'logs_database',
|
138
|
+
username: 'username',
|
139
|
+
password: 'password',
|
140
|
+
encoding: 'unicode',
|
141
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
142
|
+
)
|
143
|
+
end
|
129
144
|
end
|
130
145
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
146
|
+
describe 'loads a LOGS_DATABASE_URL without a port' do
|
147
|
+
env LOGS_DATABASE_URL: 'postgres://username:password@hostname/logs_database'
|
148
|
+
|
149
|
+
it do
|
150
|
+
expect(config.logs_database.to_h).to eq(
|
151
|
+
adapter: 'postgresql',
|
152
|
+
host: 'hostname',
|
153
|
+
database: 'logs_database',
|
154
|
+
username: 'username',
|
155
|
+
password: 'password',
|
156
|
+
encoding: 'unicode',
|
157
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
158
|
+
)
|
159
|
+
end
|
143
160
|
end
|
144
161
|
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
162
|
+
describe 'loads LOGS_DB_POOL' do
|
163
|
+
env LOGS_DATABASE_URL: 'postgres://username:password@hostname:1234/logs_database'
|
164
|
+
env LOGS_DB_POOL: '1'
|
165
|
+
|
166
|
+
it do
|
167
|
+
expect(config.logs_database.to_h).to eq(
|
168
|
+
adapter: 'postgresql',
|
169
|
+
host: 'hostname',
|
170
|
+
port: 1234,
|
171
|
+
database: 'logs_database',
|
172
|
+
username: 'username',
|
173
|
+
password: 'password',
|
174
|
+
encoding: 'unicode',
|
175
|
+
pool: 1,
|
176
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
177
|
+
)
|
178
|
+
end
|
160
179
|
end
|
161
180
|
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
181
|
+
describe 'loads TRAVIS_LOGS_DATABASE_POOL_SIZE' do
|
182
|
+
env TRAVIS_LOGS_DATABASE_URL: 'postgres://username:password@hostname:1234/logs_database'
|
183
|
+
env TRAVIS_LOGS_DATABASE_POOL_SIZE: '25'
|
184
|
+
|
185
|
+
it do
|
186
|
+
expect(config.logs_database.to_h).to eq(
|
187
|
+
adapter: 'postgresql',
|
188
|
+
host: 'hostname',
|
189
|
+
port: 1234,
|
190
|
+
database: 'logs_database',
|
191
|
+
username: 'username',
|
192
|
+
password: 'password',
|
193
|
+
encoding: 'unicode',
|
194
|
+
pool: 25,
|
195
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
196
|
+
)
|
197
|
+
end
|
177
198
|
end
|
178
199
|
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
200
|
+
describe 'loads LOGS_DATABASE_POOL_SIZE' do
|
201
|
+
env LOGS_DATABASE_URL: 'postgres://username:password@hostname:1234/logs_database'
|
202
|
+
env LOGS_DATABASE_POOL_SIZE: '25'
|
203
|
+
|
204
|
+
it do
|
205
|
+
expect(config.logs_database.to_h).to eq(
|
206
|
+
adapter: 'postgresql',
|
207
|
+
host: 'hostname',
|
208
|
+
port: 1234,
|
209
|
+
database: 'logs_database',
|
210
|
+
username: 'username',
|
211
|
+
password: 'password',
|
212
|
+
encoding: 'unicode',
|
213
|
+
pool: 25,
|
214
|
+
variables: { application_name: 'travis-config/specs', statement_timeout: 10_000 }
|
215
|
+
)
|
216
|
+
end
|
194
217
|
end
|
195
218
|
|
196
|
-
|
197
|
-
expect(config.logs_database).to be_nil
|
219
|
+
describe 'sets logs_database to nil if no LOGS_DATABASE_URL is given' do
|
220
|
+
it { expect(config.logs_database).to be_nil }
|
198
221
|
end
|
199
222
|
end
|
@@ -5,8 +5,7 @@ describe Travis::Config::Heroku, :Memcached do
|
|
5
5
|
let(:password) { 'password' }
|
6
6
|
|
7
7
|
[:servers, :username, :password].each do |key|
|
8
|
-
|
9
|
-
after { ENV.delete("MEMCACHED_#{key.to_s.upcase}") }
|
8
|
+
env "MEMCACHED_#{key.to_s.upcase}" => -> { send(key) }
|
10
9
|
end
|
11
10
|
|
12
11
|
it 'loads a MEMCACHED_SERVERS' do
|
@@ -2,8 +2,7 @@ describe Travis::Config::Heroku, :Redis do
|
|
2
2
|
let(:config) { Travis::Test::Config.load(:heroku) }
|
3
3
|
let(:url) { 'redis://username:password@hostname:1234/database' }
|
4
4
|
|
5
|
-
|
6
|
-
after { ENV.delete('REDIS_URL') }
|
5
|
+
env REDIS_URL: -> { url }
|
7
6
|
|
8
7
|
it 'loads a REDIS_URL' do
|
9
8
|
expect(config.redis.to_h).to eq(url: url)
|
@@ -2,16 +2,13 @@ describe Travis::Config::Heroku, :Sentry do
|
|
2
2
|
let(:config) { Travis::Test::Config.load(:heroku) }
|
3
3
|
let(:dsn) { 'http://foo:bar@app.getsentry.com/1' }
|
4
4
|
|
5
|
-
before { ENV[key] = dsn }
|
6
|
-
after { ENV.delete('SENTRY_DSN') }
|
7
|
-
|
8
5
|
describe 'loads a SENTRY_DSN' do
|
9
|
-
|
6
|
+
env SENTRY_DSN: -> { dsn }
|
10
7
|
it { expect(config.sentry.to_h).to eq(dsn: dsn) }
|
11
8
|
end
|
12
9
|
|
13
10
|
describe 'loads a TRAVIS_SENTRY_DSN' do
|
14
|
-
|
11
|
+
env TRAVIS_SENTRY_DSN: -> { dsn }
|
15
12
|
it { expect(config.sentry.to_h).to eq(dsn: dsn) }
|
16
13
|
end
|
17
14
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
describe Travis::Config::Serialize::Env do
|
2
|
+
let(:config) do
|
3
|
+
{
|
4
|
+
foo: { bar: :baz },
|
5
|
+
true: true,
|
6
|
+
false: false,
|
7
|
+
nil: nil
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
subject { described_class.new(config, prefix: 'travis').apply }
|
12
|
+
|
13
|
+
it { should include 'TRAVIS_FOO_BAR=baz' }
|
14
|
+
it { should include 'TRAVIS_TRUE=true' }
|
15
|
+
it { should include 'TRAVIS_FALSE=false' }
|
16
|
+
it { should_not include 'TRAVIS_NIL=' }
|
17
|
+
end
|
data/spec/travis/config_spec.rb
CHANGED
@@ -1,72 +1,54 @@
|
|
1
1
|
describe Travis::Config do
|
2
|
-
let(:config) { Travis::Test::Config.load(:files, :
|
2
|
+
let(:config) { Travis::Test::Config.load(:files, :keychain, :heroku, :docker) }
|
3
3
|
|
4
4
|
describe 'Hashr behaviour' do
|
5
5
|
after :each do
|
6
6
|
ENV.delete('travis_config')
|
7
7
|
end
|
8
8
|
|
9
|
-
it
|
10
|
-
expect(config).to be_kind_of(Hashr)
|
11
|
-
end
|
9
|
+
it { expect(config).to be_kind_of(Hashr) }
|
12
10
|
|
13
|
-
|
14
|
-
ENV['travis_config'] = YAML.dump('redis' => { 'url' => 'redis://localhost:6379' })
|
15
|
-
expect(config.redis).to be_kind_of(Hashr)
|
11
|
+
describe 'returns Hashr instances on subkeys' do
|
12
|
+
before { ENV['travis_config'] = YAML.dump('redis' => { 'url' => 'redis://localhost:6379' }) }
|
13
|
+
it { expect(config.redis).to be_kind_of(Hashr) }
|
16
14
|
end
|
17
15
|
|
18
|
-
|
19
|
-
config.foo = { :bar => { :baz => 'baz' } }
|
20
|
-
expect(config.foo.bar).to be_kind_of(Hashr)
|
16
|
+
describe 'returns Hashr instances on subkeys that were set to Ruby Hashes' do
|
17
|
+
before { config.foo = { :bar => { :baz => 'baz' } } }
|
18
|
+
it { expect(config.foo.bar).to be_kind_of(Hashr) }
|
21
19
|
end
|
22
20
|
|
23
|
-
|
24
|
-
expect(config.amqp.username).to eq('guest')
|
21
|
+
describe 'can access nested keys' do
|
22
|
+
it { expect(config.amqp.username).to eq('guest') }
|
25
23
|
end
|
26
24
|
end
|
27
25
|
|
28
26
|
describe 'reads custom config files' do
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
it
|
37
|
-
expect(config.travis).to eq('travis')
|
38
|
-
end
|
39
|
-
|
40
|
-
it 'merges custom files' do
|
41
|
-
expect(config.foo).to eq('foo')
|
42
|
-
expect(config.bar).to eq('bar')
|
43
|
-
end
|
44
|
-
|
45
|
-
it 'overwrites previously set values with values loaded later' do
|
46
|
-
expect(config.shared).to eq('bar')
|
47
|
-
end
|
27
|
+
file 'config/travis.yml', YAML.dump('test' => { 'travis' => 'travis', 'shared' => 'travis' })
|
28
|
+
file 'config/travis/foo.yml', YAML.dump('test' => { 'foo' => 'foo' })
|
29
|
+
file 'config/travis/bar.yml', YAML.dump('test' => { 'bar' => 'bar', 'shared' => 'bar' })
|
30
|
+
|
31
|
+
it { expect(config.travis).to eq('travis') }
|
32
|
+
it { expect(config.foo).to eq('foo') }
|
33
|
+
it { expect(config.bar).to eq('bar') }
|
34
|
+
it { expect(config.shared).to eq('bar') }
|
48
35
|
end
|
49
36
|
|
50
|
-
|
51
|
-
config
|
52
|
-
expect(config.queues.first.values_at(:slug, :queue)).to eq(['rails/rails', 'rails'])
|
37
|
+
describe 'deep symbolizes arrays, too' do
|
38
|
+
let(:config) { Travis::Config.new('queues' => [{ 'slug' => 'rails/rails', 'queue' => 'rails' }]) }
|
39
|
+
it { expect(config.queues.first.values_at(:slug, :queue)).to eq(['rails/rails', 'rails']) }
|
53
40
|
end
|
54
41
|
|
55
42
|
describe 'logs_database config' do
|
56
|
-
|
57
|
-
after { ENV['DATABASE_URL'] = nil }
|
43
|
+
env DATABASE_URL: 'postgres://username:password@hostname:1234/database'
|
58
44
|
|
59
45
|
describe 'given logs_database is defined in a config file' do
|
60
|
-
|
61
|
-
|
62
|
-
YAML.stubs(:load_file).with('config/travis.yml').returns('test' => { 'logs_database' => { 'database' => 'config_file' } })
|
63
|
-
end
|
64
|
-
it { expect(config.logs_database.database).to eq 'config_file' }
|
46
|
+
file 'config/travis.yml', YAML.dump('test' => { 'logs_database' => { 'database' => 'from_file' } })
|
47
|
+
it { expect(config.logs_database.database).to eq 'from_file' }
|
65
48
|
end
|
66
49
|
|
67
50
|
describe 'given logs_database is defined in the keychain' do
|
68
|
-
|
69
|
-
after { ENV['travis_config'] = nil }
|
51
|
+
env travis_config: YAML.dump('logs_database' => { 'database' => 'keychain' })
|
70
52
|
it { expect(config.logs_database.database).to eq 'keychain' }
|
71
53
|
end
|
72
54
|
|
metadata
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: travis-config
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Travis CI
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-04-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: hashr
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ~>
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: 2.0.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - ~>
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 2.0.0
|
27
27
|
description: Travis CI config.
|
@@ -30,28 +30,35 @@ executables: []
|
|
30
30
|
extensions: []
|
31
31
|
extra_rdoc_files: []
|
32
32
|
files:
|
33
|
+
- Gemfile
|
34
|
+
- Gemfile.lock
|
35
|
+
- LICENSE
|
36
|
+
- README.md
|
37
|
+
- lib/travis/config.rb
|
33
38
|
- lib/travis/config/docker.rb
|
34
39
|
- lib/travis/config/env.rb
|
35
40
|
- lib/travis/config/files.rb
|
36
41
|
- lib/travis/config/helpers.rb
|
42
|
+
- lib/travis/config/heroku.rb
|
37
43
|
- lib/travis/config/heroku/database.rb
|
38
44
|
- lib/travis/config/heroku/memcached.rb
|
39
45
|
- lib/travis/config/heroku/url.rb
|
40
|
-
- lib/travis/config/
|
46
|
+
- lib/travis/config/keychain.rb
|
47
|
+
- lib/travis/config/serialize/env.rb
|
41
48
|
- lib/travis/config/version.rb
|
42
|
-
- lib/travis/config.rb
|
43
49
|
- spec/spec_helper.rb
|
50
|
+
- spec/support/env.rb
|
51
|
+
- spec/support/fakefs.rb
|
44
52
|
- spec/travis/config/docker_spec.rb
|
53
|
+
- spec/travis/config/env_spec.rb
|
45
54
|
- spec/travis/config/files_spec.rb
|
46
55
|
- spec/travis/config/heroku/amqp_spec.rb
|
47
56
|
- spec/travis/config/heroku/database_spec.rb
|
48
57
|
- spec/travis/config/heroku/memcached_spec.rb
|
49
58
|
- spec/travis/config/heroku/redis_spec.rb
|
50
59
|
- spec/travis/config/heroku/sentry_spec.rb
|
60
|
+
- spec/travis/config/serialize/env_spec.rb
|
51
61
|
- spec/travis/config_spec.rb
|
52
|
-
- Gemfile
|
53
|
-
- LICENSE
|
54
|
-
- README.md
|
55
62
|
homepage: https://github.com/travis-ci/travis-config
|
56
63
|
licenses:
|
57
64
|
- MIT
|
@@ -62,17 +69,17 @@ require_paths:
|
|
62
69
|
- lib
|
63
70
|
required_ruby_version: !ruby/object:Gem::Requirement
|
64
71
|
requirements:
|
65
|
-
- -
|
72
|
+
- - ">="
|
66
73
|
- !ruby/object:Gem::Version
|
67
74
|
version: '0'
|
68
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
76
|
requirements:
|
70
|
-
- -
|
77
|
+
- - ">="
|
71
78
|
- !ruby/object:Gem::Version
|
72
79
|
version: '0'
|
73
80
|
requirements: []
|
74
|
-
rubyforge_project:
|
75
|
-
rubygems_version: 2.
|
81
|
+
rubyforge_project: "[none]"
|
82
|
+
rubygems_version: 2.6.11
|
76
83
|
signing_key:
|
77
84
|
specification_version: 4
|
78
85
|
summary: Travis CI config
|