fastlane-plugin-wpmreleasetoolkit 11.1.0 → 12.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_create_xml_release_notes.rb +0 -2
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_current_branch_is_hotfix.rb +1 -9
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/close_milestone_action.rb +0 -2
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/{create_release_action.rb → create_github_release_action.rb} +1 -3
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_new_milestone_action.rb +0 -1
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/create_release_backmerge_pull_request_action.rb +4 -1
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/publish_github_release_action.rb +63 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_check_beta_deps.rb +0 -3
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_version_helper.rb +2 -373
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/git_helper.rb +8 -29
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/github_helper.rb +26 -1
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_version_helper.rb +0 -270
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/release_note_short_metadata_block.rb +2 -2
- data/lib/fastlane/plugin/wpmreleasetoolkit/version.rb +1 -1
- metadata +8 -58
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_betabuild_prechecks.rb +0 -137
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_build_prechecks.rb +0 -108
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_beta.rb +0 -90
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_final_release.rb +0 -82
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_hotfix.rb +0 -91
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_bump_version_release.rb +0 -109
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_codefreeze_prechecks.rb +0 -108
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_completecodefreeze_prechecks.rb +0 -86
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_finalize_prechecks.rb +0 -89
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_get_alpha_version.rb +0 -62
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_get_app_version.rb +0 -62
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_get_release_version.rb +0 -62
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_hotfix_prechecks.rb +0 -78
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_tag_build.rb +0 -70
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_betabuild_prechecks.rb +0 -98
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_build_prechecks.rb +0 -74
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_bump_version_beta.rb +0 -67
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_bump_version_hotfix.rb +0 -83
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_bump_version_release.rb +0 -87
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_codefreeze_prechecks.rb +0 -76
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_completecodefreeze_prechecks.rb +0 -65
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_current_branch_is_hotfix.rb +0 -40
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_finalize_prechecks.rb +0 -66
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_get_app_version.rb +0 -54
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_get_build_number.rb +0 -54
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_get_build_version.rb +0 -60
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_hotfix_prechecks.rb +0 -78
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_tag_build.rb +0 -44
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/ios/ios_validate_ci_build.rb +0 -46
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/android/android_git_helper.rb +0 -28
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/ios/ios_git_helper.rb +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2f4bad14f2aca7e44fede245ed91674426c688395c9d6a5085a4d25a5e30e361
|
4
|
+
data.tar.gz: 66e0440a5340b12dff4a5e35c37759c48d04c8f157e83e4c57ca94cde2c4135e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1ed67cfa98a54dfe351d5e90ac318f97f1d40d777ac498f427b7c417f32651f16574eb441de44730ef5a7299edef57b096137b06ab64a4964aca56d072e7a0c0
|
7
|
+
data.tar.gz: a698dc1828a99415b4b88b373541ad20b264933cb2d13b0c65b2efd6c4608361b40bb0dca4756f9a518dee3a9e7fa4f8c43e142dfb3a50bba391398f76744bd5
|
data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_create_xml_release_notes.rb
CHANGED
@@ -2,8 +2,6 @@ module Fastlane
|
|
2
2
|
module Actions
|
3
3
|
class AndroidCreateXmlReleaseNotesAction < Action
|
4
4
|
def self.run(params)
|
5
|
-
require_relative '../../helper/android/android_git_helper'
|
6
|
-
|
7
5
|
release_notes_path = "#{params[:download_path]}/release_notes.xml"
|
8
6
|
open(release_notes_path, 'w') do |f|
|
9
7
|
params[:locales].each do |loc|
|
data/lib/fastlane/plugin/wpmreleasetoolkit/actions/android/android_current_branch_is_hotfix.rb
CHANGED
@@ -8,11 +8,9 @@ module Fastlane
|
|
8
8
|
def self.run(params)
|
9
9
|
require_relative '../../helper/android/android_version_helper'
|
10
10
|
|
11
|
-
build_gradle_path = params[:build_gradle_path]
|
12
11
|
version_properties_path = params[:version_properties_path]
|
13
12
|
|
14
13
|
version = Fastlane::Helper::Android::VersionHelper.get_release_version(
|
15
|
-
build_gradle_path: build_gradle_path,
|
16
14
|
version_properties_path: version_properties_path
|
17
15
|
)
|
18
16
|
Fastlane::Helper::Android::VersionHelper.is_hotfix?(version)
|
@@ -32,16 +30,10 @@ module Fastlane
|
|
32
30
|
|
33
31
|
def self.available_options
|
34
32
|
[
|
35
|
-
FastlaneCore::ConfigItem.new(key: :build_gradle_path,
|
36
|
-
description: 'Path to the build.gradle file',
|
37
|
-
type: String,
|
38
|
-
optional: true,
|
39
|
-
conflicting_options: [:version_properties_path]),
|
40
33
|
FastlaneCore::ConfigItem.new(key: :version_properties_path,
|
41
34
|
description: 'Path to the version.properties file',
|
42
35
|
type: String,
|
43
|
-
optional:
|
44
|
-
conflicting_options: [:build_gradle_path]),
|
36
|
+
optional: false),
|
45
37
|
]
|
46
38
|
end
|
47
39
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
require 'fastlane/action'
|
2
2
|
require 'date'
|
3
3
|
require_relative '../../helper/github_helper'
|
4
|
-
require_relative '../../helper/ios/ios_version_helper'
|
5
|
-
require_relative '../../helper/android/android_version_helper'
|
6
4
|
module Fastlane
|
7
5
|
module Actions
|
8
6
|
class CloseMilestoneAction < Action
|
@@ -1,11 +1,9 @@
|
|
1
1
|
require 'fastlane/action'
|
2
2
|
require 'date'
|
3
3
|
require_relative '../../helper/github_helper'
|
4
|
-
require_relative '../../helper/ios/ios_version_helper'
|
5
|
-
require_relative '../../helper/android/android_version_helper'
|
6
4
|
module Fastlane
|
7
5
|
module Actions
|
8
|
-
class
|
6
|
+
class CreateGithubReleaseAction < Action
|
9
7
|
def self.run(params)
|
10
8
|
repository = params[:repository]
|
11
9
|
version = params[:version]
|
@@ -2,7 +2,6 @@ require 'fastlane/action'
|
|
2
2
|
require 'date'
|
3
3
|
require_relative '../../helper/github_helper'
|
4
4
|
require_relative '../../helper/ios/ios_version_helper'
|
5
|
-
require_relative '../../helper/android/android_version_helper'
|
6
5
|
module Fastlane
|
7
6
|
module Actions
|
8
7
|
class CreateNewMilestoneAction < Action
|
@@ -103,7 +103,10 @@ module Fastlane
|
|
103
103
|
# if there's a callback, make sure it didn't switch branches
|
104
104
|
other_action.ensure_git_branch(branch: "^#{intermediate_branch}/") unless intermediate_branch_created_callback.nil?
|
105
105
|
|
106
|
-
|
106
|
+
base_branch_ref = base_branch.start_with?('origin/') ? base_branch : "origin/#{base_branch}"
|
107
|
+
head_branch_ref = head_branch.start_with?('origin/') ? head_branch : "origin/#{head_branch}"
|
108
|
+
|
109
|
+
if Fastlane::Helper::GitHelper.point_to_same_commit?(base_branch_ref, head_branch_ref)
|
107
110
|
UI.error("No differences between #{head_branch} and #{base_branch}. Skipping PR creation.")
|
108
111
|
return nil
|
109
112
|
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'fastlane/action'
|
2
|
+
require_relative '../../helper/github_helper'
|
3
|
+
|
4
|
+
module Fastlane
|
5
|
+
module Actions
|
6
|
+
class PublishGithubReleaseAction < Action
|
7
|
+
def self.run(params)
|
8
|
+
repository = params[:repository]
|
9
|
+
name = params[:name]
|
10
|
+
prerelease = params[:prerelease]
|
11
|
+
|
12
|
+
github_helper = Fastlane::Helper::GithubHelper.new(github_token: params[:github_token])
|
13
|
+
|
14
|
+
url = github_helper.publish_release(
|
15
|
+
repository: repository,
|
16
|
+
name: name,
|
17
|
+
prerelease: prerelease == :unchanged ? nil : prerelease
|
18
|
+
)
|
19
|
+
UI.success("Successfully published GitHub Release #{name}. You can see it at '#{url}'")
|
20
|
+
url
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.description
|
24
|
+
'Publish an existing GitHub Release still in draft mode'
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.authors
|
28
|
+
['Automattic']
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.return_value
|
32
|
+
'The URL of the published GitHub Release'
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.details
|
36
|
+
'Publish an existing GitHub Release still in draft mode'
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.available_options
|
40
|
+
[
|
41
|
+
FastlaneCore::ConfigItem.new(key: :repository,
|
42
|
+
description: 'The slug (`<org>/<repo>`) of the GitHub repository we want to create the release on',
|
43
|
+
optional: false,
|
44
|
+
type: String),
|
45
|
+
FastlaneCore::ConfigItem.new(key: :name,
|
46
|
+
description: 'The name (aka title) of the draft release to publish',
|
47
|
+
optional: false,
|
48
|
+
type: String),
|
49
|
+
FastlaneCore::ConfigItem.new(key: :prerelease,
|
50
|
+
description: 'True to publish as a pre-release. False to published as final. Don\'t provide a value to keep the same (non-)prerelease status as the one used in the Draft',
|
51
|
+
optional: true,
|
52
|
+
default_value: :unchanged,
|
53
|
+
type: Boolean),
|
54
|
+
Fastlane::Helper::GithubHelper.github_token_config_item,
|
55
|
+
]
|
56
|
+
end
|
57
|
+
|
58
|
+
def self.is_supported?(platform)
|
59
|
+
true
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -7,9 +7,6 @@ module Fastlane
|
|
7
7
|
NON_STABLE_PODS_MESSAGE = "Please create a new stable version of those pods and update the Podfile to the newly released version before continuing with the code freeze:\n".freeze
|
8
8
|
|
9
9
|
def self.run(params)
|
10
|
-
require_relative '../../helper/ios/ios_version_helper'
|
11
|
-
require_relative '../../helper/ios/ios_git_helper'
|
12
|
-
|
13
10
|
yaml = YAML.load_file(params[:lockfile])
|
14
11
|
non_stable_pods = {} # Key will be pod name, value will be reason for flagging
|
15
12
|
|
@@ -19,48 +19,11 @@ module Fastlane
|
|
19
19
|
# The suffix used in the versionName for RC (beta) versions
|
20
20
|
RC_SUFFIX = '-rc'.freeze
|
21
21
|
|
22
|
-
# Returns the public-facing version string.
|
23
|
-
#
|
24
|
-
# @example
|
25
|
-
# "1.2" # Assuming build.gradle contains versionName "1.2"
|
26
|
-
# "1.2" # Assuming build.gradle contains versionName "1.2.0"
|
27
|
-
# "1.2.3" # Assuming build.gradle contains versionName "1.2.3"
|
28
|
-
#
|
29
|
-
# @return [String] The public-facing version number, extracted from the `versionName` of the `build.gradle` file.
|
30
|
-
# - If this version is a hotfix (more than 2 parts and 3rd part is non-zero), returns the "X.Y.Z" formatted string
|
31
|
-
# - Otherwise (not a hotfix / 3rd part of version is 0), returns "X.Y" formatted version number
|
32
|
-
#
|
33
|
-
def self.get_public_version(build_gradle_path:, version_properties_path:)
|
34
|
-
version = get_release_version(
|
35
|
-
build_gradle_path: build_gradle_path,
|
36
|
-
version_properties_path: version_properties_path
|
37
|
-
)
|
38
|
-
vp = get_version_parts(version[VERSION_NAME])
|
39
|
-
return "#{vp[MAJOR_NUMBER]}.#{vp[MINOR_NUMBER]}" unless is_hotfix?(version)
|
40
|
-
|
41
|
-
"#{vp[MAJOR_NUMBER]}.#{vp[MINOR_NUMBER]}.#{vp[HOTFIX_NUMBER]}"
|
42
|
-
end
|
43
|
-
|
44
22
|
# Extract the version name and code from the release version of the app from `version.properties file`
|
45
23
|
#
|
46
24
|
# @return [Hash] A hash with 2 keys "name" and "code" containing the extracted version name and code, respectively
|
47
25
|
#
|
48
|
-
def self.get_release_version(
|
49
|
-
return get_version_from_properties(version_properties_path: version_properties_path) if File.exist?(version_properties_path)
|
50
|
-
|
51
|
-
section = 'defaultConfig'
|
52
|
-
name = get_version_name_from_gradle_file(build_gradle_path, section)
|
53
|
-
code = get_version_build_from_gradle_file(build_gradle_path, section)
|
54
|
-
{ VERSION_NAME => name, VERSION_CODE => code }
|
55
|
-
end
|
56
|
-
|
57
|
-
# Extract the version name and code from the `version.properties` file in the project root
|
58
|
-
#
|
59
|
-
# @param [Boolean] is_alpha true if the alpha version should be returned, false otherwise
|
60
|
-
#
|
61
|
-
# @return [Hash] A hash with 2 keys "name" and "code" containing the extracted version name and code, respectively
|
62
|
-
#
|
63
|
-
def self.get_version_from_properties(version_properties_path:, is_alpha: false)
|
26
|
+
def self.get_release_version(version_properties_path:, is_alpha: false)
|
64
27
|
return nil unless File.exist?(version_properties_path)
|
65
28
|
|
66
29
|
version_name_key = is_alpha ? 'alpha.versionName' : 'versionName'
|
@@ -73,107 +36,6 @@ module Fastlane
|
|
73
36
|
name.nil? || code.nil? ? nil : { VERSION_NAME => name, VERSION_CODE => code.to_i }
|
74
37
|
end
|
75
38
|
|
76
|
-
# Extract the version name and code from the `version.properties` file in the project root
|
77
|
-
#
|
78
|
-
# @return [Hash] A hash with 2 keys `"name"` and `"code"` containing the extracted version name and code, respectively
|
79
|
-
#
|
80
|
-
def self.get_alpha_version(build_gradle_path:, version_properties_path:)
|
81
|
-
return get_version_from_properties(version_properties_path: version_properties_path, is_alpha: true) if File.exist?(version_properties_path)
|
82
|
-
|
83
|
-
section = 'defaultConfig'
|
84
|
-
name = get_version_name_from_gradle_file(build_gradle_path, section)
|
85
|
-
code = get_version_build_from_gradle_file(build_gradle_path, section)
|
86
|
-
{ VERSION_NAME => name, VERSION_CODE => code }
|
87
|
-
end
|
88
|
-
|
89
|
-
# Determines if a version name corresponds to an alpha version (starts with `"alpha-"`` prefix)
|
90
|
-
#
|
91
|
-
# @param [String] version The version name to check
|
92
|
-
#
|
93
|
-
# @return [Bool] true if the version name starts with the `ALPHA_PREFIX`, false otherwise.
|
94
|
-
#
|
95
|
-
# @private
|
96
|
-
#
|
97
|
-
def self.is_alpha_version?(version)
|
98
|
-
version[VERSION_NAME].start_with?(ALPHA_PREFIX)
|
99
|
-
end
|
100
|
-
|
101
|
-
# Check if this versionName corresponds to a beta, i.e. contains some `-rc` suffix
|
102
|
-
#
|
103
|
-
# @param [String] version The versionName string to check for
|
104
|
-
#
|
105
|
-
# @return [Bool] True if the version string contains `-rc`, indicating it is a beta version.
|
106
|
-
#
|
107
|
-
def self.is_beta_version?(version)
|
108
|
-
version[VERSION_NAME].include?(RC_SUFFIX)
|
109
|
-
end
|
110
|
-
|
111
|
-
# Returns the version name and code to use for the final release.
|
112
|
-
#
|
113
|
-
# - The final version name corresponds to the beta's versionName, without the `-rc` suffix
|
114
|
-
# - The final version code corresponds to the versionCode for the alpha (or for the beta if alpha_version is nil) incremented by one.
|
115
|
-
#
|
116
|
-
# @param [Hash] beta_version The version hash for the beta, containing values for keys "name" and "code"
|
117
|
-
# @param [Hash] alpha_version The version hash for the alpha, containing values for keys "name" and "code",
|
118
|
-
# or `nil` if no alpha version to consider.
|
119
|
-
#
|
120
|
-
# @return [Hash] A version hash with keys "name" and "code", containing the version name and code to use for final release.
|
121
|
-
#
|
122
|
-
def self.calc_final_release_version(beta_version, alpha_version)
|
123
|
-
version_name = beta_version[VERSION_NAME].split('-')[0]
|
124
|
-
version_code = alpha_version.nil? ? beta_version[VERSION_CODE] + 1 : alpha_version[VERSION_CODE] + 1
|
125
|
-
|
126
|
-
{ VERSION_NAME => version_name, VERSION_CODE => version_code }
|
127
|
-
end
|
128
|
-
|
129
|
-
# Returns the version name and code to use for the next alpha.
|
130
|
-
#
|
131
|
-
# - The next version name corresponds to the `alpha_version`'s name incremented by one (alpha-42 => alpha-43)
|
132
|
-
# - The next version code corresponds to the `version`'s code incremented by one.
|
133
|
-
#
|
134
|
-
# @param [Hash] version The version hash for the current beta or release, containing values for keys "name" and "code"
|
135
|
-
# @param [Hash] alpha_version The version hash for the current alpha (defaultConfig), containing values for keys "name" and "code"
|
136
|
-
#
|
137
|
-
# @return [Hash] A version hash with keys "name" and "code", containing the version name and code to use for final release.
|
138
|
-
#
|
139
|
-
def self.calc_next_alpha_version(version, alpha_version)
|
140
|
-
# Bump alpha name
|
141
|
-
alpha_number = alpha_version[VERSION_NAME].sub(ALPHA_PREFIX, '')
|
142
|
-
alpha_name = "#{ALPHA_PREFIX}#{alpha_number.to_i + 1}"
|
143
|
-
|
144
|
-
# Bump alpha code
|
145
|
-
alpha_code = version[VERSION_CODE] + 1
|
146
|
-
|
147
|
-
{ VERSION_NAME => alpha_name, VERSION_CODE => alpha_code }
|
148
|
-
end
|
149
|
-
|
150
|
-
# Compute the version name and code to use for the next beta (`X.Y.Z-rc-N`).
|
151
|
-
#
|
152
|
-
# - The next version name corresponds to the `version`'s name with the value after the `-rc-` suffix incremented by one,
|
153
|
-
# or with `-rc-1` added if there was no previous rc suffix (if `version` was not a beta but a release)
|
154
|
-
# - The next version code corresponds to the `alpha_version`'s (or `version`'s if `alpha_version` is nil) code, incremented by one.
|
155
|
-
#
|
156
|
-
# @example
|
157
|
-
# calc_next_beta_version({"name": "1.2.3", "code": 456}) #=> {"name": "1.2.3-rc-1", "code": 457}
|
158
|
-
# calc_next_beta_version({"name": "1.2.3-rc-2", "code": 456}) #=> {"name": "1.2.3-rc-3", "code": 457}
|
159
|
-
# calc_next_beta_version({"name": "1.2.3", "code": 456}, {"name": "alpha-1.2.3", "code": 457}) #=> {"name": "1.2.3-rc-1", "code": 458}
|
160
|
-
#
|
161
|
-
# @param [Hash] version The version hash for the current beta or release, containing values for keys "name" and "code"
|
162
|
-
# @param [Hash] alpha_version The version hash for the alpha, containing values for keys "name" and "code",
|
163
|
-
# or `nil` if no alpha version to consider.
|
164
|
-
#
|
165
|
-
# @return [Hash] A hash with keys `"name"` and `"code"` containing the next beta version name and code.
|
166
|
-
#
|
167
|
-
def self.calc_next_beta_version(version, alpha_version = nil)
|
168
|
-
# Bump version name
|
169
|
-
beta_number = is_beta_version?(version) ? version[VERSION_NAME].split('-')[2].to_i + 1 : 1
|
170
|
-
version_name = "#{version[VERSION_NAME].split('-')[0]}#{RC_SUFFIX}-#{beta_number}"
|
171
|
-
|
172
|
-
# Bump version code
|
173
|
-
version_code = alpha_version.nil? ? version[VERSION_CODE] + 1 : alpha_version[VERSION_CODE] + 1
|
174
|
-
{ VERSION_NAME => version_name, VERSION_CODE => version_code }
|
175
|
-
end
|
176
|
-
|
177
39
|
# Compute the version name to use for the next release (`"X.Y"`).
|
178
40
|
#
|
179
41
|
# @param [String] version The version name (string) to increment
|
@@ -206,57 +68,6 @@ module Fastlane
|
|
206
68
|
{ VERSION_NAME => "#{vp[MAJOR_NUMBER]}.#{vp[MINOR_NUMBER]}", VERSION_CODE => version[VERSION_CODE] }
|
207
69
|
end
|
208
70
|
|
209
|
-
# Compute the name of the next version to use after code freeze, by incrementing the current version name and making it a `-rc-1`
|
210
|
-
#
|
211
|
-
# @example
|
212
|
-
# calc_next_release_version({"name": "1.2", "code": 456}) #=> {"name":"1.3-rc-1", "code": 457}
|
213
|
-
# calc_next_release_version({"name": "1.2.3", "code": 456}) #=> {"name":"1.3-rc-1", "code": 457}
|
214
|
-
# calc_next_release_version({"name": "1.2", "code": 456}, {"name":"alpha-1.2", "code": 457}) #=> {"name":"1.3-rc-1", "code": 458}
|
215
|
-
#
|
216
|
-
# @param [Hash] version The current version hash, with keys `"name"` and `"code"`
|
217
|
-
# @param [Hash] alpha_version The current alpha version hash, with keys `"name"` and `"code"`, or nil if no alpha version
|
218
|
-
#
|
219
|
-
# @return [Hash] The hash containing the version name and code to use after release cut
|
220
|
-
#
|
221
|
-
def self.calc_next_release_version(version, alpha_version = nil)
|
222
|
-
nv = calc_next_release_base_version(VERSION_NAME => version[VERSION_NAME], VERSION_CODE => alpha_version.nil? ? version[VERSION_CODE] : [version[VERSION_CODE], alpha_version[VERSION_CODE]].max)
|
223
|
-
calc_next_beta_version(nv)
|
224
|
-
end
|
225
|
-
|
226
|
-
# Compute the name and code of the next hotfix version.
|
227
|
-
#
|
228
|
-
# @param [String] hotfix_version_name The next version name we want for the hotfix
|
229
|
-
# @param [String] hotfix_version_code The next version code we want for the hotfix
|
230
|
-
#
|
231
|
-
# @return [Hash] The predicted next hotfix version, as a Hash containing the keys `"name"` and `"code"`
|
232
|
-
#
|
233
|
-
def self.calc_next_hotfix_version(hotfix_version_name, hotfix_version_code)
|
234
|
-
{ VERSION_NAME => hotfix_version_name, VERSION_CODE => hotfix_version_code }
|
235
|
-
end
|
236
|
-
|
237
|
-
# Compute the name of the previous release version, by decrementing the minor version number
|
238
|
-
#
|
239
|
-
# @example
|
240
|
-
# calc_prev_release_version("1.2") => "1.1"
|
241
|
-
# calc_prev_release_version("1.2.3") => "1.1"
|
242
|
-
# calc_prev_release_version("3.0") => "2.9"
|
243
|
-
#
|
244
|
-
# @param [String] version The version string to decrement
|
245
|
-
#
|
246
|
-
# @return [String] A 2-parts version string "X.Y" corresponding to the guessed previous release version.
|
247
|
-
#
|
248
|
-
def self.calc_prev_release_version(version)
|
249
|
-
vp = get_version_parts(version)
|
250
|
-
if (vp[MINOR_NUMBER]).zero?
|
251
|
-
vp[MAJOR_NUMBER] -= 1
|
252
|
-
vp[MINOR_NUMBER] = 9
|
253
|
-
else
|
254
|
-
vp[MINOR_NUMBER] -= 1
|
255
|
-
end
|
256
|
-
|
257
|
-
"#{vp[MAJOR_NUMBER]}.#{vp[MINOR_NUMBER]}"
|
258
|
-
end
|
259
|
-
|
260
71
|
# Determines if a version name corresponds to a hotfix
|
261
72
|
#
|
262
73
|
# @param [String] version The version number to test
|
@@ -264,69 +75,12 @@ module Fastlane
|
|
264
75
|
# @return [Bool] True if the version number has a non-zero 3rd component, meaning that it is a hotfix version.
|
265
76
|
#
|
266
77
|
def self.is_hotfix?(version)
|
267
|
-
return false if
|
78
|
+
return false if version[VERSION_NAME].start_with?(ALPHA_PREFIX)
|
268
79
|
|
269
80
|
vp = get_version_parts(version[VERSION_NAME])
|
270
81
|
(vp.length > 2) && (vp[HOTFIX_NUMBER] != 0)
|
271
82
|
end
|
272
83
|
|
273
|
-
# Prints the current and next release version names to stdout, then returns the next release version
|
274
|
-
#
|
275
|
-
# @return [String] The next release version name to use after bumping the currently used release version.
|
276
|
-
#
|
277
|
-
def self.bump_version_release(build_gradle_path:, version_properties_path:)
|
278
|
-
# Bump release
|
279
|
-
current_version = get_release_version(
|
280
|
-
build_gradle_path: build_gradle_path,
|
281
|
-
version_properties_path: version_properties_path
|
282
|
-
)
|
283
|
-
UI.message("Current version: #{current_version[VERSION_NAME]}")
|
284
|
-
new_version = calc_next_release_base_version(current_version)
|
285
|
-
UI.message("New version: #{new_version[VERSION_NAME]}")
|
286
|
-
verify_version(new_version[VERSION_NAME])
|
287
|
-
end
|
288
|
-
|
289
|
-
# Update the `version.properties` file with new `versionName` and `versionCode` values
|
290
|
-
#
|
291
|
-
# @param [Hash] new_version_beta The version hash for the beta, containing values for keys "name" and "code"
|
292
|
-
# @param [Hash] new_version_alpha The version hash for the alpha , containing values for keys "name" and "code"
|
293
|
-
#
|
294
|
-
def self.update_versions(new_version_beta, new_version_alpha, version_properties_path:)
|
295
|
-
if File.exist?(version_properties_path)
|
296
|
-
replacements = {
|
297
|
-
versionName: (new_version_beta || {})[VERSION_NAME],
|
298
|
-
versionCode: (new_version_beta || {})[VERSION_CODE],
|
299
|
-
'alpha.versionName': (new_version_alpha || {})[VERSION_NAME],
|
300
|
-
'alpha.versionCode': (new_version_alpha || {})[VERSION_CODE]
|
301
|
-
}
|
302
|
-
content = File.read(version_properties_path)
|
303
|
-
content.gsub!(/^(.*) ?=.*$/) do |line|
|
304
|
-
key = Regexp.last_match(1).to_sym
|
305
|
-
value = replacements[key]
|
306
|
-
value.nil? ? line : "#{key}=#{value}"
|
307
|
-
end
|
308
|
-
File.write(version_properties_path, content)
|
309
|
-
else
|
310
|
-
update_version(new_version_beta, 'defaultConfig')
|
311
|
-
update_version(new_version_alpha, 'defaultConfig') unless new_version_alpha.nil?
|
312
|
-
end
|
313
|
-
end
|
314
|
-
|
315
|
-
# Compute the name of the previous hotfix version.
|
316
|
-
#
|
317
|
-
# @param [String] version_name The current version name we want to decrement
|
318
|
-
#
|
319
|
-
# @return [String] The predicted previous hotfix version, in the form of "X.Y.Z", or "X.Y" if Z is 0.
|
320
|
-
# Corresponds to decrementing the 3rd component Z of the version, stripping it if it ends up being zero.
|
321
|
-
#
|
322
|
-
def self.calc_prev_hotfix_version_name(version_name)
|
323
|
-
vp = get_version_parts(version_name)
|
324
|
-
vp[HOTFIX_NUMBER] -= 1 unless (vp[HOTFIX_NUMBER]).zero?
|
325
|
-
return "#{vp[MAJOR_NUMBER]}.#{vp[MINOR_NUMBER]}.#{vp[HOTFIX_NUMBER]}" unless (vp[HOTFIX_NUMBER]).zero?
|
326
|
-
|
327
|
-
"#{vp[MAJOR_NUMBER]}.#{vp[MINOR_NUMBER]}"
|
328
|
-
end
|
329
|
-
|
330
84
|
# Extract the value of a import key from build.gradle
|
331
85
|
#
|
332
86
|
# @param [String] import_key The key to look for
|
@@ -367,131 +121,6 @@ module Fastlane
|
|
367
121
|
parts.fill(0, parts.length...3) # add 0 if needed to ensure array has at least 3 components
|
368
122
|
parts
|
369
123
|
end
|
370
|
-
|
371
|
-
# Ensure that a version string is correctly formatted (that is, each of its parts is a number) and returns the 2-parts version number
|
372
|
-
#
|
373
|
-
# @param [String] version The version string to verify
|
374
|
-
#
|
375
|
-
# @return [String] The "major.minor" version string, only with the first 2 components
|
376
|
-
# @raise [UserError] If any of the parts of the version string is not a number
|
377
|
-
#
|
378
|
-
def self.verify_version(version)
|
379
|
-
v_parts = get_version_parts(version)
|
380
|
-
|
381
|
-
v_parts.each do |part|
|
382
|
-
UI.user_error!('Version value can only contains numbers.') unless is_int?(part)
|
383
|
-
end
|
384
|
-
|
385
|
-
"#{v_parts[MAJOR_NUMBER]}.#{v_parts[MINOR_NUMBER]}"
|
386
|
-
end
|
387
|
-
|
388
|
-
# Check if a string is an integer.
|
389
|
-
#
|
390
|
-
# @param [String] string The string to test
|
391
|
-
#
|
392
|
-
# @return [Bool] true if the string is representing an integer value, false if not
|
393
|
-
#
|
394
|
-
def self.is_int?(string)
|
395
|
-
true if Integer(string)
|
396
|
-
rescue StandardError
|
397
|
-
false
|
398
|
-
end
|
399
|
-
|
400
|
-
#########
|
401
|
-
# Functions to support versioning through build.gradle - can be removed once all projects adopt version.properties
|
402
|
-
########
|
403
|
-
|
404
|
-
# Extract the versionName from a build.gradle file
|
405
|
-
#
|
406
|
-
# @param [String] file_path The path to the `.gradle` file
|
407
|
-
# @param [String] section The name of the section we expect the keyword to be in, e.g. "defaultConfig" or "vanilla"
|
408
|
-
#
|
409
|
-
# @return [String] The value of the versionName attribute as found in the build.gradle file and for this section.
|
410
|
-
#
|
411
|
-
def self.get_version_name_from_gradle_file(file_path, section)
|
412
|
-
res = get_keyword_from_gradle_file(file_path, section, 'versionName')
|
413
|
-
res = res.tr('\"', '') unless res.nil?
|
414
|
-
res
|
415
|
-
end
|
416
|
-
|
417
|
-
# Extract the versionCode rom a build.gradle file
|
418
|
-
#
|
419
|
-
# @param [String] file_path The path to the `.gradle` file
|
420
|
-
# @param [String] section The name of the section we expect the keyword to be in, e.g. "defaultConfig" or "vanilla"
|
421
|
-
#
|
422
|
-
# @return [String] The value of the versionCode attribute as found in the build.gradle file and for this section.
|
423
|
-
#
|
424
|
-
def self.get_version_build_from_gradle_file(file_path, section)
|
425
|
-
res = get_keyword_from_gradle_file(file_path, section, 'versionCode')
|
426
|
-
res.to_i
|
427
|
-
end
|
428
|
-
|
429
|
-
# Extract the value for a specific keyword in a specific section of a `.gradle` file
|
430
|
-
#
|
431
|
-
# @todo: This implementation is very fragile. This should be done parsing the file in a proper way.
|
432
|
-
# Leveraging gradle itself is probably the easiest way.
|
433
|
-
#
|
434
|
-
# @param [String] file_path The path of the `.gradle` file to extract the value from
|
435
|
-
# @param [String] section The name of the section from which we want to extract this keyword from. For example `defaultConfig` or `myFlavor`
|
436
|
-
# @param [String] keyword The keyword (key name) we want the value for
|
437
|
-
#
|
438
|
-
# @return [String] Returns the value for that keyword in the section of the `.gradle` file, or nil if not found.
|
439
|
-
#
|
440
|
-
def self.get_keyword_from_gradle_file(file_path, section, keyword)
|
441
|
-
found_section = false
|
442
|
-
File.open(file_path, 'r') do |file|
|
443
|
-
file.each_line do |line|
|
444
|
-
if found_section
|
445
|
-
return line.split[1] if line.include?(keyword) && !line.include?("\"#{keyword}\"") && !line.include?("P#{keyword}")
|
446
|
-
elsif line.include?(section)
|
447
|
-
found_section = true
|
448
|
-
end
|
449
|
-
end
|
450
|
-
end
|
451
|
-
nil
|
452
|
-
end
|
453
|
-
|
454
|
-
# Update both the versionName and versionCode of the build.gradle file to the specified version.
|
455
|
-
#
|
456
|
-
# @param [Hash] version The version hash, containing values for keys "name" and "code"
|
457
|
-
# @param [String] section The name of the section to update in the build.gradle file, e.g. "defaultConfig" or "vanilla"
|
458
|
-
#
|
459
|
-
# @todo This implementation is very fragile. This should be done parsing the file in a proper way.
|
460
|
-
# Leveraging gradle itself is probably the easiest way.
|
461
|
-
#
|
462
|
-
def self.update_version(version, section, build_gradle_path:)
|
463
|
-
temp_file = Tempfile.new('fastlaneIncrementVersion')
|
464
|
-
found_section = false
|
465
|
-
version_updated = 0
|
466
|
-
File.open(build_gradle_path, 'r') do |file|
|
467
|
-
file.each_line do |line|
|
468
|
-
if found_section
|
469
|
-
if version_updated < 2
|
470
|
-
if line.include?('versionName') && !line.include?('"versionName"') && !line.include?('PversionName')
|
471
|
-
version_name = line.split[1].tr('\"', '')
|
472
|
-
line.sub!(version_name, version[VERSION_NAME].to_s)
|
473
|
-
version_updated += 1
|
474
|
-
end
|
475
|
-
|
476
|
-
if line.include? 'versionCode'
|
477
|
-
version_code = line.split[1]
|
478
|
-
line.sub!(version_code, version[VERSION_CODE].to_s)
|
479
|
-
version_updated += 1
|
480
|
-
end
|
481
|
-
end
|
482
|
-
temp_file.puts line
|
483
|
-
else
|
484
|
-
temp_file.puts line
|
485
|
-
found_section = true if line.include? section
|
486
|
-
end
|
487
|
-
end
|
488
|
-
file.close
|
489
|
-
end
|
490
|
-
temp_file.rewind
|
491
|
-
temp_file.close
|
492
|
-
FileUtils.mv(temp_file.path, build_gradle_path)
|
493
|
-
temp_file.unlink
|
494
|
-
end
|
495
124
|
end
|
496
125
|
end
|
497
126
|
end
|
@@ -67,15 +67,6 @@ module Fastlane
|
|
67
67
|
false
|
68
68
|
end
|
69
69
|
|
70
|
-
# Update every submodule in the current git repository
|
71
|
-
#
|
72
|
-
# @deprecated This method is going to be removed soon. Fastlane has a built-in `git_submodule_update` action that can be used instead.
|
73
|
-
#
|
74
|
-
def self.update_submodules
|
75
|
-
UI.deprecated("The `update_submodules` method will soon be removed from `release-toolkit`. Please use fastlane's `git_submodule_update` action instead.")
|
76
|
-
Action.sh('git', 'submodule', 'update', '--init', '--recursive')
|
77
|
-
end
|
78
|
-
|
79
70
|
# Create a new branch named `branch_name`, cutting it from branch/commit/tag `from`
|
80
71
|
#
|
81
72
|
# If the branch with that name already exists, it will instead switch to it and pull new commits.
|
@@ -188,8 +179,14 @@ module Fastlane
|
|
188
179
|
#
|
189
180
|
def self.point_to_same_commit?(ref1, ref2)
|
190
181
|
git_repo = Git.open(Dir.pwd)
|
191
|
-
|
192
|
-
|
182
|
+
|
183
|
+
begin
|
184
|
+
ref1_commit = git_repo.gcommit(ref1)
|
185
|
+
ref2_commit = git_repo.gcommit(ref2)
|
186
|
+
rescue StandardError => e
|
187
|
+
puts "Error: #{e.message}"
|
188
|
+
return false
|
189
|
+
end
|
193
190
|
|
194
191
|
ref1_commit.sha == ref2_commit.sha
|
195
192
|
end
|
@@ -232,24 +229,6 @@ module Fastlane
|
|
232
229
|
!Action.sh('git', 'ls-remote', '--heads', remote_name, branch_name).empty?
|
233
230
|
end
|
234
231
|
|
235
|
-
# Ensure that we are on the expected branch, and abort if not.
|
236
|
-
#
|
237
|
-
# @param [String] branch_name The name of the branch we expect to be on
|
238
|
-
#
|
239
|
-
# @raise [UserError] Raises a user_error! and interrupts the lane if we are not on the expected branch.
|
240
|
-
#
|
241
|
-
# @deprecated This method is going to be removed soon. Fastlane has a built-in `ensure_git_branch` action that can be used instead.
|
242
|
-
# After updating to Fastlane version `2.217.0` or later, the `FL_GIT_BRANCH_DONT_USE_ENV_VARS` environment
|
243
|
-
# variable can be set to `true` to disable the use of environment variables for the `git_branch` action that
|
244
|
-
# `ensure_git_branch` relies on. This will make `ensure_git_branch` work as expected in CI environments.
|
245
|
-
# See https://github.com/fastlane/fastlane/pull/21597 for more details.
|
246
|
-
#
|
247
|
-
def self.ensure_on_branch!(branch_name)
|
248
|
-
UI.deprecated("The `ensure_on_branch!` method will soon be removed from `release-toolkit`. Please use fastlane's `ensure_git_branch` action (+ potentially set `FL_GIT_BRANCH_DONT_USE_ENV_VARS=true`) instead.")
|
249
|
-
current_branch_name = Action.sh('git', 'symbolic-ref', '-q', 'HEAD')
|
250
|
-
UI.user_error!("This command works only on #{branch_name} branch") unless current_branch_name.include?(branch_name)
|
251
|
-
end
|
252
|
-
|
253
232
|
# Checks whether a given path is ignored by Git, relying on Git's `check-ignore` under the hood.
|
254
233
|
#
|
255
234
|
# @param [String] path The path to check against `.gitignore`
|