fastlane 2.69.2 → 2.69.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/fastlane/lib/fastlane/version.rb +1 -1
  3. data/fastlane/swift/Appfile.swift +17 -0
  4. data/fastlane/swift/ArgumentProcessor.swift +72 -0
  5. data/fastlane/swift/Deliverfile.swift +14 -0
  6. data/fastlane/swift/DeliverfileProtocol.swift +118 -0
  7. data/fastlane/swift/Fastfile.swift +12 -0
  8. data/fastlane/swift/Fastlane.swift +3739 -0
  9. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.pbxproj +409 -0
  10. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  11. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/project.xcworkspace/xcuserdata/liebowitz.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  12. data/fastlane/swift/FastlaneSwiftRunner/FastlaneSwiftRunner.xcodeproj/xcshareddata/xcschemes/FastlaneRunner.xcscheme +103 -0
  13. data/fastlane/swift/Gymfile.swift +14 -0
  14. data/fastlane/swift/GymfileProtocol.swift +86 -0
  15. data/fastlane/swift/LaneFileProtocol.swift +103 -0
  16. data/fastlane/swift/Matchfile.swift +14 -0
  17. data/fastlane/swift/MatchfileProtocol.swift +54 -0
  18. data/fastlane/swift/Precheckfile.swift +14 -0
  19. data/fastlane/swift/PrecheckfileProtocol.swift +24 -0
  20. data/fastlane/swift/RubyCommand.swift +138 -0
  21. data/fastlane/swift/Runner.swift +190 -0
  22. data/fastlane/swift/RunnerArgument.swift +18 -0
  23. data/fastlane/swift/Scanfile.swift +14 -0
  24. data/fastlane/swift/ScanfileProtocol.swift +88 -0
  25. data/fastlane/swift/Screengrabfile.swift +14 -0
  26. data/fastlane/swift/ScreengrabfileProtocol.swift +48 -0
  27. data/fastlane/swift/Snapshotfile.swift +14 -0
  28. data/fastlane/swift/SnapshotfileProtocol.swift +70 -0
  29. data/fastlane/swift/SocketClient.swift +283 -0
  30. data/fastlane/swift/SocketClientDelegateProtocol.swift +19 -0
  31. data/fastlane/swift/SocketResponse.swift +74 -0
  32. data/fastlane/swift/main.swift +43 -0
  33. data/match/lib/match/encrypt.rb +12 -0
  34. metadata +32 -2
