fastlane 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
![assets/PEMRecording.gif](assets/PEMRecording.gif)
|
@@ -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
|