deploygate 0.8.0 → 0.8.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 240a15ab59a4c7bbf4a9eaddea45753f1e0c43b043d7dd13da404567034e8b97
4
- data.tar.gz: f4e49f23e2e26a96c26d44e6cc499260494f6540b13e4cebd9a108b0e93e1e79
3
+ metadata.gz: a067b187ce090f469740902b25df05047db95908131057a995481c4a023b11bd
4
+ data.tar.gz: 8d67c1abb0a90436120bdfd45e0831b9002a7b2089c46a3d42cd3ac7d985143c
5
5
  SHA512:
6
- metadata.gz: 74c6ec9d1a2fc12a27f722a336e5e2438481644d2c4eec1740001c07ede7c1733739a51bebf0bec034a3a7e2aca88ecd2e2665c28fcca277a363af0e646086ba
7
- data.tar.gz: ebbd48822b79e23fd0098377fa09254f5cd46a3244f08c817a942db381cc2080434f0e77c403caae9875ce1f59c0b27b7631cd5dbed7ac28d4720840e1420121
6
+ metadata.gz: 7a10f3ec84688ac65572f3ffb77a70f231436ae8222a6d2c7534a6e5cfa126eca71b4c8f2319ca8f7583c4257ae90896605b093af69dbcdc353e70f667307303
7
+ data.tar.gz: e5abc3793a771f2c1ac96cbaa875a80ab47e665993c7f4a77790f45c983ab557fe4d94345e34d03c9b2ad2ecbfada109bc6e2cacc50881c983da038c54740745
data/.travis.yml CHANGED
@@ -20,5 +20,6 @@ deploy:
20
20
  on:
21
21
  tags: true
22
22
  repo: DeployGate/deploygate-cli
23
+ rvm: 2.4
23
24
  after_deploy:
24
25
  - 'curl -X POST --data-urlencode "payload={\"text\": \"Released a deploygate gem in <https://rubygems.org/gems/deploygate/|RubyGems>\"}" $SLACK_URL'
@@ -1,5 +1,8 @@
1
1
  ---
2
2
  en:
3
+ errors:
4
+ check_update_failure: 'Checking update failed'
5
+ account_not_found_error: 'Your account was not found. Please create it from https://deploygate.com'
3
6
  command_builder:
4
7
  name: 'dg'
5
8
  description: 'Control DeployGate from your terminal.'
@@ -93,7 +96,7 @@ en:
93
96
  $ dg login
94
97
  print_login_user: 'User name: %{name}'
95
98
  login:
96
- start_login_or_create_account:
99
+ start_login:
97
100
  welcome: 'Welcome to DeployGate!'
98
101
  email: 'Email: '
99
102
  check_account: 'Checking for your account...'
@@ -103,28 +106,6 @@ en:
103
106
  Could not log in to DeployGate.
104
107
  Please try again.
105
108
  success: 'Hello %{name}!'
106
- create_account:
107
- prompt: "Looks new to DeployGate. Let's set up your account, just choose your user name and password."
108
- creating: 'Creating your account... '
109
- error: |
110
- Could not create your account.
111
- Please try again.
112
- success: 'done! Your account has been set up successfully.'
113
- input_new_account_name:
114
- input_user_name: 'Username: '
115
- checking: 'Checking for availability... '
116
- already_used_user_name: 'Sorry, %{user_name} was already taken. Please try again.'
117
- success: 'Good, %{user_name} is available.'
118
- input_new_account_password:
119
- input_password: 'Password: '
120
- input_same_password: 'Type the same password: '
121
- error: "Passwords didn't match. Please type again."
122
- check_terms:
123
- terms_url: 'Terms of Service: https://deploygate.com/terms'
124
- privacy_url: 'Privacy Policy: https://deploygate.com/terms/privacy'
125
- note: "DeployGate properly manages your account information under GDPR, Japan's Personal Information Protection Act and our Privacy Policy."
126
- text: 'I agree to the Terms of Service and Privacy Policy (y/n) '
127
- error: 'You must agree to the Terms of Service and Privacy Policy.'
128
109
  logout:
129
110
  success: |
130
111
  Logout success!
@@ -142,16 +123,16 @@ en:
142
123
  choice: '%{team_name} %{team_id}'
143
124
  check_local_certificates:
