skylight 3.1.5 → 4.0.0.alpha

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,14 @@
1
- $:.unshift File.expand_path('../vendor/cli', __FILE__)
1
+ $LOAD_PATH.unshift File.expand_path("vendor/cli", __dir__)
2
2
 
3
- require 'skylight'
4
- require 'thor'
5
- require 'yaml'
6
- require 'highline'
7
- require 'active_support/inflector'
3
+ require "skylight"
4
+ require "thor"
5
+ require "yaml"
6
+ require "highline"
7
+ require "active_support/inflector"
8
8
 
9
- require 'skylight/cli/helpers'
10
- require 'skylight/cli/doctor'
11
- require 'skylight/cli/merger'
9
+ require "skylight/cli/helpers"
10
+ require "skylight/cli/doctor"
11
+ require "skylight/cli/merger"
12
12
 
13
13
  module Skylight
14
14
  module CLI
@@ -33,8 +33,8 @@ to set it up as a new app in Skylight.
33
33
 
34
34
  res = api.create_app(app_name, token)
35
35
 
36
- config[:application] = res.get('app.id')
37
- config[:authentication] = res.get('app.token')
36
+ config[:application] = res.get("app.id")
37
+ config[:authentication] = res.get("app.token")
38
38
  config.write(config_path)
39
39
 
40
40
  say "Congratulations. Your application is on Skylight! https://www.skylight.io", :green
@@ -79,64 +79,59 @@ you should set the `SKYLIGHT_AUTHENTICATION` variable to:
79
79
  say "Environment warning disabled", :green
80
80
  end
81
81
 
82
- private
83
-
84
- def app_name
85
- @app_name ||=
86
- begin
87
- name = nil
88
-
89
- if is_rails?
90
- # Get the name in a process so that we don't pollute our environment here
91
- # This is especially important since users may have things like WebMock that
92
- # will prevent us from communicating with the Skylight API
93
- begin
94
- namefile = Tempfile.new('skylight-app-name')
95
- # Windows appears to need double quotes for `rails runner`
96
- `rails runner "File.open('#{namefile.path}', 'w') {|f| f.write(Rails.application.class.name) rescue '' }"`
97
- name = namefile.read.split("::").first.underscore.titleize
98
- name = nil if name.empty?
99
- rescue => e
100
- if ENV['DEBUG']
101
- puts e.class.name
102
- puts e.to_s
103
- puts e.backtrace.join("\n")
82
+ private
83
+
84
+ def app_name
85
+ @app_name ||=
86
+ begin
87
+ name = nil
88
+
89
+ if rails?
90
+ # Get the name in a process so that we don't pollute our environment here
91
+ # This is especially important since users may have things like WebMock that
92
+ # will prevent us from communicating with the Skylight API
93
+ begin
94
+ namefile = Tempfile.new("skylight-app-name")
95
+ # Windows appears to need double quotes for `rails runner`
96
+ `rails runner "File.open('#{namefile.path}', 'w') {|f| f.write(Rails.application.class.name) rescue '' }"`
97
+ name = namefile.read.split("::").first.underscore.titleize
98
+ name = nil if name.empty?
99
+ rescue => e
100
+ if ENV["DEBUG"]
101
+ puts e.class.name
102
+ puts e.to_s
103
+ puts e.backtrace.join("\n")
104
+ end
105
+ ensure
106
+ namefile.close
107
+ namefile.unlink
104
108
  end
105
- ensure
106
- namefile.close
107
- namefile.unlink
108
- end
109
109
 
110
- unless name
111
- warn "Unable to determine Rails application name. Using directory name."
110
+ unless name
111
+ warn "Unable to determine Rails application name. Using directory name."
112
+ end
112
113
  end
113
- end
114
114
 
115
- unless name
116
- name = File.basename(File.expand_path('.')).titleize
115
+ name || File.basename(File.expand_path(".")).titleize
117
116
  end
117
+ end
118
118
 
119
- name
120
- end
121
- end
122
-
123
- # Is this duplicated?
124
- def relative_config_path
125
- 'config/skylight.yml'
126
- end
127
-
128
- def config_path
129
- File.expand_path(relative_config_path)
130
- end
119
+ # Is this duplicated?
120
+ def relative_config_path
121
+ "config/skylight.yml"
122
+ end
131
123
 
132
- def api
133
- @api ||= Api.new(config)
134
- end
124
+ def config_path
125
+ File.expand_path(relative_config_path)
126
+ end
135
127
 
