fastlane 2.160.0 → 2.161.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +80 -80
  3. data/fastlane/lib/fastlane/actions/actions_helper.rb +20 -1
  4. data/fastlane/lib/fastlane/actions/app_store_connect_api_key.rb +6 -1
  5. data/fastlane/lib/fastlane/actions/docs/capture_android_screenshots.md +2 -2
  6. data/fastlane/lib/fastlane/actions/docs/capture_ios_screenshots.md +1 -1
  7. data/fastlane/lib/fastlane/actions/docs/create_app_online.md +1 -1
  8. data/fastlane/lib/fastlane/actions/docs/frame_screenshots.md +2 -2
  9. data/fastlane/lib/fastlane/actions/docs/run_tests.md +2 -2
  10. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +3 -3
  11. data/fastlane/lib/fastlane/actions/docs/upload_to_play_store.md +2 -2
  12. data/fastlane/lib/fastlane/actions/docs/upload_to_testflight.md +1 -1
  13. data/fastlane/lib/fastlane/actions/download_dsyms.rb +1 -0
  14. data/fastlane/lib/fastlane/actions/ensure_git_status_clean.rb +13 -2
  15. data/fastlane/lib/fastlane/version.rb +1 -1
  16. data/fastlane/swift/Deliverfile.swift +1 -1
  17. data/fastlane/swift/DeliverfileProtocol.swift +1 -1
  18. data/fastlane/swift/Fastlane.swift +8 -5
  19. data/fastlane/swift/Gymfile.swift +1 -1
  20. data/fastlane/swift/GymfileProtocol.swift +1 -1
  21. data/fastlane/swift/LaneFileProtocol.swift +17 -21
  22. data/fastlane/swift/Matchfile.swift +1 -1
  23. data/fastlane/swift/MatchfileProtocol.swift +2 -2
  24. data/fastlane/swift/Precheckfile.swift +1 -1
  25. data/fastlane/swift/PrecheckfileProtocol.swift +1 -1
  26. data/fastlane/swift/Scanfile.swift +1 -1
  27. data/fastlane/swift/ScanfileProtocol.swift +1 -1
  28. data/fastlane/swift/Screengrabfile.swift +1 -1
  29. data/fastlane/swift/ScreengrabfileProtocol.swift +1 -1
  30. data/fastlane/swift/Snapshotfile.swift +1 -1
  31. data/fastlane/swift/SnapshotfileProtocol.swift +1 -1
  32. data/match/lib/match/options.rb +1 -1
  33. data/spaceship/README.md +1 -1
  34. data/spaceship/lib/spaceship/connect_api/tunes/tunes.rb +4 -1
  35. data/spaceship/lib/spaceship/helper/net_http_generic_request.rb +11 -5
  36. metadata +14 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1397a58b9e5db2690af6f035c6b0599471135fca731aa8ca32d9332e92aa0f4d
4
- data.tar.gz: 28074ccdc0e5948e4d2882d45207229fae454f5712d8a3448e7306bba339a81f
3
+ metadata.gz: b04dd428b80beb70de6d4aa2f7e0348b4e0c0e1d4aa0e781c311ab18e44d0de5
4
+ data.tar.gz: fe4342a1c8d7df3e617c111e37bd3cab7c7b3675875f8bd384917f0cafb1a221
5
5
  SHA512:
6
- metadata.gz: 0cd4759b7d14605eba44cc49c2ba83989b4b2435ecc0b02d9ce7a162c10c67202504eec4ea4e4cd255f866b929419ee6f670828e6992b34a4845789a870daaea
7
- data.tar.gz: 9c1e740b44e8022f87ef2009caaad53bc2ea4c6eb00abe80477c8945bac056e0b6de7c88d90a8e1b85a4ad27ce62fd417b1529e4e1c97c52d321a0f269192cba
6
+ metadata.gz: 9ad358398a4033fe329a06934cee91566dd29c084a0e0e62a86148c0e2b456be46ce008de0b921a68b9d2ffbb3ec11d97a41a286d33cac395d3e4c37ac01adce
7
+ data.tar.gz: 3d5fbd2690e8dafe1efc9fd4a6d63e711b3569b071d00d39b82e078a5c038c6110df73234d0e15ecc03c7f2792253edea430d6e716c460a7d8c9d371deed0dd0
data/README.md CHANGED
@@ -34,49 +34,43 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
34
34
  <!-- This table is regenerated and resorted on each release -->
35
35
  <table id='team'>
36
36
  <tr>
37
- <td id='fumiya-nakamura'>
38
- <a href='https://github.com/nafu'>
39
- <img src='https://github.com/nafu.png?size=140'>
40
- </a>
41
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
42
- </td>
43
37
  <td id='stefan-natchev'>
44
38
  <a href='https://github.com/snatchev'>
45
39
  <img src='https://github.com/snatchev.png?size=140'>
46
40
  </a>
47
41
  <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
48
42
  </td>
49
- <td id='andrew-mcburney'>
50
- <a href='https://github.com/armcburney'>
51
- <img src='https://github.com/armcburney.png?size=140'>
43
+ <td id='jorge-revuelta-h'>
44
+ <a href='https://github.com/minuscorp'>
45
+ <img src='https://github.com/minuscorp.png?size=140'>
52
46
  </a>
53
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
54
48
  </td>
55
- <td id='aaron-brager'>
56
- <a href='https://github.com/getaaron'>
57
- <img src='https://github.com/getaaron.png?size=140'>
49
+ <td id='olivier-halligon'>
50
+ <a href='https://github.com/AliSoftware'>
51
+ <img src='https://github.com/AliSoftware.png?size=140'>
58
52
  </a>