144
125
  not_local_install_certificate:
145
- error_message: 'Error: No applicable iPhone Distribution certificate found on your Mac.'
126
+ error_message: 'Error: No applicable iPhone Distribution or Apple Distribution certificate found on your Mac.'
146
127
  note: |
147
- No "iPhone Distribution" certificate and/or corresponding private key installed locally.
128
+ No "iPhone Distribution" or "Apple Distribution" certificate and/or corresponding private key installed locally.
148
129
  To sign your application code, make sure you have installed them and available in your Keychain.
149
130
 
150
131
  See also: https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html
151
132
  conflict_certificate:
152
133
  error_message: 'Error: Too many certificates found.'
153
134
  note: |
154
- You have more than one "iPhone Distribution" certificate installed on your Mac.
135
+ You have more than one "iPhone Distribution" or "Apple Distribution" certificate installed on your Mac.
155
136
  Please remove other unnecessary certificates from your Keychain.
156
137
  clean_provisioning_profiles:
157
138
  start: 'Cleaning local Provisioning Profiles...'
@@ -171,5 +152,5 @@ en:
171
152
  Note: Your password will be stored to your Keychain and never be sent to DeployGate.
172
153
  email: 'Email: '
173
154
  provisioning_profile:
174
- not_installed_certificate_error: 'No iPhone Distribution Certificate associated with private key was found in local Keychain'
155
+ not_installed_certificate_error: 'No iPhone Distribution or Apple Distribution Certificate associated with private key was found in local Keychain'
175
156
  not_exist_uuid_provisioning_profile_error: 'No provisioning profile found for the specified UUID (%{uuid})'
@@ -45,7 +45,11 @@ module DeployGate
45
45
  private
46
46
 
47
47
  def client
48
- HTTPClient.new(:agent_name => "dg/#{DeployGate::VERSION}")
48
+ timeout = 60 * 5 # 5 minutes
49
+ HTTPClient.new(agent_name: "dg/#{DeployGate::VERSION}").tap do |c|
50
+ c.receive_timeout = timeout
51
+ c.send_timeout = timeout
52
+ end
49
53
  end
50
54
 
51
55
  def headers
@@ -6,30 +6,6 @@ module DeployGate
6
6
  ENDPOINT = '/users'
7
7
 
8
8
  class << self
9
- # @param [String] name
10
- # @param [String] email
11
- # @param [String] password
12
- # @param [String] locale
13
- # @return [Hash]
14
- def create(name, email, password, locale = 'en')
15
- res = Base.new().post(ENDPOINT, {:name => name, :email => email, :password => password, :locale => locale})
16
-
17
- user_create_results = {
18
- :error => res['error'],
19
- :message => res['because']
20
- }
21
-
22
- results = res['results']
23
- unless results.nil?
24
- user_create_results.merge!({
25
- :name => results['user']['name'],
26
- :token => results['api_token']
27
- })
28
- end
29
-
30
- user_create_results
31
- end
32
-
33
9
  # @param [String] name
34
10
  # @param [String] email
35
11
  # @return [Boolean]
@@ -203,6 +203,8 @@ EOF
203
203
  else
204
204
  request_gem_update_checker
205
205
  end
206
+ rescue => e
207
+ STDERR.puts I18n.t('errors.check_update_failure')
206
208
  end
207
209
 
208
210
  # @return [void]
@@ -11,7 +11,7 @@ module DeployGate
11
11
 
12
12
  session = DeployGate::Session.new
13
13
  unless session.login?
14
- Login.start_login_or_create_account()
14
+ Login.start_login()
15
15
  session = DeployGate::Session.new()
16
16
  end
17
17
 
@@ -13,7 +13,7 @@ module DeployGate
13
13
  def upload(args, options)
14
14
  session = DeployGate::Session.new()
15
15
  unless session.login?
16
- Login.start_login_or_create_account()
16
+ Login.start_login()
17
17
  session = DeployGate::Session.new()
18
18
  end
19
19
 
@@ -6,7 +6,7 @@ module DeployGate
6
6
  # @param [Array] args
7
7
  # @param [Commander::Command::Options] options
8
8
  def run(args, options)
9
- Login.start_login_or_create_account() unless DeployGate::Session.new.login?
9
+ Login.start_login() unless DeployGate::Session.new.login?
10
10
 
