fastlane-plugin-yalantis_ci 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c70f6ba1538fb0b9297ac219fff7639474a43429b64ae6cdf4ef987e56db4674
4
- data.tar.gz: ef74af7babdddbf544b0cf0e34eeb24b57db4d00fb81ad1895a377e15182a3ab
3
+ metadata.gz: 2b102acbcb869c25f9ac8e1bf0daaf14eaa0869cfea5f35722cd809c43db93e5
4
+ data.tar.gz: 5ed1edd600a0786ec984bf2fb4ed559879c94238bedcbe677c3b4cf0cd39402f
5
5
  SHA512:
6
- metadata.gz: 3717b6937625d894a5b21fd874f22546ff4a75d1bb036c073e9a1e530e11d32034a3d517f48eadf610c29fc10af0649c9bc00b8e69ae9b976511b6c24a519c01
7
- data.tar.gz: 188d0daa30d5c5a90cb281513c6201a26d8e0486a92dd7f708b76958698e9c4c414df8f6693fb833cf99b842625be8f59e500a912a5bc80e3c74b2ff278179c0
6
+ metadata.gz: efc286c041bcac212cda5c7d4231b139e4793bbfd234f65ac8daca6bd1a8b9ecc95112fba98775f274f584d92dd3f8fdf38a839b1a79cba9014f3a8aa639fdca
7
+ data.tar.gz: 61db0ee63e3d0acbe9a0b716196c7707d518ee950c87145858ddf80a71ed0e6ebf33a36160bbb27aaa98159bbf4aaaf37d63981119c3f2dce7f80ba01e0db300
@@ -0,0 +1,108 @@
1
+ require 'fileutils'
2
+ require 'base64'
3
+ require_relative '../helper/git_helper'
4
+
5
+ module Fastlane
6
+ module Actions
7
+ class AppStoreConnectApiKeyAddToRemoteAction < Action
8
+ def self.run(options)
9
+ git_repo_url = options[:git_repo_url]
10
+ git_repo_branch = 'master'
11
+ key_filepath = options[:key_filepath]
12
+ key_id = options[:key_id]
13
+ key_content = options[:key_content]
14
+ is_key_content_base64 = options[:is_key_content_base64]
15
+
16
+ if key_content.nil? && key_filepath.nil?
17
+ UI.user_error!(":key_content or :key_filepath is required")
18
+ end
19
+
20
+ Helper::GitHelper.clone_repo_in_tmp(git_repo_url, git_repo_branch, true) do |dir|
21
+ target_filename = "#{key_id}.p8"
22
+ target_filepath = File.join(dir, target_filename)
23
+
24
+ if key_filepath.nil? == false
25
+ FileUtils.cp(File.expand(key_filepath), target_filepath)
26
+ else
27
+ File.open(target_filepath, 'w') do |file|
28
+ if is_key_content_base64
29
+ file.write(Base64.decode64(key_content))
30
+ else
31
+ file.write(key_content)
32
+ end
33
+ end
34
+ end
35
+
36
+ repo_status = Actions.sh("git status --porcelain")
37
+ repo_clean = repo_status.empty?
38
+
39
+ if repo_clean
40
+ UI.message("Skipping key #{key_id} update since it contents remains the same")
41
+ else
42
+ UI.message("Adding / updating #{key_id}")
43
+
44
+ Actions.sh("git add #{target_filename} && git commit -m '[AppStore Connect API Key] Add/Update #{target_filename} key'")
45
+ Actions.sh("git push -f #{git_repo_url} #{git_repo_branch}")
46
+ end
47
+ end
48
+ end
49
+
50
+ #####################################################
51
+ # @!group Documentation
52
+ #####################################################
53
+
54
+ def self.description
55
+ "Add/Update AppStore Connect API Key to the remote git repo"
56
+ end
57
+
58
+ def self.available_options
59
+ [
60
+ FastlaneCore::ConfigItem.new(
61
+ key: :git_repo_url,
62
+ env_name: "APP_STORE_CONNECT_API_KEY_GIT_REPO_URL",
63
+ description: "Git repo URL where AppStore Connect's Api Key should be stored in",
64
+ type: String
65
+ ),
66
+ FastlaneCore::ConfigItem.new(
67
+ key: :key_filepath,
68
+ env_name: "APP_STORE_CONNECT_API_KEY_KEY_FILEPATH",
69
+ description: "The path to the key p8 file",
70
+ optional: true,
71
+ conflicting_options: [:key_content],
72
+ verify_block: proc do |value|
73
+ UI.user_error!("Couldn't find key p8 file at path '#{value}'") unless File.exist?(File.expand_path(value))
74
+ end
75
+ ),
76
+ FastlaneCore::ConfigItem.new(
77
+ key: :key_id,
78
+ env_name: "APP_STORE_CONNECT_API_KEY_KEY_ID",
79
+ description: "The key ID",
80
+ ),
81
+ FastlaneCore::ConfigItem.new(
82
+ key: :key_content,
83
+ env_name: "APP_STORE_CONNECT_API_KEY_KEY",
84
+ description: "The content of the key p8 file",
85
+ sensitive: true,
86
+ optional: true,
87
+ conflicting_options: [:key_filepath]
88
+ ),
89
+ FastlaneCore::ConfigItem.new(
90
+ key: :is_key_content_base64,
91
+ env_name: "APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64",
92
+ description: "Whether :key_content is Base64 encoded or not",
93
+ type: Boolean,
94
+ default_value: false
95
+ )
96
+ ]
97
+ end
98
+
99
+ def self.authors
100
+ ["Dima Vorona", "Yalantis"]
101
+ end
102
+
103
+ def self.is_supported?(platform)
104
+ [:ios, :mac].include?(platform)
105
+ end
106
+ end
107
+ end
108
+ end
@@ -0,0 +1,62 @@
1
+ require 'fileutils'
2
+ require 'base64'
3
+ require_relative '../helper/git_helper'
4
+
5
+ module Fastlane
6
+ module Actions
7
+ class AppStoreConnectApiKeyRemoveFromRemoteAction < Action
8
+ def self.run(options)
9
+ git_repo_url = options[:git_repo_url]
10
+ git_repo_branch = 'master'
11
+ key_id = options[:key_id]
12
+
13
+ Helper::GitHelper.clone_repo_in_tmp(git_repo_url, git_repo_branch, false) do |dir|
14
+ target_filename = "#{key_id}.p8"
15
+ target_filepath = File.join(dir, target_filename)
16
+
17
+ if File.exist?(target_filepath)
18
+ UI.message("Removing '#{key_id}.p8' at #{git_repo_url}")
19
+ FileUtils.rm(target_filepath)
20
+
21
+ Actions.sh("git rm #{target_filename} && git commit -m '[AppStore Connect API Key] Remove '#{key_id}.p8' key'")
22
+ Actions.sh("git push -f #{git_repo_url} #{git_repo_branch}")
23
+ else
24
+ UI.message("Skipping remove of '#{key_id}.p8' as no file has been found at #{git_repo_url}")
25
+ end
26
+ end
27
+ end
28
+
29
+ #####################################################
30
+ # @!group Documentation
31
+ #####################################################
32
+
33
+ def self.description
34
+ "Remove AppStore Connect API Key from the remote git repo"
35
+ end
36
+
37
+ def self.available_options
38
+ [
39
+ FastlaneCore::ConfigItem.new(
40
+ key: :git_repo_url,
41
+ env_name: "APP_STORE_CONNECT_API_KEY_GIT_REPO_URL",
42
+ description: "Git repo URL where AppStore Connect's Api Key should be stored in",
43
+ type: String
44
+ ),
45
+ FastlaneCore::ConfigItem.new(
46
+ key: :key_id,
47
+ env_name: "APP_STORE_CONNECT_API_KEY_KEY_ID",
48
+ description: "The key ID",
49
+ )
50
+ ]
51
+ end
52
+
53
+ def self.authors
54
+ ["Dima Vorona", "Yalantis"]
55
+ end
56
+
57
+ def self.is_supported?(platform)
58
+ [:ios, :mac].include?(platform)
59
+ end
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,84 @@
1
+ require 'pathname'
2
+ require_relative '../helper/git_helper'
3
+
4
+ module Fastlane
5
+ module Actions
6
+ class AppStoreConnectApiKeySetFromRemoteAction < Action
7
+ def self.run(options)
8
+ git_repo_url = options[:git_repo_url]
9
+ git_repo_branch = 'master'
10
+
11
+ key_id = options[:key_id]
12
+ issuer_id = options[:issuer_id]
13
+ in_house = options[:in_house]
14
+
15
+ Helper::GitHelper.clone_repo_in_tmp(git_repo_url, git_repo_branch) do |dir|
16
+ target_filename = "#{key_id}.p8"
17
+ target_filepath = Pathname.new File.join(dir, target_filename)
18
+
19
+ if target_filepath.exist?
20
+ UI.message("Setting contents of #{target_filename} as a API Key")
21
+
22
+ Fastlane::Actions::AppStoreConnectApiKeyAction.run(
23
+ key_id: key_id,
24
+ issuer_id: issuer_id,
25
+ key_content: Base64.encode64(target_filepath.read),
26
+ is_key_content_base64: true,
27
+ in_house: in_house
28
+ )
29
+ else
30
+ UI.user_error!("No #{target_filename} has been found at #{git_repo_url}")
31
+ end
32
+ end
33
+ end
34
+
35
+ #####################################################
36
+ # @!group Documentation
37
+ #####################################################
38
+
39
+ def self.description
40
+ "Add/Update AppStore Connect API Key to the remote git repo"
41
+ end
42
+
43
+ def self.available_options
44
+ [
45
+ FastlaneCore::ConfigItem.new(
46
+ key: :git_repo_url,
47
+ env_name: "APP_STORE_CONNECT_API_KEY_GIT_REPO_URL",
48
+ description: "Git repo URL where AppStore Connect's Api Key should be stored in",
49
+ type: String
50
+ ),
51
+ FastlaneCore::ConfigItem.new(
52
+ key: :key_id,
53
+ env_name: "APP_STORE_CONNECT_API_KEY_KEY_ID",
54
+ description: "The key ID",
55
+ ),
56
+ FastlaneCore::ConfigItem.new(
57
+ key: :issuer_id,
58
+ env_name: "APP_STORE_CONNECT_API_KEY_ISSUER_ID",
59
+ description: "The issuer ID"
60
+ ),
61
+ FastlaneCore::ConfigItem.new(
62
+ key: :in_house,
63
+ env_name: "APP_STORE_CONNECT_API_KEY_IN_HOUSE",
64
+ description: "Is App Store or Enterprise (in house) team? App Store Connect API cannot determine this on its own (yet)",
65
+ type: Boolean,
66
+ default_value: false
67
+ )
68
+ ]
69
+ end
70
+
71
+ def self.output
72
+ Fastlane::Actions::AppStoreConnectApiKeyAction.output
73
+ end
74
+
75
+ def self.authors
76
+ ["Dima Vorona", "Yalantis"]
77
+ end
78
+
79
+ def self.is_supported?(platform)
80
+ [:ios, :mac].include?(platform)
81
+ end
82
+ end
83
+ end
84
+ end
@@ -1,5 +1,5 @@
1
1
  require 'fastlane/action'
