fastlane 2.131.0 → 2.132.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +76 -76
  3. data/cert/lib/cert/module.rb +2 -0
  4. data/cert/lib/cert/options.rb +6 -0
  5. data/cert/lib/cert/runner.rb +17 -11
  6. data/fastlane/lib/fastlane/actions/app_store_build_number.rb +10 -2
  7. data/fastlane/lib/fastlane/actions/copy_artifacts.rb +1 -1
  8. data/fastlane/lib/fastlane/actions/docs/sync_code_signing.md +23 -4
  9. data/fastlane/lib/fastlane/actions/ensure_env_vars.rb +58 -0
  10. data/fastlane/lib/fastlane/actions/get_version_number.rb +3 -0
  11. data/fastlane/lib/fastlane/actions/onesignal.rb +59 -29
  12. data/fastlane/lib/fastlane/actions/pod_push.rb +10 -1
  13. data/fastlane/lib/fastlane/actions/register_devices.rb +1 -1
  14. data/fastlane/lib/fastlane/fast_file.rb +7 -2
  15. data/fastlane/lib/fastlane/setup/setup_android.rb +1 -1
  16. data/fastlane/lib/fastlane/version.rb +1 -1
  17. data/fastlane/swift/Deliverfile.swift +1 -1
  18. data/fastlane/swift/Fastlane.swift +33 -7
  19. data/fastlane/swift/Gymfile.swift +1 -1
  20. data/fastlane/swift/Matchfile.swift +1 -1
  21. data/fastlane/swift/MatchfileProtocol.swift +5 -1
  22. data/fastlane/swift/Precheckfile.swift +1 -1
  23. data/fastlane/swift/Scanfile.swift +1 -1
  24. data/fastlane/swift/Screengrabfile.swift +1 -1
  25. data/fastlane/swift/Snapshotfile.swift +1 -1
  26. data/fastlane/swift/SnapshotfileProtocol.swift +3 -1
  27. data/fastlane_core/lib/fastlane_core/itunes_transporter.rb +1 -3
  28. data/fastlane_core/lib/fastlane_core/ui/implementations/shell.rb +3 -2
  29. data/frameit/lib/frameit/screenshot.rb +4 -0
  30. data/match/lib/match/generator.rb +1 -0
  31. data/match/lib/match/module.rb +2 -0
  32. data/match/lib/match/nuke.rb +5 -5
  33. data/match/lib/match/options.rb +12 -0
  34. data/match/lib/match/runner.rb +2 -0
  35. data/match/lib/match/storage/git_storage.rb +8 -2
  36. data/match/lib/match/storage/google_cloud_storage.rb +82 -33
  37. data/produce/lib/produce/service.rb +7 -1
  38. data/sigh/lib/sigh/runner.rb +13 -5
  39. data/snapshot/lib/snapshot/options.rb +5 -0
  40. data/snapshot/lib/snapshot/reports_generator.rb +3 -0
  41. data/snapshot/lib/snapshot/simulator_launchers/launcher_configuration.rb +2 -0
  42. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher.rb +1 -1
  43. data/snapshot/lib/snapshot/simulator_launchers/simulator_launcher_base.rb +16 -1
  44. data/spaceship/lib/spaceship/connect_api/models/app.rb +6 -6
  45. data/spaceship/lib/spaceship/connect_api/models/build.rb +3 -3
  46. data/spaceship/lib/spaceship/connect_api/models/build_delivery.rb +1 -1
  47. data/spaceship/lib/spaceship/connect_api/models/bundle_id.rb +1 -1
  48. data/spaceship/lib/spaceship/connect_api/models/certificate.rb +1 -1
  49. data/spaceship/lib/spaceship/connect_api/models/device.rb +1 -1
  50. data/spaceship/lib/spaceship/connect_api/models/profile.rb +1 -1
  51. data/spaceship/lib/spaceship/portal/.certificate.rb.swp +0 -0
  52. data/spaceship/lib/spaceship/portal/provisioning_profile.rb +1 -1
  53. data/spaceship/lib/spaceship/tunes/app_version.rb +4 -0
  54. data/spaceship/lib/spaceship/tunes/application.rb +4 -0
  55. data/spaceship/lib/spaceship/tunes/iap_family_details.rb +10 -2
  56. data/spaceship/lib/spaceship/tunes/tunes_client.rb +25 -0
  57. metadata +48 -45
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: c95215aded25754cdd253b9e510d47ce04fed50af174ca81132d626303e6bc11
4
- data.tar.gz: df1659455c9d06b31f2c0f0ed66cbb45506fe644e44d4d9ba0a129bc08f9daec
2
+ SHA1:
3
+ metadata.gz: 695d000a1213e2308cfe825c9bcc8208af5e9733
4
+ data.tar.gz: d69ecd0ca465f574ca3d0a5fd059fa8cf8b5140b
5
5
  SHA512:
