@@ -5,6 +5,10 @@ MAJOR_MULTIPLIER = 10000000
55MINOR_MULTIPLIER = 10000
66PATCH_MULTIPLIER = 100
77
8+ TYPE_ALPHA = "alpha"
9+ TYPE_RC = "rc"
10+ TYPE_FINAL = "final"
11+
812platform :android do
913 desc "Print version info"
1014 lane :printVersionInfo do
@@ -18,7 +22,7 @@ platform :android do
1822 print "Build: #{versionComponents["build"]}\n"
1923 end
2024
21- # Usage: fastlane incrementVersion [ type:major|minor|patch|rc|final]
25+ # Usage: fastlane incrementVersion type:( major|minor|patch|rc|final)
2226 # For major, minor, and patch: will increment that version number by 1 and set the smaller ones to 0
2327 # For rc, final: will set build number to first rc/first final or increment it by 1
2428 desc "Increment version code and version name"
@@ -29,9 +33,9 @@ platform :android do
2933 versionNameGenerated = generateVersionName(newVersionComponents)
3034 versionCodeGenerated = generateVersionCode(newVersionComponents)
3135
32- print "Version code: #{versionInfo["versionCode"]} -> #{versionCodeGenerated}\n"
33- print "Version name: #{versionInfo["versionName"]} -> #{versionNameGenerated}\n "
34- promptYesNo( )
36+ promptYesNo(text: "Version code: #{versionInfo["versionCode"]} -> #{versionCodeGenerated}\n" +
37+ "Version name: #{versionInfo["versionName"]} -> #{versionNameGenerated}"
38+ )
3539 writeVersions(versionCode: versionCodeGenerated, versionName: versionNameGenerated)
3640 end
3741
@@ -44,12 +48,30 @@ platform :android do
4448 minor = (versionCode / MINOR_MULTIPLIER) % 100
4549 major = (versionCode / MAJOR_MULTIPLIER) % 100
4650
47- { "major" => major, "minor" => minor, "patch" => patch, "build" => build }
51+ type = getVersionType(build: build)
52+
53+
54+ { "major" => major, "minor" => minor, "patch" => patch, "build" => build, "type" => type }
4855 end
4956
57+ desc "Get version type from build number"
58+ private_lane :getVersionType do |options|
59+ build = options[:build]
60+ if build < BUILD_NUMBER_RC_START
61+ type = TYPE_ALPHA
62+ elsif build < BUILD_NUMBER_FINAL_START
63+ type = TYPE_RC
64+ else
65+ type = TYPE_FINAL
66+ end
67+ type
68+ end
69+
70+
71+
5072 desc "Generate versionCode from version components"
5173 private_lane :generateVersionCode do |versionComponents|
52- print "Generating version code from #{versionComponents}\n "
74+ puts "Generating version code from #{versionComponents}"
5375 major = versionComponents["major"]
5476 minor = versionComponents["minor"]
5577 patch = versionComponents["patch"]
@@ -62,12 +84,13 @@ platform :android do
6284 private_lane :generateVersionName do |versionComponents|
6385 suffix = ""
6486 buildNumber = versionComponents["build"]
87+ puts "Generating version name from #{versionComponents}\n"
6588 case
66- when buildNumber >= BUILD_NUMBER_RC_START && buildNumber < BUILD_NUMBER_FINAL_START
89+ when versionComponents["type"] == TYPE_RC
6790 rcNumber = (buildNumber - BUILD_NUMBER_RC_START) + 1
68- suffix = " RC #{rcNumber}"
69- when buildNumber < BUILD_NUMBER_RC_START
70- suffix = " Alpha #{buildNumber + 1}"
91+ suffix = " RC#{rcNumber}"
92+ when versionComponents["type"] == TYPE_ALPHA
93+ suffix = " Alpha#{buildNumber + 1}"
7194 end
7295 "#{versionComponents["major"]}.#{versionComponents["minor"]}.#{versionComponents["patch"]}#{suffix}"
7396 end
@@ -111,28 +134,62 @@ platform :android do
111134 versionComponents["patch"] = versionComponents["patch"] + 1
112135 versionComponents["build"] = 0
113136 when "rc"
114- if versionComponents["build "] < BUILD_NUMBER_RC_START || versionComponents["build"] >= BUILD_NUMBER_FINAL_START
137+ if versionComponents["type "] != TYPE_RC
115138 versionComponents["build"] = BUILD_NUMBER_RC_START
116139 else
117140 versionComponents["build"] = versionComponents["build"] + 1
118141 end
119142 when "final"
120- if versionComponents["build "] < BUILD_NUMBER_FINAL_START
143+ if versionComponents["type "] != TYPE_FINAL
121144 versionComponents["build"] = BUILD_NUMBER_FINAL_START
122145 else
123146 versionComponents["build"] = versionComponents["build"] + 1
124147 end
125148 else
126- print "Unknown or missing version type: #{options[:type]}\n"
127- exit
149+ UI.user_error!("Unknown or missing version increment type #{options[:type]}. Usage: incrementVersion type:(major|minor|patch|rc|final)")
128150 end
151+ versionComponents["type"] = getVersionType(build: versionComponents["build"])
129152 versionComponents
130153 end
131154
132- private_lane :promptYesNo do
133- answer = prompt(text: "is this okay?", boolean: true)
134- if !answer
135- exit
155+ desc "Get tag name from version components"
156+ private_lane :getTagName do |versionComponents|
157+ if versionComponents["type"] == TYPE_FINAL
158+ tag = "#{versionComponents["major"]}.#{versionComponents["minor"]}.#{versionComponents["patch"]}"
159+ elsif versionComponents["type"] == TYPE_RC
160+ rcNumber = (versionComponents["build"] - BUILD_NUMBER_RC_START) + 1
161+ rcNumberPadded = "%02d" % rcNumber
162+ tag = "rc-#{versionComponents["major"]}.#{versionComponents["minor"]}.#{versionComponents["patch"]}-#{rcNumberPadded}"
163+ else
164+ UI.user_error!("Build number cannot be tagged: #{versionComponents["build"]}")
136165 end
137166 end
167+
168+ desc "Check if version is releasable"
169+ private_lane :checkReleasable do |versionComponents|
170+ if versionComponents["type"] != TYPE_FINAL && versionComponents["type"] != TYPE_RC
171+ UI.user_error!("Version is not releasable: #{versionComponents["type"]}")
172+ end
173+ end
174+
175+ desc "Get play store track from version type"
176+ private_lane :getPlayStoreTrack do |versionComponents|
177+ case versionComponents["type"]
178+ when TYPE_RC
179+ track = "beta"
180+ when TYPE_FINAL
181+ track = "production"
182+ else
183+ UI.user_error!("Version is not releasable: #{versionComponents["type"]}")
184+ end
185+ end
186+
187+ end
188+
189+ private_lane :promptYesNo do |options|
190+ puts "\n" + options[:text]
191+ answer = prompt(text: "is this okay?", boolean: true)
192+ if !answer
193+ UI.user_error!("Aborting")
194+ end
138195end
0 commit comments