11
11
  # push or build(android/ios)
12
12
  args.push(Dir.pwd) if args.empty?
@@ -1,6 +1,8 @@
1
1
  module DeployGate
2
2
  module Commands
3
3
  class Login
4
+ class AccountNotFoundError < DeployGate::RavenIgnoreException; end
5
+
4
6
  class << self
5
7
 
6
8
  # @return [void]
@@ -8,31 +10,32 @@ module DeployGate
8
10
  welcome()
9
11
 
10
12
  if options.terminal
11
- start_login_or_create_account()
13
+ start_login()
12
14
  else
13
15
  DeployGate::BrowserLogin.new().start()
14
16
  end
15
17
  end
16
18
 
17
19
  def welcome
18
- puts I18n.t('commands.login.start_login_or_create_account.welcome')
20
+ puts I18n.t('commands.login.start_login.welcome')
19
21
  print_deploygate_aa()
20
22
  end
21
23
 
22
24
  # @return [void]
23
- def start_login_or_create_account
25
+ # @raise [AccountNotFoundError] emailに一致するUserが存在しないとき
26
+ def start_login
24
27
  puts ''
25
- email = ask(I18n.t('commands.login.start_login_or_create_account.email'))
28
+ email = ask(I18n.t('commands.login.start_login.email'))
26
29
 
27
30
  puts ''
28
- puts I18n.t('commands.login.start_login_or_create_account.check_account')
31
+ puts I18n.t('commands.login.start_login.check_account')
29
32
  if DeployGate::User.registered?('', email)
30
33
  puts ''
31
- password = input_password(I18n.t('commands.login.start_login_or_create_account.input_password'))
34
+ password = input_password(I18n.t('commands.login.start_login.input_password'))
32
35
  puts ''
33
36
  start(email, password)
34
37
  else
35
- create_account(email)
38
+ raise AccountNotFoundError, HighLine.color(I18n.t('errors.account_not_found_error'))
36
39
  end
37
40
  end
38
41
 
@@ -56,69 +59,6 @@ module DeployGate
56
59
  puts HighLine.color(I18n.t('commands.login.start.success', name: session.name), HighLine::GREEN)
57
60
  end
58
61
 
59
- # @param [String] email
60
- # @return [void]
61
- def create_account(email)
62
- puts I18n.t('commands.login.create_account.prompt')
63
- puts ''
64
-
65
- name = input_new_account_name()
66
- puts ''
67
-
68
- password = input_new_account_password()
69
- puts ''
70
-
71
- unless check_terms
72
- puts HighLine.color(I18n.t('commands.login.check_terms.error'), HighLine::RED)
73
- exit 1
74
- end
75
-
76
- print I18n.t('commands.login.create_account.creating')
77
- if DeployGate::User.create(name, email, password).nil?
78
- puts HighLine.color(I18n.t('commands.login.create_account.error'), HighLine::RED)
79
- raise 'User create error'
80
- else
81
- puts HighLine.color(I18n.t('commands.login.create_account.success'), HighLine::GREEN)
82
- start(email, password)
83
- end
84
- end
85
-
86
- # @return [String]
87
- def input_new_account_name
88
- user_name = ask(I18n.t('commands.login.input_new_account_name.input_user_name'))
89
- print I18n.t('commands.login.input_new_account_name.checking')
90
-
91
- if DeployGate::User.registered?(user_name, '')
92
- puts HighLine.color(I18n.t('commands.login.input_new_account_name.already_used_user_name', user_name: user_name), HighLine::RED)
93
- return input_new_account_name()
94
- else
95
- puts HighLine.color(I18n.t('commands.login.input_new_account_name.success', user_name: user_name), HighLine::GREEN)
96
- return user_name
97
- end
98
- end
99
-
100
- # @return [String]
101
- def input_new_account_password
102
- password = input_password(I18n.t('commands.login.input_new_account_password.input_password'))
103
- secound_password = input_password(I18n.t('commands.login.input_new_account_password.input_same_password'))
104
-
105
- if password == secound_password
106
- return password
107
- else
108
- puts HighLine.color(I18n.t('commands.login.input_new_account_password.error'), HighLine::RED)
109
- return input_new_account_password()
110
- end
111
- end
112
-
113
- # @return [boolean]
114
- def check_terms
115
- puts I18n.t('commands.login.check_terms.terms_url')
116
- puts I18n.t('commands.login.check_terms.privacy_url')
117
- puts I18n.t('commands.login.check_terms.note')
118
- puts ''
119
- HighLine.agree(I18n.t('commands.login.check_terms.text')) {|q| q.default = "n"}
120
- end
121
-
122
62
  # @return [String]
