sigh 0.2.0 → 0.2.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3c9e9bd59797f783963393887bc4b657263cbff
4
- data.tar.gz: 7181fd01ed4195cab98e96b587d72e32f3485e75
3
+ metadata.gz: 842fa29839a7bef24356403b43a1e71a4e86dca7
4
+ data.tar.gz: a8c3136908d566be66ed6475caf9930ca040df7d
5
5
  SHA512:
6
- metadata.gz: 95edbbbedc59167c0b3c4ce99a0d2ababbf954b70f91b7743e89a060c61a7e204c69bbdfd2944e36331cb0090026dd9f2f031cdeba8cdcc7d17e288333cdb131
7
- data.tar.gz: c7a347854360557aafcf6c8ae32ac93b788df3f48833bb871c7d017e72aee91dfed50bef002f0479b6cc6bfbb8c20d57bf26f87dcda08ca18e5b70ddcd428356
6
+ metadata.gz: 65bc97c43df673d449516cc962085a189bd62a26fa2aa367bf5e29121554ea0f30d5095215bb984db5a7cf7f31f192c9ff87f372942547087272aca4ccc0a320
7
+ data.tar.gz: fa01ff066816aa5686621374a5aab8ac4e4fb094fef5cd64f2f867f6969851a01da4e0c268acc06605e31b17ebbbf256fb41d9539daa8e41df85540411f5b3a6
data/README.md CHANGED
@@ -121,6 +121,7 @@ In case you prefer environment variables:
121
121
  - ```SIGH_USERNAME```
122
122
  - ```SIGH_APP_IDENTIFIER```
123
123
  - ```SIGH_TEAM_ID``` (The Team ID, e.g. `Q2CBPK58CA`)
124
+ - `SIGH_DISABLE_OPEN_ERROR` - in case of error, `sigh` won't open Preview with a screenshot of the error when this variable is set.
124
125
 
125
126
  # How does it work?
126
127
 
@@ -128,7 +129,7 @@ In case you prefer environment variables:
128
129
 
129
130
 
130
131
  ## How is my password stored?