6
- metadata.gz: a2370d61af5741661b679f9686c58985d09bad6ec1e07dd74fcae8292e73f29334c55d935981f9a715771a98e53dc5f8db615cbd5db23bd2e70d91e12d5cf49d
7
- data.tar.gz: 55af9d205658816d6f4025f76b6559dcf1cda97f5d96bbaffd5e7db90331825ce4732bcf0c06aba57cac6e6abcd0db667bc4f633b083414d45fa05ba0fe04d69
6
+ metadata.gz: a56c8c367b041464f2d6c14d946f1da6778d26aee8986060e3b2aefaa8c46deb9b97ad152c63eb7265c4c996374c2521caab7f9b32571a2f2f5b58a48f7251ea
7
+ data.tar.gz: 81236a7e159bae18edf8d624c4c7758263d6c09c613fdd3f7bc2e30d3c5ec5e707a496341caf2731eebd77fec4287971085886f72081eeb954b3010288fb33b0
data/README.md CHANGED
@@ -34,55 +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='jérôme-lacoste'>
38
- <a href='https://github.com/lacostej'>
39
- <img src='https://github.com/lacostej.png?size=140'>
37
+ <td id='helmut-januschka'>
38
+ <a href='https://github.com/hjanuschka'>
39
+ <img src='https://github.com/hjanuschka.png?size=140'>
40
40
  </a>
41
- <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
41
+ <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
42
42
  </td>
43
- <td id='jorge-revuelta-h'>
44
- <a href='https://github.com/minuscorp'>
45
- <img src='https://github.com/minuscorp.png?size=140'>
43
+ <td id='manu-wallner'>
44
+ <a href='https://github.com/milch'>
45
+ <img src='https://github.com/milch.png?size=140'>
46
46
  </a>
47
- <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
47
+ <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
48
48
  </td>
49
- <td id='jimmy-dee'>
50
- <a href='https://github.com/jdee'>
51
- <img src='https://github.com/jdee.png?size=140'>
49
+ <td id='aaron-brager'>
50
+ <a href='https://github.com/getaaron'>
51
+ <img src='https://github.com/getaaron.png?size=140'>
52
52
  </a>
53
- <h4 align='center'>Jimmy Dee</h4>
53
+ <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
54
54
  </td>
55
- <td id='kohki-miki'>
56
- <a href='https://github.com/giginet'>
57
- <img src='https://github.com/giginet.png?size=140'>
55
+ <td id='matthew-ellis'>
56
+ <a href='https://github.com/matthewellis'>
57
+ <img src='https://github.com/matthewellis.png?size=140'>
58
58
  </a>
59
- <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
59
+ <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
60
60
  </td>
61
- <td id='iulian-onofrei'>
62
- <a href='https://github.com/revolter'>
63
- <img src='https://github.com/revolter.png?size=140'>
61
+ <td id='olivier-halligon'>
62
+ <a href='https://github.com/AliSoftware'>
63
+ <img src='https://github.com/AliSoftware.png?size=140'>
64
64
  </a>
65
- <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
65
+ <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
66
66
  </td>
67
67
  </tr>
68
68
  <tr>