59
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
53
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
60
54
  </td>
61
- <td id='jimmy-dee'>
62
- <a href='https://github.com/jdee'>
63
- <img src='https://github.com/jdee.png?size=140'>
55
+ <td id='fumiya-nakamura'>
56
+ <a href='https://github.com/nafu'>
57
+ <img src='https://github.com/nafu.png?size=140'>
64
58
  </a>
65
- <h4 align='center'>Jimmy Dee</h4>
59
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
66
60
  </td>
67
- </tr>
68
- <tr>
69
- <td id='maksym-grebenets'>
70
- <a href='https://github.com/mgrebenets'>
71
- <img src='https://github.com/mgrebenets.png?size=140'>
61
+ <td id='matthew-ellis'>
62
+ <a href='https://github.com/matthewellis'>
63
+ <img src='https://github.com/matthewellis.png?size=140'>
72
64
  </a>
73
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
65
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
74
66
  </td>
75
- <td id='felix-krause'>
76
- <a href='https://github.com/KrauseFx'>
77
- <img src='https://github.com/KrauseFx.png?size=140'>
67
+ </tr>
68
+ <tr>
69
+ <td id='aaron-brager'>
70
+ <a href='https://github.com/getaaron'>
71
+ <img src='https://github.com/getaaron.png?size=140'>
78
72
  </a>
79
- <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
80
74
  </td>
81
75
  <td id='max-ott'>
82
76
  <a href='https://github.com/max-ott'>
@@ -84,69 +78,63 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
84
78
  </a>
85
79
  <h4 align='center'><a href='https://twitter.com/ott_max'>Max Ott</a></h4>
86
80
  </td>
87
- <td id='jorge-revuelta-h'>
88
- <a href='https://github.com/minuscorp'>
89
- <img src='https://github.com/minuscorp.png?size=140'>
81
+ <td id='felix-krause'>
82
+ <a href='https://github.com/KrauseFx'>
83
+ <img src='https://github.com/KrauseFx.png?size=140'>
90
84
  </a>
91
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
85
+ <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
92
86
  </td>
93
- <td id='kohki-miki'>
94
- <a href='https://github.com/giginet'>
95
- <img src='https://github.com/giginet.png?size=140'>
87
+ <td id='luka-mirosevic'>
88
+ <a href='https://github.com/lmirosevic'>
89
+ <img src='https://github.com/lmirosevic.png?size=140'>
96
90
  </a>
97
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
98
92
  </td>
99
- </tr>
100
- <tr>
101
- <td id='joshua-liebowitz'>
102
- <a href='https://github.com/taquitos'>
103
- <img src='https://github.com/taquitos.png?size=140'>
93
+ <td id='manu-wallner'>
94
+ <a href='https://github.com/milch'>
95
+ <img src='https://github.com/milch.png?size=140'>
104
96
  </a>
105
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
97
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
106
98
  </td>
107
- <td id='olivier-halligon'>
108
- <a href='https://github.com/AliSoftware'>
109
- <img src='https://github.com/AliSoftware.png?size=140'>
99
+ </tr>
100
+ <tr>
101
+ <td id='iulian-onofrei'>
102
+ <a href='https://github.com/revolter'>
103
+ <img src='https://github.com/revolter.png?size=140'>
110
104
  </a>
111
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
112
106
  </td>
113
- <td id='daniel-jankowski'>
114
- <a href='https://github.com/mollyIV'>
115
- <img src='https://github.com/mollyIV.png?size=140'>
107
+ <td id='jimmy-dee'>
108
+ <a href='https://github.com/jdee'>
109
+ <img src='https://github.com/jdee.png?size=140'>
116
110
  </a>
117
- <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
111
+ <h4 align='center'>Jimmy Dee</h4>
118
112
  </td>
119
- <td id='jan-piotrowski'>
120
- <a href='https://github.com/janpio'>
121
- <img src='https://github.com/janpio.png?size=140'>
113
+ <td id='andrew-mcburney'>
114
+ <a href='https://github.com/armcburney'>
115
+ <img src='https://github.com/armcburney.png?size=140'>
122
116
  </a>
123
- <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
117
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
124
118
  </td>
125
- <td id='luka-mirosevic'>
126
- <a href='https://github.com/lmirosevic'>
127
- <img src='https://github.com/lmirosevic.png?size=140'>
119
+ <td id='maksym-grebenets'>
120
+ <a href='https://github.com/mgrebenets'>
121
+ <img src='https://github.com/mgrebenets.png?size=140'>
128
122
  </a>
129
- <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
130
124
  </td>
131
- </tr>
132
- <tr>
133
125
  <td id='josh-holtz'>
134
126
  <a href='https://github.com/joshdholtz'>
135
127
  <img src='https://github.com/joshdholtz.png?size=140'>
136
128
  </a>
137
129
  <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
138
130
  </td>
139
- <td id='helmut-januschka'>
140
- <a href='https://github.com/hjanuschka'>
141
- <img src='https://github.com/hjanuschka.png?size=140'>
142
- </a>
143
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
144
- </td>
145
- <td id='matthew-ellis'>
146
- <a href='https://github.com/matthewellis'>
147
- <img src='https://github.com/matthewellis.png?size=140'>
131
+ </tr>
132
+ <tr>
133
+ <td id='jan-piotrowski'>
134
+ <a href='https://github.com/janpio'>
135
+ <img src='https://github.com/janpio.png?size=140'>
148
136
  </a>
149
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
137
+ <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
150
138
  </td>
151
139
  <td id='danielle-tomlinson'>
152
140
  <a href='https://github.com/endocrimes'>