136
- def user_config
137
- config.user_config
138
- end
128
+ def api
129
+ @api ||= Api.new(config)
130
+ end
139
131
 
132
+ def user_config
133
+ config.user_config
134
+ end
140
135
  end
141
136
  end
142
137
  end
@@ -1,4 +1,4 @@
1
- require 'skylight/util/http'
1
+ require "skylight/util/http"
2
2
 
3
3
  module Skylight
4
4
  module CLI
@@ -20,7 +20,7 @@ module Skylight
20
20
  say "Failed to verify SSL certificate.", :red
21
21
  if Util::SSL.ca_cert_file?
22
22
  say "Certificates located at #{Util::SSL.ca_cert_file_or_default} may be out of date.", :yellow
23
- if is_mac? && has_rvm?
23
+ if mac? && rvm_present?
24
24
  say "Please update your certificates with RVM by running `rvm osx-ssl-certs update all`.", :yellow
25
25
  say "Alternatively, try setting `SKYLIGHT_FORCE_OWN_CERTS=1` in your environment.", :yellow
26
26
  else
@@ -39,7 +39,7 @@ module Skylight
39
39
  say "Checking for Rails"
40
40
 
41
41
  indent do
42
- if is_rails?
42
+ if rails?
43
43
  say "Rails application detected", :green
44
44
  else
45
45
  say "No Rails application detected", :yellow
@@ -63,7 +63,7 @@ module Skylight
63
63
  say "Unable to load native extension", :yellow
64
64
 
65
65
  indent do
66
- install_log = File.expand_path("../../../ext/install.log", __FILE__)
66
+ install_log = File.expand_path("../../ext/install.log", __dir__)
67
67
  if File.exist?(install_log)
68
68
  File.readlines(install_log).each do |line|
69
69
  say line, :red
@@ -112,8 +112,8 @@ module Skylight
112
112
  # Log everything
113
113
  logger.level = Logger::DEBUG
114
114
  # Remove excess formatting
115
- logger.formatter = proc { |severity, datetime, progname, msg|
116
- msg = msg.sub("[SKYLIGHT] [#{Skylight::VERSION}] ", '')
115
+ logger.formatter = proc { |severity, _datetime, _progname, msg|
116
+ msg = msg.sub("[SKYLIGHT] [#{Skylight::VERSION}] ", "")
117
117
  say "#{severity} - #{msg}" # Definitely non-standard
118
118
  }
119
119
  config.logger = logger
@@ -139,7 +139,7 @@ module Skylight
139
139
  daemon_running = false
140
140
  while tries < 5
141
141
  `ps cax | grep skylightd`
142
- if $?.success?
142
+ if $CHILD_STATUS.success?
143
143
  daemon_running = true
144
144
  break
145
145
  end
@@ -171,9 +171,9 @@ module Skylight
171
171
  return @config if @config
172
172
 
173
173
  # MEGAHAX
174
- if is_rails?
174
+ if rails?
175
175
  # Normally auto-loaded, but we haven't loaded Rails by the time Skylight is loaded
176
- require 'skylight/railtie'
176
+ require "skylight/railtie"
177
177
  require rails_rb
178
178
 
179
179
  railtie = Skylight::Railtie.send(:new)
@@ -183,14 +183,14 @@ module Skylight
183
183
  end
184
184
  end
185
185
 
186
- def is_mac?
187
- Core::Util::Platform::OS == 'darwin'
186
+ def mac?
187
+ Core::Util::Platform::OS == "darwin"
188
188
  end
189
189
 
190
190
  # NOTE: This check won't work correctly on Windows
191
- def has_rvm?
191
+ def rvm_present?
192
192
  if @has_rvm.nil?
193
- @has_rvm = system("which rvm > /dev/null");
193
+ @has_rvm = system("which rvm > /dev/null")
194
194
  end
195
195
  @has_rvm
196
196
  end
@@ -217,7 +217,6 @@ module Skylight
217
217
  exit 0
218
218
  end
219
219
  end
220
-
221
220
  end
222
221
  end
223
222
  end
@@ -1,32 +1,30 @@
1
1
  module Skylight
2
2
  module CLI
3
3
  module Helpers
4
-
5
4
  private
6
5
 
7
- # Duplicated below
8
- def rails_rb
9
- File.expand_path("config/application.rb")
10
- end
11
-
12
- def is_rails?
13
- File.exist?(rails_rb)
14
- end
6
+ # Duplicated below
7
+ def rails_rb
8
+ File.expand_path("config/application.rb")
9
+ end
15
10
 
16
- def config
17
- # Calling .load checks ENV variables
18
- @config ||= Config.load
19
- end
11
+ def rails?
12
+ File.exist?(rails_rb)
13
+ end
20
14
 
21
- # Sets the output padding while executing a block and resets it.
22
- #
23
- def indent(count = 1, &block)
24
- orig_padding = shell.padding
25
- shell.padding += count
26
- yield
27
- shell.padding = orig_padding
28
- end
15
+ def config
16
+ # Calling .load checks ENV variables
17
+ @config ||= Config.load
18
+ end
29
19
 
20
+ # Sets the output padding while executing a block and resets it.
21
+ #
22
+ def indent(count = 1)
23
+ orig_padding = shell.padding
24
+ shell.padding += count
25
+ yield
26
+ shell.padding = orig_padding
27
+ end
30
28
  end
31
29
  end
32
- end
30
+ end
@@ -1,7 +1,7 @@
1
- require 'ostruct'
2
- require 'skylight/util/http'
3
- require 'thor'
4
- require 'highline'
1
+ require "ostruct"
2
+ require "skylight/util/http"
3
+ require "thor"
4
+ require "highline"
5
5
 
6
6
  module Skylight
7
7
  module CLI
@@ -13,9 +13,9 @@ module Skylight
13
13
  end
14
14
 
15
15
  STRINGS = {
16
- get_token: 'get your merge token from `https://www.skylight.io/merging`',
16
+ get_token: "get your merge token from `https://www.skylight.io/merging`",
17
17
  unlisted: "My app isn't listed here :("
18
- }
18
+ }.freeze
19
19
 