@@ -0,0 +1,190 @@
1
+ //
2
+ // Runner.swift
3
+ // FastlaneSwiftRunner
4
+ //
5
+ // Created by Joshua Liebowitz on 8/26/17.
6
+ // Copyright © 2017 Joshua Liebowitz. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+
11
+ let logger: Logger = {
12
+ return Logger()
13
+ }()
14
+
15
+ let runner: Runner = {
16
+ return Runner()
17
+ }()
18
+
19
+ func desc(_ laneDescription: String) {
20
+ // no-op, this is handled in fastlane/lane_list.rb
21
+ }
22
+
23
+ class Runner {
24
+ fileprivate var thread: Thread!
25
+ fileprivate var socketClient: SocketClient!
26
+ fileprivate let dispatchGroup: DispatchGroup = DispatchGroup()
27
+ fileprivate var returnValue: String? // lol, so safe
28
+ fileprivate var currentlyExecutingCommand: RubyCommandable? = nil
29
+ fileprivate var shouldLeaveDispatchGroupDuringDisconnect = false
30
+
31
+ func executeCommand(_ command: RubyCommandable) -> String {
32
+ self.dispatchGroup.enter()
33
+ currentlyExecutingCommand = command
34
+ socketClient.send(rubyCommand: command)
35
+
36
+ let secondsToWait = DispatchTimeInterval.seconds(SocketClient.defaultCommandTimeoutSeconds)
37
+ let connectTimeout = DispatchTime.now() + secondsToWait
38
+ let timeoutResult = self.dispatchGroup.wait(timeout: connectTimeout)
39
+ let failureMessage = "command didn't execute in: \(SocketClient.defaultCommandTimeoutSeconds) seconds"
40
+ let success = testDispatchTimeoutResult(timeoutResult, failureMessage: failureMessage, timeToWait: secondsToWait)
41
+ guard success else {
42
+ log(message: "command timeout")
43
+ fatalError()
44
+ }
45
+
46
+ if let returnValue = self.returnValue {
47
+ return returnValue
48
+ } else {
49
+ return ""
50
+ }
51
+ }
52
+ }
53
+
54
+ // Handle threading stuff
55
+ extension Runner {
56
+ func startSocketThread() {
57
+ let secondsToWait = DispatchTimeInterval.seconds(SocketClient.connectTimeoutSeconds)
58
+
59
+ self.dispatchGroup.enter()
60
+
61
+ self.socketClient = SocketClient(commandTimeoutSeconds:timeout, socketDelegate: self)
62
+ self.thread = Thread(target: self, selector: #selector(startSocketComs), object: nil)
63
+ self.thread!.name = "socket thread"
64
+ self.thread!.start()
65
+
66
+ let connectTimeout = DispatchTime.now() + secondsToWait
67
+ let timeoutResult = self.dispatchGroup.wait(timeout: connectTimeout)
68
+
69
+ let failureMessage = "couldn't start socket thread in: \(SocketClient.connectTimeoutSeconds) seconds"
70
+ let success = testDispatchTimeoutResult(timeoutResult, failureMessage: failureMessage, timeToWait: secondsToWait)
71
+ guard success else {
72
+ log(message: "socket thread timeout")
73
+ fatalError()
74
+ }
75
+ }
76
+
77
+ func disconnectFromFastlaneProcess() {
78
+ self.shouldLeaveDispatchGroupDuringDisconnect = true
79
+ self.dispatchGroup.enter()
80
+ socketClient.sendComplete()
81
+
82
+ let connectTimeout = DispatchTime.now() + 2
83
+ _ = self.dispatchGroup.wait(timeout: connectTimeout)
84
+ }
85
+
86
+ @objc func startSocketComs() {
87
+ guard let socketClient = self.socketClient else {
88
+ return
89
+ }
90
+
91
+ socketClient.connectAndOpenStreams()
92
+ self.dispatchGroup.leave()
93
+ }
94
+
95
+ fileprivate func testDispatchTimeoutResult(_ timeoutResult: DispatchTimeoutResult, failureMessage: String, timeToWait: DispatchTimeInterval) -> Bool {
96
+ switch timeoutResult {
97
+ case .success:
98
+ return true
99
+ case .timedOut:
100
+ log(message: "timeout: \(failureMessage)")
101
+ return false
102
+ }
103
+ }
104
+ }
105
+
106
+ extension Runner : SocketClientDelegateProtocol {
107
+ func commandExecuted(serverResponse: SocketClientResponse) {
108
+ switch serverResponse {
109
+ case .success(let returnedObject, let closureArgumentValue):
110
+ verbose(message: "command executed")
111
+ self.returnValue = returnedObject
112
+ if let command = self.currentlyExecutingCommand as? RubyCommand {
113
+ if let closureArgumentValue = closureArgumentValue {
114
+ command.performCallback(callbackArg: closureArgumentValue)
115
+ }
116
+ }
117
+ self.dispatchGroup.leave()
118
+
119
+ case .alreadyClosedSockets, .connectionFailure, .malformedRequest, .malformedResponse, .serverError:
120
+ log(message: "error encountered while executing command:\n\(serverResponse)")
121
+ self.dispatchGroup.leave()
122
+
123
+ case .commandTimeout(let timeout):
124
+ log(message: "Runner timed out after \(timeout) second(s)")
125
+ }
126
+ }
127
+
128
+ func connectionsOpened() {
129
+ DispatchQueue.main.async {
130
+ verbose(message: "connected!")
131
+ }
132
+ }
133
+
134
+ func connectionsClosed() {
135
+ DispatchQueue.main.async {
136
+ self.thread?.cancel()
137
+ self.thread = nil
138
+ self.socketClient = nil
139
+ verbose(message: "connection closed!")
140
+ if self.shouldLeaveDispatchGroupDuringDisconnect {
141
+ self.dispatchGroup.leave()
142
+ }
143
+ exit(0)
144
+ }
145
+ }
146
+ }
147
+
148
+ class Logger {
149
+ enum LogMode {
150
+ init(logMode: String) {
151
+ switch logMode {
152
+ case "normal", "default":
153
+ self = .normal
154
+ case "verbose":
155
+ self = .verbose
156
+ default:
157
+ logger.log(message: "unrecognized log mode: \(logMode), defaulting to 'normal'")
158
+ self = .normal
159
+ }
160
+ }
161
+ case normal
162
+ case verbose
163
+ }
164
+
165
+ public static var logMode: LogMode = .normal
166
+
167
+ func log(message: String) {
168
+ let timestamp = NSDate().timeIntervalSince1970
169
+ print("[\(timestamp)]: \(message)")
170
+ }
171
+
172
+ func verbose(message: String) {
173
+ if Logger.logMode == .verbose {
174
+ let timestamp = NSDate().timeIntervalSince1970
175
+ print("[\(timestamp)]: \(message)")
176
+ }
177
+ }
178
+ }
179
+
180
+ func log(message: String) {
181
+ logger.log(message: message)
182
+ }
183
+
184
+ func verbose(message: String) {
185
+ logger.verbose(message: message)
186
+ }
187
+
188
+ // Please don't remove the lines below
189
+ // They are used to detect outdated files
190
+ // FastlaneRunnerAPIVersion [0.9.1]
@@ -0,0 +1,18 @@
1
+ //
2
+ // RunnerArgument.swift
3
+ // FastlaneSwiftRunner
4
+ //
5
+ // Created by Joshua Liebowitz on 9/1/17.
6
+ // Copyright © 2017 Joshua Liebowitz. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+
11
+ struct RunnerArgument {
12
+ let name: String
13
+ let value: String
14
+ }
15
+
16
+ // Please don't remove the lines below
17
+ // They are used to detect outdated files
18
+ // FastlaneRunnerAPIVersion [0.9.1]
@@ -0,0 +1,14 @@
1
+ // This class is automatically included in FastlaneRunner during build
2
+
3
+ // This autogenerated file will be overwritten or replaced during build time, or when you initialize `scan`
4
+ class Scanfile: ScanfileProtocol {
5
+ // If you want to enable `scan`, run `fastlane scan init`
6
+ // After, this file will be replaced with a custom implementation that contains values you supplied
7
+ // during the `init` process, and you won't see this message
8
+ }
9
+
10
+
11
+
12
+
13
+
14
+ // Generated with fastlane 2.69.2
@@ -0,0 +1,88 @@
1
+ protocol ScanfileProtocol: class {
2
+ var workspace: String? { get }
3
+ var project: String? { get }
4
+ var device: String? { get }
5
+ var toolchain: String? { get }
6
+ var devices: [String]? { get }
7
+ var scheme: String? { get }
8
+ var clean: Bool { get }
9
+ var codeCoverage: Bool? { get }
10
+ var addressSanitizer: Bool? { get }
11
+ var threadSanitizer: Bool? { get }
12
+ var skipBuild: Bool { get }
13
+ var outputDirectory: String { get }
14
+ var outputStyle: String? { get }
15
+ var outputTypes: String { get }
16
+ var outputFiles: String? { get }
17
+ var buildlogPath: String { get }
18
+ var includeSimulatorLogs: Bool { get }
19
+ var formatter: String? { get }
20
+ var testWithoutBuilding: Bool? { get }
21
+ var buildForTesting: Bool? { get }
22
+ var xctestrun: String? { get }
23
+ var derivedDataPath: String? { get }
24
+ var resultBundle: String? { get }
25
+ var sdk: String? { get }
26
+ var openReport: Bool { get }
27
+ var configuration: String? { get }
28
+ var destination: String? { get }
29
+ var xcargs: String? { get }
30
+ var xcconfig: String? { get }
31
+ var onlyTesting: String? { get }
32
+ var skipTesting: String? { get }
33
+ var slackUrl: String? { get }
34
+ var slackChannel: String? { get }
35
+ var slackMessage: String? { get }
36
+ var skipSlack: Bool { get }
37
+ var slackOnlyOnFailure: Bool { get }
38
+ var useClangReportName: Bool { get }
39
+ var customReportFileName: String? { get }
40
+ var failBuild: Bool { get }
41
+ }
42
+
43
+ extension ScanfileProtocol {
44
+ var workspace: String? { return nil }
45
+ var project: String? { return nil }
46
+ var device: String? { return nil }
47
+ var toolchain: String? { return nil }
48
+ var devices: [String]? { return nil }
49
+ var scheme: String? { return nil }
50
+ var clean: Bool { return false }
51
+ var codeCoverage: Bool? { return nil }
52
+ var addressSanitizer: Bool? { return nil }
53
+ var threadSanitizer: Bool? { return nil }
54
+ var skipBuild: Bool { return false }
55
+ var outputDirectory: String { return "./test_output" }
56
+ var outputStyle: String? { return nil }
57
+ var outputTypes: String { return "html,junit" }
58
+ var outputFiles: String? { return nil }
59
+ var buildlogPath: String { return "~/Library/Logs/scan" }
60
+ var includeSimulatorLogs: Bool { return false }
61
+ var formatter: String? { return nil }
62
+ var testWithoutBuilding: Bool? { return nil }
63
+ var buildForTesting: Bool? { return nil }
64
+ var xctestrun: String? { return nil }
65
+ var derivedDataPath: String? { return nil }
66
+ var resultBundle: String? { return nil }
67
+ var sdk: String? { return nil }
68
+ var openReport: Bool { return false }
69
+ var configuration: String? { return nil }
70
+ var destination: String? { return nil }
71
+ var xcargs: String? { return nil }
72
+ var xcconfig: String? { return nil }
73
+ var onlyTesting: String? { return nil }
74
+ var skipTesting: String? { return nil }
75
+ var slackUrl: String? { return nil }
76
+ var slackChannel: String? { return nil }
77
+ var slackMessage: String? { return nil }
78
+ var skipSlack: Bool { return false }
79
+ var slackOnlyOnFailure: Bool { return false }
80
+ var useClangReportName: Bool { return false }
81
+ var customReportFileName: String? { return nil }
82
+ var failBuild: Bool { return true }
83
+ }
84
+
85
+
86
+ // Please don't remove the lines below
87
+ // They are used to detect outdated files
88
+ // FastlaneRunnerAPIVersion [0.9.1]
@@ -0,0 +1,14 @@
1
+ // This class is automatically included in FastlaneRunner during build
2
+
3
+ // This autogenerated file will be overwritten or replaced during build time, or when you initialize `screengrab`
4
+ class Screengrabfile: ScreengrabfileProtocol {
5
+ // If you want to enable `screengrab`, run `fastlane screengrab init`
6
+ // After, this file will be replaced with a custom implementation that contains values you supplied
7
+ // during the `init` process, and you won't see this message
8
+ }
9
+
10
+
11
+
12
+
13
+
14
+ // Generated with fastlane 2.69.2
@@ -0,0 +1,48 @@
1
+ protocol ScreengrabfileProtocol: class {
2
+ var androidHome: String? { get }
3
+ var buildToolsVersion: String? { get }
4
+ var locales: [String] { get }
5
+ var clearPreviousScreenshots: Bool { get }
6
+ var outputDirectory: String { get }
7
+ var skipOpenSummary: Bool { get }
8
+ var appPackageName: String { get }
9
+ var testsPackageName: String? { get }
10
+ var useTestsInPackages: [String]? { get }
11
+ var useTestsInClasses: [String]? { get }
12
+ var launchArguments: [String]? { get }
13
+ var testInstrumentationRunner: String { get }
14
+ var endingLocale: String { get }
15
+ var appApkPath: String? { get }
16
+ var testsApkPath: String? { get }
17
+ var specificDevice: String? { get }
18
+ var deviceType: String { get }
19
+ var exitOnTestFailure: Bool { get }
20
+ var reinstallApp: Bool { get }
21
+ }
22
+
23
+ extension ScreengrabfileProtocol {
24
+ var androidHome: String? { return nil }
25
+ var buildToolsVersion: String? { return nil }
26
+ var locales: [String] { return ["en-US"] }
27
+ var clearPreviousScreenshots: Bool { return false }
28
+ var outputDirectory: String { return "fastlane/metadata/android" }
29
+ var skipOpenSummary: Bool { return false }
30
+ var appPackageName: String { return "" }
31
+ var testsPackageName: String? { return nil }
32
+ var useTestsInPackages: [String]? { return nil }
33
+ var useTestsInClasses: [String]? { return nil }
34
+ var launchArguments: [String]? { return nil }
35
+ var testInstrumentationRunner: String { return "android.support.test.runner.AndroidJUnitRunner" }
36
+ var endingLocale: String { return "en-US" }
37
+ var appApkPath: String? { return nil }
38
+ var testsApkPath: String? { return nil }
39
+ var specificDevice: String? { return nil }
40
+ var deviceType: String { return "phone" }
41
+ var exitOnTestFailure: Bool { return true }
42
+ var reinstallApp: Bool { return false }
43
+ }
44
+
45
+
46
+ // Please don't remove the lines below
47
+ // They are used to detect outdated files
48
+ // FastlaneRunnerAPIVersion [0.9.1]
@@ -0,0 +1,14 @@
1
+ // This class is automatically included in FastlaneRunner during build
2
+
3
+ // This autogenerated file will be overwritten or replaced during build time, or when you initialize `snapshot`
4
+ class Snapshotfile: SnapshotfileProtocol {
5
+ // If you want to enable `snapshot`, run `fastlane snapshot init`
6
+ // After, this file will be replaced with a custom implementation that contains values you supplied
7
+ // during the `init` process, and you won't see this message
8
+ }
9
+
10
+
11
+
12
+
13
+
14
+ // Generated with fastlane 2.69.2
@@ -0,0 +1,70 @@
1
+ protocol SnapshotfileProtocol: class {
2
+ var workspace: String? { get }
3
+ var project: String? { get }
4
+ var xcargs: String? { get }
5
+ var devices: [String]? { get }
6
+ var languages: [String] { get }
7
+ var launchArguments: [String] { get }
8
+ var outputDirectory: String { get }
9
+ var outputSimulatorLogs: Bool { get }
10
+ var iosVersion: String? { get }
11
+ var skipOpenSummary: Bool { get }
12
+ var skipHelperVersionCheck: Bool { get }
13
+ var clearPreviousScreenshots: Bool { get }
14
+ var reinstallApp: Bool { get }
15
+ var eraseSimulator: Bool { get }
16
+ var localizeSimulator: Bool { get }
17
+ var appIdentifier: String? { get }
18
+ var addPhotos: [String]? { get }
19
+ var addVideos: [String]? { get }
20
+ var buildlogPath: String { get }
21
+ var clean: Bool { get }
22
+ var configuration: String? { get }
23
+ var xcprettyArgs: String? { get }
24
+ var sdk: String? { get }
25
+ var scheme: String? { get }
26
+ var numberOfRetries: Int { get }
27
+ var stopAfterFirstError: Bool { get }
28
+ var derivedDataPath: String? { get }
29
+ var testTargetName: String? { get }
30
+ var namespaceLogFiles: String? { get }
31
+ var concurrentSimulators: Bool { get }
32
+ }
33
+
34
+ extension SnapshotfileProtocol {
35
+ var workspace: String? { return nil }
36
+ var project: String? { return nil }
37
+ var xcargs: String? { return nil }
38
+ var devices: [String]? { return nil }
39
+ var languages: [String] { return ["en-US"] }
40
+ var launchArguments: [String] { return [""] }
41
+ var outputDirectory: String { return "screenshots" }
42
+ var outputSimulatorLogs: Bool { return false }
43
+ var iosVersion: String? { return nil }
44
+ var skipOpenSummary: Bool { return false }
45
+ var skipHelperVersionCheck: Bool { return false }
46
+ var clearPreviousScreenshots: Bool { return false }
47
+ var reinstallApp: Bool { return false }
48
+ var eraseSimulator: Bool { return false }
49
+ var localizeSimulator: Bool { return false }
50
+ var appIdentifier: String? { return nil }
51
+ var addPhotos: [String]? { return nil }
52
+ var addVideos: [String]? { return nil }
53
+ var buildlogPath: String { return "~/Library/Logs/snapshot" }
54
+ var clean: Bool { return false }
55
+ var configuration: String? { return nil }
56
+ var xcprettyArgs: String? { return nil }
57
+ var sdk: String? { return nil }
58
+ var scheme: String? { return nil }
59
+ var numberOfRetries: Int { return 1 }
60
+ var stopAfterFirstError: Bool { return false }
61
+ var derivedDataPath: String? { return nil }
62
+ var testTargetName: String? { return nil }
63
+ var namespaceLogFiles: String? { return nil }
64
+ var concurrentSimulators: Bool { return true }
65
+ }
66
+
67
+
68
+ // Please don't remove the lines below
69
+ // They are used to detect outdated files
70
+ // FastlaneRunnerAPIVersion [0.9.1]