123
63
  def input_password(message)
124
64
  ask(message) { |q| q.echo = "*" }
@@ -8,17 +8,6 @@ module DeployGate
8
8
  @name = name
9
9
  end
10
10
 
11
- # @param [String] name
12
- # @param [String] email
13
- # @param [String] password
14
- # @return [DeployGate::User]
15
- def self.create(name, email, password)
16
- locale = Locale.current.language
17
- results = DeployGate::API::V1::User.create(name, email, password, locale)
18
- return if results[:error]
19
- DeployGate::User.new(results[:name])
20
- end
21
-
22
11
  # @param [String] name
23
12
  # @param [String] email
24
13
  # @return [Boolean]
@@ -1,3 +1,3 @@
1
1
  module DeployGate
2
- VERSION = '0.8.0'
2
+ VERSION = '0.8.4'
3
3
  end
@@ -53,7 +53,7 @@ module DeployGate
53
53
  identity
54
54
  end
55
55
 
56
- # Support Xcode7 more
56
+ # TODO: Need to support UDID additions for watchOS and App Extension
57
57
  # @return [String]
58
58
  def target_bundle_identifier
59
59
  bundle_identifier = nil
@@ -96,7 +96,17 @@ module DeployGate
96
96
 
97
97
  Xcodeproj::Project.open(@xcodeproj).targets.each do |target|
98
98
  target.build_configuration_list.build_configurations.each do |build_configuration|
99
- next if build_configuration.name != specified_configuration
99
+ # Used the following code as an example
100
+ # https://github.com/fastlane/fastlane/blob/2.148.1/gym/lib/gym/code_signing_mapping.rb#L138
101
+ current = build_configuration.build_settings
102
+ next if gym.test_target?(current)
103
+ sdk_root = build_configuration.resolve_build_setting("SDKROOT", target)
104
+ next unless gym.same_platform?(sdk_root)
105
+ next unless specified_configuration == build_configuration.name
106
+
107
+ # If SKIP_INSTALL is true, it is an app extension or watch app
108
+ next if current["SKIP_INSTALL"]
109
+
100
110
  block.call(build_configuration, target)
101
111
  end
102
112
  end
@@ -80,7 +80,7 @@ module DeployGate
80
80
  certificates = installed_certificates()
81
81
  ids = []
82
82
  certificates.each do |current|
83
- next unless current.match(/iPhone Distribution:/)
83
+ next unless current.match(/iPhone Distribution:/) || current.match(/Apple Distribution:/)
84
84
  begin