2
- require_relative '../helper/yalantis_ci_helper'
2
+ require_relative '../helper/ci_helper'
3
3
 
4
4
  module Fastlane
5
5
  module Actions
@@ -4,9 +4,10 @@ module Fastlane
4
4
  UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
5
5
 
6
6
  module Helper
7
- class YalantisCiHelper
7
+ class CiHelper
8
+
8
9
  # class methods that you define here become available in your action
9
- # as `Helper::YalantisCiHelper.your_method`
10
+ # as `Helper::CiHelper.your_method`
10
11
  #
11
12
  def self.show_message
12
13
  UI.message("Hello from the yalantis_ci plugin helper!")
@@ -0,0 +1,37 @@
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 GitHelper
8
+
9
+ def self.clone_repo_in_tmp(repo_url, branch = 'master', create_branch_if_needed = false)
10
+ temp_directory = `mktemp -d`.tr("\n", "")
11
+
12
+ begin
13
+ Dir.chdir(temp_directory) do
14
+ Actions.sh("git clone -b #{branch} #{repo_url} #{Dir.pwd}") do |status, result, cmd|
15
+ if status.success? != true && create_branch_if_needed
16
+ Actions.sh("git clone #{repo_url} #{Dir.pwd} && git checkout -b #{branch}") do |status, result, cmd |
17
+ if status.success? != true
18
+ raise StandardError.new result
19
+ end
20
+ end
21
+ elsif status.success? != true
22
+ raise StandardError.new result
23
+ end
24
+ end
25
+ yield(Dir.pwd)
26
+ end
27
+ ensure
28
+ Actions.sh("rm -rf #{temp_directory}")
29
+ end
30
+ end
31
+
32
+ def self.show_message
33
+ UI.message("Hello from the yalantis_ci plugin helper!")
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,5 +1,5 @@
1
1
  module Fastlane