20
20
  argument :merge_token, type: :string, desc: STRINGS[:get_token]
21
21
 
@@ -86,8 +86,8 @@ module Skylight
86
86
  i = ask("\nWhich number?").chomp.to_i
87
87
 
88
88
  @child_env = case i
89
- when 1 then 'development'
90
- when 2 then 'staging'
89
+ when 1 then "development"
90
+ when 2 then "staging"
91
91
  when 3
92
92
  specify_child_env
93
93
  else
@@ -130,15 +130,15 @@ module Skylight
130
130
  say "IMPORTANT!\n" \
131
131
  "If you use a config/skylight.yml file to configure Skylight:\n", :yellow
132
132
 
133
- say "The #@child_env environment for the #{@parent_app.name} app\n" \
133
+ say "The #{@child_env} environment for the #{@parent_app.name} app\n" \
134
134
  "will now connect using the default authentication token for the app.\n" \
135
135
  "Remove any environment-specific `authentication` configs from the\n" \
136
- "#{@parent_app.name} #@child_env environment.\n", :yellow
136
+ "#{@parent_app.name} #{@child_env} environment.\n", :yellow
137
137
 
138
- say "If you're running in Rails and your Rails environment exactly matches `#@child_env`,\n" \
138
+ say "If you're running in Rails and your Rails environment exactly matches `#{@child_env}`,\n" \
139
139
  "we will automatically detect and report that environment when your agent connects.\n" \
140
- "Otherwise, you should set `env: '#@child_env'` as environment-specific configuration for\n" \
141
- "#@child_env's Rails environment. For example:\n" \
140
+ "Otherwise, you should set `env: '#{@child_env}'` as environment-specific configuration for\n" \
141
+ "#{@child_env}'s Rails environment. For example:\n" \
142
142
  "```yml\n" \
143
143
  "staging:\n" \
144
144
  " env: staging-42\n" \
@@ -151,14 +151,14 @@ module Skylight
151
151
 
152
152
  say "Deploy the latest agent before updating your environment variables.\n", :yellow
153
153
 
154
- say "The #@child_env environment for the #{@parent_app.name} app\n" \
154
+ say "The #{@child_env} environment for the #{@parent_app.name} app\n" \
155
155
  "will now connect using the default authentication token for the app.\n" \
156
- "Set `SKYLIGHT_AUTHENTICATION` in the #@child_env environment to the\n" \
156
+ "Set `SKYLIGHT_AUTHENTICATION` in the #{@child_env} environment to the\n" \
157
157
  "#{@parent_app.name} app's authentication token.\n", :yellow
158
158
 