69
- <td id='stefan-natchev'>
70
- <a href='https://github.com/snatchev'>
71
- <img src='https://github.com/snatchev.png?size=140'>
72
- </a>
73
- <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
74
- </td>
75
- <td id='helmut-januschka'>
76
- <a href='https://github.com/hjanuschka'>
77
- <img src='https://github.com/hjanuschka.png?size=140'>
78
- </a>
79
- <h4 align='center'><a href='https://twitter.com/hjanuschka'>Helmut Januschka</a></h4>
80
- </td>
81
- <td id='andrew-mcburney'>
82
- <a href='https://github.com/armcburney'>
83
- <img src='https://github.com/armcburney.png?size=140'>
69
+ <td id='kohki-miki'>
70
+ <a href='https://github.com/giginet'>
71
+ <img src='https://github.com/giginet.png?size=140'>
84
72
  </a>
85
- <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
73
+ <h4 align='center'><a href='https://twitter.com/giginet'>Kohki Miki</a></h4>
86
74
  </td>
87
75
  <td id='luka-mirosevic'>
88
76
  <a href='https://github.com/lmirosevic'>
@@ -90,19 +78,17 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
90
78
  </a>
91
79
  <h4 align='center'><a href='https://twitter.com/lmirosevic'>Luka Mirosevic</a></h4>
92
80
  </td>
93
- <td id='manu-wallner'>
94
- <a href='https://github.com/milch'>
95
- <img src='https://github.com/milch.png?size=140'>
81
+ <td id='josh-holtz'>
82
+ <a href='https://github.com/joshdholtz'>
83
+ <img src='https://github.com/joshdholtz.png?size=140'>
96
84
  </a>
97
- <h4 align='center'><a href='https://twitter.com/acrooow'>Manu Wallner</a></h4>
85
+ <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
98
86
  </td>
99
- </tr>
100
- <tr>
101
- <td id='matthew-ellis'>
102
- <a href='https://github.com/matthewellis'>
103
- <img src='https://github.com/matthewellis.png?size=140'>
87
+ <td id='joshua-liebowitz'>
88
+ <a href='https://github.com/taquitos'>
89
+ <img src='https://github.com/taquitos.png?size=140'>
104
90
  </a>
105
- <h4 align='center'><a href='https://twitter.com/mellis1995'>Matthew Ellis</a></h4>
91
+ <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
106
92
  </td>
107
93
  <td id='jan-piotrowski'>
108
94
  <a href='https://github.com/janpio'>
@@ -110,55 +96,69 @@ If the above doesn't help, please [submit an issue](https://github.com/fastlane/
110
96
  </a>
111
97
  <h4 align='center'><a href='https://twitter.com/Sujan'>Jan Piotrowski</a></h4>
112
98
  </td>
113
- <td id='maksym-grebenets'>
114
- <a href='https://github.com/mgrebenets'>
115
- <img src='https://github.com/mgrebenets.png?size=140'>
99
+ </tr>
100
+ <tr>
101
+ <td id='fumiya-nakamura'>
102
+ <a href='https://github.com/nafu'>
103
+ <img src='https://github.com/nafu.png?size=140'>
116
104
  </a>
117
- <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
105
+ <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
118
106
  </td>
119
- <td id='joshua-liebowitz'>
120
- <a href='https://github.com/taquitos'>
121
- <img src='https://github.com/taquitos.png?size=140'>
107
+ <td id='jorge-revuelta-h'>
108
+ <a href='https://github.com/minuscorp'>
109
+ <img src='https://github.com/minuscorp.png?size=140'>
122
110
  </a>
123
- <h4 align='center'><a href='https://twitter.com/taquitos'>Joshua Liebowitz</a></h4>
111
+ <h4 align='center'><a href='https://twitter.com/minuscorp'>Jorge Revuelta H</a></h4>
124
112
  </td>
125
- <td id='olivier-halligon'>
126
- <a href='https://github.com/AliSoftware'>
127
- <img src='https://github.com/AliSoftware.png?size=140'>
113
+ <td id='jimmy-dee'>
114
+ <a href='https://github.com/jdee'>
115
+ <img src='https://github.com/jdee.png?size=140'>
128
116
  </a>
