fastlane 2.222.0 → 2.223.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +98 -98
- data/deliver/lib/deliver/runner.rb +9 -0
- data/fastlane/lib/fastlane/actions/changelog_from_git_commits.rb +7 -3
- data/fastlane/lib/fastlane/actions/slack.rb +9 -2
- data/fastlane/lib/fastlane/actions/testfairy.rb +9 -1
- data/fastlane/lib/fastlane/fast_file.rb +5 -1
- data/fastlane/lib/fastlane/helper/git_helper.rb +4 -2
- data/fastlane/lib/fastlane/notification/slack.rb +3 -2
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane/swift/Deliverfile.swift +1 -1
- data/fastlane/swift/DeliverfileProtocol.swift +1 -1
- data/fastlane/swift/Fastlane.swift +78 -18
- data/fastlane/swift/Gymfile.swift +1 -1
- data/fastlane/swift/GymfileProtocol.swift +5 -1
- data/fastlane/swift/Matchfile.swift +1 -1
- data/fastlane/swift/MatchfileProtocol.swift +5 -1
- data/fastlane/swift/Precheckfile.swift +1 -1
- data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
- data/fastlane/swift/Scanfile.swift +1 -1
- data/fastlane/swift/ScanfileProtocol.swift +5 -1
- data/fastlane/swift/Screengrabfile.swift +1 -1
- data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
- data/fastlane/swift/Snapshotfile.swift +1 -1
- data/fastlane/swift/SnapshotfileProtocol.swift +5 -1
- data/fastlane/swift/formatting/Brewfile.lock.json +23 -18
- data/fastlane/swift/formatting/Rakefile +1 -0
- data/fastlane_core/lib/fastlane_core/build_watcher.rb +5 -0
- data/fastlane_core/lib/fastlane_core/project.rb +1 -0
- data/gym/lib/gym/options.rb +10 -1
- data/match/lib/match/change_password.rb +2 -1
- data/match/lib/match/encryption/encryption.rb +2 -2
- data/match/lib/match/encryption/openssl.rb +10 -5
- data/match/lib/match/importer.rb +2 -1
- data/match/lib/match/nuke.rb +2 -1
- data/match/lib/match/options.rb +5 -0
- data/match/lib/match/runner.rb +2 -1
- data/pilot/lib/pilot/build_manager.rb +9 -0
- data/scan/lib/scan/module.rb +1 -1
- data/scan/lib/scan/options.rb +10 -1
- data/snapshot/lib/snapshot/options.rb +9 -0
- metadata +20 -20
@@ -125,6 +125,9 @@ public protocol SnapshotfileProtocol: AnyObject {
|
|
125
125
|
/// Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file
|
126
126
|
var disablePackageAutomaticUpdates: Bool { get }
|
127
127
|
|
128
|
+
/// Lets xcodebuild use a specified package authorization provider (keychain|netrc)
|
129
|
+
var packageAuthorizationProvider: String? { get }
|
130
|
+
|
128
131
|
/// The testplan associated with the scheme that should be used for testing
|
129
132
|
var testplan: String? { get }
|
130
133
|
|
@@ -192,6 +195,7 @@ public extension SnapshotfileProtocol {
|
|
192
195
|
var clonedSourcePackagesPath: String? { return nil }
|
193
196
|
var skipPackageDependenciesResolution: Bool { return false }
|
194
197
|
var disablePackageAutomaticUpdates: Bool { return false }
|
198
|
+
var packageAuthorizationProvider: String? { return nil }
|
195
199
|
var testplan: String? { return nil }
|
196
200
|
var onlyTesting: String? { return nil }
|
197
201
|
var skipTesting: String? { return nil }
|
@@ -204,4 +208,4 @@ public extension SnapshotfileProtocol {
|
|
204
208
|
|
205
209
|
// Please don't remove the lines below
|
206
210
|
// They are used to detect outdated files
|
207
|
-
// FastlaneRunnerAPIVersion [0.9.
|
211
|
+
// FastlaneRunnerAPIVersion [0.9.121]
|
@@ -2,45 +2,50 @@
|
|
2
2
|
"entries": {
|
3
3
|
"brew": {
|
4
4
|
"swiftformat": {
|
5
|
-
"version": "0.54.
|
5
|
+
"version": "0.54.5",
|
6
6
|
"bottle": {
|
7
7
|
"rebuild": 0,
|
8
8
|
"root_url": "https://ghcr.io/v2/homebrew/core",
|
9
9
|
"files": {
|
10
|
+
"arm64_sequoia": {
|
11
|
+
"cellar": ":any_skip_relocation",
|
12
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:3fc57cb9abcbfd64106a3b16f51c8851c9877327553ec5fd9b21683d42b3c18d",
|
13
|
+
"sha256": "3fc57cb9abcbfd64106a3b16f51c8851c9877327553ec5fd9b21683d42b3c18d"
|
14
|
+
},
|
10
15
|
"arm64_sonoma": {
|
11
16
|
"cellar": ":any_skip_relocation",
|
12
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
13
|
-
"sha256": "
|
17
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:4d1f7565498827bbc53230f01c2fca4a7d082f4ae16d32ae568ba633c090c6ee",
|
18
|
+
"sha256": "4d1f7565498827bbc53230f01c2fca4a7d082f4ae16d32ae568ba633c090c6ee"
|
14
19
|
},
|
15
20
|
"arm64_ventura": {
|
16
21
|
"cellar": ":any_skip_relocation",
|
17
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
18
|
-
"sha256": "
|
22
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:416b54dc7938754980f9b2d732254ce7a36c401c2df3b68eba47f54db9bb956c",
|
23
|
+
"sha256": "416b54dc7938754980f9b2d732254ce7a36c401c2df3b68eba47f54db9bb956c"
|
19
24
|
},
|
20
25
|
"arm64_monterey": {
|
21
26
|
"cellar": ":any_skip_relocation",
|
22
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
23
|
-
"sha256": "
|
27
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:3b14b0bacb0938c650e2d0d30d1f546ea7bac4feac510be16f09a89abd9f95d4",
|
28
|
+
"sha256": "3b14b0bacb0938c650e2d0d30d1f546ea7bac4feac510be16f09a89abd9f95d4"
|
24
29
|
},
|
25
30
|
"sonoma": {
|
26
31
|
"cellar": ":any_skip_relocation",
|
27
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
28
|
-
"sha256": "
|
32
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:445a0e38bda1f1dbda7c34dbb75a1b4432c5f0de7f9fa8bd4e03a9220b9bda19",
|
33
|
+
"sha256": "445a0e38bda1f1dbda7c34dbb75a1b4432c5f0de7f9fa8bd4e03a9220b9bda19"
|
29
34
|
},
|
30
35
|
"ventura": {
|
31
36
|
"cellar": ":any_skip_relocation",
|
32
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
33
|
-
"sha256": "
|
37
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:508b2e8000078773c7884e17b8d1ca711f4313ba14ff0000f7a28af68b02e71a",
|
38
|
+
"sha256": "508b2e8000078773c7884e17b8d1ca711f4313ba14ff0000f7a28af68b02e71a"
|
34
39
|
},
|
35
40
|
"monterey": {
|
36
41
|
"cellar": ":any_skip_relocation",
|
37
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
38
|
-
"sha256": "
|
42
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8c367a76ca05ba07ffc38a6bb2f5ee0231d363655ed982284afcb4d685fa524e",
|
43
|
+
"sha256": "8c367a76ca05ba07ffc38a6bb2f5ee0231d363655ed982284afcb4d685fa524e"
|
39
44
|
},
|
40
45
|
"x86_64_linux": {
|
41
46
|
"cellar": "/home/linuxbrew/.linuxbrew/Cellar",
|
42
|
-
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:
|
43
|
-
"sha256": "
|
47
|
+
"url": "https://ghcr.io/v2/homebrew/core/swiftformat/blobs/sha256:8e8abc969e1b10e7411a92717703c8cd944c7a3f3fd04e2d232918971ae14662",
|
48
|
+
"sha256": "8e8abc969e1b10e7411a92717703c8cd944c7a3f3fd04e2d232918971ae14662"
|
44
49
|
}
|
45
50
|
}
|
46
51
|
}
|
@@ -82,12 +87,12 @@
|
|
82
87
|
"macOS": "13.6"
|
83
88
|
},
|
84
89
|
"sonoma": {
|
85
|
-
"HOMEBREW_VERSION": "4.3.
|
90
|
+
"HOMEBREW_VERSION": "4.3.24",
|
86
91
|
"HOMEBREW_PREFIX": "/opt/homebrew",
|
87
92
|
"Homebrew/homebrew-core": "api",
|
88
|
-
"CLT": "
|
93
|
+
"CLT": "16.0.0.0.1.1724870825",
|
89
94
|
"Xcode": "15.4",
|
90
|
-
"macOS": "14.
|
95
|
+
"macOS": "14.6.1"
|
91
96
|
}
|
92
97
|
}
|
93
98
|
}
|
@@ -116,6 +116,11 @@ module FastlaneCore
|
|
116
116
|
# Raise error if more than 1 build is returned
|
117
117
|
# This should never happen but need to inform the user if it does
|
118
118
|
matched_builds = version_matches.map(&:builds).flatten
|
119
|
+
|
120
|
+
# Need to filter out duplicate builds (which could be a result from the double X.Y.0 and X.Y queries)
|
121
|
+
# See: https://github.com/fastlane/fastlane/issues/22248
|
122
|
+
matched_builds = matched_builds.uniq(&:id)
|
123
|
+
|
119
124
|
if matched_builds.size > 1 && !select_latest
|
120
125
|
error_builds = matched_builds.map do |build|
|
121
126
|
"#{build.app_version}(#{build.version}) for #{build.platform} - #{build.processing_state}"
|
@@ -341,6 +341,7 @@ module FastlaneCore
|
|
341
341
|
proj << "-derivedDataPath #{options[:derived_data_path].shellescape}" if options[:derived_data_path]
|
342
342
|
proj << "-xcconfig #{options[:xcconfig].shellescape}" if options[:xcconfig]
|
343
343
|
proj << "-scmProvider system" if options[:use_system_scm]
|
344
|
+
proj << "-packageAuthorizationProvider #{options[:package_authorization_provider].shellescape}" if options[:package_authorization_provider]
|
344
345
|
|
345
346
|
xcode_at_least_11 = FastlaneCore::Helper.xcode_at_least?('11.0')
|
346
347
|
if xcode_at_least_11 && options[:cloned_source_packages_path]
|
data/gym/lib/gym/options.rb
CHANGED
@@ -320,7 +320,16 @@ module Gym
|
|
320
320
|
description: "Lets xcodebuild use system's scm configuration",
|
321
321
|
optional: true,
|
322
322
|
type: Boolean,
|
323
|
-
default_value: false)
|
323
|
+
default_value: false),
|
324
|
+
FastlaneCore::ConfigItem.new(key: :package_authorization_provider,
|
325
|
+
env_name: "GYM_PACKAGE_AUTHORIZATION_PROVIDER",
|
326
|
+
description: "Lets xcodebuild use a specified package authorization provider (keychain|netrc)",
|
327
|
+
optional: true,
|
328
|
+
type: String,
|
329
|
+
verify_block: proc do |value|
|
330
|
+
av = %w(netrc keychain)
|
331
|
+
UI.user_error!("Unsupported authorization provider '#{value}', must be: #{av}") unless av.include?(value)
|
332
|
+
end)
|
324
333
|
]
|
325
334
|
end
|
326
335
|
end
|
@@ -26,7 +26,8 @@ module Match
|
|
26
26
|
git_url: params[:git_url],
|
27
27
|
s3_bucket: params[:s3_bucket],
|
28
28
|
s3_skip_encryption: params[:s3_skip_encryption],
|
29
|
-
working_directory: storage.working_directory
|
29
|
+
working_directory: storage.working_directory,
|
30
|
+
force_legacy_encryption: params[:force_legacy_encryption]
|
30
31
|
})
|
31
32
|
encryption.decrypt_files
|
32
33
|
|
@@ -134,11 +134,11 @@ module Match
|
|
134
134
|
|
135
135
|
# The methods of this class will encrypt or decrypt files in place, by default.
|
136
136
|
class MatchFileEncryption
|
137
|
-
def encrypt(file_path:, password:, output_path: nil)
|
137
|
+
def encrypt(file_path:, password:, output_path: nil, version: 2)
|
138
138
|
output_path = file_path unless output_path
|
139
139
|
data_to_encrypt = File.binread(file_path)
|
140
140
|
e = MatchDataEncryption.new
|
141
|
-
data = e.encrypt(data: data_to_encrypt, password: password)
|
141
|
+
data = e.encrypt(data: data_to_encrypt, password: password, version: version)
|
142
142
|
File.write(output_path, data)
|
143
143
|
end
|
144
144
|
|
@@ -14,18 +14,23 @@ module Match
|
|
14
14
|
|
15
15
|
attr_accessor :working_directory
|
16
16
|
|
17
|
+
attr_accessor :force_legacy_encryption
|
18
|
+
|
17
19
|
def self.configure(params)
|
18
20
|
return self.new(
|
19
21
|
keychain_name: params[:keychain_name],
|
20
|
-
working_directory: params[:working_directory]
|
22
|
+
working_directory: params[:working_directory],
|
23
|
+
force_legacy_encryption: params[:force_legacy_encryption]
|
21
24
|
)
|
22
25
|
end
|
23
26
|
|
24
27
|
# @param keychain_name: The identifier used to store the passphrase in the Keychain
|
25
28
|
# @param working_directory: The path to where the certificates are stored
|
26
|
-
|
29
|
+
# @param force_legacy_encryption: Force use of legacy EncryptionV1 algorithm
|
30
|
+
def initialize(keychain_name: nil, working_directory: nil, force_legacy_encryption: false)
|
27
31
|
self.keychain_name = keychain_name
|
28
32
|
self.working_directory = working_directory
|
33
|
+
self.force_legacy_encryption = force_legacy_encryption
|
29
34
|
end
|
30
35
|
|
31
36
|
def encrypt_files(password: nil)
|
@@ -33,7 +38,7 @@ module Match
|
|
33
38
|
password ||= fetch_password!
|
34
39
|
iterate(self.working_directory) do |current|
|
35
40
|
files << current
|
36
|
-
encrypt_specific_file(path: current, password: password)
|
41
|
+
encrypt_specific_file(path: current, password: password, version: force_legacy_encryption ? 1 : 2)
|
37
42
|
UI.success("🔒 Encrypted '#{File.basename(current)}'") if FastlaneCore::Globals.verbose?
|
38
43
|
end
|
39
44
|
UI.success("🔒 Successfully encrypted certificates repo")
|
@@ -109,10 +114,10 @@ module Match
|
|
109
114
|
return password
|
110
115
|
end
|
111
116
|
|
112
|
-
def encrypt_specific_file(path: nil, password: nil)
|
117
|
+
def encrypt_specific_file(path: nil, password: nil, version: nil)
|
113
118
|
UI.user_error!("No password supplied") if password.to_s.strip.length == 0
|
114
119
|
e = MatchFileEncryption.new
|
115
|
-
e.encrypt(file_path: path, password: password)
|
120
|
+
e.encrypt(file_path: path, password: password, version: version)
|
116
121
|
rescue FastlaneCore::Interface::FastlaneError
|
117
122
|
raise
|
118
123
|
rescue => error
|
data/match/lib/match/importer.rb
CHANGED
@@ -23,7 +23,8 @@ module Match
|
|
23
23
|
git_url: params[:git_url],
|
24
24
|
s3_bucket: params[:s3_bucket],
|
25
25
|
s3_skip_encryption: params[:s3_skip_encryption],
|
26
|
-
working_directory: storage.working_directory
|
26
|
+
working_directory: storage.working_directory,
|
27
|
+
force_legacy_encryption: params[:force_legacy_encryption]
|
27
28
|
})
|
28
29
|
encryption.decrypt_files if encryption
|
29
30
|
UI.success("Repo is at: '#{storage.working_directory}'")
|
data/match/lib/match/nuke.rb
CHANGED
@@ -42,7 +42,8 @@ module Match
|
|
42
42
|
git_url: params[:git_url],
|
43
43
|
s3_bucket: params[:s3_bucket],
|
44
44
|
s3_skip_encryption: params[:s3_skip_encryption],
|
45
|
-
working_directory: storage.working_directory
|
45
|
+
working_directory: storage.working_directory,
|
46
|
+
force_legacy_encryption: params[:force_legacy_encryption]
|
46
47
|
})
|
47
48
|
self.encryption.decrypt_files if self.encryption
|
48
49
|
|
data/match/lib/match/options.rb
CHANGED
@@ -355,6 +355,11 @@ module Match
|
|
355
355
|
description: "Skips setting the partition list (which can sometimes take a long time). Setting the partition list is usually needed to prevent Xcode from prompting to allow a cert to be used for signing",
|
356
356
|
type: Boolean,
|
357
357
|
default_value: false),
|
358
|
+
FastlaneCore::ConfigItem.new(key: :force_legacy_encryption,
|
359
|
+
env_name: "MATCH_FORCE_LEGACY_ENCRYPTION",
|
360
|
+
description: "Force encryption to use legacy cbc algorithm for backwards compatibility with older match versions",
|
361
|
+
type: Boolean,
|
362
|
+
default_value: false),
|
358
363
|
|
359
364
|
# other
|
360
365
|
FastlaneCore::ConfigItem.new(key: :verbose,
|
data/match/lib/match/runner.rb
CHANGED
@@ -49,7 +49,8 @@ module Match
|
|
49
49
|
git_url: params[:git_url],
|
50
50
|
s3_bucket: params[:s3_bucket],
|
51
51
|
s3_skip_encryption: params[:s3_skip_encryption],
|
52
|
-
working_directory: storage.working_directory
|
52
|
+
working_directory: storage.working_directory,
|
53
|
+
force_legacy_encryption: params[:force_legacy_encryption]
|
53
54
|
})
|
54
55
|
encryption.decrypt_files if encryption
|
55
56
|
|
@@ -391,6 +391,7 @@ module Pilot
|
|
391
391
|
end
|
392
392
|
|
393
393
|
# If App Store Connect API token, use token.
|
394
|
+
# If api_key is specified and it is an Individual API Key, don't use token but use username.
|
394
395
|
# If itc_provider was explicitly specified, use it.
|
395
396
|
# If there are multiple teams, infer the provider from the selected team name.
|
396
397
|
# If there are fewer than two teams, don't infer the provider.
|
@@ -407,6 +408,14 @@ module Pilot
|
|
407
408
|
api_key
|
408
409
|
end
|
409
410
|
|
411
|
+
# Currently no kind of transporters accept an Individual API Key. Use username and app-specific password instead.
|
412
|
+
# See https://github.com/fastlane/fastlane/issues/22115
|
413
|
+
is_individual_key = !api_key.nil? && api_key[:issuer_id].nil?
|
414
|
+
if is_individual_key
|
415
|
+
api_key = nil
|
416
|
+
api_token = nil
|
417
|
+
end
|
418
|
+
|
410
419
|
unless api_token.nil?
|
411
420
|
api_token.refresh! if api_token.expired?
|
412
421
|
return FastlaneCore::ItunesTransporter.new(nil, nil, false, nil, api_token.text, altool_compatible_command: true, api_key: api_key)
|
data/scan/lib/scan/module.rb
CHANGED
@@ -24,7 +24,7 @@ module Scan
|
|
24
24
|
|
25
25
|
def building_mac_catalyst_for_mac?
|
26
26
|
return false unless Scan.project
|
27
|
-
Scan.
|
27
|
+
Scan.config[:catalyst_platform] == "macos" && Scan.project.supports_mac_catalyst?
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
data/scan/lib/scan/options.rb
CHANGED
@@ -537,7 +537,16 @@ module Scan
|
|
537
537
|
env_name: "SCAN_FAIL_BUILD",
|
538
538
|
description: "Should this step stop the build if the tests fail? Set this to false if you're using trainer",
|
539
539
|
type: Boolean,
|
540
|
-
default_value: true)
|
540
|
+
default_value: true),
|
541
|
+
FastlaneCore::ConfigItem.new(key: :package_authorization_provider,
|
542
|
+
env_name: "SCAN_PACKAGE_AUTHORIZATION_PROVIDER",
|
543
|
+
description: "Lets xcodebuild use a specified package authorization provider (keychain|netrc)",
|
544
|
+
optional: true,
|
545
|
+
type: String,
|
546
|
+
verify_block: proc do |value|
|
547
|
+
av = %w(netrc keychain)
|
548
|
+
UI.user_error!("Unsupported authorization provider '#{value}', must be: #{av}") unless av.include?(value)
|
549
|
+
end)
|
541
550
|
|
542
551
|
]
|
543
552
|
end
|
@@ -267,6 +267,15 @@ module Snapshot
|
|
267
267
|
description: "Prevents packages from automatically being resolved to versions other than those recorded in the `Package.resolved` file",
|
268
268
|
type: Boolean,
|
269
269
|
default_value: false),
|
270
|
+
FastlaneCore::ConfigItem.new(key: :package_authorization_provider,
|
271
|
+
env_name: "SNAPSHOT_PACKAGE_AUTHORIZATION_PROVIDER",
|
272
|
+
description: "Lets xcodebuild use a specified package authorization provider (keychain|netrc)",
|
273
|
+
optional: true,
|
274
|
+
type: String,
|
275
|
+
verify_block: proc do |value|
|
276
|
+
av = %w(netrc keychain)
|
277
|
+
UI.user_error!("Unsupported authorization provider '#{value}', must be: #{av}") unless av.include?(value)
|
278
|
+
end),
|
270
279
|
FastlaneCore::ConfigItem.new(key: :testplan,
|
271
280
|
env_name: "SNAPSHOT_TESTPLAN",
|
272
281
|
description: "The testplan associated with the scheme that should be used for testing",
|
metadata
CHANGED
@@ -1,39 +1,39 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.223.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Satoshi Namai
|
8
8
|
- Manu Wallner
|
9
|
+
- Felix Krause
|
10
|
+
- Kohki Miki
|
9
11
|
- Max Ott
|
10
|
-
- Luka Mirosevic
|
11
|
-
- Joshua Liebowitz
|
12
|
-
- Iulian Onofrei
|
13
|
-
- Łukasz Grabowski
|
14
|
-
- Manish Rathi
|
15
|
-
- Jimmy Dee
|
16
|
-
- Jan Piotrowski
|
17
|
-
- Aaron Brager
|
18
|
-
- Matthew Ellis
|
19
|
-
- Jérôme Lacoste
|
20
|
-
- Satoshi Namai
|
21
12
|
- Jorge Revuelta H
|
22
|
-
-
|
13
|
+
- Jérôme Lacoste
|
14
|
+
- Aaron Brager
|
15
|
+
- Olivier Halligon
|
16
|
+
- Jimmy Dee
|
17
|
+
- Manish Rathi
|
18
|
+
- Iulian Onofrei
|
19
|
+
- Stefan Natchev
|
23
20
|
- Maksym Grebenets
|
21
|
+
- Roger Oba
|
24
22
|
- Fumiya Nakamura
|
23
|
+
- Matthew Ellis
|
24
|
+
- Łukasz Grabowski
|
25
25
|
- Danielle Tomlinson
|
26
|
-
- Felix Krause
|
27
|
-
- Kohki Miki
|
28
|
-
- Stefan Natchev
|
29
26
|
- Josh Holtz
|
30
|
-
- Helmut Januschka
|
31
|
-
- Roger Oba
|
32
27
|
- Daniel Jankowski
|
28
|
+
- Andrew McBurney
|
29
|
+
- Joshua Liebowitz
|
30
|
+
- Jan Piotrowski
|
31
|
+
- Helmut Januschka
|
32
|
+
- Luka Mirosevic
|
33
33
|
autorequire:
|
34
34
|
bindir: bin
|
35
35
|
cert_chain: []
|
36
|
-
date: 2024-
|
36
|
+
date: 2024-09-27 00:00:00.000000000 Z
|
37
37
|
dependencies:
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: addressable
|