fastlane 2.5.0 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/credentials_manager/lib/credentials_manager/appfile_config.rb +4 -0
- data/deliver/lib/deliver/html_generator.rb +1 -1
- data/fastlane/lib/fastlane/environment_printer.rb +2 -2
- data/fastlane/lib/fastlane/fastlane_require.rb +1 -1
- data/fastlane/lib/fastlane/version.rb +1 -1
- data/fastlane_core/lib/fastlane_core/update_checker/update_checker.rb +1 -1
- data/frameit/lib/frameit/commands_generator.rb +6 -6
- data/frameit/lib/frameit/editor.rb +0 -2
- data/frameit/lib/frameit/frame_downloader.rb +14 -5
- data/frameit/lib/frameit/template_finder.rb +2 -2
- data/gym/lib/assets/GymfileTemplate +1 -1
- data/gym/lib/gym/xcodebuild_fixes/swift_fix.rb +1 -1
- data/match/lib/assets/MatchfileTemplate +1 -1
- data/match/lib/match/spaceship_ensure.rb +1 -1
- data/pem/README.md +2 -5
- data/pilot/README.md +1 -1
- data/scan/lib/assets/ScanfileTemplate +1 -1
- data/scan/lib/scan/detect_values.rb +1 -1
- data/screengrab/lib/assets/ScreengrabfileTemplate +1 -1
- data/sigh/lib/sigh/runner.rb +1 -1
- data/snapshot/lib/assets/SnapfileTemplate +1 -1
- data/spaceship/README.md +1 -1
- data/spaceship/lib/spaceship/client.rb +10 -4
- data/spaceship/lib/spaceship/tunes/tunes_client.rb +19 -3
- data/spaceship/lib/spaceship/two_step_client.rb +8 -3
- data/supply/lib/supply/client.rb +12 -7
- data/supply/lib/supply/options.rb +15 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 077c46f59f353134e4211ee252c92882a510b55c
|
4
|
+
data.tar.gz: 5cb94ef40a8470ae61fa22e069ea06242e8047af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f8bc8bb4fef49caa02096fabb87146c606296cd6b5f58019a0431a3529eb1539640be800c399dcaa231565ccaf9bb988161c2e23f84dff10f6f00816d9aee19
|
7
|
+
data.tar.gz: c605fb60e551e0840e83a084a25790cb38eb6916cb902d7fbfbf917e810d3258c9dac2555d25047d5a833782b1d2985d8a7c259a454e0d9a8a8205f432216a86
|
@@ -122,6 +122,10 @@ module CredentialsManager
|
|
122
122
|
setter(:json_key_file, *args, &block)
|
123
123
|
end
|
124
124
|
|
125
|
+
def json_key_data_raw(*args, &block)
|
126
|
+
setter(:json_key_data_raw, *args, &block)
|
127
|
+
end
|
128
|
+
|
125
129
|
def issuer(*args, &block)
|
126
130
|
puts "Appfile: DEPRECATED issuer: use json_key_file instead".red
|
127
131
|
setter(:issuer, *args, &block)
|
@@ -16,7 +16,7 @@ module Deliver
|
|
16
16
|
UI.crash!("Could not render HTML page")
|
17
17
|
end
|
18
18
|
UI.important("Verifying the upload via the HTML file can be disabled by either adding")
|
19
|
-
UI.important("`force true` to your Deliverfile or using `deliver --force`")
|
19
|
+
UI.important("`force true` to your Deliverfile or using `fastlane deliver --force`")
|
20
20
|
|
21
21
|
system("open '#{html_path}'")
|
22
22
|
okay = UI.confirm("Does the Preview on path '#{html_path}' look okay for you?")
|
@@ -68,7 +68,7 @@ module Fastlane
|
|
68
68
|
if Gem::Version.new(installed_version) == Gem::Version.new(latest_version)
|
69
69
|
update_status = "✅ Up-To-Date"
|
70
70
|
else
|
71
|
-
update_status = "🚫 Update
|
71
|
+
update_status = "🚫 Update available"
|
72
72
|
end
|
73
73
|
rescue
|
74
74
|
update_status = "💥 Check failed"
|
@@ -112,7 +112,7 @@ module Fastlane
|
|
112
112
|
if Gem::Version.new(current_gem.version) == Gem::Version.new(latest_version)
|
113
113
|
update_status = "✅ Up-To-Date"
|
114
114
|
else
|
115
|
-
update_status = "🚫 Update
|
115
|
+
update_status = "🚫 Update available"
|
116
116
|
end
|
117
117
|
rescue
|
118
118
|
update_status = "💥 Check failed"
|
@@ -155,7 +155,7 @@ module FastlaneCore
|
|
155
155
|
# (optional) Returns the app identifier for the current tool
|
156
156
|
# supply and screengrab use different param names and env variable patterns so we have to special case here
|
157
157
|
# example:
|
158
|
-
# supply --skip_upload_screenshots -a beta -p com.test.app should return com.test.app
|
158
|
+
# fastlane supply --skip_upload_screenshots -a beta -p com.test.app should return com.test.app
|
159
159
|
# screengrab -a com.test.app should return com.test.app
|
160
160
|
def self.android_app_identifier(args, gem_name)
|
161
161
|
app_identifier = nil
|
@@ -27,7 +27,7 @@ module Frameit
|
|
27
27
|
default_command :run
|
28
28
|
|
29
29
|
command :run do |c|
|
30
|
-
c.syntax = 'frameit black'
|
30
|
+
c.syntax = 'fastlane frameit black'
|
31
31
|
c.description = "Adds a black frame around all screenshots"
|
32
32
|
|
33
33
|
c.action do |args, options|
|
@@ -37,7 +37,7 @@ module Frameit
|
|
37
37
|
end
|
38
38
|
|
39
39
|
command :silver do |c|
|
40
|
-
c.syntax = 'frameit silver'
|
40
|
+
c.syntax = 'fastlane frameit silver'
|
41
41
|
c.description = "Adds a silver frame around all screenshots"
|
42
42
|
|
43
43
|
c.action do |args, options|
|
@@ -47,7 +47,7 @@ module Frameit
|
|
47
47
|
end
|
48
48
|
|
49
49
|
command :gold do |c|
|
50
|
-
c.syntax = 'frameit gold'
|
50
|
+
c.syntax = 'fastlane frameit gold'
|
51
51
|
c.description = "Adds a gold frame around all screenshots"
|
52
52
|
|
53
53
|
c.action do |args, options|
|
@@ -57,7 +57,7 @@ module Frameit
|
|
57
57
|
end
|
58
58
|
|
59
59
|
command :rose_gold do |c|
|
60
|
-
c.syntax = 'frameit rose_gold'
|
60
|
+
c.syntax = 'fastlane frameit rose_gold'
|
61
61
|
c.description = "Adds a rose gold frame around all screenshots"
|
62
62
|
|
63
63
|
c.action do |args, options|
|
@@ -67,7 +67,7 @@ module Frameit
|
|
67
67
|
end
|
68
68
|
|
69
69
|
command :setup do |c|
|
70
|
-
c.syntax = 'frameit setup'
|
70
|
+
c.syntax = 'fastlane frameit setup'
|
71
71
|
c.description = "Downloads and sets up the latest device frames"
|
72
72
|
|
73
73
|
c.action do |args, options|
|
@@ -76,7 +76,7 @@ module Frameit
|
|
76
76
|
end
|
77
77
|
|
78
78
|
command :download_frames do |c|
|
79
|
-
c.syntax = 'frameit download_frames'
|
79
|
+
c.syntax = 'fastlane frameit download_frames'
|
80
80
|
c.description = "Downloads and sets up the latest device frames"
|
81
81
|
|
82
82
|
c.action do |args, options|
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Frameit
|
2
2
|
class FrameDownloader
|
3
|
-
FRAME_PATH = '.frameit/devices_frames_2'
|
4
3
|
HOST_URL = "https://fastlane.github.io/frameit-frames"
|
5
4
|
|
6
5
|
def download_frames
|
@@ -9,11 +8,10 @@ module Frameit
|
|
9
8
|
require 'json'
|
10
9
|
require 'fileutils'
|
11
10
|
|
12
|
-
UI.message("Downloading device frames
|
11
|
+
UI.message("Downloading device frames to '#{templates_path}'")
|
13
12
|
FileUtils.mkdir_p(templates_path)
|
14
13
|
|
15
14
|
frames_version = download_file("version.txt")
|
16
|
-
File.write(File.join(templates_path, "version.txt"), frames_version)
|
17
15
|
UI.important("Using frame version '#{frames_version}', you can optionally lock that version in your Framefile.json using `device_frame_version`")
|
18
16
|
|
19
17
|
files = JSON.parse(download_file("files.json"))
|
@@ -23,15 +21,26 @@ module Frameit
|
|
23
21
|
end
|
24
22
|
File.write(File.join(templates_path, "offsets.json"), download_file("offsets.json"))
|
25
23
|
|
24
|
+
# Write the version.txt at the very end to properly resume downloads
|
25
|
+
# if it's interrupted
|
26
|
+
File.write(File.join(templates_path, "version.txt"), frames_version)
|
27
|
+
|
26
28
|
UI.success("Successfully downloaded all required image assets")
|
27
29
|
end
|
28
30
|
|
29
31
|
def frames_exist?(version: "latest")
|
30
|
-
|
32
|
+
version_path = File.join(templates_path, "version.txt")
|
33
|
+
version = File.read(version_path) if File.exist?(version_path)
|
34
|
+
Dir["#{templates_path}/*.png"].count > 0 && version.to_i > 0
|
31
35
|
end
|
32
36
|
|
33
37
|
def self.templates_path
|
34
|
-
|
38
|
+
# Previously ~/.frameit/device_frames_2/x
|
39
|
+
legacy_path = File.join(ENV['HOME'], ".frameit/devices_frames_2", Frameit.frames_version)
|
40
|
+
return legacy_path if File.directory?(legacy_path)
|
41
|
+
|
42
|
+
# New path, being ~/.fastlane/frameit/x
|
43
|
+
return File.join(FastlaneCore.fastlane_user_dir, "frameit", Frameit.frames_version)
|
35
44
|
end
|
36
45
|
|
37
46
|
def templates_path
|
@@ -19,12 +19,12 @@ module Frameit
|
|
19
19
|
# Unfortunately not every device type is available in rose gold or gold
|
20
20
|
# This is why we can't have nice things #yatusabes
|
21
21
|
# fallback to a white iPhone, which looks similar
|
22
|
-
UI.important("
|
22
|
+
UI.important("Unfortunately device type '#{screenshot.device_name}' is not available in #{screenshot.color}, falling back to silver...")
|
23
23
|
screenshot.color = Frameit::Color::SILVER
|
24
24
|
return self.get_template(screenshot)
|
25
25
|
else
|
26
26
|
UI.error("Couldn't find template for screenshot type '#{filename}'")
|
27
|
-
UI.error("Please run `frameit download_frames` to download the latest frames")
|
27
|
+
UI.error("Please run `fastlane frameit download_frames` to download the latest frames")
|
28
28
|
end
|
29
29
|
return filename if Helper.test?
|
30
30
|
return nil
|
@@ -45,7 +45,7 @@ module Gym
|
|
45
45
|
UI.important("try adding the following parameter to your gym call:")
|
46
46
|
UI.success("gym(toolchain: :swift_2_3)")
|
47
47
|
UI.message("or")
|
48
|
-
UI.success("gym --toolchain swift_2_3")
|
48
|
+
UI.success("fastlane gym --toolchain swift_2_3")
|
49
49
|
end
|
50
50
|
|
51
51
|
UI.user_error!(ex)
|
@@ -5,5 +5,5 @@ type "development" # The default type, can be: appstore, adhoc or development
|
|
5
5
|
# app_identifier ["tools.fastlane.app", "tools.fastlane.app2"]
|
6
6
|
# username "user@fastlane.tools" # Your Apple Developer Portal username
|
7
7
|
|
8
|
-
# For all available options run `match --help`
|
8
|
+
# For all available options run `fastlane match --help`
|
9
9
|
# Remove the # in the beginning of the line to enable the other options
|
@@ -11,7 +11,7 @@ module Match
|
|
11
11
|
if keychain_entry.password(ask_if_missing: false).to_s.length == 0
|
12
12
|
UI.important("You can also run `match` in readonly mode to not require any access to the")
|
13
13
|
UI.important("Developer Portal. This way you only share the keys and credentials")
|
14
|
-
UI.command("match --readonly")
|
14
|
+
UI.command("fastlane match --readonly")
|
15
15
|
UI.important("More information https://github.com/fastlane/fastlane/tree/master/match#access-control")
|
16
16
|
end
|
17
17
|
|
data/pem/README.md
CHANGED
@@ -41,9 +41,7 @@ Tired of manually creating and maintaining your push notification profiles for y
|
|
41
41
|
|
42
42
|
`pem` creates new .pem, .cer, and .p12 files to be uploaded to your push server if a valid push notification profile is needed. `pem` does not cover uploading the file to your server.
|
43
43
|
|
44
|
-
To automate iOS Provisioning profiles you can use [
|
45
|
-
|
46
|
-
Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.com/FastlaneTools)
|
44
|
+
To automate iOS Provisioning profiles you can use [match](https://github.com/fastlane/fastlane/tree/master/match).
|
47
45
|
|
48
46
|
-------
|
49
47
|
<p align="center">
|
@@ -62,7 +60,6 @@ Get in contact with the developer on Twitter: [@FastlaneTools](https://twitter.c
|
|
62
60
|
# Features
|
63
61
|
Well, it's actually just one: Generate the ```pem``` file for your server.
|
64
62
|
|
65
|
-
|
66
63
|
Check out this gif:
|
67
64
|
|
68
65
|

|
@@ -87,7 +84,7 @@ This does the following:
|
|
87
84
|
- Downloads the certificate
|
88
85
|
- Generates a new ```.pem``` file in the current working directory, which you can upload to your server
|
89
86
|
|
90
|
-
```pem``` will never revoke your existing certificates.
|
87
|
+
Note that ```pem``` will never revoke your existing certificates. `pem` can't download any of your existing push certificates, as the private key is only available on the machine it was created on.
|
91
88
|
|
92
89
|
If you already have a push certificate enabled, which is active for at least 30 more days, `pem` will not create a new certificate. If you still want to create one, use the `force`:
|
93
90
|
|
data/pilot/README.md
CHANGED
@@ -167,7 +167,7 @@ module Scan
|
|
167
167
|
def self.detect_destination
|
168
168
|
if Scan.config[:destination]
|
169
169
|
UI.important("It's not recommended to set the `destination` value directly")
|
170
|
-
UI.important("Instead use the other options available in `scan --help`")
|
170
|
+
UI.important("Instead use the other options available in `fastlane scan --help`")
|
171
171
|
UI.important("Using your value '#{Scan.config[:destination]}' for now")
|
172
172
|
UI.important("because I trust you know what you're doing...")
|
173
173
|
return
|
data/sigh/lib/sigh/runner.rb
CHANGED
@@ -174,7 +174,7 @@ module Sigh
|
|
174
174
|
end
|
175
175
|
|
176
176
|
if certificates.count > 1 and !Sigh.config[:development]
|
177
|
-
UI.important "Found more than one code signing identity. Choosing the first one. Check out `sigh --help` to see all available options."
|
177
|
+
UI.important "Found more than one code signing identity. Choosing the first one. Check out `fastlane sigh --help` to see all available options."
|
178
178
|
UI.important "Available Code Signing Identities for current filters:"
|
179
179
|
certificates.each do |c|
|
180
180
|
str = ["\t- Name:", c.owner_name, "- ID:", c.id + " - Expires", c.expires.strftime("%d/%m/%Y")].join(" ")
|
data/spaceship/README.md
CHANGED
@@ -110,7 +110,7 @@ This requires you to install `pry` using `sudo gem install pry`. `pry` is not in
|
|
110
110
|
|
111
111
|
## 2 Step Verification
|
112
112
|
|
113
|
-
When your Apple account has 2 factor verification enabled, you'll automatically be asked to verify your identity using your phone. The resulting session will be stored in `~/.spaceship/[email]/cookie`. The session should be valid for about one month, however there is no way to test this without actually waiting for over a month.
|
113
|
+
When your Apple account has 2 factor verification enabled, you'll automatically be asked to verify your identity using your phone. The resulting session will be stored in `~/.fastlane/spaceship/[email]/cookie`. The session should be valid for about one month, however there is no way to test this without actually waiting for over a month.
|
114
114
|
|
115
115
|
### Support for CI machines
|
116
116
|
|
@@ -172,9 +172,9 @@ module Spaceship
|
|
172
172
|
if ENV["SPACESHIP_COOKIE_PATH"]
|
173
173
|
path = File.expand_path(File.join(ENV["SPACESHIP_COOKIE_PATH"], "spaceship", self.user, "cookie"))
|
174
174
|
else
|
175
|
-
["~/.spaceship", "/var/tmp/spaceship", "#{Dir.tmpdir}/spaceship"].each do |dir|
|
175
|
+
[File.join(FastlaneCore.fastlane_user_dir, "spaceship"), "~/.spaceship", "/var/tmp/spaceship", "#{Dir.tmpdir}/spaceship"].each do |dir|
|
176
176
|
dir_parts = File.split(dir)
|
177
|
-
if directory_accessible?(dir_parts.first)
|
177
|
+
if directory_accessible?(File.expand_path(dir_parts.first))
|
178
178
|
path = File.expand_path(File.join(dir, self.user, "cookie"))
|
179
179
|
break
|
180
180
|
end
|
@@ -362,8 +362,9 @@ module Spaceship
|
|
362
362
|
def with_retry(tries = 5, &_block)
|
363
363
|
return yield
|
364
364
|
rescue Faraday::Error::ConnectionFailed, Faraday::Error::TimeoutError, AppleTimeoutError, Errno::EPIPE => ex # New Faraday version: Faraday::TimeoutError => ex
|
365
|
-
|
366
|
-
|
365
|
+
tries -= 1
|
366
|
+
unless tries.zero?
|
367
|
+
logger.warn("Timeout received: '#{ex.message}'. Retrying after 3 seconds (remaining: #{tries})...")
|
367
368
|
sleep 3 unless defined? SpecHelper
|
368
369
|
retry
|
369
370
|
end
|
@@ -373,6 +374,11 @@ module Spaceship
|
|
373
374
|
msg = "Auth error received: '#{ex.message}'. Login in again then retrying after 3 seconds (remaining: #{tries})..."
|
374
375
|
puts msg if $verbose
|
375
376
|
logger.warn msg
|
377
|
+
|
378
|
+
if self.class.spaceship_session_env.to_s.length > 0
|
379
|
+
raise UnauthorizedAccessError.new, "Authentication error, you passed an invalid session using the environment variable FASTLANE_SESSION or SPACESHIP_SESSION"
|
380
|
+
end
|
381
|
+
|
376
382
|
do_login(self.user, @password)
|
377
383
|
sleep 3 unless defined? SpecHelper
|
378
384
|
retry
|
@@ -574,14 +574,30 @@ module Spaceship
|
|
574
574
|
# @!group Build Trains
|
575
575
|
#####################################################
|
576
576
|
|
577
|
+
# rubocop:disable Metrics/BlockNesting
|
577
578
|
# @param (testing_type) internal or external
|
578
|
-
def build_trains(app_id, testing_type, platform: nil)
|
579
|
+
def build_trains(app_id, testing_type, tries = 5, platform: nil)
|
579
580
|
raise "app_id is required" unless app_id
|
580
581
|
url = "ra/apps/#{app_id}/trains/?testingType=#{testing_type}"
|
581
582
|
url += "&platform=#{platform}" unless platform.nil?
|
582
583
|
r = request(:get, url)
|
583
|
-
parse_response(r, 'data')
|
584
|
+
return parse_response(r, 'data')
|
585
|
+
rescue Spaceship::Client::UnexpectedResponse => ex
|
586
|
+
# Build trains fail randomly very often
|
587
|
+
# we need to catch those errors and retry
|
588
|
+
# https://github.com/fastlane/fastlane/issues/6419
|
589
|
+
if ex.to_s.include?("ITC.response.error.OPERATION_FAILED")
|
590
|
+
tries -= 1
|
591
|
+
if tries > 0
|
592
|
+
logger.warn("Received temporary server error from iTunes Connect. Retrying the request...")
|
593
|
+
sleep 3 unless defined? SpecHelper
|
594
|
+
retry
|
595
|
+
end
|
596
|
+
end
|
597
|
+
|
598
|
+
raise Spaceship::Client::UnexpectedResponse, "Temporary iTunes Connect error: #{ex}"
|
584
599
|
end
|
600
|
+
# rubocop:enable Metrics/BlockNesting
|
585
601
|
|
586
602
|
def update_build_trains!(app_id, testing_type, data)
|
587
603
|
raise "app_id is required" unless app_id
|
@@ -1003,7 +1019,7 @@ module Spaceship
|
|
1003
1019
|
return yield
|
1004
1020
|
rescue Spaceship::TunesClient::ITunesConnectTemporaryError => ex
|
1005
1021
|
unless (tries -= 1).zero?
|
1006
|
-
msg = "
|
1022
|
+
msg = "iTunes Connect temporary error received: '#{ex.message}'. Retrying after 60 seconds (remaining: #{tries})..."
|
1007
1023
|
puts msg
|
1008
1024
|
logger.warn msg
|
1009
1025
|
sleep 60 unless defined? SpecHelper # unless FastlaneCore::Helper.is_test?
|
@@ -87,12 +87,11 @@ module Spaceship
|
|
87
87
|
end
|
88
88
|
|
89
89
|
def load_session_from_env
|
90
|
-
|
91
|
-
return if yaml_text.to_s.length == 0
|
90
|
+
return if self.class.spaceship_session_env.to_s.length == 0
|
92
91
|
puts "Loading session from environment variable" if $verbose
|
93
92
|
|
94
93
|
file = Tempfile.new('cookie.yml')
|
95
|
-
file.write(
|
94
|
+
file.write(self.class.spaceship_session_env.gsub("\\n", "\n"))
|
96
95
|
file.close
|
97
96
|
|
98
97
|
begin
|
@@ -106,6 +105,12 @@ module Spaceship
|
|
106
105
|
end
|
107
106
|
end
|
108
107
|
|
108
|
+
# Fetch the session cookie from the environment
|
109
|
+
# (if exists)
|
110
|
+
def self.spaceship_session_env
|
111
|
+
ENV["FASTLANE_SESSION"] || ENV["SPACESHIP_SESSION"]
|
112
|
+
end
|
113
|
+
|
109
114
|
def select_device(r, device_id)
|
110
115
|
# Request Token
|
111
116
|
r = request(:put) do |req|
|
data/supply/lib/supply/client.rb
CHANGED
@@ -22,25 +22,30 @@ module Supply
|
|
22
22
|
|
23
23
|
# instantiate a client given the supplied configuration
|
24
24
|
def self.make_from_config
|
25
|
-
unless Supply.config[:json_key] || (Supply.config[:key] && Supply.config[:issuer])
|
25
|
+
unless Supply.config[:json_key] || Supply.config[:json_key_data] || (Supply.config[:key] && Supply.config[:issuer])
|
26
26
|
UI.important("To not be asked about this value, you can specify it using 'json_key'")
|
27
27
|
Supply.config[:json_key] = UI.input("The service account json file used to authenticate with Google: ")
|
28
28
|
end
|
29
29
|
|
30
|
+
if Supply.config[:json_key]
|
31
|
+
service_account_json = File.open(File.expand_path(Supply.config[:json_key]))
|
32
|
+
elsif Supply.config[:json_key_data]
|
33
|
+
service_account_json = StringIO.new(Supply.config[:json_key_data])
|
34
|
+
end
|
35
|
+
|
30
36
|
return Client.new(path_to_key: Supply.config[:key],
|
31
|
-
issuer: Supply.config[:issuer],
|
32
|
-
path_to_service_account_json: Supply.config[:json_key])
|
37
|
+
issuer: Supply.config[:issuer], service_account_json: service_account_json)
|
33
38
|
end
|
34
39
|
|
35
40
|
# Initializes the android_publisher and its auth_client using the specified information
|
36
|
-
# @param
|
41
|
+
# @param service_account_json: The raw service account Json data
|
37
42
|
# @param path_to_key: The path to your p12 file (@deprecated)
|
38
43
|
# @param issuer: Email addresss for oauth (@deprecated)
|
39
|
-
def initialize(path_to_key: nil, issuer: nil,
|
44
|
+
def initialize(path_to_key: nil, issuer: nil, service_account_json: nil)
|
40
45
|
scope = Androidpublisher::AUTH_ANDROIDPUBLISHER
|
41
46
|
|
42
|
-
if
|
43
|
-
key_io =
|
47
|
+
if service_account_json
|
48
|
+
key_io = service_account_json
|
44
49
|
else
|
45
50
|
require 'google/api_client/auth/key_utils'
|
46
51
|
key = Google::APIClient::KeyUtils.load_from_pkcs12(File.expand_path(path_to_key), 'notasecret')
|
@@ -58,13 +58,27 @@ module Supply
|
|
58
58
|
FastlaneCore::ConfigItem.new(key: :json_key,
|
59
59
|
env_name: "SUPPLY_JSON_KEY",
|
60
60
|
short_option: "-j",
|
61
|
-
conflicting_options: [:issuer, :key],
|
61
|
+
conflicting_options: [:issuer, :key, :json_key_data],
|
62
62
|
optional: true, # this is shouldn't be optional but is until --key and --issuer are completely removed
|
63
63
|
description: "The service account json file used to authenticate with Google",
|
64
64
|
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:json_key_file),
|
65
65
|
verify_block: proc do |value|
|
66
66
|
UI.user_error! "Could not find service account json file at path '#{File.expand_path(value)}'" unless File.exist?(File.expand_path(value))
|
67
67
|
end),
|
68
|
+
FastlaneCore::ConfigItem.new(key: :json_key_data,
|
69
|
+
env_name: "SUPPLY_JSON_KEY_DATA",
|
70
|
+
short_option: "-c",
|
71
|
+
conflicting_options: [:issuer, :key, :json_key],
|
72
|
+
optional: true,
|
73
|
+
description: "The service account json used to authenticate with Google",
|
74
|
+
default_value: CredentialsManager::AppfileConfig.try_fetch_value(:json_key_data_raw),
|
75
|
+
verify_block: proc do |value|
|
76
|
+
begin
|
77
|
+
JSON.parse(value)
|
78
|
+
rescue JSON::ParserError
|
79
|
+
UI.user_error! "Could not parse service account json JSON::ParseError"
|
80
|
+
end
|
81
|
+
end),
|
68
82
|
FastlaneCore::ConfigItem.new(key: :apk,
|
69
83
|
env_name: "SUPPLY_APK",
|
70
84
|
description: "Path to the APK file to upload",
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Felix Krause
|
@@ -14,7 +14,7 @@ authors:
|
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
|
-
date: 2017-01-
|
17
|
+
date: 2017-01-08 00:00:00.000000000 Z
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
20
20
|
name: slack-notifier
|
@@ -312,14 +312,14 @@ dependencies:
|
|
312
312
|
requirements:
|
313
313
|
- - "~>"
|
314
314
|
- !ruby/object:Gem::Version
|
315
|
-
version: 0.9.
|
315
|
+
version: 0.9.2
|
316
316
|
type: :runtime
|
317
317
|
prerelease: false
|
318
318
|
version_requirements: !ruby/object:Gem::Requirement
|
319
319
|
requirements:
|
320
320
|
- - "~>"
|
321
321
|
- !ruby/object:Gem::Version
|
322
|
-
version: 0.9.
|
322
|
+
version: 0.9.2
|
323
323
|
- !ruby/object:Gem::Dependency
|
324
324
|
name: highline
|
325
325
|
requirement: !ruby/object:Gem::Requirement
|