fastlane-plugin-wpmreleasetoolkit 9.0.0 → 9.1.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/an_update_metadata_source_action.rb +7 -5
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/copy_branch_protection_action.rb +80 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/gp_update_metadata_source.rb +3 -1
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/{removebranchprotection_action.rb → remove_branch_protection_action.rb} +24 -17
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/set_branch_protection_action.rb +153 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/github_helper.rb +49 -4
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/metadata_block.rb +20 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/release_note_metadata_block.rb +72 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/release_note_short_metadata_block.rb +23 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/standard_metadata_block.rb +47 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/unknown_metadata_block.rb +13 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata/whats_new_metadata_block.rb +53 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/models/app_version.rb +36 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/models/build_code.rb +27 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/version.rb +1 -1
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/abstract_version_calculator.rb +85 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/date_build_code_calculator.rb +32 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/date_version_calculator.rb +37 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/marketing_version_calculator.rb +26 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/semantic_version_calculator.rb +21 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/simple_build_code_calculator.rb +22 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/files/android_version_file.rb +76 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/files/ios_version_file.rb +64 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/abstract_version_formatter.rb +27 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/derived_build_code_formatter.rb +33 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/four_part_build_code_formatter.rb +22 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/four_part_version_formatter.rb +35 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/rc_notation_version_formatter.rb +65 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/simple_build_code_formatter.rb +20 -0
- data/lib/fastlane/plugin/wpmreleasetoolkit.rb +1 -1
- metadata +41 -6
- data/lib/fastlane/plugin/wpmreleasetoolkit/actions/common/setbranchprotection_action.rb +0 -63
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/an_metadata_update_helper.rb +0 -152
- data/lib/fastlane/plugin/wpmreleasetoolkit/helper/metadata_update_helper.rb +0 -182
@@ -0,0 +1,36 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Models
|
3
|
+
# The AppVersion model represents a version of an app with major, minor, patch, and build number components.
|
4
|
+
class AppVersion
|
5
|
+
attr_accessor :major, :minor, :patch, :build_number
|
6
|
+
|
7
|
+
# Initializes a new AppVersion instance.
|
8
|
+
#
|
9
|
+
# @param [Integer] major The major version number.
|
10
|
+
# @param [Integer] minor The minor version number.
|
11
|
+
# @param [Integer] patch The patch version number.
|
12
|
+
# @param [Integer] build_number The build number.
|
13
|
+
#
|
14
|
+
def initialize(major, minor, patch = 0, build_number = 0)
|
15
|
+
# Validate that the major and minor version numbers are not nil
|
16
|
+
UI.user_error!('Major version cannot be nil') if major.nil?
|
17
|
+
UI.user_error!('Minor version cannot be nil') if minor.nil?
|
18
|
+
|
19
|
+
@major = major
|
20
|
+
@minor = minor
|
21
|
+
@patch = patch
|
22
|
+
@build_number = build_number
|
23
|
+
end
|
24
|
+
|
25
|
+
# Converts the AppVersion object to a string representation.
|
26
|
+
# This should only be used for internal debugging/testing purposes, not to write versions in version files
|
27
|
+
# In order to format an `AppVersion` into a `String`, you should use the appropriate `VersionFormatter` for your project instead.
|
28
|
+
#
|
29
|
+
# @return [String] a string in the format "major.minor.patch.build_number".
|
30
|
+
#
|
31
|
+
def to_s
|
32
|
+
"#{@major}.#{@minor}.#{@patch}.#{@build_number}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Models
|
3
|
+
# The `BuildCode` model represents a build code for an app. This could be the Version Code for an Android app or
|
4
|
+
# the VERSION_LONG/BUILD_NUMBER for an iOS/Mac app.
|
5
|
+
class BuildCode
|
6
|
+
attr_accessor :build_code
|
7
|
+
|
8
|
+
# Initializes a new BuildCode instance with the provided build code value.
|
9
|
+
#
|
10
|
+
# @param build_code [String] The build code value.
|
11
|
+
#
|
12
|
+
def initialize(build_code)
|
13
|
+
UI.user_error!('Build code cannot be nil') if build_code.nil?
|
14
|
+
|
15
|
+
@build_code = build_code
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns the build code as a string.
|
19
|
+
#
|
20
|
+
# @return [String] The build code represented as a string.
|
21
|
+
#
|
22
|
+
def to_s
|
23
|
+
@build_code.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/abstract_version_calculator.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Wpmreleasetoolkit
|
3
|
+
module Versioning
|
4
|
+
# The `AbstractVersionCalculator` class is responsible for performing version calculations and transformations. It can be used
|
5
|
+
# as a base class for version calculations that use different versioning schemes. It contains calculation and
|
6
|
+
# transformation methods that are shared by all platforms. It has the abstract suffix because it should not be
|
7
|
+
# instantiated directly.
|
8
|
+
class AbstractVersionCalculator
|
9
|
+
# This method increments the major version component and resets minor, patch, and build number
|
10
|
+
# components to zero.
|
11
|
+
#
|
12
|
+
# @param version [AppVersion] The version to calculate the next major version for.
|
13
|
+
#
|
14
|
+
# @return [AppVersion] The next major version.
|
15
|
+
#
|
16
|
+
def next_major_version(version:)
|
17
|
+
new_version = version.dup
|
18
|
+
new_version.major += 1
|
19
|
+
new_version.minor = 0
|
20
|
+
new_version.patch = 0
|
21
|
+
new_version.build_number = 0
|
22
|
+
|
23
|
+
new_version
|
24
|
+
end
|
25
|
+
|
26
|
+
# This method increments the minor version component and resets patch and build number components
|
27
|
+
# to zero.
|
28
|
+
#
|
29
|
+
# @param version [AppVersion] The version to calculate the next minor version for.
|
30
|
+
#
|
31
|
+
# @return [AppVersion] The next minor version.
|
32
|
+
#
|
33
|
+
def next_minor_version(version:)
|
34
|
+
new_version = version.dup
|
35
|
+
new_version.minor += 1
|
36
|
+
new_version.patch = 0
|
37
|
+
new_version.build_number = 0
|
38
|
+
|
39
|
+
new_version
|
40
|
+
end
|
41
|
+
|
42
|
+
# This method increments the patch version component and resets the build number component to zero.
|
43
|
+
#
|
44
|
+
# @param version [AppVersion] The version to calculate the next patch version for.
|
45
|
+
#
|
46
|
+
# @return [AppVersion] The next patch version.
|
47
|
+
#
|
48
|
+
def next_patch_version(version:)
|
49
|
+
new_version = version.dup
|
50
|
+
new_version.patch += 1
|
51
|
+
new_version.build_number = 0
|
52
|
+
|
53
|
+
new_version
|
54
|
+
end
|
55
|
+
|
56
|
+
# This method increments the build number component.
|
57
|
+
#
|
58
|
+
# @param version [AppVersion] The version to calculate the next build number for.
|
59
|
+
#
|
60
|
+
# @return [AppVersion] The next version with an incremented build number.
|
61
|
+
#
|
62
|
+
def next_build_number(version:)
|
63
|
+
new_version = version.dup
|
64
|
+
new_version.build_number += 1
|
65
|
+
|
66
|
+
new_version
|
67
|
+
end
|
68
|
+
|
69
|
+
# Calculate the previous patch version by decrementing the patch version if it's not zero.
|
70
|
+
#
|
71
|
+
# @param [AppVersion] version The version to calculate the previous patch version for.
|
72
|
+
#
|
73
|
+
# @return [AppVersion] The previous patch version.
|
74
|
+
#
|
75
|
+
def previous_patch_version(version:)
|
76
|
+
new_version = version.dup
|
77
|
+
new_version.patch -= 1 unless version.patch.zero?
|
78
|
+
new_version.build_number = 0
|
79
|
+
|
80
|
+
new_version
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/date_build_code_calculator.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Wpmreleasetoolkit
|
3
|
+
module Versioning
|
4
|
+
# The `DateBuildCodeCalculator` class is a build code calculator for apps that use date-based
|
5
|
+
# build codes.
|
6
|
+
class DateBuildCodeCalculator
|
7
|
+
# Calculate the next internal build code by setting the build number to the current date.
|
8
|
+
#
|
9
|
+
# @param [AppVersion] version The version to calculate the next internal version for.
|
10
|
+
#
|
11
|
+
# @return [AppVersion] The next version with the build number set to the current date.
|
12
|
+
#
|
13
|
+
def next_build_code(version:)
|
14
|
+
new_version = version.dup
|
15
|
+
new_version.build_number = today_date
|
16
|
+
|
17
|
+
new_version
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
# Get the current date in the format 'YYYYMMDD'.
|
23
|
+
#
|
24
|
+
# @return [String] The current date in 'YYYYMMDD' format.
|
25
|
+
#
|
26
|
+
def today_date
|
27
|
+
DateTime.now.strftime('%Y%m%d')
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'abstract_version_calculator'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `DateVersionCalculator` class is a specialized version calculator for date-based versions
|
7
|
+
# of an app, extending the `AbstractVersionCalculator` class.
|
8
|
+
class DateVersionCalculator < AbstractVersionCalculator
|
9
|
+
# Calculate the next date-based release version.
|
10
|
+
#
|
11
|
+
# If the current month is December, the method prompts the user to determine if the next
|
12
|
+
# release will be the first release of the next year. If so, it increments the major version
|
13
|
+
# and sets the minor version to 1, resetting the patch and build number components to zero.
|
14
|
+
# Otherwise, it calculates the next minor version.
|
15
|
+
#
|
16
|
+
# @param [AppVersion] version The version to calculate the next date-based release version for.
|
17
|
+
#
|
18
|
+
# @return [AppVersion] The next date-based release version.
|
19
|
+
#
|
20
|
+
def next_release_version(version:)
|
21
|
+
new_version = version.dup
|
22
|
+
first_release_of_year = FastlaneCore::UI.confirm('Is this release the first release of next year?') if Time.now.month == 12
|
23
|
+
if first_release_of_year
|
24
|
+
new_version.major += 1
|
25
|
+
new_version.minor = 1
|
26
|
+
new_version.patch = 0
|
27
|
+
new_version.build_number = 0
|
28
|
+
|
29
|
+
new_version
|
30
|
+
else
|
31
|
+
next_minor_version(version: version)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/marketing_version_calculator.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require_relative 'abstract_version_calculator'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `MarketingVersionCalculator` class is a specialized version calculator for marketing versions
|
7
|
+
# of an app, extending the `AbstractVersionCalculator` class.
|
8
|
+
class MarketingVersionCalculator < AbstractVersionCalculator
|
9
|
+
# Calculate the next marketing release version.
|
10
|
+
#
|
11
|
+
# This method checks if the minor version is 9. If it is, it calculates the next major version.
|
12
|
+
# Otherwise, it calculates the next minor version. The patch and build number components are reset to zero.
|
13
|
+
#
|
14
|
+
# @param [AppVersion] version The version to calculate the next marketing release version for.
|
15
|
+
#
|
16
|
+
# @return [AppVersion] The next marketing release version.
|
17
|
+
#
|
18
|
+
def next_release_version(version:)
|
19
|
+
UI.user_error!('Marketing Versioning: The minor version cannot be greater than 9') if version.minor > 9
|
20
|
+
|
21
|
+
version.minor == 9 ? next_major_version(version: version) : next_minor_version(version: version)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/semantic_version_calculator.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require_relative 'abstract_version_calculator'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `SemanticVersionCalculator` class is a specialized version calculator for semantic versions
|
7
|
+
# of an app, extending the `AbstractVersionCalculator` class.
|
8
|
+
class SemanticVersionCalculator < AbstractVersionCalculator
|
9
|
+
# Calculate the next semantic release version.
|
10
|
+
#
|
11
|
+
# @param [AppVersion] version The version to calculate the next semantic release version from.
|
12
|
+
#
|
13
|
+
# @return [AppVersion] The next semantic release version.
|
14
|
+
#
|
15
|
+
def next_release_version(version:)
|
16
|
+
next_minor_version(version: version)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/calculators/simple_build_code_calculator.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Wpmreleasetoolkit
|
3
|
+
module Versioning
|
4
|
+
# The `SimpleBuildCodeCalculator` class is a build code calculator for apps that use simple integer
|
5
|
+
# build codes.
|
6
|
+
class SimpleBuildCodeCalculator
|
7
|
+
# Calculate the next build code.
|
8
|
+
#
|
9
|
+
# This method increments the build code value by 1.
|
10
|
+
#
|
11
|
+
# @param [BuildCode] version The build code to increment.
|
12
|
+
#
|
13
|
+
# @return [BuildCode] The next build code.
|
14
|
+
#
|
15
|
+
def next_build_code(build_code:)
|
16
|
+
new_build_code = build_code.dup
|
17
|
+
new_build_code.build_code += 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require 'java-properties'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `AndroidVersionFile` class takes in a version.properties file path and reads/writes values to/from the file.
|
7
|
+
class AndroidVersionFile
|
8
|
+
attr_reader :version_properties_path
|
9
|
+
|
10
|
+
# Initializes a new instance of AndroidVersionFile with the specified version.properties file path.
|
11
|
+
#
|
12
|
+
# @param [String] version_properties_path The path to the version.properties file.
|
13
|
+
#
|
14
|
+
def initialize(version_properties_path: 'version.properties')
|
15
|
+
UI.user_error!("version.properties not found at this path: #{version_properties_path}") unless File.exist?(version_properties_path)
|
16
|
+
|
17
|
+
@version_properties_path = version_properties_path
|
18
|
+
end
|
19
|
+
|
20
|
+
# Reads the version name from a version.properties file.
|
21
|
+
#
|
22
|
+
# @return [String] The version name read from the file.
|
23
|
+
#
|
24
|
+
# @raise [UI::Error] If the file_path is nil or the version name is not found.
|
25
|
+
#
|
26
|
+
def read_version_name
|
27
|
+
# Read the version name from the version.properties file
|
28
|
+
file_content = JavaProperties.load(version_properties_path)
|
29
|
+
version_name = file_content[:versionName]
|
30
|
+
UI.user_error!('Version name not found in version.properties') if version_name.nil?
|
31
|
+
|
32
|
+
version_name
|
33
|
+
end
|
34
|
+
|
35
|
+
# Reads the version code from a version.properties file.
|
36
|
+
#
|
37
|
+
# @param [String] file_path The path to the version.properties file.
|
38
|
+
#
|
39
|
+
# @return [BuildCode] An instance of `BuildCode` representing the version code read from the file.
|
40
|
+
#
|
41
|
+
# @raise [UI::Error] If the file_path is nil or the version code is not found.
|
42
|
+
#
|
43
|
+
def read_version_code
|
44
|
+
# Read the version code from the version.properties file
|
45
|
+
file_content = JavaProperties.load(version_properties_path)
|
46
|
+
version_code = file_content[:versionCode]
|
47
|
+
UI.user_error!('Version code not found in version.properties') if version_code.nil?
|
48
|
+
|
49
|
+
# Create a BuildCode object
|
50
|
+
Fastlane::Models::BuildCode.new(version_code.to_i)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Writes the provided version name and version code to the version.properties file.
|
54
|
+
#
|
55
|
+
# @param [String] version_name The version name to write to the file.
|
56
|
+
# @param [String] version_code The version code to write to the file.
|
57
|
+
#
|
58
|
+
# @raise [UI::Error] If the version name or version code is nil.
|
59
|
+
#
|
60
|
+
def write_version(version_name:, version_code:)
|
61
|
+
# Create the version name and version code hash
|
62
|
+
version = {
|
63
|
+
versionName: version_name,
|
64
|
+
versionCode: version_code
|
65
|
+
}
|
66
|
+
|
67
|
+
# Write the version name and version code hash to the version.properties file
|
68
|
+
JavaProperties.write(
|
69
|
+
version,
|
70
|
+
version_properties_path
|
71
|
+
)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'xcodeproj'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `IOSVersionFile` class takes in an .xcconfig file path and reads/writes values to/from the file.
|
7
|
+
class IOSVersionFile
|
8
|
+
attr_reader :xcconfig_path
|
9
|
+
|
10
|
+
# Initializes a new instance of IOSVersionFile with the specified .xcconfig file path.
|
11
|
+
#
|
12
|
+
# @param [String] xcconfig_path The path to the .xcconfig file.
|
13
|
+
#
|
14
|
+
def initialize(xcconfig_path:)
|
15
|
+
UI.user_error!(".xcconfig file not found at this path: #{xcconfig_path}") unless File.exist?(xcconfig_path)
|
16
|
+
|
17
|
+
@xcconfig_path = xcconfig_path
|
18
|
+
end
|
19
|
+
|
20
|
+
# Reads the release version from the .xcconfig file and returns it as a String.
|
21
|
+
#
|
22
|
+
# @return [String] The release version.
|
23
|
+
#
|
24
|
+
def read_release_version
|
25
|
+
config = Xcodeproj::Config.new(xcconfig_path)
|
26
|
+
config.attributes['VERSION_SHORT']
|
27
|
+
end
|
28
|
+
|
29
|
+
# Reads the build code from the .xcconfig file and returns it String.
|
30
|
+
#
|
31
|
+
# Some apps store the build code in the VERSION_LONG attribute, while others store it in the BUILD_NUMBER attribute.
|
32
|
+
#
|
33
|
+
# @param [String] attribute_name The name of the attribute to read.
|
34
|
+
#
|
35
|
+
# @return [String] The build code.
|
36
|
+
#
|
37
|
+
def read_build_code(attribute_name:)
|
38
|
+
UI.user_error!('attribute_name must be `VERSION_LONG` or `BUILD_NUMBER`') unless attribute_name.eql?('VERSION_LONG') || attribute_name.eql?('BUILD_NUMBER')
|
39
|
+
|
40
|
+
config = Xcodeproj::Config.new(xcconfig_path)
|
41
|
+
config.attributes[attribute_name]
|
42
|
+
end
|
43
|
+
|
44
|
+
# Writes the provided version numbers to the .xcconfig file.
|
45
|
+
#
|
46
|
+
# @param [String, nil] version_short The short version string (optional).
|
47
|
+
# @param [String, nil] version_long The long version string (optional).
|
48
|
+
# @param [String, nil] build_number The build number (optional).
|
49
|
+
#
|
50
|
+
# version_long is optional because there are times when it won't be updated, such as a new beta build.
|
51
|
+
# version_short is optional because some apps (such as Day One iOS/Mac or Simplenote Mac) don't use it.
|
52
|
+
# build_number is optional because some apps (such as WP/JP iOS or WCiOS) don't use it.
|
53
|
+
#
|
54
|
+
def write(version_short: nil, version_long: nil, build_number: nil)
|
55
|
+
config = Xcodeproj::Config.new(xcconfig_path)
|
56
|
+
config.attributes['VERSION_SHORT'] = version_short.to_s unless version_short.nil?
|
57
|
+
config.attributes['VERSION_LONG'] = version_long.to_s unless version_long.nil?
|
58
|
+
config.attributes['BUILD_NUMBER'] = build_number.to_s unless build_number.nil?
|
59
|
+
config.save_as(Pathname.new(xcconfig_path))
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/abstract_version_formatter.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../calculators/abstract_version_calculator'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `VersionFormatter` class is a generic version formatter that can be used as a base class
|
7
|
+
# for formatting version objects used by for different platforms. It contains formatting methods that
|
8
|
+
# are shared by all platforms. It has the abstract suffix because it should not be instantiated directly.
|
9
|
+
class AbstractVersionFormatter
|
10
|
+
# Get the release version string for the app.
|
11
|
+
#
|
12
|
+
# This method constructs the release version string based on the major, minor, and
|
13
|
+
# patch components of the provided `@version`. If the patch component is zero, it returns
|
14
|
+
# a version string in the format "major.minor" (e.g., '1.2'). Otherwise, it returns a
|
15
|
+
# version string in the format "major.minor.patch" (e.g., '1.2.3').
|
16
|
+
#
|
17
|
+
# @param [AppVersion] version The version object to format
|
18
|
+
#
|
19
|
+
# @return [String] The formatted release version string.
|
20
|
+
#
|
21
|
+
def release_version(version)
|
22
|
+
version.patch.zero? ? "#{version.major}.#{version.minor}" : "#{version.major}.#{version.minor}.#{version.patch}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/derived_build_code_formatter.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Wpmreleasetoolkit
|
3
|
+
module Versioning
|
4
|
+
# The `DerivedBuildCodeFormatter` class is a specialized build code formatter for derived build codes.
|
5
|
+
# It takes in an AppVersion object and derives a build code from it.
|
6
|
+
class DerivedBuildCodeFormatter
|
7
|
+
# Calculate the next derived build code.
|
8
|
+
#
|
9
|
+
# This method derives a new build code from the given AppVersion object by concatenating the digit 1,
|
10
|
+
# the major version, the minor version, the patch version, and the build number.
|
11
|
+
#
|
12
|
+
# @param [AppVersion] version The AppVersion object to derive the next build code from.
|
13
|
+
#
|
14
|
+
# @param [BuildCode] build_code A BuildCode object. This parameter is ignored but is included
|
15
|
+
# to have a consistent signature with other build code formatters.
|
16
|
+
#
|
17
|
+
# @return [String] The formatted build code string.
|
18
|
+
#
|
19
|
+
def build_code(build_code = nil, version:)
|
20
|
+
format(
|
21
|
+
# 1 is appended to the beginning of the string in case there needs to be additional platforms or
|
22
|
+
# extensions that could then use a different digit prefix such as 2, etc.
|
23
|
+
'1%<major>.2i%<minor>.2i%<patch>.2i%<build_number>.2i',
|
24
|
+
major: version.major,
|
25
|
+
minor: version.minor,
|
26
|
+
patch: version.patch,
|
27
|
+
build_number: version.build_number
|
28
|
+
)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/four_part_build_code_formatter.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative '../formatters/four_part_version_formatter'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `FourPartBuildCodeFormatter` is a specialized build code formatter for apps that use
|
7
|
+
# build codes in the format of `major.minor.patch.build_number`.
|
8
|
+
class FourPartBuildCodeFormatter
|
9
|
+
# @param [AppVersion] version The AppVersion object to format
|
10
|
+
#
|
11
|
+
# @param [BuildCode] build_code A BuildCode object. This parameter is ignored but is included
|
12
|
+
# to have a consistent signature with other build code formatters.
|
13
|
+
#
|
14
|
+
# @return [String] The formatted build code string.
|
15
|
+
#
|
16
|
+
def build_code(build_code = nil, version:)
|
17
|
+
FourPartVersionFormatter.new.to_s(version)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/four_part_version_formatter.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative 'abstract_version_formatter'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `FourPartVersionFormatter` class extends the `VersionFormatter` class. It is a specialized version formatter for
|
7
|
+
# apps that use versions in the format of `1.2.3.4`.
|
8
|
+
class FourPartVersionFormatter < AbstractVersionFormatter
|
9
|
+
# Parse the version string into an AppVersion instance
|
10
|
+
#
|
11
|
+
# @param [String] version The version string to parse
|
12
|
+
#
|
13
|
+
# @return [AppVersion] The parsed version
|
14
|
+
#
|
15
|
+
def parse(version)
|
16
|
+
# Split the version string into its components
|
17
|
+
components = version.split('.').map(&:to_i)
|
18
|
+
|
19
|
+
# Create a new AppVersion instance from the version string components
|
20
|
+
Fastlane::Models::AppVersion.new(*components)
|
21
|
+
end
|
22
|
+
|
23
|
+
# Return the formatted version string
|
24
|
+
#
|
25
|
+
# @param [AppVersion] version The version object to format
|
26
|
+
#
|
27
|
+
# @return [String] The formatted version string
|
28
|
+
#
|
29
|
+
def to_s(version)
|
30
|
+
"#{version.major}.#{version.minor}.#{version.patch}.#{version.build_number}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/rc_notation_version_formatter.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require_relative 'abstract_version_formatter'
|
2
|
+
|
3
|
+
module Fastlane
|
4
|
+
module Wpmreleasetoolkit
|
5
|
+
module Versioning
|
6
|
+
# The `RCNotationVersionFormatter` class extends the `VersionFormatter` class. It is a specialized version
|
7
|
+
# formatter for apps that may use versions in the format of `1.2.3-rc-4`.
|
8
|
+
class RCNotationVersionFormatter < AbstractVersionFormatter
|
9
|
+
# The string identifier used for beta versions in Android.
|
10
|
+
RC_SUFFIX = 'rc'.freeze
|
11
|
+
|
12
|
+
# Parse the version string into an AppVersion instance
|
13
|
+
#
|
14
|
+
# @param [String] version_name The version string to parse
|
15
|
+
#
|
16
|
+
# @return [AppVersion] The parsed version
|
17
|
+
#
|
18
|
+
def parse(version_name)
|
19
|
+
# Set the build number to 0 by default so that it will be set correctly for non-beta version numbers
|
20
|
+
build_number = 0
|
21
|
+
|
22
|
+
if version_name.include?(RC_SUFFIX)
|
23
|
+
# Extract the build number from the version name
|
24
|
+
build_number = version_name.split('-')[2].to_i
|
25
|
+
# Extract the version name without the build number and drop the RC suffix
|
26
|
+
version_name = version_name.split(RC_SUFFIX)[0]
|
27
|
+
end
|
28
|
+
|
29
|
+
# Split the version name into its components
|
30
|
+
version_number_parts = version_name.split('.').map(&:to_i)
|
31
|
+
# Fill the array with 0 if needed to ensure array has at least 3 components
|
32
|
+
version_number_parts.fill(0, version_number_parts.length...3)
|
33
|
+
|
34
|
+
# Map version_number_parts to AppVersion model
|
35
|
+
major = version_number_parts[0]
|
36
|
+
minor = version_number_parts[1]
|
37
|
+
patch = version_number_parts[2]
|
38
|
+
|
39
|
+
# Create an AppVersion object
|
40
|
+
Fastlane::Models::AppVersion.new(major, minor, patch, build_number)
|
41
|
+
end
|
42
|
+
|
43
|
+
# Get the formatted beta version of the Android app
|
44
|
+
#
|
45
|
+
# This method constructs a beta version string by combining the release version
|
46
|
+
# with the beta identifier and the build number. It ensures that the build number is
|
47
|
+
# 1 or higher, as beta versions must have a build number greater than or equal to 1.
|
48
|
+
#
|
49
|
+
# @param [AppVersion] version The version object to format
|
50
|
+
#
|
51
|
+
# @return [String] The formatted beta version of the Android app
|
52
|
+
#
|
53
|
+
# @raise [UI::Error] If the build number of the beta version is not 1 or higher
|
54
|
+
#
|
55
|
+
def beta_version(version)
|
56
|
+
# Ensure that the build number is 1 or higher for a beta version
|
57
|
+
UI.user_error!('The build number of a beta version must be 1 or higher') unless version.build_number.positive?
|
58
|
+
|
59
|
+
# Construct and return the formatted beta version string.
|
60
|
+
"#{release_version(version)}-#{RC_SUFFIX}-#{version.build_number}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/fastlane/plugin/wpmreleasetoolkit/versioning/formatters/simple_build_code_formatter.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
module Fastlane
|
2
|
+
module Wpmreleasetoolkit
|
3
|
+
module Versioning
|
4
|
+
# The `IntegerBuildCodeFormatter` is a specialized build code formatter for apps that use simple
|
5
|
+
# integer build codes in the format of `build_number`.
|
6
|
+
class SimpleBuildCodeFormatter
|
7
|
+
# @param version [AppVersion] An AppVersion object. This parameter is ignored but is included
|
8
|
+
# to have a consistent signature with other build code formatters.
|
9
|
+
#
|
10
|
+
# @param [BuildCode] build_code The BuildCode object to format
|
11
|
+
#
|
12
|
+
# @return [String] The formatted build code string.
|
13
|
+
#
|
14
|
+
def build_code(version = nil, build_code:)
|
15
|
+
build_code.to_s
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -4,7 +4,7 @@ module Fastlane
|
|
4
4
|
module Wpmreleasetoolkit
|
5
5
|
# Return all .rb files inside the "actions", "helper" and "models" directories
|
6
6
|
def self.all_classes
|
7
|
-
Dir[File.expand_path('**/{actions,helper,models}/**/*.rb', File.dirname(__FILE__))]
|
7
|
+
Dir[File.expand_path('**/{actions,helper,models,versioning}/**/*.rb', File.dirname(__FILE__))]
|
8
8
|
end
|
9
9
|
end
|
10
10
|
end
|