2
2
  module YalantisCi
3
- VERSION = "0.1.0"
3
+ VERSION = "0.2.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fastlane-plugin-yalantis_ci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dima Vorona
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-01 00:00:00.000000000 Z
11
+ date: 2021-06-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fastlane-plugin-firebase_app_distribution
@@ -150,7 +150,7 @@ dependencies:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
152
  version: '2.0'
153
- description:
153
+ description:
154
154
  email: dmytro.vorona@yalantis.net
155
155
  executables: []
156
156
  extensions: []
@@ -159,18 +159,22 @@ files:
159
159
  - LICENSE
160
160
  - README.md
161
161
  - lib/fastlane/plugin/yalantis_ci.rb
162
+ - lib/fastlane/plugin/yalantis_ci/actions/app_store_connect_api_key_add_to_remote.rb
163
+ - lib/fastlane/plugin/yalantis_ci/actions/app_store_connect_api_key_remove_from_remote.rb
164
+ - lib/fastlane/plugin/yalantis_ci/actions/app_store_connect_api_key_set_from_remote.rb
162
165
  - lib/fastlane/plugin/yalantis_ci/actions/ci_setup.rb
163
166
  - lib/fastlane/plugin/yalantis_ci/actions/ci_teardown.rb
164
167
  - lib/fastlane/plugin/yalantis_ci/actions/firebase_distribution_setup.rb
165
168
  - lib/fastlane/plugin/yalantis_ci/actions/install_brew_dependencies.rb
166
169
  - lib/fastlane/plugin/yalantis_ci/actions/yalantis_ci_action.rb
167
- - lib/fastlane/plugin/yalantis_ci/helper/yalantis_ci_helper.rb
170
+ - lib/fastlane/plugin/yalantis_ci/helper/ci_helper.rb
171
+ - lib/fastlane/plugin/yalantis_ci/helper/git_helper.rb
168
172
  - lib/fastlane/plugin/yalantis_ci/version.rb
169
- homepage:
173
+ homepage:
170
174
  licenses:
171
175
  - MIT
172
176
  metadata: {}
173
- post_install_message:
177
+ post_install_message:
174
178
  rdoc_options: []
175
179
  require_paths:
176
180
  - lib
@@ -185,8 +189,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
189
  - !ruby/object:Gem::Version
186
190
  version: '0'
187
191
  requirements: []
188
- rubygems_version: 3.0.3
189
- signing_key:
192
+ rubygems_version: 3.2.0
193
+ signing_key:
190
194
  specification_version: 4
191
195
  summary: Set of utilities and useful actions to help setup CI for Yalantis projects
192
196
  test_files: []