85
85
  (ids << current.match(/.*\) (.*) \".*/)[1])
86
86
  rescue
@@ -92,12 +92,12 @@ module DeployGate
92
92
  end
93
93
 
94
94
  # @return [Array]
95
- def installed_distribution_conflicting_certificates
95
+ def installed_distribution_conflicting_certificates_by(distribution_name)
96
96
  certificates = installed_certificates()
97
97
  names = []
98
98
  certificates.each do |current|
99
99
  begin
100
- names << current.match(/(iPhone Distribution:.*)/)[1]
100
+ names << current.match(/(#{distribution_name}:.*)/)[1]
101
101
  rescue
102
102
  end
103
103
  end
@@ -106,7 +106,7 @@ module DeployGate
106
106
  conflicting_certificates = []
107
107
  certificates.each do |current|
108
108
  begin
109
- name = current.match(/(iPhone Distribution:.*)/)[1]
109
+ name = current.match(/(#{distribution_name}:.*)/)[1]
110
110
  next unless conflicting_names.include?(name)
111
111
  conflicting_certificates << current
112
112
  rescue
@@ -255,12 +255,16 @@ module DeployGate
255
255
  exit
256
256
  end
257
257
 
258
- conflicting_certificates = installed_distribution_conflicting_certificates
259
- if conflicting_certificates.count > 0
258
+ iphone_conflicting_certificates = installed_distribution_conflicting_certificates_by('iPhone Distribution')
259
+ apple_conflicting_certificates = installed_distribution_conflicting_certificates_by('Apple Distribution')
260
+ if iphone_conflicting_certificates.count > 0 || apple_conflicting_certificates.count > 0
260
261
  puts HighLine.color(I18n.t('xcode.export.check_local_certificates.conflict_certificate.error_message'), HighLine::RED)
261
262
  puts ''
262
263
  puts I18n.t('xcode.export.check_local_certificates.conflict_certificate.note')
263
- conflicting_certificates.each do |certificate|
264
+ iphone_conflicting_certificates.each do |certificate|
265
+ puts certificate
266
+ end
267
+ apple_conflicting_certificates.each do |certificate|
264
268
  puts certificate
265
269
  end
266
270
  puts ""
@@ -28,10 +28,16 @@ module DeployGate
28
28
 
29
29
  values = {
30
30
  export_method: export_method,
31
- project: ios_analyze.xcodeproj,
32
31
  configuration: build_configuration || DeployGate::Xcode::Analyze::DEFAULT_BUILD_CONFIGURATION,
33
32
  scheme: target_scheme
34
33
  }
34
+
35
+ if ios_analyze.build_workspace
36
+ values[:workspace] = ios_analyze.build_workspace
37
+ else
38
+ values[:project] = ios_analyze.xcodeproj
39
+ end
40
+
35
41
  values[:codesigning_identity] = codesigning_identity if codesigning_identity
36
42
  if allow_provisioning_updates
37
43
  values[:xcargs] = '-allowProvisioningUpdates'
@@ -35,16 +35,22 @@ module DeployGate
35
35
 
36
36
  # @return [Array]
37
37
  def all_create
38
- if @member_center.adhoc?
39
- prod_certs = @member_center.launcher.certificate.production.all
40
- else
41
- prod_certs = @member_center.launcher.certificate.all.reject{|cert| cert.class != Spaceship::Portal::Certificate::InHouse}
42
- end
38
+ prod_certs = if @member_center.adhoc?
39
+ @member_center.launcher.certificate.all.select{|cert|
40
+ cert.class == Spaceship::Portal::Certificate::Production ||
41
+ cert.class == Spaceship::Portal::Certificate::AppleDistribution
42
+ }
43
+ else
44
+ @member_center.launcher.certificate.all.select{|cert|
45
+ cert.class == Spaceship::Portal::Certificate::InHouse
46
+ }
47
+ end
43
48
 
44
49
  # check local install certificate
45
50
  FileUtils.mkdir_p(CERTIFICATE_OUTPUT_PATH)
46
51
  distribution_cert_ids = []
47
52
  prod_certs.each do |cert|
53
+ next if cert.expires < Time.now
48
54
  path = File.join(CERTIFICATE_OUTPUT_PATH, "#{cert.id}.cer")
49
55
  raw_data = cert.download_raw
50
56
  File.write(path, raw_data)
data/lib/deploygate.rb CHANGED
@@ -1,3 +1,4 @@
1
+ require "resolv-replace"
1
2
  require "commander"
2
3
  require "json"
3
4
  require "httpclient"
@@ -1,31 +1,4 @@
1
1
  describe DeployGate::API::V1::User do
2
- describe "#create" do
3
- it "success" do
4
- name = 'test'
5
- email = 'email'
6
- password = 'password'
7
- token = 'token'
8
- response = {
9
- :error => false,
10
- :because => '',
11
- :results => {
12
- :user => {:name => name},
13
- :api_token => token
14
- }
15
- }
16
- stub_request(:post, "#{API_ENDPOINT}/users").
17
- to_return(:body => response.to_json)
18
-
19
- results = DeployGate::API::V1::User.create(name, email, password)
20
- expect(results).to eq({
21
- :error => response[:error],
22
- :message => response[:because],
23
- :name => name,
24
- :token => token
25
- })
26
- end
27
- end
28
-
29
2
  describe "#registered?" do
30
3
  it "registered" do
31
4
  name = 'test'
@@ -61,6 +61,7 @@ describe DeployGate::Xcode::Export do
61
61
  before do
62
62
  @distribution_certificate_id = 'distribution_certificate_id'
63
63
  @distribution_certificate = " 1) #{@distribution_certificate_id} \"iPhone Distribution: DeployGate Inc.\""
64
+ @apple_distribution_certificate = " 1) #{@distribution_certificate_id} \"Apple Distribution: DeployGate Inc.\""
64
65
  @not_distribution_certificate = " 1) xxxxxxxxxxxxxx \"iPhone Developer: DeployGate Inc.\""
65
66
  end
66
67
  it "not installed distribution certificate" do
@@ -74,23 +75,44 @@ describe DeployGate::Xcode::Export do
74
75
  ids = DeployGate::Xcode::Export.installed_distribution_certificate_ids
75
76
  expect(ids).to eql([@distribution_certificate_id])
76
77
  end
78
+
79
+ it "installed apple distribution certificate" do
80
+ allow(DeployGate::Xcode::Export).to receive(:installed_certificates).and_return([@apple_distribution_certificate, @not_distribution_certificate])
81
+
82
+ ids = DeployGate::Xcode::Export.installed_distribution_certificate_ids
83
+ expect(ids).to eql([@distribution_certificate_id])
84
+ end
77
85
  end
78
86
 
79
- describe "#installed_distribution_conflicting_certificates" do
87
+ describe "#installed_distribution_conflicting_certificates_by" do
80
88
  before do
81
89
  @distribution_certificate = " 1) xxxxxxxxxx \"iPhone Distribution: DeployGate Inc.\""
82
90
  @distribution_certificate2 = " 2) yyyyyyyyyyyy \"iPhone Distribution: DeployGate Inc.\""
83
91
  @distribution_certificate3 = " 2) yyyyyyyyyyyy \"iPhone Distribution: DeployGate Inc2.\""
92
+
93
+ @apple_distribution_certificate = " 1) xxxxxxxxxxx \"Apple Distribution: DeployGate Inc.\""
94
+ @apple_distribution_certificate2 = " 2) yyyyyyyyyyyy \"Apple Distribution: DeployGate Inc.\""
95
+ @apple_distribution_certificate3 = " 2) yyyyyyyyyyyy \"Apple Distribution: DeployGate Inc2.\""
84
96
  end
85
97
 
86
98
  it "conflicting" do
87
99
  allow(DeployGate::Xcode::Export).to receive(:installed_certificates).and_return([@distribution_certificate, @distribution_certificate2])
88
- expect(DeployGate::Xcode::Export.installed_distribution_conflicting_certificates.count).to eql 2
100
+ expect(DeployGate::Xcode::Export.installed_distribution_conflicting_certificates_by('iPhone Distribution').count).to eql 2
101
+ end
102
+
103
+ it "conflicting by apple" do
104
+ allow(DeployGate::Xcode::Export).to receive(:installed_certificates).and_return([@apple_distribution_certificate, @apple_distribution_certificate2])
105
+ expect(DeployGate::Xcode::Export.installed_distribution_conflicting_certificates_by('Apple Distribution').count).to eql 2
89
106
  end
90
107
 
91
108
  it "not conflicting" do
92
109
  allow(DeployGate::Xcode::Export).to receive(:installed_certificates).and_return([@distribution_certificate, @distribution_certificate3])
93
- expect(DeployGate::Xcode::Export.installed_distribution_conflicting_certificates.count).to eql 0
110
+ expect(DeployGate::Xcode::Export.installed_distribution_conflicting_certificates_by('iPhone Distribution').count).to eql 0
111
+ end
112
+
113
+ it "not conflicting by apple" do
114
+ allow(DeployGate::Xcode::Export).to receive(:installed_certificates).and_return([@apple_distribution_certificate, @apple_distribution_certificate3])
115
+ expect(DeployGate::Xcode::Export.installed_distribution_conflicting_certificates_by('Apple Distribution').count).to eql 0
94
116
  end
95
117
  end
96
118
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: deploygate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.0
4
+ version: 0.8.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - deploygate
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-21 00:00:00.000000000 Z
11
+ date: 2022-01-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -424,8 +424,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
424
424
  - !ruby/object:Gem::Version
425
425
  version: '0'
426
426
  requirements: []
427
- rubyforge_project:
428
- rubygems_version: 2.7.7
427
+ rubygems_version: 3.0.8
429
428
  signing_key:
430
429
  specification_version: 4
431
430
  summary: A command-line interface for DeployGate