@@ -154,19 +142,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
154
142
  </a>
155
143
  <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
156
144
  </td>
157
- <td id='iulian-onofrei'>
158
- <a href='https://github.com/revolter'>
159
- <img src='https://github.com/revolter.png?size=140'>
145
+ <td id='kohki-miki'>
146
+ <a href='https://github.com/giginet'>
147
+ <img src='https://github.com/giginet.png?size=140'>
160
148
  </a>
161
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
162
150
  </td>
163
- </tr>
164
- <tr>
165
- <td id='manu-wallner'>
166
- <a href='https://github.com/milch'>
167
- <img src='https://github.com/milch.png?size=140'>
151
+ <td id='helmut-januschka'>
152
+ <a href='https://github.com/hjanuschka'>
153
+ <img src='https://github.com/hjanuschka.png?size=140'>
168
154
  </a>
169
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
170
156
  </td>
171
157
  <td id='jérôme-lacoste'>
172
158
  <a href='https://github.com/lacostej'>
@@ -174,6 +160,20 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
174
160
  </a>
175
161
  <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
176
162
  </td>
163
+ </tr>
164
+ <tr>
165
+ <td id='daniel-jankowski'>
166
+ <a href='https://github.com/mollyIV'>
167
+ <img src='https://github.com/mollyIV.png?size=140'>
168
+ </a>
169
+ <h4 align='center'><a href='https://twitter.com/mollyIV'>Daniel Jankowski</a></h4>
170
+ </td>
171
+ <td id='joshua-liebowitz'>
172
+ <a href='https://github.com/taquitos'>
173
+ <img src='https://github.com/taquitos.png?size=140'>
174
+ </a>
175
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
176
+ </td>
177
177
  </table>
178
178
 