131
- ```sigh``` uses the password manager from [```Deliver```](https://github.com/KrauseFx/deliver#can-i-trust-deliver). Take a look the [Deliver README](https://github.com/KrauseFx/deliver#can-i-trust-deliver) for more information.
132
+ ```sigh``` uses the [password manager](https://github.com/KrauseFx/CredentialsManager) from `fastlane`. Take a look the [CredentialsManager README](https://github.com/KrauseFx/CredentialsManager) for more information.
132
133
 
133
134
  # Tips
134
135
  ## [`fastlane`](http://fastlane.tools) Toolchain
@@ -147,7 +148,7 @@ It will show you the ```mobileprovision``` files like this:
147
148
 
148
149
 
149
150
  # Need help?
150
- - If there is a technical problem with ```sigh```, submit an issue. Run ```sigh --trace``` to get the stacktrace.
151
+ - If there is a technical problem with ```sigh```, submit an issue.
151
152
  - I'm available for contract work - drop me an email: sigh@krausefx.com
152
153
 
153
154
  # License
data/bin/sigh CHANGED
@@ -3,71 +3,79 @@
3
3
  $:.push File.expand_path("../../lib", __FILE__)
4
4
 
5
5
  require 'sigh'
6
- require 'commander/import'
6
+ require 'commander'
7
7
  require 'credentials_manager/password_manager'
8
8
  require 'credentials_manager/appfile_config'
9
9
 
10
10
  HighLine.track_eof = false
11
11
 
12
+ class SighApplication
13
+ include Commander::Methods
12
14
 
13
- # Commander
14
- program :version, Sigh::VERSION
15
- program :description, 'CLI for \'sigh\' - Because you would rather spend your time building stuff than fighting provisioning'
16
- program :help, 'Author', 'Felix Krause <sigh@krausefx.com>'
17
- program :help, 'Website', 'http://fastlane.tools'
18
- program :help, 'GitHub', 'https://github.com/krausefx/sigh'
19
- program :help_formatter, :compact
15
+ def run
16
+ program :version, Sigh::VERSION
17
+ program :description, 'CLI for \'sigh\' - Because you would rather spend your time building stuff than fighting provisioning'
18
+ program :help, 'Author', 'Felix Krause <sigh@krausefx.com>'
19
+ program :help, 'Website', 'http://fastlane.tools'
20
+ program :help, 'GitHub', 'https://github.com/krausefx/sigh'
21
+ program :help_formatter, :compact
20
22
 
21
- global_option('--verbose') { $verbose = true }
23
+ always_trace!
22
24
 
25
+ global_option '--adhoc', 'By default, sigh will create and renew App Store profiles. Setting this flag will generate Adhoc profiles instead.'
26
+ global_option '--skip_install', 'By default, the certificate will be added on your local machine. Setting this flag will skip this action.'
27
+ global_option '--development', 'Renew the development certificate instead of the production one.'
23
28
 
24
- command :renew do |c|
25
- c.syntax = 'sigh renew'
26
- c.description = 'Renews the certificate (in case it expired) and outputs the path to the generated file'
29
+ global_option '-a', '--identifier STRING', String, 'The bundle identifier of your app.'
30
+ global_option '-u', '--username STRING', String, 'Your Apple ID username.'
31
+ global_option '-n', '--cert_name STRING', String, 'The name of the generated certificate file.'
32
+ global_option '-o', '--output STRING', String, 'The folder in which the file should be generated.'
27
33
 
28
- c.option '-a', '--identifier STRING', String, 'The bundle identifier of your app'
29
- c.option '-u', '--username STRING', String, 'Your Apple ID username'
30
- c.option '-n', '--cert_name STRING', String, 'The name of the generated certificate file.'
31
- c.option '-o', '--output STRING', String, 'The folder in which the file should be generated.'
32
- c.option '--adhoc', 'By default, sigh will create and renew App Store profiles. Setting this flag will generate Adhoc profiles instead.'
33
- c.option '--skip_install', 'By default, the certificate will be added on your local machine. Setting this flag will skip this action.'
34
- c.option '--development', 'Renew the development certificate instead of the production one'
34
+ command :renew do |c|
35
+ c.syntax = 'sigh renew'
36
+ c.description = 'Renews the certificate (in case it expired) and outputs the path to the generated file'
35
37
 
36
- c.action do |args, options|
37
- app = app_identifier(options)
38
- username(options)
38
+ c.action do |args, options|
39
+ app = app_identifier(options)
40
+ username(options)
39
41
 
40
- type = Sigh::DeveloperCenter::APPSTORE
41
- type = Sigh::DeveloperCenter::ADHOC if options.adhoc
42
- type = Sigh::DeveloperCenter::DEVELOPMENT if options.development
43
-
44
- path = Sigh::DeveloperCenter.new.run(app, type, options.cert_name)
45
-
46
- if path
47
- file_name = File.basename(path)
48
- output_path = options.output || '.'
49
- output = File.join(output_path.gsub("~", ENV["HOME"]), file_name)
50
- FileUtils.mv(path, output)
51
- system("open '#{output}'") unless options.skip_install
52
- puts output.green
42
+ type = Sigh::DeveloperCenter::APPSTORE
43
+ type = Sigh::DeveloperCenter::ADHOC if options.adhoc
44
+ type = Sigh::DeveloperCenter::DEVELOPMENT if options.development
45
+
46
+ path = Sigh::DeveloperCenter.new.run(app, type, options.cert_name)
47
+
48
+ if path
49
+ file_name = File.basename(path)
50
+ output_path = options.output || '.'
51
+ output = File.join(output_path.gsub("~", ENV["HOME"]), file_name)
52
+ FileUtils.mv(path, output)
53
+ system("open -g '#{output}'") unless options.skip_install
54
+ puts output.green
55
+ end
56
+ end
53
57
  end
58
+
59
+ default_command :renew
60
+
61
+ run!
54
62
  end
55
- end
56
63
 
57
- default_command :renew
64
+ def username(options)
65
+ user = options.username
66
+ user ||= ENV["SIGH_USERNAME"]
67
+ user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
68
+
69
+ CredentialsManager::PasswordManager.shared_manager(user) if user
70
+ end
58
71
 
59
- def username(options)
60
- user = options.username
61
- user ||= ENV["SIGH_USERNAME"]
62
- user ||= CredentialsManager::AppfileConfig.try_fetch_value(:apple_id)
63
-
64
- CredentialsManager::PasswordManager.shared_manager(user) if user
72
+ def app_identifier(options)
73
+ value = options.identifier
74
+ value ||= ENV["SIGH_APP_IDENTIFIER"]
75
+ value ||= CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
76
+ value ||= ask("App Identifier (Bundle ID, e.g. com.krausefx.app): ")
77
+ return value
78
+ end
65
79
  end
66
80
 
67
- def app_identifier(options)
68
- value = options.identifier
69
- value ||= ENV["SIGH_APP_IDENTIFIER"]
70
- value ||= CredentialsManager::AppfileConfig.try_fetch_value(:app_identifier)
71
- value ||= ask("App Identifier (Bundle ID, e.g. com.krausefx.app): ")
72
- return value
73
- end
81
+ SighApplication.new.run
@@ -95,28 +95,7 @@ module Sigh
95
95
 
96
96
  begin
97
97
  if page.has_content?"Select Team" # If the user is not on multiple teams
98
- team_id = ENV["SIGH_TEAM_ID"]
99
- unless team_id
100
- Helper.log.info "You can store you preferred team using the environment variable `SIGH_TEAM_ID`".green
101
- Helper.log.info "Your ID belongs to the following teams:".green
102
-
103
- teams = find("div.input").all('.team-value') # Grab all the teams data
104
- teams.each_with_index do |val, index|
105
- team_text = val.find(".label-primary").text
106
- description_text = val.find(".label-secondary").text
107
- description_text = " (#{description_text})" unless description_text.empty? # Include the team description if any
108
- Helper.log.info "\t#{index + 1}. #{team_text}#{description_text}".green # Print the team index and team name
109
- end
110
-
111
- team_index = ask("Please select the team number you would like to access: ".green)
112
- team_id = teams[team_index.to_i - 1].find(".radio").value
113
- end
114
-
115
- first(:xpath, "//input[@type='radio' and @value='#{team_id}']").click # Select the desired team
116
- all(".button.large.blue.submit").first.click
117
-
118
- result = visit PROFILES_URL
119
- raise "Could not open Developer Center" unless result['status'] == 'success'
98
+ select_team
120
99
  end
121
100
  rescue => ex
122
101
  Helper.log.debug ex
@@ -144,6 +123,50 @@ module Sigh
144
123
  end
145
124
  end
146
125
 
126
+
127
+ def select_team
128
+ team_id = ENV["SIGH_TEAM_ID"]
129
+ team_id = nil if team_id.to_s.length == 0
130
+
131
+ unless team_id
132
+ Helper.log.info "You can store you preferred team using the environment variable `SIGH_TEAM_ID`".green
133
+ Helper.log.info "Your ID belongs to the following teams:".green
134
+ end
135
+
136
+ available_options = []
137
+
138
+ teams = find("div.input").all('.team-value') # Grab all the teams data
139
+ teams.each_with_index do |val, index|
140
+ current_team_id = '"' + val.find("input").value + '"'
141
+ team_text = val.find(".label-primary").text
142
+ description_text = val.find(".label-secondary").text
143
+ description_text = "(#{description_text})" unless description_text.empty? # Include the team description if any
144
+ index_text = (index + 1).to_s + "."
145
+
146
+ available_options << [index_text, current_team_id, team_text, description_text].join(" ")
147
+ end
148
+
149
+ unless team_id
150
+ puts available_options.join("\n").green
151
+ team_index = ask("Please select the team number you would like to access: ".green)
152
+ team_id = teams[team_index.to_i - 1].find(".radio").value
153
+ end
154
+
155
+ team_button = first(:xpath, "//input[@type='radio' and @value='#{team_id}']") # Select the desired team
156
+ if team_button
157
+ team_button.click
158
+ else
159
+ Helper.log.fatal "Could not find given Team. Available options: ".red
160
+ puts available_options.join("\n").yellow
161
+ raise DeveloperCenterLoginError.new("Error finding given team #{team_id}.".red)
162
+ end
163
+
164
+ all(".button.large.blue.submit").first.click
165
+
166
+ result = visit PROFILES_URL
167
+ raise "Could not open Developer Center" unless result['status'] == 'success'
168
+ end
169
+
147
170
  def run(app_identifier, type, cert_name = nil)
148
171
  cert = maintain_app_certificate(app_identifier, type)
149
172
 
@@ -248,7 +271,7 @@ module Sigh
248
271
  # example: <option value="RGAWZGXSY4">ABP (5A997XSHK2.net.sunapps.34)</option>
249
272
  identifiers = all(:xpath, "//option[contains(text(), '.#{app_identifier})')]")
250
273
  if identifiers.count == 0
251
- puts "Couldn't find App ID '#{app_identifier}'\nonly found:".red
274
+ puts "Couldn't find App ID '#{app_identifier}'\nonly found the following bundle identifiers:".red
252
275
  all(:xpath, "//option").each do |current|
253
276
  puts "\t- #{current.text}".yellow
254
277
  end
@@ -419,7 +442,7 @@ module Sigh
419
442
  def snap
420
443
  path = "Error#{Time.now.to_i}.png"
421
444
  save_screenshot(path, :full => true)
422
- system("open '#{path}'")
445
+ system("open '#{path}'") unless ENV['SIGH_DISABLE_OPEN_ERROR']
423
446
  end
424
447
 
425
448
  def wait_for(method, parameter, success)
@@ -428,13 +451,12 @@ module Sigh
428
451
  while !success.call(result)
429
452
  sleep 0.2
430
453
 
431
- result = method.call(parameter)
454
+ result = method.call(parameter)
432
455
 
433
456
  counter += 1
434
457
  if counter > 100
435
- Helper.log.debug page.html
436
458
  Helper.log.debug caller
437
- raise DeveloperCenterGeneralError.new("Couldn't find '#{name}' after waiting for quite some time")
459
+ raise DeveloperCenterGeneralError.new("Couldn't find '#{parameter}' after waiting for quite some time")
438
460
  end
439
461
  end
440
462
  return result
data/lib/sigh/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sigh
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sigh
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Felix Krause
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-15 00:00:00.000000000 Z
11
+ date: 2015-01-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json