129
- <h4 align='center'><a href='https://twitter.com/aligatr'>Olivier Halligon</a></h4>
117
+ <h4 align='center'>Jimmy Dee</h4>
130
118
  </td>
131
- </tr>
132
- <tr>
133
- <td id='aaron-brager'>
134
- <a href='https://github.com/getaaron'>
135
- <img src='https://github.com/getaaron.png?size=140'>
119
+ <td id='stefan-natchev'>
120
+ <a href='https://github.com/snatchev'>
121
+ <img src='https://github.com/snatchev.png?size=140'>
136
122
  </a>
137
- <h4 align='center'><a href='https://twitter.com/getaaron'>Aaron Brager</a></h4>
123
+ <h4 align='center'><a href='https://twitter.com/snatchev'>Stefan Natchev</a></h4>
138
124
  </td>
125
+ <td id='danielle-tomlinson'>
126
+ <a href='https://github.com/endocrimes'>
127
+ <img src='https://github.com/endocrimes.png?size=140'>
128
+ </a>
129
+ <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
130
+ </td>
131
+ </tr>
132
+ <tr>
139
133
  <td id='felix-krause'>
140
134
  <a href='https://github.com/KrauseFx'>
141
135
  <img src='https://github.com/KrauseFx.png?size=140'>
142
136
  </a>
143
137
  <h4 align='center'><a href='https://twitter.com/KrauseFx'>Felix Krause</a></h4>
144
138
  </td>
145
- <td id='danielle-tomlinson'>
146
- <a href='https://github.com/endocrimes'>
147
- <img src='https://github.com/endocrimes.png?size=140'>
139
+ <td id='iulian-onofrei'>
140
+ <a href='https://github.com/revolter'>
141
+ <img src='https://github.com/revolter.png?size=140'>
148
142
  </a>
149
- <h4 align='center'><a href='https://twitter.com/endocrimes'>Danielle Tomlinson</a></h4>
143
+ <h4 align='center'><a href='https://twitter.com/Revolt666'>Iulian Onofrei</a></h4>
150
144
  </td>
151
- <td id='fumiya-nakamura'>
152
- <a href='https://github.com/nafu'>
153
- <img src='https://github.com/nafu.png?size=140'>
145
+ <td id='jérôme-lacoste'>
146
+ <a href='https://github.com/lacostej'>
147
+ <img src='https://github.com/lacostej.png?size=140'>
154
148
  </a>
155
- <h4 align='center'><a href='https://twitter.com/nafu003'>Fumiya Nakamura</a></h4>
149
+ <h4 align='center'><a href='https://twitter.com/lacostej'>Jérôme Lacoste</a></h4>
156
150
  </td>
157
- <td id='josh-holtz'>
158
- <a href='https://github.com/joshdholtz'>
159
- <img src='https://github.com/joshdholtz.png?size=140'>
151
+ <td id='maksym-grebenets'>
152
+ <a href='https://github.com/mgrebenets'>
153
+ <img src='https://github.com/mgrebenets.png?size=140'>
160
154
  </a>
161
- <h4 align='center'><a href='https://twitter.com/joshdholtz'>Josh Holtz</a></h4>
155
+ <h4 align='center'><a href='https://twitter.com/mgrebenets'>Maksym Grebenets</a></h4>
156
+ </td>
157
+ <td id='andrew-mcburney'>
158
+ <a href='https://github.com/armcburney'>
159
+ <img src='https://github.com/armcburney.png?size=140'>
160
+ </a>
161
+ <h4 align='center'><a href='https://twitter.com/armcburney'>Andrew McBurney</a></h4>
162
162
  </td>
163
163
  </tr>
164
164
  </table>
@@ -1,4 +1,5 @@
1
1
  require 'fastlane_core/helper'
2
+ require 'fastlane/boolean'
2
3
 
3
4
  module Cert
4
5
  # Use this to just setup the configuration attribute and set it later somewhere else
@@ -8,6 +9,7 @@ module Cert
8
9
 
9
10
  Helper = FastlaneCore::Helper # you gotta love Ruby: Helper.* should use the Helper class contained in FastlaneCore
10
11
  UI = FastlaneCore::UI