179
179
  Special thanks to all [contributors](https://github.com/fastlane/fastlane/graphs/contributors) for extending and improving _fastlane_.
@@ -4,6 +4,25 @@ module Fastlane
4
4
  LANE_NAME = :LANE_NAME
5
5
  PLATFORM_NAME = :PLATFORM_NAME
6
6
  ENVIRONMENT = :ENVIRONMENT
7
+
8
+ # A slighly decorated hash that will store and fetch sensitive data
9
+ # but not display it while iterating keys and values
10
+ class LaneContextValues < Hash
11
+ def initialize
12
+ @sensitive_context = {}
13
+ end
14
+
15
+ def set_sensitive(key, value)
16
+ @sensitive_context[key] = value
17
+ end
18
+
19
+ def [](key)
20
+ if @sensitive_context.key?(key)
21
+ return @sensitive_context[key]
22
+ end
23
+ super
24
+ end
25
+ end
7
26
  end
8
27
 
9
28
  def self.reset_aliases
@@ -27,7 +46,7 @@ module Fastlane
27
46
 
28
47
  # The shared hash can be accessed by any action and contains information like the screenshots path or beta URL
29
48
  def self.lane_context
30
- @lane_context ||= {}
49
+ @lane_context ||= SharedValues::LaneContextValues.new
31
50
  end
32
51
 
33
52
  # Used in tests to get a clear lane before every test
@@ -17,6 +17,10 @@ module Fastlane
17
17
  UI.user_error!(":key_content or :key_filepath is required")
18
18
  end
19
19
 
20
+ # New lines don't get read properly when coming from an ENV
21
+ # Replacing them literal version with a new line
22
+ key_content = key_content.gsub('\n', "\n") if key_content
23
+
20
24
  # This hash matches the named arguments on
21
25
  # the Spaceship::ConnectAPI::Token.create method
22
26
  key = {
@@ -27,7 +31,7 @@ module Fastlane
27
31
  in_house: in_house
28
32
  }
29
33
 
30
- Actions.lane_context[SharedValues::APP_STORE_CONNECT_API_KEY] = key
34
+ Actions.lane_context.set_sensitive(SharedValues::APP_STORE_CONNECT_API_KEY, key)
31
35
 
32
36
  return key
33
37
  end
@@ -55,6 +59,7 @@ module Fastlane
55
59
  FastlaneCore::ConfigItem.new(key: :key_content,
56
60
  env_name: "APP_STORE_CONNECT_API_KEY_KEY",
57
61
  description: "The content of the key p8 file",
62
+ sensitive: true,
58
63
  optional: true,
59
64
  conflicting_options: [:filepath]),
60
65
  FastlaneCore::ConfigItem.new(key: :duration,
@@ -198,7 +198,7 @@ class JUnit4StyleTests {
198
198
 
199
199
  ```
200
200
 
201
- There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use use JUnit 3 or 4 and Espresso with the screengrab Java library to capture screenshots during a UI test run.
201
+ There is an [example project](https://github.com/fastlane/fastlane/tree/master/screengrab/example/src/androidTest/java/tools/fastlane/localetester) showing how to use JUnit 3 or 4 and Espresso with the screengrab Java library to capture screenshots during a UI test run.
202
202
 
203
203
  Using JUnit 4 is preferable because of its ability to perform actions before and after the entire test class is run. This means you will change the device's locale far fewer times when compared with JUnit 3 running those commands before and after each test method.
204
204
 
@@ -251,7 +251,7 @@ new CleanStatusBar()
251
251
  <details>
252
252
  <summary>Launch Arguments</summary>
253
253
 
254
- You can provide additional arguments to your testcases on launch. These strings will be available in your tests through `InstrumentationRegistry.getArguments()`.
254
+ You can provide additional arguments to your test cases on launch. These strings will be available in your tests through `InstrumentationRegistry.getArguments()`.
255
255
 
256
256
  ```ruby
257
257
  screengrab(
@@ -251,7 +251,7 @@ to update your `SnapshotHelper.swift` files. In case you modified your `Snapshot
251
251
 
252
252
  ## Launch Arguments
253
253
 
254
- You can provide additional arguments to your app on launch. These strings will be available in your app (eg. not in the testing target) through `ProcessInfo.processInfo.arguments`. Alternatively, use user-default syntax (`-key value`) and they will be available as key-value pairs in `UserDefaults.standard`.
254
+ You can provide additional arguments to your app on launch. These strings will be available in your app (e.g. not in the testing target) through `ProcessInfo.processInfo.arguments`. Alternatively, use user-default syntax (`-key value`) and they will be available as key-value pairs in `UserDefaults.standard`.
255
255
 
256
256
  ```ruby-skip-tests
257
257
  launch_arguments([
@@ -2,7 +2,7 @@
2
2
  <img src="/img/actions/produce.png" width="250">
3
3
  </p>
4
4
 
5
- ###### Create new iOS apps on App Store Connect and Dev Portal using your command line
5
+ ###### Create new iOS apps on App Store Connect and Apple Developer Portal using your command line
6
6
 
7
7
  _produce_ creates new iOS apps on both the Apple Developer Portal and App Store Connect with the minimum required information.
8
8
 
@@ -133,7 +133,7 @@ The general parameters are defined in the `default` key and can be:
133
133
  | `stack_title` | Specifies whether _frameit_ should display the keyword above the title when both keyword and title are defined. If it is false, the title and keyword will be displayed side by side when both keyword and title are defined. | `false` |
134
134
  | `title_below_image` | Specifies whether _frameit_ should place the title and optional keyword below the device frame. If it is false, it will be placed above the device frame. | `false` |
135
135
  | `show_complete_frame` | Specifies whether _frameit_ should shrink the device frame so that it is completely shown in the framed screenshot. If it is false, clipping of the device frame might occur at the bottom (when `title_below_image` is `false`) or top (when `title_below_image` is `true`) of the framed screenshot. | `false` |
136
- | `padding` | The content of the framed screenshot will be resized to match the specified `padding` around all edges. The vertical padding is also applied between the text and the top or bottom (depending on `title_below_image`) of the device frame. <p> There are 3 different options of specyfying the padding: <p> 1. Default: An integer value that defines both horizontal and vertical padding in pixels. <br> 2. A string that defines (different) padding values in pixels for horizontal and vertical padding. The syntax is `"<horizontal>x<vertical>"`, e.g. `"30x60"`. <br> 3. A string that defines (different) padding values in percentage for horizontal and vertical padding. The syntax is `"<horizontal>%x<vertical>%"`, e.g. `"5%x10%"`. <br> **Note:** The percentage is calculated from the smallest image dimension (height or width). <p> A combination of option 2 and 3 is possible, e.g. `"5%x40"`. | `50` |
136
+ | `padding` | The content of the framed screenshot will be resized to match the specified `padding` around all edges. The vertical padding is also applied between the text and the top or bottom (depending on `title_below_image`) of the device frame. <p> There are 3 different options of specifying the padding: <p> 1. Default: An integer value that defines both horizontal and vertical padding in pixels. <br> 2. A string that defines (different) padding values in pixels for horizontal and vertical padding. The syntax is `"<horizontal>x<vertical>"`, e.g. `"30x60"`. <br> 3. A string that defines (different) padding values in percentage for horizontal and vertical padding. The syntax is `"<horizontal>%x<vertical>%"`, e.g. `"5%x10%"`. <br> **Note:** The percentage is calculated from the smallest image dimension (height or width). <p> A combination of option 2 and 3 is possible, e.g. `"5%x40"`. | `50` |
137
137
  | `interline_spacing` | Specifies whether _frameit_ should add or subtract this many pixels between the individual lines of text. This only applies to a multi-line `title` and/or `keyword` to expand or squash together the individual lines of text. | `0` |
138
138
  | `font_scale_factor` | Specifies whether _frameit_ should increase or decrease the font size of the text. Is ignored for `keyword` or `title`, if `font_size` is specified. | `0.1` |
139
139
  | `frame` | Overrides the color of the frame to be used. (Valid values are `BLACK`, `WHITE`, `GOLD` and `ROSE_GOLD`) | NA |
@@ -161,7 +161,7 @@ The `keyword` and `title` parameters are both used in `default` and `data`. They
161
161
 
162
162
  | Key | Description | Default value |
163
163
  |-----|-------------|---------------|
164
- | `color` | The font color for the text. Specify a hex/html color code. | `#000000` (black) |
164
+ | `color` | The font color for the text. Specify a HEX/HTML color code. | `#000000` (black) |
165
165
  | `font` | The font family for the text. Specify the (relative) path to the font file (e.g. an OpenType Font). | The default `imagemagick` font, which is system dependent. |
166
166
  | `font_size` | The font size for the text specified in points. If not specified or `0`, font will be scaled automatically to fit the available space. _frameit_ still shrinks the text, if it would not fit. | NA |
167
167
  | `font_weight` | The [font weight for the text](https://imagemagick.org/script/command-line-options.php#weight). Specify an integer value (e.g. 900). | NA |
@@ -81,7 +81,7 @@ _scan_ uses the latest APIs and tools to make running tests plain simple and off
81
81
  👱 | Automatically switches to the [travis formatter](https://github.com/kattrali/xcpretty-travis-formatter) when running on Travis
82
82
  📖 | Helps you resolve common test errors like simulator not responding
83
83
 
84
- _scan_ uses a plain `xcodebuild` command, therefore keeping 100% compatible with `xcodebuild`. To generate the nice output, _scan_ uses [xcpretty](https://github.com/supermarin/xcpretty). You can alway access the raw output in `~/Library/Logs/scan`.
84
+ _scan_ uses a plain `xcodebuild` command, therefore keeping 100% compatible with `xcodebuild`. To generate the nice output, _scan_ uses [xcpretty](https://github.com/supermarin/xcpretty). You can always access the raw output in `~/Library/Logs/scan`.
85
85
 
86
86
  ![img/actions/scanScreenshot.png](/img/actions/scanScreenshot.png)
87
87
  ![img/actions/slack.png](/img/actions/slack.png)
@@ -100,7 +100,7 @@ That's all you need to run your tests. If you want more control, here are some a
100
100
  fastlane scan --workspace "Example.xcworkspace" --scheme "AppName" --device "iPhone 6" --clean
101
101
  ```
102
102
 
103
- If you need to use a different xcode install, use `xcode-select` or define `DEVELOPER_DIR`:
103
+ If you need to use a different Xcode install, use `xcode-select` or define `DEVELOPER_DIR`:
104
104
 
105
105
  ```no-highlight
106
106
  DEVELOPER_DIR="/Applications/Xcode6.2.app" scan
@@ -130,9 +130,9 @@ match
130
130
 
131
131
  You can find more information about GitHub basic authentication and personal token generation here: [https://developer.github.com/v3/auth/#basic-authentication](https://developer.github.com/v3/auth/#basic-authentication)
132
132
 
133
- ##### Git Storage on Azure Devops
133
+ ##### Git Storage on Azure DevOps
134
134
 
135
- If you're running a pipeline on Azure Devops and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
135
+ If you're running a pipeline on Azure DevOps and using git storage in a another repository on the same project, you might want to use `bearer` token authentication.
136
136
 
137
137
  Using parameter:
138
138
 
@@ -533,7 +533,7 @@ Storing your private keys in a Git repo may sound off-putting at first. We did a
533
533
 
534
534
  ### Google Cloud Storage
535
535
 
536
- All your keys and provisioning profiles are encrypted using Google managed keys.
536
+ All your keys and provisioning profiles are encrypted using Google managed keys.
537
537
 
538
538
  ### What could happen if someone stole a private key?
539
539
 
@@ -49,7 +49,7 @@ The previous p12 configuration is still currently supported.
49
49
 
50
50
  ## Quick Start
51
51
 
52
- > Before using _supply_ to connect to Google Play Store, you'll need to set up your app manually first by uploading at least one build to Google Play Store. See [fastane/fastlane#14686](https://github.com/fastlane/fastlane/issues/14686) for more info.
52
+ > Before using _supply_ to connect to Google Play Store, you'll need to set up your app manually first by uploading at least one build to Google Play Store. See [fastlane/fastlane#14686](https://github.com/fastlane/fastlane/issues/14686) for more info.
53
53
 
54
54
  - `cd [your_project_folder]`
55
55
  - `fastlane supply init`
@@ -198,6 +198,6 @@ For more information, see the `fastlane action google_play_track_version_codes`
198
198
  - `:check_superseded_tracks`
199
199
  - Google Play will automatically remove releases that are superseded now
200
200
  - `:deactivate_on_promote`
201
- - Google Play will automatically deactive a release from its previous track on promote
201
+ - Google Play will automatically deactivate a release from its previous track on promote
202
202
 
203
203
  :
@@ -244,7 +244,7 @@ If you are on multiple App Store Connect teams, iTunes Transporter may need a pr
244
244
 
245
245
  ## Use an Application Specific Password to upload
246
246
 
247
- _pilot_/`upload_to_testflight` can use an [Application Specific Password via the `FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD` envirionment variable](https://docs.fastlane.tools/best-practices/continuous-integration/#application-specific-passwords) to upload a binary if both the `skip_waiting_for_build_processing` and `apple_id` options are set. (If any of those are not set, it will use the normal Apple login process that might require 2FA authentication.)
247
+ _pilot_/`upload_to_testflight` can use an [Application Specific Password via the `FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD` environment variable](https://docs.fastlane.tools/best-practices/continuous-integration/#application-specific-passwords) to upload a binary if both the `skip_waiting_for_build_processing` and `apple_id` options are set. (If any of those are not set, it will use the normal Apple login process that might require 2FA authentication.)
248
248
 
249
249
  ## Role for App Store Connect User
250
250
  _pilot_/`upload_to_testflight` updates build information and testers after the build has finished processing. App Store Connect requires the "App Manager" or "Admin" role for your Apple account to update this information. The "Developer" role will allow builds to be uploaded but _will not_ allow updating of build information and testers.
@@ -208,6 +208,7 @@ module Fastlane
208
208
  else
209
209
  http = Net::HTTP.new(uri.host, uri.port)
210
210
  end
211
+ http.read_timeout = 300
211
212
  http.use_ssl = (uri.scheme == "https")
212
213
  res = http.get(uri.request_uri)
213
214
  res.body
@@ -7,7 +7,13 @@ module Fastlane
7
7
  # Raises an exception and stop the lane execution if the repo is not in a clean state
8
8
  class EnsureGitStatusCleanAction < Action
9
9
  def self.run(params)
10
- repo_status = Actions.sh("git status --porcelain")
10
+ if params[:ignored]
11
+ ignored_file = params[:ignored]
12
+ repo_status = Actions.sh("git status --porcelain --ignored #{ignored_file}")
13
+ else
14
+ repo_status = Actions.sh("git status --porcelain")
15
+ end
16
+
11
17
  repo_clean = repo_status.empty?
12
18
 
13
19
  if repo_clean
@@ -65,7 +71,12 @@ module Fastlane
65
71
  description: "The flag whether to show the git diff if the repo is dirty",
66
72
  optional: true,
67
73
  default_value: false,
68
- is_string: false)
74
+ is_string: false),
75
+ FastlaneCore::ConfigItem.new(key: :ignored,
76
+ env_name: "FL_ENSURE_GIT_STATUS_CLEAN_IGNORED_FILE",
77
+ description: "The flag whether to ignore file the git status if the repo is dirty",
78
+ optional: true,
79
+ is_string: true)
69
80
  ]
70
81
  end
71
82
 
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
- VERSION = '2.160.0'.freeze
2
+ VERSION = '2.161.0'.freeze
3
3
  DESCRIPTION = "The easiest way to automate beta deployments and releases for your iOS and Android apps".freeze
4
4
  MINIMUM_XCODE_RELEASE = "7.0".freeze
5
5
  RUBOCOP_REQUIREMENT = '0.49.1'.freeze
@@ -17,4 +17,4 @@ public class Deliverfile: DeliverfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -256,4 +256,4 @@ public extension DeliverfileProtocol {
256
256
 
257
257
  // Please don't remove the lines below
258
258
  // They are used to detect outdated files
259
- // FastlaneRunnerAPIVersion [0.9.43]
259
+ // FastlaneRunnerAPIVersion [0.9.44]
@@ -3006,16 +3006,19 @@ public func ensureGitBranch(branch: String = "master") {
3006
3006
  - parameters:
3007
3007
  - showUncommittedChanges: The flag whether to show uncommitted changes if the repo is dirty
3008
3008
  - showDiff: The flag whether to show the git diff if the repo is dirty
3009
+ - ignored: The flag whether to ignore file the git status if the repo is dirty
3009
3010
 
3010
3011
  A sanity check to make sure you are working in a repo that is clean.
3011
3012
  Especially useful to put at the beginning of your Fastfile in the `before_all` block, if some of your other actions will touch your filesystem, do things to your git repo, or just as a general reminder to save your work.
3012
3013
  Also needed as a prerequisite for some other actions like `reset_git_repo`.
3013
3014
  */
3014
3015
  public func ensureGitStatusClean(showUncommittedChanges: Bool = false,
3015
- showDiff: Bool = false)
3016
+ showDiff: Bool = false,
3017
+ ignored: String? = nil)
3016
3018
  {
3017
3019
  let command = RubyCommand(commandID: "", methodName: "ensure_git_status_clean", className: nil, args: [RubyCommand.Argument(name: "show_uncommitted_changes", value: showUncommittedChanges),
3018
- RubyCommand.Argument(name: "show_diff", value: showDiff)])
3020
+ RubyCommand.Argument(name: "show_diff", value: showDiff),
3021
+ RubyCommand.Argument(name: "ignored", value: ignored)])
3019
3022
  _ = runner.executeCommand(command)
3020
3023
  }
3021
3024
 
@@ -4718,7 +4721,7 @@ public func makeChangelogFromJenkins(fallbackChangelog: String = "",
4718
4721
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
4719
4722
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
4720
4723
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
4721
- - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
4724
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
4722
4725
  - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
4723
4726
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
4724
4727
  - googleCloudKeysFile: Path to the gc_keys.json file
@@ -7609,7 +7612,7 @@ public func swiftlint(mode: Any = "lint",
7609
7612
  - shallowClone: Make a shallow clone of the repository (truncate the history to 1 revision)
7610
7613
  - cloneBranchDirectly: Clone just the branch specified, instead of the whole repo. This requires that the branch already exists. Otherwise the command will fail
7611
7614
  - gitBasicAuthorization: Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
7612
- - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
7615
+ - gitBearerAuthorization: Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
7613
7616
  - gitPrivateKey: Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
7614
7617
  - googleCloudBucketName: Name of the Google Cloud Storage bucket to use
7615
7618
  - googleCloudKeysFile: Path to the gc_keys.json file
@@ -9306,4 +9309,4 @@ public let snapshotfile = Snapshotfile()
9306
9309
 
9307
9310
  // Please don't remove the lines below
9308
9311
  // They are used to detect outdated files
9309
- // FastlaneRunnerAPIVersion [0.9.96]
9312
+ // FastlaneRunnerAPIVersion [0.9.97]
@@ -17,4 +17,4 @@ public class Gymfile: GymfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -184,4 +184,4 @@ public extension GymfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.46]
187
+ // FastlaneRunnerAPIVersion [0.9.47]
@@ -21,11 +21,11 @@ public protocol LaneFileProtocol: class {
21
21
  }
22
22
 
23
23
  public extension LaneFileProtocol {
24
- var fastlaneVersion: String { return "" } // default "" because that means any is fine
25
- func beforeAll() {} // no op by default
26
- func afterAll(currentLane _: String) {} // no op by default
27
- func onError(currentLane _: String, errorInfo _: String) {} // no op by default
28
- func recordLaneDescriptions() {} // no op by default
24
+ var fastlaneVersion: String { return "" } // Defaults to "" because that means any is fine
25
+ func beforeAll() {} // No-op by default
26
+ func afterAll(currentLane _: String) {} // No-op by default
27
+ func onError(currentLane _: String, errorInfo _: String) {} // No-op by default
28
+ func recordLaneDescriptions() {} // No-op by default
29
29
  }
30
30
 
31
31
  @objcMembers
@@ -33,7 +33,7 @@ open class LaneFile: NSObject, LaneFileProtocol {
33
33
  private(set) static var fastfileInstance: LaneFile?
34
34
 
35
35
  // Called before any lane is executed.
36
- private func setupAllTheThings() {
36
+ private func setUpAllTheThings() {
37
37
  LaneFile.fastfileInstance!.beforeAll()
38
38
  }
39
39
 
@@ -51,8 +51,8 @@ open class LaneFile: NSObject, LaneFileProtocol {
51
51
  #if !SWIFT_PACKAGE
52
52
  let methodList = class_copyMethodList(self, &methodCount)
53
53
  #else
54
- // In SPM we're calling this functions out of the scope of the normal binary that it
55
- // is being built, so self in this scope would be the SPM executable instead of the Fastfile
54
+ // In SPM we're calling this functions out of the scope of the normal binary that it's
55
+ // being built, so *self* in this scope would be the SPM executable instead of the Fastfile
56
56
  // that we'd normally expect.
57
57
  let methodList = class_copyMethodList(type(of: fastfileInstance!), &methodCount)
58
58
  #endif
@@ -98,27 +98,23 @@ open class LaneFile: NSObject, LaneFileProtocol {
98
98
  public static func runLane(from fastfile: LaneFile?, named: String, parameters: [String: String]) -> Bool {
99
99
  log(message: "Running lane: \(named)")
100
100
  #if !SWIFT_PACKAGE
101
- // In SPM we do not load the Fastfile class from its `className()`, because we're in another
102
- // in the executable's scope that loads the library, so in that case `className()` won't be the
103
- // expected Fastfile and so, we do not dynamically load it as we do without SPM.
101
+ // When not in SPM environment, we load the Fastfile from its `className()`.
104
102
  loadFastfile()
105
- #endif
106
-
107
- #if !SWIFT_PACKAGE
108
103
  guard let fastfileInstance: LaneFile = self.fastfileInstance else {
109
104
  let message = "Unable to instantiate class named: \(className())"
110
105
  log(message: message)
111
106
  fatalError(message)
112
107
  }
113
108
  #else
114
- // We load the fastfile as a Lanefile in a static way, by parameter, because the Fastlane library
115
- // cannot know nothing about the caller (in this case, the executable).
109
+ // When in SPM environment, we can't load the Fastfile from its `className()` because the executable is in
110
+ // another scope, so `className()` won't be the expected Fastfile. Instead, we load the Fastfile as a Lanefile
111
+ // in a static way, by parameter.
116
112
  guard let fastfileInstance: LaneFile = fastfile else {
117
113
  log(message: "Found nil instance of fastfile")
118
114
  preconditionFailure()
119
115
  }
116
+ self.fastfileInstance = fastfileInstance
120
117
  #endif
121
- self.fastfileInstance = fastfile!
122
118
  let currentLanes = lanes
123
119
  let lowerCasedLaneRequested = named.lowercased()
124
120
 
@@ -139,13 +135,13 @@ open class LaneFile: NSObject, LaneFileProtocol {
139
135
  return false
140
136
  }
141
137
 
142
- // call all methods that need to be called before we start calling lanes
143
- fastfileInstance.setupAllTheThings()
138
+ // Call all methods that need to be called before we start calling lanes.
139
+ fastfileInstance.setUpAllTheThings()
144
140
 
145
- // We need to catch all possible errors here and display a nice message
141
+ // We need to catch all possible errors here and display a nice message.
146
142
  _ = fastfileInstance.perform(NSSelectorFromString(laneMethod), with: parameters)
147
143
 
148
- // only call on success
144
+ // Call only on success.
149
145
  fastfileInstance.afterAll(currentLane: named)
150
146
  log(message: "Done running lane: \(named) 🚀")
151
147
  return true
@@ -17,4 +17,4 @@ public class Matchfile: MatchfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -53,7 +53,7 @@ public protocol MatchfileProtocol: class {
53
53
  /// Use a basic authorization header to access the git repo (e.g.: access via HTTPS, GitHub Actions, etc), usually a string in Base64
54
54
  var gitBasicAuthorization: String? { get }
55
55
 
56
- /// Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64
56
+ /// Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64
57
57
  var gitBearerAuthorization: String? { get }
58
58
 
59
59
  /// Use a private key to access the git repo (e.g.: access to GitHub repository via Deploy keys), usually a id_rsa named file or the contents hereof
@@ -168,4 +168,4 @@ public extension MatchfileProtocol {
168
168
 
169
169
  // Please don't remove the lines below
170
170
  // They are used to detect outdated files
171
- // FastlaneRunnerAPIVersion [0.9.40]
171
+ // FastlaneRunnerAPIVersion [0.9.41]
@@ -17,4 +17,4 @@ public class Precheckfile: PrecheckfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -48,4 +48,4 @@ public extension PrecheckfileProtocol {
48
48
 
49
49
  // Please don't remove the lines below
50
50
  // They are used to detect outdated files
51
- // FastlaneRunnerAPIVersion [0.9.39]
51
+ // FastlaneRunnerAPIVersion [0.9.40]
@@ -17,4 +17,4 @@ public class Scanfile: ScanfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -260,4 +260,4 @@ public extension ScanfileProtocol {
260
260
 
261
261
  // Please don't remove the lines below
262
262
  // They are used to detect outdated files
263
- // FastlaneRunnerAPIVersion [0.9.51]
263
+ // FastlaneRunnerAPIVersion [0.9.52]
@@ -17,4 +17,4 @@ public class Screengrabfile: ScreengrabfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -96,4 +96,4 @@ public extension ScreengrabfileProtocol {
96
96
 
97
97
  // Please don't remove the lines below
98
98
  // They are used to detect outdated files
99
- // FastlaneRunnerAPIVersion [0.9.41]
99
+ // FastlaneRunnerAPIVersion [0.9.42]
@@ -17,4 +17,4 @@ public class Snapshotfile: SnapshotfileProtocol {
17
17
  // during the `init` process, and you won't see this message
18
18
  }
19
19
 
20
- // Generated with fastlane 2.160.0
20
+ // Generated with fastlane 2.161.0
@@ -184,4 +184,4 @@ public extension SnapshotfileProtocol {
184
184
 
185
185
  // Please don't remove the lines below
186
186
  // They are used to detect outdated files
187
- // FastlaneRunnerAPIVersion [0.9.35]
187
+ // FastlaneRunnerAPIVersion [0.9.36]
@@ -147,7 +147,7 @@ module Match
147
147
  FastlaneCore::ConfigItem.new(key: :git_bearer_authorization,
148
148
  env_name: "MATCH_GIT_BEARER_AUTHORIZATION",
149
149
  sensitive: true,
150
- description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure Devops repository), usually a string in Base64",
150
+ description: "Use a bearer authorization header to access the git repo (e.g.: access to an Azure DevOps repository), usually a string in Base64",
151
151
  conflicting_options: [:git_basic_authorization, :git_private_key],
152
152
  optional: true,
153
153
  default_value: nil),
@@ -167,7 +167,7 @@ _spaceship_ uses all those API points to offer this seamless experience.
167
167
  _spaceship_ does a lot of magic to get everything working so neatly:
168
168
 
169
169
  - **Sensible Defaults**: You only have to provide the mandatory information (e.g. new provisioning profiles contain all devices by default)
170
- - **Local Validation**: When pushing changes back to the Apple Dev Portal _spaceship_ will make sure only valid data is sent to Apple (e.g. automatic repairing of provisioning profiles)
170
+ - **Local Validation**: When pushing changes back to the Apple Developer Portal _spaceship_ will make sure only valid data is sent to Apple (e.g. automatic repairing of provisioning profiles)
171
171
  - **Various request/response types**: When working with the different API endpoints, _spaceship_ has to deal with `JSON`, `XML`, `txt`, `plist` and sometimes even `HTML` responses and requests.
172
172
  - **Automatic Pagination**: Even if you have thousands of apps, profiles or certificates, _spaceship_ **can** handle your scale. It was heavily tested by first using _spaceship_ to create hundreds of profiles and then accessing them using _spaceship_.
173
173
  - **Session, Cookie and CSRF token**: All the security aspects are handled by _spaceship_.
@@ -185,9 +185,12 @@ module Spaceship
185
185
  type: "apps",
186
186
  id: app_id
187
187
  }
188
- data[:attributes] = attributes unless attributes.empty?
189
188
  data[:relationships] = relationships unless relationships.empty?
190
189
 
190
+ if !attributes.nil? && !attributes.empty?
191
+ data[:attributes] = attributes
192
+ end
193
+
191
194
  # Body
192
195
  body = {
193
196
  data: data
@@ -5,10 +5,16 @@ require 'net/http'
5
5
  # Certain apple endpoints return 415 responses if a Content-Type is supplied.
6
6
  # Net::HTTP will default a content-type if none is provided by faraday
7
7
  # This monkey-patch allows us to leave out the content-type if we do not specify one.
8
- module Net
9
- class HTTPGenericRequest
10
- def supply_default_content_type
11
- return if content_type
12
- end
8
+ module NetHTTPGenericRequestMonkeypatch
9
+ def supply_default_content_type
10
+ # Return no content type if we communicating with an apple.com domain
11
+ return if !self['host'].nil? && self['host'].end_with?('.apple.com')
12
+
13
+ # Otherwise use the default implementation
14
+ super
13
15
  end
14
16
  end
17
+
18
+ # We prepend the monkeypatch so the patch has access to the original implementation
19
+ # using `super`.
20
+ Net::HTTPGenericRequest.prepend(NetHTTPGenericRequestMonkeypatch)
metadata CHANGED
@@ -1,35 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.160.0
4
+ version: 2.161.0
5
5
  platform: ruby
6
6
  authors:
7
- - Jorge Revuelta H
8
- - Helmut Januschka
9
- - Felix Krause
7
+ - Jan Piotrowski
10
8
  - Kohki Miki
11
- - Joshua Liebowitz
12
9
  - Manu Wallner
13
- - Max Ott
10
+ - Josh Holtz
14
11
  - Jérôme Lacoste
15
12
  - Jimmy Dee
16
- - Luka Mirosevic
17
- - Matthew Ellis
18
13
  - Maksym Grebenets
19
- - Josh Holtz
20
- - Jan Piotrowski
21
- - Stefan Natchev
22
- - Daniel Jankowski
14
+ - Iulian Onofrei
15
+ - Helmut Januschka
16
+ - Luka Mirosevic
23
17
  - Olivier Halligon
18
+ - Jorge Revuelta H
19
+ - Max Ott
20
+ - Felix Krause
24
21
  - Danielle Tomlinson
22
+ - Daniel Jankowski
25
23
  - Fumiya Nakamura
24
+ - Joshua Liebowitz
26
25
  - Aaron Brager
26
+ - Matthew Ellis
27
27
  - Andrew McBurney
28
- - Iulian Onofrei
28
+ - Stefan Natchev
29
29
  autorequire:
30
30
  bindir: bin
31
31
  cert_chain: []
32
- date: 2020-09-16 00:00:00.000000000 Z
32
+ date: 2020-09-28 00:00:00.000000000 Z
33
33
  dependencies:
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: slack-notifier