Architecture
Write quality mobile apps in any architecture
releaseAndBumpPatch: when: manual stage: release script: - fastlane release semverBumpType:patch only: - master
releaseAndBumpMinor: when: manual stage: release script: - fastlane release semverBumpType:minor only: - master
eleaseAndBumpMajor: when: manual stage: release script: - fastlane release semverBumpType:major only: - masterThe 'when: manual' configuration allows us to launch the job with just one click through the GitLab CI interface (image 01). The 'only: master' setting defines that the job will be available when a commit is coming from the master branch, and the 'script: fastlane release ...' setting is responsible for incrementing and distributing the new version to the consumers.
import java.util.regex.Pattern task bumpSemver << { if (type != "major" && type != "minor" && type != "patch") { println "SemVer type param should be passed. (major, minor or patch)" return } def propsFile = file("sdk/build.gradle") def propsText = propsFile.getText() def patternVersionNumber = Pattern.compile(versionPropertyKey + "(\s?)=(\s?)"(\d+)\.(\d+)\.(\d+)"") def matcherVersionNumber = patternVersionNumber.matcher(propsText) matcherVersionNumber.find() def major = Integer.parseInt(matcherVersionNumber.group(3)) def minor = Integer.parseInt(matcherVersionNumber.group(4)) def patch = Integer.parseInt(matcherVersionNumber.group(5)) println "VERSION=" + major + "." + minor + "." + patch switch (type) { case "major": major++ minor = 0 patch = 0 break case "minor": minor++ patch = 0 break case "patch": patch++ break default: println "SemVer type should be passed: major, minor or patch" break } propsText = matcherVersionNumber.replaceAll(versionPropertyKey + " = "" + major + "." + minor + "." + patch + """) propsFile.write(propsText) println "BUMPED VERSION=" + major + "." + minor + "." + patch }
APP_VERSION = "1.0.1" } android { buildToolsVersion APP_VERSION defaultConfig { versionName APP_VERSION } }
lane :release do |options| # Increments the version according the passed type (major, minor or patch) # iOS release increment_version_number(bump_type: options[:semverBumpType]) # Android release sh "../gradlew bumpSemver -Ptype=#{options[:senverBumpType]} -PversionPropertyKey=APP_VERSION" # Gets the version number for possible automations version = get_version_number(xcodeproj: "SDK.xcodeproj") # Other automated operations end
Disclaimer: The statements and opinions expressed in this article are those of the author(s) and do not necessarily reflect the positions of Thoughtworks.