159
- say "If you're running in Rails and your Rails environment exactly matches `#@child_env`,\n" \
159
+ say "If you're running in Rails and your Rails environment exactly matches `#{@child_env}`,\n" \
160
160
  "we will automatically detect and report that environment when your agent connects.\n" \
161
- "Otherwise, you should set `SKYLIGHT_ENV=#@child_env` when running in this environment.\n", :yellow
161
+ "Otherwise, you should set `SKYLIGHT_ENV=#{@child_env}` when running in this environment.\n", :yellow
162
162
 
163
163
  say "=======================================================", :yellow
164
164
 
@@ -167,131 +167,134 @@ module Skylight
167
167
 
168
168
  private
169
169
 
170
- def do_merge
171
- say "Merging..."
172
-
173
- api.merge_apps!(@merge_token,
174
- app_guid: @parent_app.guid,
175
- component_guid: @child_app.guid,
176
- environment: @child_env
177
- )
178
- rescue => e
179
- say("Something went wrong. Please contact support@skylight.io for more information.", :red)
180
- done!(message: e.message, success: false)
181
- end
182
-
183
- def done!(message: nil, success: true)
184
- shell.padding = 0
185
- say "\n"
170
+ def do_merge
171
+ say "Merging..."
186
172
 
187
- if success
188
- say(message, :green) if message
189
- say "If you have any questions, please contact support@skylight.io.", :green
190
- exit 0
191
- else
192
- say message || "Skylight wasn't able to merge your apps.", :red
193
- say "If you have any questions, please contact support@skylight.io.", :yellow
194
- exit 1
173
+ api.merge_apps!(@merge_token,
174
+ app_guid: @parent_app.guid,
175
+ component_guid: @child_app.guid,
176
+ environment: @child_env)
177
+ rescue => e
178
+ say("Something went wrong. Please contact support@skylight.io for more information.", :red)
179
+ done!(message: e.message, success: false)
195
180
  end
196
- end
197
181
 
198
- def ask_for_app(app_list, &formatter)
199
- formatter ||= :name.to_proc
200
- app_list.each do |index, app|
201
- say("\t#{index}. #{formatter.(app)}")
182
+ def done!(message: nil, success: true)
183
+ shell.padding = 0
184
+ say "\n"
185
+
186
+ if success
187
+ say(message, :green) if message
188
+ say "If you have any questions, please contact support@skylight.io.", :green
189
+ exit 0
190
+ else
191
+ say message || "Skylight wasn't able to merge your apps.", :red
192
+ say "If you have any questions, please contact support@skylight.io.", :yellow
193
+ exit 1
194
+ end
202
195
  end
203
196
 
204
- n = ask("\nWhich number?").chomp.to_i
205
-
206
- if !app_list.key?(n)
207
- say "\nHmm?"
208
- ask_for_app(app_list, &formatter)
209
- elsif app_list[n].unlisted
210
- done!(
211
- success: false,
212
- message: "Sorry, `skylight merge` is only able to merge apps that you own."
213
- )
214
- else
215
- app_list[n]
216
- end
217
- end
197
+ def ask_for_app(app_list, &formatter)
198
+ formatter ||= :name.to_proc
199
+ app_list.each do |index, app|
200
+ say("\t#{index}. #{formatter.call(app)}")
201
+ end
218
202
 
219
- def api
220
- @api ||= Skylight::Api.new(config)
221
- end
203
+ n = ask("\nWhich number?").chomp.to_i
222
204
 
223
- def format_component(component)
224
- parts = [].tap do |ary|
225
- ary << component.name unless component.name == 'web'
226
- ary << component.environment unless component.environment == 'production'
205
+ if !app_list.key?(n)
206
+ say "\nHmm?"
207
+ ask_for_app(app_list, &formatter)
208
+ elsif app_list[n].unlisted
209
+ done!(
210
+ success: false,
211
+ message: "Sorry, `skylight merge` is only able to merge apps that you own."
212
+ )
213
+ else
214
+ app_list[n]
215
+ end
227
216
  end
228
217
 
229
- str = ''
230
- str << component.app_name
231
- str << Thor::Shell::Color.new.set_color(" (#{parts.join(':')})", :yellow) if parts.any?
232
- str
233
- end
218
+ def api
219
+ @api ||= Skylight::Api.new(config)
220
+ end
234
221
 
