fastlane-plugin-testappio 1.0.1 → 1.0.4
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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d55de14e5648c1807325ebdea9de2ebf7553a9c61d8a8c7e4f58484409c29dc1
|
4
|
+
data.tar.gz: 7d560dce67bef063702fb942b3bbfa508a3a55cf49a98e8b3a7d5e65bb803c1f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57d59c0bd2d320dcec29a97b53a21de3e2cc8290967738dd4591cabfd2317beb03567d8d92823f1bf6b39e10e7e8c4b00a2b23f07ad40408723178ae4dd0f637
|
7
|
+
data.tar.gz: 310cc7eb9e585a5b6dbb2eadb28084b921a8a217a50723abd7c365be3f1d02abee51e7427191a5412e7fdfae19f32b61fbeede3aa090359d153868e08b256f03
|
data/README.md
CHANGED
@@ -98,9 +98,9 @@ _Fastlane_ is the easiest way to automate beta deployments and releases for iOS
|
|
98
98
|
|
99
99
|
## Feedback & Support
|
100
100
|
|
101
|
-
Developers built [TestApp.io](https://testapp.io) to solve the pain of app distribution for mobile app development teams.
|
101
|
+
Developers built [TestApp.io](https://testapp.io) to solve the pain of app distribution & feedback for mobile app development teams.
|
102
102
|
|
103
|
-
Join our [
|
103
|
+
Join our [community](https://help.testapp.io/faq/join-our-community/) for feedback and support.
|
104
104
|
|
105
105
|
Check out our [Help Center](https://help.testapp.io/) for more info and other integrations.
|
106
106
|
|
@@ -2,11 +2,15 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class UploadToTestappioAction < Action
|
4
4
|
SUPPORTED_FILE_EXTENSIONS = ["apk", "ipa"]
|
5
|
+
|
5
6
|
def self.run(params)
|
6
|
-
# Check if ta-cli is installed
|
7
|
-
Helper::TestappioHelper.check_ta_cli
|
8
7
|
|
9
|
-
#
|
8
|
+
# Check if `ta_cli` exists, install it if not
|
9
|
+
unless Helper::TestappioHelper.check_ta_cli
|
10
|
+
UI.error("Error detecting ta-cli")
|
11
|
+
return
|
12
|
+
end
|
13
|
+
|
10
14
|
api_token = params[:api_token]
|
11
15
|
app_id = params[:app_id]
|
12
16
|
apk_file = params[:apk_file]
|
@@ -16,36 +20,42 @@ module Fastlane
|
|
16
20
|
git_release_notes = params[:git_release_notes]
|
17
21
|
git_commit_id = params[:git_commit_id]
|
18
22
|
notify = params[:notify]
|
23
|
+
self_update = params[:self_update]
|
24
|
+
|
25
|
+
# Check if ta-cli needs to be updated
|
26
|
+
unless Helper::TestappioHelper.check_update(self_update)
|
27
|
+
UI.error("Error updating ta-cli")
|
28
|
+
return
|
29
|
+
end
|
19
30
|
|
20
31
|
validate_file_path(apk_file) unless release == "ios"
|
21
32
|
validate_file_path(ipa_file) unless release == "android"
|
22
33
|
|
23
|
-
command = ["ta-cli"
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
34
|
+
command = ["ta-cli", "publish",
|
35
|
+
"--api_token=#{api_token}",
|
36
|
+
"--app_id=#{app_id}",
|
37
|
+
"--release=#{release}"]
|
38
|
+
|
28
39
|
command.push("--apk=#{apk_file}") unless release == "ios"
|
29
40
|
command.push("--ipa=#{ipa_file}") unless release == "android"
|
30
|
-
|
31
|
-
command
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
|
42
|
+
command += ["--release_notes=#{release_notes}",
|
43
|
+
"--git_release_notes=#{git_release_notes}",
|
44
|
+
"--git_commit_id=#{git_commit_id}",
|
45
|
+
"--notify=#{notify}",
|
46
|
+
"--source=Fastlane"]
|
35
47
|
|
36
48
|
UI.message("Uploading to TestApp.io")
|
37
49
|
Helper::TestappioHelper.call_ta_cli(command)
|
38
50
|
UI.success("Successfully uploaded to TestApp.io!")
|
39
51
|
end
|
40
52
|
|
41
|
-
# Validate file_path.
|
42
53
|
def self.validate_file_path(file_path)
|
43
54
|
UI.user_error!("No file found at '#{file_path}'.") unless File.exist?(file_path)
|
44
55
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
UI.user_error!("file_path is invalid, only files with extensions " + SUPPORTED_FILE_EXTENSIONS.to_s + " are allowed to be uploaded.")
|
56
|
+
file_ext = File.extname(file_path).delete('.')
|
57
|
+
unless SUPPORTED_FILE_EXTENSIONS.include?(file_ext)
|
58
|
+
UI.user_error!("file_path is invalid, only files with extensions #{SUPPORTED_FILE_EXTENSIONS} are allowed to be uploaded.")
|
49
59
|
end
|
50
60
|
end
|
51
61
|
|
@@ -122,7 +132,13 @@ module Fastlane
|
|
122
132
|
description: "Send notificaitons to your team members about this release: true or false",
|
123
133
|
optional: true,
|
124
134
|
is_string: false,
|
125
|
-
default_value: false)
|
135
|
+
default_value: false),
|
136
|
+
FastlaneCore::ConfigItem.new(key: :self_update,
|
137
|
+
env_name: "TESTAPPIO_SELF_UPDATE",
|
138
|
+
description: "Automatically update ta-cli if a new version is available or required: true or false",
|
139
|
+
optional: true,
|
140
|
+
is_string: false,
|
141
|
+
default_value: true)
|
126
142
|
]
|
127
143
|
end
|
128
144
|
|
@@ -5,42 +5,86 @@ module Fastlane
|
|
5
5
|
|
6
6
|
module Helper
|
7
7
|
class TestappioHelper
|
8
|
+
|
8
9
|
# Check if `ta_cli` exists, install it if not
|
9
10
|
def self.check_ta_cli
|
10
|
-
unless
|
11
|
+
unless system('which ta-cli > /dev/null 2>&1')
|
11
12
|
UI.error("ta-cli not found, installing")
|
12
|
-
|
13
|
+
|
14
|
+
unless system('curl -Ls https://github.com/testappio/cli/releases/latest/download/install | bash')
|
15
|
+
UI.error("Error installing ta-cli")
|
16
|
+
return false
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
return true
|
21
|
+
end
|
22
|
+
|
23
|
+
# Check if there is an update available for `ta_cli`, and install it if necessary
|
24
|
+
def self.check_update(self_update)
|
25
|
+
require 'open3'
|
26
|
+
|
27
|
+
version_output = `ta-cli version`
|
28
|
+
UI.verbose(version_output)
|
29
|
+
|
30
|
+
if version_output.include?("breaking changes")
|
31
|
+
if self_update
|
32
|
+
UI.message("Updating ta-cli due to breaking changes...")
|
33
|
+
else
|
34
|
+
UI.user_error!("Update necessary due to breaking changes. Please update ta-cli manually or set self_update to true")
|
35
|
+
return false
|
36
|
+
end
|
37
|
+
elsif version_output.include?("New version available")
|
38
|
+
if self_update
|
39
|
+
UI.message("Updating ta-cli...")
|
40
|
+
else
|
41
|
+
UI.error("New version available, but skipping update as self_update is set to false.")
|
42
|
+
return true
|
43
|
+
end
|
44
|
+
else
|
45
|
+
UI.success("ta-cli is already up-to-date")
|
46
|
+
return true
|
47
|
+
end
|
48
|
+
|
49
|
+
update_command = "curl -Ls https://github.com/testappio/cli/releases/latest/download/install | bash"
|
50
|
+
update_output, update_errors, update_status = Open3.capture3(update_command)
|
51
|
+
UI.verbose(update_output)
|
52
|
+
|
53
|
+
if update_output.include?("ta-cli successfully installed") || update_output.include?("ta-cli has been updated")
|
54
|
+
version_output = `ta-cli version`
|
55
|
+
UI.verbose(version_output)
|
56
|
+
|
57
|
+
if version_output.include?("Update necessary due to breaking changes") || version_output.include?("New version available")
|
58
|
+
UI.user_error!("Error updating ta-cli: the version is still outdated")
|
59
|
+
return false
|
60
|
+
else
|
61
|
+
UI.success("ta-cli has been updated successfully")
|
62
|
+
return true
|
63
|
+
end
|
64
|
+
else
|
65
|
+
UI.user_error!("Error updating ta-cli: #{update_output}")
|
66
|
+
return false
|
13
67
|
end
|
14
68
|
end
|
15
69
|
|
16
70
|
# Handle errors from `ta_cli`, if contains 'Error', the process stops,
|
17
71
|
# otherwise, just print to user console
|
18
72
|
def self.handle_error(errors)
|
19
|
-
fatal = false
|
20
73
|
errors.each do |error|
|
21
74
|
if error
|
22
75
|
if error =~ /Error/
|
23
76
|
UI.error(error.to_s)
|
24
|
-
fatal = true
|
25
77
|
else
|
26
78
|
UI.verbose(error.to_s)
|
27
79
|
end
|
28
80
|
end
|
29
81
|
end
|
30
|
-
UI.user_error!('Error while calling ta-cli') if fatal
|
31
|
-
end
|
32
82
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
if error =~ /Update is required because of breaking changes/
|
38
|
-
UI.command(`curl -Ls https://github.com/testappio/cli/releases/latest/download/install | bash`)
|
39
|
-
call_ta_cli(command)
|
40
|
-
end
|
41
|
-
end
|
83
|
+
if errors.any? { |e| e =~ /Error/ }
|
84
|
+
UI.user_error!('Error while calling ta-cli')
|
85
|
+
elsif errors.any?
|
86
|
+
UI.user_error!("Error while calling ta-cli: #{errors.join(', ')}")
|
42
87
|
end
|
43
|
-
UI.user_error!('Error while updating ta-cli') if fatal
|
44
88
|
end
|
45
89
|
|
46
90
|
# Run the given command
|
@@ -58,19 +102,17 @@ module Fastlane
|
|
58
102
|
Open3.popen3(final_command) do |stdin, stdout, stderr, wait_thr|
|
59
103
|
while (line = stdout.gets)
|
60
104
|
out << line
|
61
|
-
UI.message(line.strip!)
|
105
|
+
UI.message(line.strip!) if FastlaneCore::Globals.verbose? && !line.strip.empty?
|
62
106
|
end
|
63
107
|
while (line = stderr.gets)
|
64
108
|
error << line.strip!
|
65
109
|
end
|
66
110
|
exit_status = wait_thr.value
|
67
|
-
unless exit_status.success?
|
68
|
-
handle_error(error)
|
69
|
-
end
|
70
|
-
handle_force_update(out, command)
|
111
|
+
handle_error(error) unless exit_status.success?
|
71
112
|
end
|
72
113
|
out.join
|
73
114
|
end
|
115
|
+
|
74
116
|
end
|
75
117
|
end
|
76
118
|
end
|
metadata
CHANGED
@@ -1,33 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fastlane-plugin-testappio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TestApp.io
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
19
|
+
version: '2.0'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
26
|
+
version: '2.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: fastlane
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.204'
|
31
34
|
- - ">="
|
32
35
|
- !ruby/object:Gem::Version
|
33
36
|
version: 2.204.3
|
@@ -35,6 +38,9 @@ dependencies:
|
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
41
|
+
- - "~>"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '2.204'
|
38
44
|
- - ">="
|
39
45
|
- !ruby/object:Gem::Version
|
40
46
|
version: 2.204.3
|
@@ -42,58 +48,58 @@ dependencies:
|
|
42
48
|
name: pry
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
|
-
- - "
|
51
|
+
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
53
|
+
version: '0.13'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
|
-
- - "
|
58
|
+
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
60
|
+
version: '0.13'
|
55
61
|
- !ruby/object:Gem::Dependency
|
56
62
|
name: rake
|
57
63
|
requirement: !ruby/object:Gem::Requirement
|
58
64
|
requirements:
|
59
|
-
- - "
|
65
|
+
- - "~>"
|
60
66
|
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
67
|
+
version: '13.0'
|
62
68
|
type: :development
|
63
69
|
prerelease: false
|
64
70
|
version_requirements: !ruby/object:Gem::Requirement
|
65
71
|
requirements:
|
66
|
-
- - "
|
72
|
+
- - "~>"
|
67
73
|
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
74
|
+
version: '13.0'
|
69
75
|
- !ruby/object:Gem::Dependency
|
70
76
|
name: rspec
|
71
77
|
requirement: !ruby/object:Gem::Requirement
|
72
78
|
requirements:
|
73
|
-
- - "
|
79
|
+
- - "~>"
|
74
80
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
81
|
+
version: '3.0'
|
76
82
|
type: :development
|
77
83
|
prerelease: false
|
78
84
|
version_requirements: !ruby/object:Gem::Requirement
|
79
85
|
requirements:
|
80
|
-
- - "
|
86
|
+
- - "~>"
|
81
87
|
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
88
|
+
version: '3.0'
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
90
|
name: rspec_junit_formatter
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
86
92
|
requirements:
|
87
|
-
- - "
|
93
|
+
- - "~>"
|
88
94
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
95
|
+
version: '0.4'
|
90
96
|
type: :development
|
91
97
|
prerelease: false
|
92
98
|
version_requirements: !ruby/object:Gem::Requirement
|
93
99
|
requirements:
|
94
|
-
- - "
|
100
|
+
- - "~>"
|
95
101
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
102
|
+
version: '0.4'
|
97
103
|
- !ruby/object:Gem::Dependency
|
98
104
|
name: rubocop
|
99
105
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,44 +118,44 @@ dependencies:
|
|
112
118
|
name: rubocop-performance
|
113
119
|
requirement: !ruby/object:Gem::Requirement
|
114
120
|
requirements:
|
115
|
-
- - "
|
121
|
+
- - "~>"
|
116
122
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
123
|
+
version: 1.17.1
|
118
124
|
type: :development
|
119
125
|
prerelease: false
|
120
126
|
version_requirements: !ruby/object:Gem::Requirement
|
121
127
|
requirements:
|
122
|
-
- - "
|
128
|
+
- - "~>"
|
123
129
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
130
|
+
version: 1.17.1
|
125
131
|
- !ruby/object:Gem::Dependency
|
126
132
|
name: rubocop-require_tools
|
127
133
|
requirement: !ruby/object:Gem::Requirement
|
128
134
|
requirements:
|
129
|
-
- - "
|
135
|
+
- - "~>"
|
130
136
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
137
|
+
version: 0.1.2
|
132
138
|
type: :development
|
133
139
|
prerelease: false
|
134
140
|
version_requirements: !ruby/object:Gem::Requirement
|
135
141
|
requirements:
|
136
|
-
- - "
|
142
|
+
- - "~>"
|
137
143
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
144
|
+
version: 0.1.2
|
139
145
|
- !ruby/object:Gem::Dependency
|
140
146
|
name: simplecov
|
141
147
|
requirement: !ruby/object:Gem::Requirement
|
142
148
|
requirements:
|
143
|
-
- - "
|
149
|
+
- - "~>"
|
144
150
|
- !ruby/object:Gem::Version
|
145
|
-
version: '0'
|
151
|
+
version: '0.21'
|
146
152
|
type: :development
|
147
153
|
prerelease: false
|
148
154
|
version_requirements: !ruby/object:Gem::Requirement
|
149
155
|
requirements:
|
150
|
-
- - "
|
156
|
+
- - "~>"
|
151
157
|
- !ruby/object:Gem::Version
|
152
|
-
version: '0'
|
158
|
+
version: '0.21'
|
153
159
|
description:
|
154
160
|
email: support@testapp.io
|
155
161
|
executables: []
|
@@ -174,14 +180,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
180
|
requirements:
|
175
181
|
- - ">="
|
176
182
|
- !ruby/object:Gem::Version
|
177
|
-
version: '2.
|
183
|
+
version: '2.6'
|
178
184
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
179
185
|
requirements:
|
180
186
|
- - ">="
|
181
187
|
- !ruby/object:Gem::Version
|
182
188
|
version: '0'
|
183
189
|
requirements: []
|
184
|
-
rubygems_version: 3.
|
190
|
+
rubygems_version: 3.4.12
|
185
191
|
signing_key:
|
186
192
|
specification_version: 4
|
187
193
|
summary: Deploy your Android & iOS to TestApp.io
|