Class: Shipit::DeploySpec
- Inherits:
-
Object
- Object
- Shipit::DeploySpec
show all
- Defined in:
- app/models/shipit/deploy_spec.rb,
app/models/shipit/deploy_spec/file_system.rb,
app/models/shipit/deploy_spec/npm_discovery.rb,
app/models/shipit/deploy_spec/pypi_discovery.rb,
app/models/shipit/deploy_spec/lerna_discovery.rb,
app/models/shipit/deploy_spec/bundler_discovery.rb,
app/models/shipit/deploy_spec/rubygems_discovery.rb,
app/models/shipit/deploy_spec/capistrano_discovery.rb,
app/models/shipit/deploy_spec/kubernetes_discovery.rb
Defined Under Namespace
Modules: BundlerDiscovery, CapistranoDiscovery, KubernetesDiscovery, LernaDiscovery, NpmDiscovery, PypiDiscovery, RubygemsDiscovery
Classes: FileSystem
Constant Summary
collapse
- Error =
Class.new(StandardError)
Class Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(config) ⇒ DeploySpec
Returns a new instance of DeploySpec.
38
39
40
|
# File 'app/models/shipit/deploy_spec.rb', line 38
def initialize(config)
@config = config
end
|
Class Attribute Details
.pretty_generate ⇒ Object
Returns the value of attribute pretty_generate.
10
11
12
|
# File 'app/models/shipit/deploy_spec.rb', line 10
def pretty_generate
@pretty_generate
end
|
Class Method Details
.bundle_path ⇒ Object
27
28
29
|
# File 'app/models/shipit/deploy_spec.rb', line 27
def bundle_path
Rails.root.join('data', 'bundler')
end
|
.dump(spec) ⇒ Object
17
18
19
20
21
22
23
24
25
|
# File 'app/models/shipit/deploy_spec.rb', line 17
def dump(spec)
return unless spec
if pretty_generate?
JSON.pretty_generate(spec.cacheable.config)
else
JSON.dump(spec.cacheable.config)
end
end
|
.load(json) ⇒ Object
12
13
14
15
|
# File 'app/models/shipit/deploy_spec.rb', line 12
def load(json)
config = json.blank? ? {} : JSON.parse(json)
new(config)
end
|
.pretty_generate? ⇒ Boolean
31
32
33
|
# File 'app/models/shipit/deploy_spec.rb', line 31
def pretty_generate?
@pretty_generate
end
|
Instance Method Details
#blank? ⇒ Boolean
57
58
59
|
# File 'app/models/shipit/deploy_spec.rb', line 57
def blank?
config.empty?
end
|
#blocking_statuses ⇒ Object
202
203
204
|
# File 'app/models/shipit/deploy_spec.rb', line 202
def blocking_statuses
Array.wrap(config('ci', 'blocking'))
end
|
#cacheable ⇒ Object
44
45
46
|
# File 'app/models/shipit/deploy_spec.rb', line 44
def cacheable
self
end
|
#clear_working_directory? ⇒ Boolean
257
258
259
|
# File 'app/models/shipit/deploy_spec.rb', line 257
def clear_working_directory?
config('machine', 'cleanup') { true }
end
|
#config(*keys, &default) ⇒ Object
48
49
50
51
52
53
54
55
|
# File 'app/models/shipit/deploy_spec.rb', line 48
def config(*keys, &default)
default ||= -> { nil }
keys.flatten.reduce(@config) do |hash, key|
return default.call unless hash.is_a?(Hash)
hash.fetch(key) { return default.call }
end
end
|
#default_deploy_env ⇒ Object
124
125
126
|
# File 'app/models/shipit/deploy_spec.rb', line 124
def default_deploy_env
deploy_variables.map { |v| [v.name, v.default] }.to_h
end
|
#dependencies_steps ⇒ Object
Also known as:
dependencies_steps!
77
78
79
80
81
|
# File 'app/models/shipit/deploy_spec.rb', line 77
def dependencies_steps
around_steps('dependencies') do
config('dependencies', 'override') { discover_dependencies_steps || [] }
end
end
|
#deploy_steps ⇒ Object
110
111
112
113
114
|
# File 'app/models/shipit/deploy_spec.rb', line 110
def deploy_steps
around_steps('deploy') do
config('deploy', 'override') { discover_deploy_steps }
end
end
|
#deploy_steps! ⇒ Object
116
117
118
|
# File 'app/models/shipit/deploy_spec.rb', line 116
def deploy_steps!
deploy_steps || cant_detect!(:deploy)
end
|
#deploy_variables ⇒ Object
120
121
122
|
# File 'app/models/shipit/deploy_spec.rb', line 120
def deploy_variables
Array.wrap(config('deploy', 'variables')).map(&VariableDefinition.method(:new))
end
|
#directory ⇒ Object
73
74
75
|
# File 'app/models/shipit/deploy_spec.rb', line 73
def directory
config('machine', 'directory')
end
|
#fetch_deployed_revision_steps ⇒ Object
155
156
157
|
# File 'app/models/shipit/deploy_spec.rb', line 155
def fetch_deployed_revision_steps
config('fetch') || discover_fetch_deployed_revision_steps
end
|
#fetch_deployed_revision_steps! ⇒ Object
159
160
161
|
# File 'app/models/shipit/deploy_spec.rb', line 159
def fetch_deployed_revision_steps!
fetch_deployed_revision_steps || cant_detect!(:fetch)
end
|
#filter_deploy_envs(env) ⇒ Object
174
175
176
|
# File 'app/models/shipit/deploy_spec.rb', line 174
def filter_deploy_envs(env)
EnvironmentVariables.with(env).permit(deploy_variables)
end
|
#filter_rollback_envs(env) ⇒ Object
178
179
180
|
# File 'app/models/shipit/deploy_spec.rb', line 178
def filter_rollback_envs(env)
EnvironmentVariables.with(env).permit(rollback_variables)
end
|
#find_task_definition(id) ⇒ Object
169
170
171
172
|
# File 'app/models/shipit/deploy_spec.rb', line 169
def find_task_definition(id)
definition = config('tasks', id) || discover_task_definitions[id]
TaskDefinition.new(id, coerce_task_definition(definition) || task_not_found!(id))
end
|
#hidden_statuses ⇒ Object
190
191
192
|
# File 'app/models/shipit/deploy_spec.rb', line 190
def hidden_statuses
Array.wrap(config('ci', 'hide')) + [release_status_context].compact
end
|
#links ⇒ Object
261
262
263
|
# File 'app/models/shipit/deploy_spec.rb', line 261
def links
config('links') { {} }
end
|
#machine_env ⇒ Object
69
70
71
|
# File 'app/models/shipit/deploy_spec.rb', line 69
def machine_env
config('machine', 'environment') || {}
end
|
#max_divergence_age ⇒ Object
240
241
242
243
244
245
246
247
|
# File 'app/models/shipit/deploy_spec.rb', line 240
def max_divergence_age
return unless timeout = config('merge', 'max_divergence', 'age')
begin
Duration.parse(timeout)
rescue Duration::ParseError
end
end
|
#max_divergence_commits ⇒ Object
236
237
238
|
# File 'app/models/shipit/deploy_spec.rb', line 236
def max_divergence_commits
config('merge', 'max_divergence', 'commits')
end
|
#maximum_commits_per_deploy ⇒ Object
84
85
86
|
# File 'app/models/shipit/deploy_spec.rb', line 84
def maximum_commits_per_deploy
config('deploy', 'max_commits') { 8 }
end
|
#merge_request_ignored_statuses ⇒ Object
219
220
221
222
223
224
225
|
# File 'app/models/shipit/deploy_spec.rb', line 219
def merge_request_ignored_statuses
if config('merge', 'require') || config('merge', 'ignore')
Array.wrap(config('merge', 'ignore')) + [release_status_context].compact
else
soft_failing_statuses | hidden_statuses
end
end
|
#merge_request_merge_method ⇒ Object
206
207
208
209
|
# File 'app/models/shipit/deploy_spec.rb', line 206
def merge_request_merge_method
method = config('merge', 'method')
method if %w[merge rebase squash].include?(method)
end
|
#merge_request_required_statuses ⇒ Object
211
212
213
214
215
216
217
|
# File 'app/models/shipit/deploy_spec.rb', line 211
def merge_request_required_statuses
if config('merge', 'require') || config('merge', 'ignore')
Array.wrap(config('merge', 'require'))
else
required_statuses
end
end
|
#pause_between_deploys ⇒ Object
102
103
104
|
# File 'app/models/shipit/deploy_spec.rb', line 102
def pause_between_deploys
Duration.parse(config('deploy', 'interval') { 0 })
end
|
#plugins ⇒ Object
253
254
255
|
# File 'app/models/shipit/deploy_spec.rb', line 253
def plugins
config('plugins') || {}
end
|
#provisioning_handler_name ⇒ Object
106
107
108
|
# File 'app/models/shipit/deploy_spec.rb', line 106
def provisioning_handler_name
config('provision', 'handler_name')
end
|
#release_status? ⇒ Boolean
88
89
90
|
# File 'app/models/shipit/deploy_spec.rb', line 88
def release_status?
!!release_status_context
end
|
#release_status_context ⇒ Object
92
93
94
|
# File 'app/models/shipit/deploy_spec.rb', line 92
def release_status_context
config('status', 'context')
end
|
#release_status_delay ⇒ Object
96
97
98
99
100
|
# File 'app/models/shipit/deploy_spec.rb', line 96
def release_status_delay
return unless delay = config('status', 'delay') { config('deploy', 'interval') { 0 } }
Duration.parse(delay)
end
|
#required_statuses ⇒ Object
194
195
196
|
# File 'app/models/shipit/deploy_spec.rb', line 194
def required_statuses
(Array.wrap(config('ci', 'require')) + blocking_statuses).uniq
end
|
#retries_on_deploy ⇒ Object
128
129
130
|
# File 'app/models/shipit/deploy_spec.rb', line 128
def retries_on_deploy
config('deploy', 'retries') { nil }
end
|
#retries_on_rollback ⇒ Object
151
152
153
|
# File 'app/models/shipit/deploy_spec.rb', line 151
def retries_on_rollback
config('rollback', 'retries') { nil }
end
|
#revalidate_merge_requests_after ⇒ Object
227
228
229
230
231
232
233
234
|
# File 'app/models/shipit/deploy_spec.rb', line 227
def revalidate_merge_requests_after
return unless timeout = config('merge', 'revalidate_after')
begin
Duration.parse(timeout)
rescue Duration::ParseError
end
end
|
#review_checklist ⇒ Object
182
183
184
|
# File 'app/models/shipit/deploy_spec.rb', line 182
def review_checklist
(config('review', 'checklist') || discover_review_checklist || []).map(&:strip).select(&:present?)
end
|
#review_checks ⇒ Object
249
250
251
|
# File 'app/models/shipit/deploy_spec.rb', line 249
def review_checks
config('review', 'checks') || []
end
|
#review_monitoring ⇒ Object
186
187
188
|
# File 'app/models/shipit/deploy_spec.rb', line 186
def review_monitoring
(config('review', 'monitoring') || []).select(&:present?)
end
|
#rollback_steps ⇒ Object
132
133
134
135
136
|
# File 'app/models/shipit/deploy_spec.rb', line 132
def rollback_steps
around_steps('rollback') do
config('rollback', 'override') { discover_rollback_steps }
end
end
|
#rollback_steps! ⇒ Object
138
139
140
|
# File 'app/models/shipit/deploy_spec.rb', line 138
def rollback_steps!
rollback_steps || cant_detect!(:rollback)
end
|
#rollback_variables ⇒ Object
142
143
144
145
146
147
148
149
|
# File 'app/models/shipit/deploy_spec.rb', line 142
def rollback_variables
if config('rollback', 'variables').nil?
deploy_variables
else
Array.wrap(config('rollback', 'variables')).map(&VariableDefinition.method(:new))
end
end
|
#soft_failing_statuses ⇒ Object
198
199
200
|
# File 'app/models/shipit/deploy_spec.rb', line 198
def soft_failing_statuses
Array.wrap(config('ci', 'allow_failures'))
end
|
#supports_fetch_deployed_revision? ⇒ Boolean
61
62
63
|
# File 'app/models/shipit/deploy_spec.rb', line 61
def supports_fetch_deployed_revision?
fetch_deployed_revision_steps.present?
end
|
#supports_rollback? ⇒ Boolean
65
66
67
|
# File 'app/models/shipit/deploy_spec.rb', line 65
def supports_rollback?
rollback_steps.present?
end
|
#task_definitions ⇒ Object
163
164
165
166
167
|
# File 'app/models/shipit/deploy_spec.rb', line 163
def task_definitions
discover_task_definitions.merge(config('tasks') || {}).map do |name, definition|
TaskDefinition.new(name, coerce_task_definition(definition))
end
end
|