12
+ Boolean = Fastlane::Boolean
11
13
  ROOT = Pathname.new(File.expand_path('../../..', __FILE__))
12
14
 
13
15
  ENV['FASTLANE_TEAM_ID'] ||= ENV["CERT_TEAM_ID"]
@@ -20,6 +20,12 @@ module Cert
20
20
  description: "Create a certificate even if an existing certificate exists",
21
21
  is_string: false,
22
22
  default_value: false),
23
+ FastlaneCore::ConfigItem.new(key: :generate_apple_certs,
24
+ env_name: "CERT_GENERATE_APPLE_CERTS",
25
+ description: "Create a certificate type for Xcode 11 and later (Apple Development or Apple Distribution)",
26
+ type: Boolean,
27
+ default_value: FastlaneCore::Helper.mac? && FastlaneCore::Helper.xcode_at_least?('11'),
28
+ default_value_dynamic: true),
23
29
  FastlaneCore::ConfigItem.new(key: :username,
24
30
  short_option: "-u",
25
31
  env_name: "CERT_USERNAME",
@@ -134,19 +134,25 @@ module Cert
134
134
 
135
135
  # The kind of certificate we're interested in
136
136
  def certificate_type
137
- case Cert.config[:platform].to_s
138
- when 'ios', 'tvos'
139
- cert_type = Spaceship.certificate.production
140
- cert_type = Spaceship.certificate.in_house if Spaceship.client.in_house?
141
- cert_type = Spaceship.certificate.development if Cert.config[:development]
142
-
143
- when 'macos'
144
- cert_type = Spaceship.certificate.mac_app_distribution
145
- cert_type = Spaceship.certificate.mac_development if Cert.config[:development]
146
-
137
+ # Check if apple certs (Xcode 11 and later) should be used
138
+ if Cert.config[:generate_apple_certs]
139
+ cert_type = Spaceship.certificate.apple_distribution
140
+ cert_type = Spaceship.certificate.in_house if Spaceship.client.in_house? # Enterprise doesn't use Apple Distribution
141
+ cert_type = Spaceship.certificate.apple_development if Cert.config[:development]
142
+ else
143
+ case Cert.config[:platform].to_s
144
+ when 'ios', 'tvos'
145
+ cert_type = Spaceship.certificate.production
146
+ cert_type = Spaceship.certificate.in_house if Spaceship.client.in_house?
147
+ cert_type = Spaceship.certificate.development if Cert.config[:development]
148
+
149
+ when 'macos'
150
+ cert_type = Spaceship.certificate.mac_app_distribution
151
+ cert_type = Spaceship.certificate.mac_development if Cert.config[:development]
152
+ end
147
153
  end
148
154
 
149
- cert_type
155
+ return cert_type
150
156
  end
151
157
 
152
158
  def create_certificate
@@ -36,6 +36,7 @@ module Fastlane
36
36
  return build_nr
37
37
  else
38
38
  version_number = params[:version]
39
+ platform = params[:platform]
39
40
 
40
41
  # Create filter for get_builds with optional version number
41
42
  filter = { app: app.apple_id }
@@ -46,18 +47,25 @@ module Fastlane
46
47
  version_number_message = "any version"
47
48
  end
48
49
 
50
+ if platform
51
+ filter["preReleaseVersion.platform"] = Spaceship::ConnectAPI::Platform.map(platform)
52
+ platform_message = "#{platform} platform"
53
+ else
54
+ platform_message = "any platform"
55
+ end
56
+
49
57
  UI.message("Fetching the latest build number for #{version_number_message}")
50
58
 
51
59
  # Get latest build for optional version number and return build number if found
52
60
  build = Spaceship::ConnectAPI.get_builds(filter: filter, sort: "-uploadedDate", includes: "preReleaseVersion", limit: 1).first
53
61
  if build
54
62
  build_nr = build.version
55
- UI.message("Latest upload for version #{build.app_version} is build: #{build_nr}")
63
+ UI.message("Latest upload for version #{build.app_version} on #{platform_message} is build: #{build_nr}")
56
64
  return build_nr
57
65
  end
58
66
 
59
67
  # Let user know that build couldn't be found
60
- UI.important("Could not find a build for #{version_number_message} on App Store Connect")
68
+ UI.important("Could not find a build for #{version_number_message} on #{platform_message} on App Store Connect")
61
69
 
62
70
  if params[:initial_build_number].nil?
63
71
  UI.user_error!("Could not find a build on App Store Connect - and 'initial_build_number' option is not set")
@@ -16,7 +16,7 @@ module Fastlane
16
16
  # If any of the paths include "*", we assume that we are referring to the Unix entries
17
17
  # e.g /tmp/fastlane/* refers to all the files in /tmp/fastlane
18
18
  # We use Dir.glob to expand all those paths, this would create an array of arrays though, so flatten
19
- artifacts = artifacts_to_search.map { |f| f.include?("*") ? Dir.glob(f) : f }.flatten
19
+ artifacts = artifacts_to_search.flat_map { |f| f.include?("*") ? Dir.glob(f) : f }
20
20
 
21
21
  UI.verbose("Copying artifacts #{artifacts.join(', ')} to #{target_path}")
22
22
  UI.verbose(params[:keep_original] ? "Keeping original files" : "Not keeping original files")
@@ -6,7 +6,7 @@
6
6
 
7
7
  A new approach to iOS code signing: Share one code signing identity across your development team to simplify your codesigning setup and prevent code signing issues.
8
8
 
9
- _match_ is the implementation of the [https://codesigning.guide concept](https://codesigning.guide). _match_ creates all required certificates & provisioning profiles and stores them in a separate git repository. Every team member with access to the repo can use those credentials for code signing. _match_ also automatically repairs broken and expired credentials. It's the easiest way to share signing credentials across teams
9
+ _match_ is the implementation of the [codesigning.guide concept](https://codesigning.guide). _match_ creates all required certificates & provisioning profiles and stores them in a separate git repository. Every team member with access to the repo can use those credentials for code signing. _match_ also automatically repairs broken and expired credentials. It's the easiest way to share signing credentials across teams
10
10
 
11
11
  [More information on how to get started with codesigning](https://docs.fastlane.tools/codesigning/getting-started/)
12
12
 
@@ -79,7 +79,7 @@ You'll be asked if you want to store your code signing identities inside a **Git
79
79
 
80
80
  Use Git Storage to store all code signing identities in a private git repo, owned and operated by you. The files will be encrypted using OpenSSL.
81
81
 
82
- First, enter the URL to your private (!) Git repo (You can create one for free on e.g. [GitHub](https://github.com/new) or [BitBucket](https://bitbucket.org/repo/create)). The URL you enter can be either a `https://` or a `git` URL. (If your machine is currently using SSH to authenticate with GitHub, you'll want to use a `git` URL, otherwise you may see an authentication error when you attempt to use match.) `fastlane match init` won't read or modify your certificates or profiles yet, and also won't validate your git URL.
82
+ First, enter the URL to your private (!) Git repo (You can create one for free on e.g. [GitHub](https://github.com/new) or [BitBucket](https://bitbucket.org/repo/create)). The URL you enter can be either a `https://` or a `git` URL. `fastlane match init` won't read or modify your certificates or profiles yet, and also won't validate your git URL.
83
83
 
84
84
  This will create a `Matchfile` in your current directory (or in your `./fastlane/` folder).
85
85
 
@@ -92,6 +92,25 @@ app_identifier("tools.fastlane.app")
92
92
  username("user@fastlane.tools")
93
93
  ```
94
94
 
95
+ ##### Git Storage on GitHub
96
+
97
+ If your machine is currently using SSH to authenticate with GitHub, you'll want to use a `git` URL, otherwise, you may see an authentication error when you attempt to use match. Alternatively, you can set a basic authorization for _match_:
98
+
99
+ Using parameter:
100
+
101
+ ```
102
+ math(git_basic_authorization: '<YOUR KEY>')
103
+ ```
104
+
105
+ Using environment variable:
106
+
107
+ ```
108
+ ENV['MATCH_GIT_BASIC_AUTHORIZATION'] = '<YOUR KEY>'
109
+ match
110
+ ```
111
+
112
+ 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)
113
+
95
114
  #### Google Cloud Storage
96
115
 
97
116
  Use [Google Cloud Storage](https://cloud.google.com/storage/) for a fully hosted solution for your code signing identities. Certificates are stored on Google Cloud, encrypted using Google managed keys. Everything will be stored on your Google account, inside a storage bucket you provide. You can also directly access the files using the web console.
@@ -119,7 +138,7 @@ match(git_branch: "team2", username: "user@team2.com")
119
138
 
120
139
  #### Google Cloud Storage
121
140
 
122
- If you use Google Cloud Storage, you don't need to do anything manually. Just use Google Cloud Storage, and the top level folder will be the team ID.
141
+ If you use Google Cloud Storage, you don't need to do anything manually for multiple teams. Just use Google Cloud Storage, and the top level folder will be the team ID.
123
142
 
124
143
  ### Run
125
144
 
@@ -214,7 +233,7 @@ There are two cases for reading and writing certificates stored in a Google Clou
214
233
  1. Continuous integration jobs. These will authenticate to your Google Cloud project via a service account, and use a `gc_keys.json` file as credentials.
215
234
  1. Developers on a local workstation. In this case, you should choose whether everyone on your team will create their own `gc_keys.json` file, or whether you want to manage access to the bucket directly using your developers' Google accounts.
216
235
 
217
- When running `fastlane match init` the first time, the setup process will give you the option to create your `gc_keys.json` file. This file contains the auth credentials needed to access your Google Cloud storage bucket. Make sure to keep that file secret and never add it to version control. We recommend adding `gc_keys.json` to your `.gitignore`
236
+ When running `fastlane match init` the first time, the setup process will give you the option to create your `gc_keys.json` file. This file contains the authentication credentials needed to access your Google Cloud storage bucket. Make sure to keep that file secret and never add it to version control. We recommend adding `gc_keys.json` to your `.gitignore`
218
237
 
219
238
  ##### Managing developer access via keys
220
239
  If you want to manage developer access to your certificates via authentication keys, every developer should create their own `gc_keys.json` and add the file to all their work machines. This will give the admin full control over who has read/write access to the given Storage bucket. At the same time it allows your team to revoke a single key if a file gets compromised.
@@ -0,0 +1,58 @@
1
+ module Fastlane
2
+ module Actions
3
+ class EnsureEnvVarsAction < Action
4
+ def self.run(params)
5
+ variables = params[:env_vars]
6
+
7
+ variables.each do |variable|
8
+ next unless ENV[variable].to_s.strip.empty?
9
+
10
+ UI.user_error!("Missing environment variable '#{variable}'")
11
+ end
12
+
13
+ is_one = variables.length == 1
14
+
15
+ UI.success("Environment variable#{is_one ? '' : 's'} '#{variables.join('\', \'')}' #{is_one ? 'is' : 'are'} set!")
16
+ end
17
+
18
+ def self.description
19
+ 'Raises an exception if the specified env vars are not set'
20
+ end
21
+
22
+ def self.details
23
+ 'This action will check if some environment variables are set.'
24
+ end
25
+
26
+ def self.available_options
27
+ [
28
+ FastlaneCore::ConfigItem.new(key: :env_vars,
29
+ description: 'The environment variables names that should be checked',
30
+ type: Array,
31
+ verify_block: proc do |value|
32
+ UI.user_error!('Specify at least one environment variable name') if value.empty?
33
+ end)
34
+ ]
35
+ end
36
+
37
+ def self.authors
38
+ ['revolter']
39
+ end
40
+
41
+ def self.example_code
42
+ [
43
+ 'ensure_env_vars(
44
+ env_vars: [\'GITHUB_USER_NAME\', \'GITHUB_API_TOKEN\']
45
+ )'
46
+ ]
47
+ end
48
+
49
+ def self.category
50
+ :misc
51
+ end
52
+
53
+ def self.is_supported?(platform)
54
+ true
55
+ end
56
+ end
57
+ end
58
+ end