235
- def validate_mergeability(child_app, child_env)
236
- errors = []
222
+ def format_component(component)
223
+ parts = [].tap do |ary|
224
+ ary << component.name unless component.name == "web"
225
+ ary << component.environment unless component.environment == "production"
226
+ end
237
227
 
238
- unless valid_component?(child_app.name, child_env)
239
- errors << "Environment can only contain letters, numbers, and hyphens."
228
+ str = ""
229
+ str << component.app_name
230
+ str << Thor::Shell::Color.new.set_color(" (#{parts.join(':')})", :yellow) if parts.any?
231
+ str
240
232
  end
241
233
 
242
- if @parent_app && parent_component_fingerprints.include?([child_app.name, child_env])
243
- errors << "Sorry, `#{@parent_app.name}` already has a `#{child_env}` " \
244
- "component that conflicts with this merge request. Please choose a new environment."
245
- end
234
+ def validate_mergeability(child_app, child_env)
235
+ errors = []
246
236
 
247
- return child_env unless errors.any?
237
+ unless valid_component?(child_app.name, child_env)
238
+ errors << "Environment can only contain letters, numbers, and hyphens."
239
+ end
248
240
 
249
- say errors.join("\n"), :red
241
+ if @parent_app && parent_component_fingerprints.include?([child_app.name, child_env])
242
+ errors << "Sorry, `#{@parent_app.name}` already has a `#{child_env}` " \
243
+ "component that conflicts with this merge request. Please choose a new environment."
244
+ end
250
245
 
251
- yield
252
- end
246
+ return child_env unless errors.any?
253
247
 
254
- def valid_component?(component_name, env)
255
- return false unless env
256
- Skylight::Util::Component.new(env, component_name) && true
257
- rescue ArgumentError
258
- false
259
- end
248
+ say errors.join("\n"), :red
260
249
 
261
- def parent_component_fingerprints
262
- @parent_app.components.map { |x| x.values_at('name', 'environment') }
263
- end
250
+ yield
251
+ end
252
+
253
+ def valid_component?(component_name, env)
254
+ return false unless env
255
+ Skylight::Util::Component.new(env, component_name) && true
256
+ rescue ArgumentError
257
+ false
258
+ end
259
+
260
+ def parent_component_fingerprints
261
+ @parent_app.components.map { |x| x.values_at("name", "environment") }
262
+ end
264
263
 
265
- def children
266
- Enumerator.new do |yielder|
267
- @parents.each do |_, app|
268
- next if app == @parent_app
269
- app.components.each do |component|
270
- yielder << OpenStruct.new({ app_name: app.name }.merge(component))
264
+ def children
265
+ ret = Enumerator.new do |yielder|
266
+ @parents.each do |_, app|
267
+ next if app == @parent_app
268
+ app.components.each do |component|
269
+ yielder << OpenStruct.new({ app_name: app.name }.merge(component))
270
+ end
271
271
  end
272
+
273
+ yielder << OpenStruct.new(app_name: STRINGS[:unlisted], unlisted: true)
272
274
  end
273
275
 
274
- yielder << OpenStruct.new({ app_name: STRINGS[:unlisted], unlisted: true })
275
- end.each_with_object({}).with_index do |(c, r), i|
276
- r[i + 1] = c
277
- end.tap do |result|
278
- if result.values.all?(&:unlisted)
279
- done!(
280
- success: false,
281
- message: "Sorry, you do not have any apps that can be merged into `#{@parent_app.name}`"
282
- )
276
+ ret = ret.each_with_object({}).with_index do |(c, r), i|
277
+ r[i + 1] = c
278
+ end
279
+
280
+ ret.tap do |result|
281
+ if result.values.all?(&:unlisted)
282
+ done!(
283
+ success: false,
284
+ message: "Sorry, you do not have any apps that can be merged into `#{@parent_app.name}`"
285
+ )
286
+ end
283
287
  end
284
288
  end
285
- end
286
289
 
287
- def specify_child_env
288
- validate_mergeability(
289
- @child_app,
290
- ask("Please enter your environment name (only lowercase letters, numbers, or hyphens): ", :green).chomp
291
- ) do
292
- specify_child_env
290
+ def specify_child_env
291
+ validate_mergeability(
292
+ @child_app,
293
+ ask("Please enter your environment name (only lowercase letters, numbers, or hyphens): ", :green).chomp
294
+ ) do
295
+ specify_child_env
296
+ end
293
297
  end
294
- end
295
298
  end
296
299
  end
297
300
  end