fastlane-plugin-bitrise_automation 0.1.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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: '0241689ccd66d05a0836120f501ef00feffdfa51348545c49b66b32eaa01dd82'
4
+ data.tar.gz: 8e60ba4980310e128b1d8f2027ba957a93edef5da559f3a50176d22e40a3256d
5
+ SHA512:
6
+ metadata.gz: 6495f2a4420b45222c9c9d0a876fbb22895da86aa10c7d844f2067ebbd67be5f79c4a5001b800345e9955c9f6f6b97c01547c35013927a90c04e4526e08b4b46
7
+ data.tar.gz: a38360cbfa1de1e1cd476fa4afd768456dd443571f02e00aaa3bf489e45dc2724a431a5991333e9647e71388d4dac02b97cc8ab59d6d842661eecbbb66629dbe
data/LICENSE ADDED
@@ -0,0 +1,12 @@
1
+ ISC License (ISC)
2
+
3
+ Copyright 2019 Natura Cosméticos
4
+
5
+ Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted,
6
+ provided that the above copyright notice and this permission notice appear in all copies.
7
+
8
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL
9
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
10
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
11
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
12
+ THIS SOFTWARE.
@@ -0,0 +1,68 @@
1
+ # bitrise_automation plugin
2
+
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-bitrise_automation)
4
+
5
+ ## Getting Started
6
+
7
+ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-bitrise_automation`, add it to your project by running:
8
+
9
+ ```bash
10
+ fastlane add_plugin bitrise_automation
11
+ ```
12
+
13
+ ## About bitrise_automation
14
+
15
+ Interact with [Bitrise](https://bitrise.io/) projects from fastlane.
16
+
17
+ This is useful if you want to interact with Bitrise from your terminal using Fastlane or if you are encapsulating Bitrise builds from another CI (such as Jenkins).
18
+
19
+ This plugin assumes you already have an app configured on Bitrise and uses a Personal Access Token from Bitrise to communicate with the Bitrise API. Check the [official documentation](https://devcenter.bitrise.io/api/authentication/) to learn how to acquire a token.
20
+
21
+ ### Features
22
+
23
+ - Trigger a workflow asynchronously (returning immediately after build has been requested)
24
+ - Trigger a workflow synchronously (waiting until the build executes and finishes)
25
+ - Check build success/failure (exiting with success or failure according to the status on Bitrise)
26
+ - Retrieve the list of artifacts from a build
27
+ - Download the artifacts produced by a build
28
+
29
+ ### Known issues
30
+
31
+ - For now the only option is to trigger a build via a commit hash. It should be more flexible as Bitrise allows triggering by branch, tag, commit or default strategy.
32
+ - The author option to trigger the build is not implemented
33
+ - The environments option to trigger the build is not implemented
34
+ - Pagination on API responses is not implemented
35
+
36
+
37
+ ## Example
38
+
39
+ Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
40
+
41
+ ## Run tests for this plugin
42
+
43
+ To run both the tests, and code style validation, run
44
+
45
+ ```
46
+ rake
47
+ ```
48
+
49
+ To automatically fix many of the styling issues, use
50
+ ```
51
+ rubocop -a
52
+ ```
53
+
54
+ ## Issues and Feedback
55
+
56
+ For any other issues and feedback about this plugin, please submit it to this repository.
57
+
58
+ ## Troubleshooting
59
+
60
+ If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
61
+
62
+ ## Using _fastlane_ Plugins
63
+
64
+ For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
65
+
66
+ ## About _fastlane_
67
+
68
+ _fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
@@ -0,0 +1,16 @@
1
+ require 'fastlane/plugin/bitrise_automation/version'
2
+
3
+ module Fastlane
4
+ module BitriseAutomation
5
+ # Return all .rb files inside the "actions" and "helper" directory
6
+ def self.all_classes
7
+ Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8
+ end
9
+ end
10
+ end
11
+
12
+ # By default we want to import all available actions and helpers
13
+ # A plugin can contain any number of actions and plugins
14
+ Fastlane::BitriseAutomation.all_classes.each do |current|
15
+ require current
16
+ end
@@ -0,0 +1,111 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/bitrise_automation_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class BitriseBuildArtifactsAction < Action
7
+ def self.run(params)
8
+ response = Helper::BitriseRequestHelper.get(params, "builds/#{params[:build_slug]}/artifacts")
9
+
10
+ if response.code == "200"
11
+ json_response = JSON.parse(response.body)['data']
12
+ else
13
+ UI.crash!("Error fetching build artifacts list on Bitrise.io. Status code: #{response.code}. #{response}")
14
+ end
15
+
16
+ UI.message("Found #{json_response.size} artifacts on Bitrise for build #{params[:build_slug]}.")
17
+
18
+ artifacts = json_response.map do |artifact|
19
+ {
20
+ "title" => artifact["title"],
21
+ "artifact_type" => artifact["artifact_type"],
22
+ "slug" => artifact["slug"],
23
+ "file_size_bytes" => artifact["file_size_bytes"]
24
+ }
25
+ end
26
+
27
+ artifacts.each do |artifact|
28
+ FastlaneCore::PrintTable.print_values(config: artifact,
29
+ title: artifact['title'])
30
+ end
31
+
32
+ if params[:download]
33
+ artifacts_dir = 'artifacts'
34
+ UI.message("Download option is on. Will start download of #{artifacts.size} artifacts to #{artifacts_dir}.")
35
+ Dir.mkdir(artifacts_dir) unless Dir.exist?(artifacts_dir)
36
+
37
+ artifacts.each do |artifact|
38
+ UI.message("Fetching artifact '#{artifact['title']}' of type '#{artifact['artifact_type']}' (#{artifact['file_size_bytes']} bytes)...")
39
+ artifact_details = get_artifact_details(params, artifact['slug'])
40
+
41
+ download_artifact(artifact_details, artifacts_dir)
42
+ UI.message("Finished downloading artifact '#{artifact['title']}'.")
43
+ end
44
+ end
45
+
46
+ artifacts
47
+ end
48
+
49
+ def self.get_artifact_details(params, artifact_slug)
50
+ response = Helper::BitriseRequestHelper.get(params, "builds/#{params[:build_slug]}/artifacts/#{artifact_slug}")
51
+
52
+ if response.code == "200"
53
+ json_response = JSON.parse(response.body)['data']
54
+ else
55
+ UI.crash!("Error fetching build artifacts details on Bitrise.io. Status code: #{response.code}. #{response}")
56
+ end
57
+
58
+ json_response
59
+ end
60
+
61
+ def self.download_artifact(artifact, dir)
62
+ file_name = artifact['title']
63
+ url = artifact['expiring_download_url']
64
+
65
+ sh("curl --fail --silent -o '#{dir}/#{file_name}' '#{url}'")
66
+ end
67
+
68
+ def self.description
69
+ "Get the list or full contents of the artifacts produced by a build on Bitrise"
70
+ end
71
+
72
+ def self.authors
73
+ ["Mario Cecchi", "Henrique Alves"]
74
+ end
75
+
76
+ def self.return_value
77
+ "Returns the list of artifacts produced by a build on Bitrise"
78
+ end
79
+
80
+ def self.available_options
81
+ [
82
+ FastlaneCore::ConfigItem.new(key: :app_slug,
83
+ env_name: "BITRISE_APP_SLUG",
84
+ description: "The app slug of the project on Bitrise",
85
+ optional: false,
86
+ type: String),
87
+ FastlaneCore::ConfigItem.new(key: :access_token,
88
+ env_name: "BITRISE_ACCESS_TOKEN",
89
+ description: "The personal access token used to call Bitrise API",
90
+ optional: false,
91
+ type: String),
92
+ FastlaneCore::ConfigItem.new(key: :build_slug,
93
+ env_name: "BITRISE_BUILD_SLUG",
94
+ description: "The slug that identifies the build on Bitrise",
95
+ optional: false,
96
+ type: String),
97
+ FastlaneCore::ConfigItem.new(key: :download,
98
+ env_name: "BITRISE_ARTIFACTS_DOWNLOAD",
99
+ description: "Whether to download or not the produced artifacts",
100
+ optional: true,
101
+ default_value: false,
102
+ is_string: false)
103
+ ]
104
+ end
105
+
106
+ def self.is_supported?(platform)
107
+ true
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,64 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/bitrise_automation_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class BitriseBuildStatusAction < Action
7
+ def self.run(params)
8
+ get_status(params, params[:build_slug])
9
+ end
10
+
11
+ def self.get_status(params, build_slug)
12
+ response = Helper::BitriseRequestHelper.get(params, "builds/#{build_slug}")
13
+
14
+ if response.code == "200"
15
+ json_response = JSON.parse(response.body)['data']
16
+ else
17
+ UI.crash!("Error fetching build status on Bitrise.io. Status code: #{response.code}. #{response}")
18
+ end
19
+
20
+ build_infos = {}
21
+ build_infos["is_on_hold"] = json_response["is_on_hold"]
22
+ build_infos["status"] = json_response["status"]
23
+ build_infos["status_text"] = json_response["status_text"]
24
+ build_infos
25
+ end
26
+
27
+ def self.description
28
+ "Get the status of the Bitrise build"
29
+ end
30
+
31
+ def self.authors
32
+ ["Mario Cecchi", "Henrique Alves"]
33
+ end
34
+
35
+ def self.return_value
36
+ "Returns the information of the Bitrise build"
37
+ end
38
+
39
+ def self.available_options
40
+ [
41
+ FastlaneCore::ConfigItem.new(key: :app_slug,
42
+ env_name: "BITRISE_APP_SLUG",
43
+ description: "The app slug of the project on Bitrise",
44
+ optional: false,
45
+ type: String),
46
+ FastlaneCore::ConfigItem.new(key: :access_token,
47
+ env_name: "BITRISE_ACCESS_TOKEN",
48
+ description: "The personal access token used to call Bitrise API",
49
+ optional: false,
50
+ type: String),
51
+ FastlaneCore::ConfigItem.new(key: :build_slug,
52
+ env_name: "BITRISE_BUILD_SLUG",
53
+ description: "The slug that identifies the build on Bitrise",
54
+ optional: false,
55
+ type: String)
56
+ ]
57
+ end
58
+
59
+ def self.is_supported?(platform)
60
+ true
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,121 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/bitrise_automation_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class TriggerBitriseWorkflowAction < Action
7
+ def self.run(params)
8
+ UI.verbose("Requesting new Bitrise.io build...")
9
+
10
+ response = Helper::BitriseRequestHelper.post(params, 'builds', {
11
+ hook_info: {
12
+ type: "bitrise"
13
+ },
14
+ build_params: {
15
+ workflow_id: params[:workflow],
16
+ commit_hash: params[:commit_hash],
17
+ commit_message: params[:build_message]
18
+ }
19
+ }.to_json)
20
+
21
+ if response.code == "201"
22
+ json_response = JSON.parse(response.body)
23
+ UI.success("Build triggered successfully 🚀 URL: #{json_response['build_url']}")
24
+ FastlaneCore::PrintTable.print_values(config: json_response,
25
+ title: "Bitrise API response")
26
+ else
27
+ UI.crash!("Error requesting new build on Bitrise.io. Status code: #{response.code}. #{response}")
28
+ end
29
+
30
+ build_infos = {}
31
+ build_infos["status"] = json_response["status"]
32
+ build_infos["build_url"] = json_response["build_url"]
33
+ build_infos["build_number"] = json_response["build_number"]
34
+ build_infos["build_slug"] = json_response["build_slug"]
35
+
36
+ if params[:wait_for_build]
37
+ build_status = wait_until_build_completion(params, build_infos["build_slug"])
38
+
39
+ if build_status["status"] == 1
40
+ UI.success("Build has finished successfully on Bitrise!")
41
+ build_infos["status"] = build_status["status_text"]
42
+ elsif build_status["status"] == 2
43
+ UI.build_failure!("Build has FAILED. Check Bitrise for details.")
44
+ end
45
+ end
46
+
47
+ build_infos
48
+ end
49
+
50
+ def self.wait_until_build_completion(params, build_slug)
51
+ build_status = {}
52
+ loop do
53
+ build_status = BitriseBuildStatusAction.get_status(params, build_slug)
54
+
55
+ break if build_status['status'] != 0
56
+
57
+ if build_status['is_on_hold']
58
+ UI.message("Build is still on hold. Sleeping...")
59
+ else
60
+ UI.message("Build is running with status '#{build_status['status_text']}'. Sleeping...")
61
+ end
62
+
63
+ sleep(30)
64
+ end
65
+ build_status
66
+ end
67
+
68
+ def self.description
69
+ "Trigger a Bitrise workflow with the specified parameters, synchronously or asynchronously"
70
+ end
71
+
72
+ def self.authors
73
+ ["Mario Cecchi", "Henrique Alves"]
74
+ end
75
+
76
+ def self.return_value
77
+ "Returns the information of the Bitrise build"
78
+ end
79
+
80
+ def self.available_options
81
+ [
82
+ FastlaneCore::ConfigItem.new(key: :app_slug,
83
+ env_name: "BITRISE_APP_SLUG",
84
+ description: "The app slug of the project on Bitrise",
85
+ optional: false,
86
+ type: String),
87
+ FastlaneCore::ConfigItem.new(key: :access_token,
88
+ env_name: "BITRISE_ACCESS_TOKEN",
89
+ description: "The personal access token used to call Bitrise API",
90
+ optional: false,
91
+ type: String),
92
+ FastlaneCore::ConfigItem.new(key: :workflow,
93
+ env_name: "BITRISE_WORKFLOW",
94
+ description: "The name of the workflow on Bitrise",
95
+ optional: false,
96
+ type: String),
97
+ FastlaneCore::ConfigItem.new(key: :commit_hash,
98
+ env_name: "BITRISE_BUILD_COMMIT_HASH",
99
+ description: "The commit hash to be used on the build",
100
+ optional: false,
101
+ type: String),
102
+ FastlaneCore::ConfigItem.new(key: :build_message,
103
+ env_name: "BITRISE_BUILD_MESSAGE",
104
+ description: "A custom message that will be used to identify the build",
105
+ optional: false,
106
+ type: String),
107
+ FastlaneCore::ConfigItem.new(key: :wait_for_build,
108
+ env_name: "BITRISE_WAIT_FOR_BUILD",
109
+ description: "Whether the action should wait until the build finishes or return immediately after requesting the build",
110
+ optional: true,
111
+ default_value: false,
112
+ is_string: false)
113
+ ]
114
+ end
115
+
116
+ def self.is_supported?(platform)
117
+ true
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,35 @@
1
+ require 'fastlane_core/ui/ui'
2
+
3
+ module Fastlane
4
+ UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
5
+
6
+ module Helper
7
+ class BitriseRequestHelper
8
+ class << self
9
+ def get(params, path)
10
+ request = Net::HTTP::Get.new("/v0.1/apps/#{params[:app_slug]}/#{path}", bitrise_headers(params[:access_token]))
11
+ bitrise_client.request(request)
12
+ end
13
+
14
+ def post(params, path, body)
15
+ request = Net::HTTP::Post.new("/v0.1/apps/#{params[:app_slug]}/#{path}", bitrise_headers(params[:access_token]))
16
+ request.body = body
17
+ bitrise_client.request(request)
18
+ end
19
+
20
+ private
21
+
22
+ def bitrise_client
23
+ uri = URI.parse("https://api.bitrise.io/")
24
+ https = Net::HTTP.new(uri.host, uri.port)
25
+ https.use_ssl = true
26
+ https
27
+ end
28
+
29
+ def bitrise_headers(access_token)
30
+ { 'Content-Type' => 'application/json', 'Authorization' => access_token }
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,5 @@
1
+ module Fastlane
2
+ module BitriseAutomation
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,177 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastlane-plugin-bitrise_automation
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Mario Cecchi
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-07-09 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pry
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec_junit_formatter
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '='
88
+ - !ruby/object:Gem::Version
89
+ version: 0.49.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '='
95
+ - !ruby/object:Gem::Version
96
+ version: 0.49.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-require_tools
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: simplecov
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: fastlane
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: 2.150.3
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: 2.150.3
139
+ description:
140
+ email: mcecchi@thoughtworks.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - LICENSE
146
+ - README.md
147
+ - lib/fastlane/plugin/bitrise_automation.rb
148
+ - lib/fastlane/plugin/bitrise_automation/actions/bitrise_build_artifacts_action.rb
149
+ - lib/fastlane/plugin/bitrise_automation/actions/bitrise_build_status_action.rb
150
+ - lib/fastlane/plugin/bitrise_automation/actions/trigger_bitrise_workflow_action.rb
151
+ - lib/fastlane/plugin/bitrise_automation/helper/bitrise_automation_helper.rb
152
+ - lib/fastlane/plugin/bitrise_automation/version.rb
153
+ homepage: https://github.com/natura-cosmeticos/fastlane-plugin-bitrise-automation
154
+ licenses:
155
+ - ISC
156
+ metadata: {}
157
+ post_install_message:
158
+ rdoc_options: []
159
+ require_paths:
160
+ - lib
161
+ required_ruby_version: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - ">="
164
+ - !ruby/object:Gem::Version
165
+ version: '0'
166
+ required_rubygems_version: !ruby/object:Gem::Requirement
167
+ requirements:
168
+ - - ">="
169
+ - !ruby/object:Gem::Version
170
+ version: '0'
171
+ requirements: []
172
+ rubygems_version: 3.0.3
173
+ signing_key:
174
+ specification_version: 4
175
+ summary: Trigger builds on Bitrise, check their status and download artifacts using
176
+ Fastlane
177
+ test_files: []