123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316 |
- # This is the minimum version number required.
- fastlane_version "2.58.0"
- ## config
- # add following to your shell rc:
- # export FASTLANE_NEXTCLOUD_STORE_FILE=""
- # export FASTLANE_NEXTCLOUD_STORE_PASSWORD=""
- # export FASTLANE_NEXTCLOUD_KEY_ALIAS=""
- # export FASTLANE_NEXTCLOUD_KEY_PASSWORD=""
- # export FASTLANE_NEXTCLOUD_GITHUB_API_TOKEN=""
- # export FASTLANE_NEXTCLOUD_HUAWEI_CLIENT_ID=""
- # export FASTLANE_NEXTCLOUD_HUAWEI_CLIENT_SECRET=""
- # export FASTLANE_NEXTCLOUD_HUAWEI_APP_ID=""
- skip_docs
- ## public lanes
- lane :screenshotsPhone do
- beautifyPhone()
- build_for_screengrab()
- screengrab(
- device_type: "phone",
- app_apk_path: APK_LOCATION,
- tests_apk_path: TEST_APK_LOCATION
- )
- end
- lane :screenshotsTablet do
- beautifyPhone()
- build_for_screengrab()
- screengrab(
- device_type: "sevenInch",
- app_apk_path: APK_LOCATION,
- tests_apk_path: TEST_APK_LOCATION
- )
- end
- desc "Release phase 1: make gplay/generic for RC, then test it"
- lane :RC_releasePhase1 do
- disableLogger()
- makeReleases()
- enableLogger()
- end
- desc "Release phase 2 for RC: checks, tag, upload gplay to playstore with values from build.gradle"
- lane :RC_releasePhase2 do |options|
- info = androidVersion
- checkChangelog(info)
- checkLibrary_RC()
- checkIfScreenshotsExist()
- checkIfAPKexists()
- tag(info)
- uploadToPlaystore_RC(info)
- createGithubRelease_RC(info)
- fdroidMergeRequest_RC(info)
- createChangelogPullRequest_RC(info)
- end
- desc "Release phase 1: make gplay/generic for FINAL, then test it"
- lane :Final_releasePhase1 do
- makeReleases()
- end
- desc "Release phase 2 for FINAL: checks, tag, upload gplay to playstore with values from build.gradle"
- lane :Final_releasePhase2 do |options|
- info = androidVersion
- checkChangelog(info)
- checkLibrary_Final()
- checkIfScreenshotsExist()
- checkIfAPKexists()
- tag(info)
- uploadToPlaystore_Final(info)
- uploadToHuawei_Final(info)
- createGithubRelease_Final(info)
- fdroidMergeRequest_Final(info)
- createChangelogPullRequest_Final(info)
- end
- desc "Makes gplay and generic releases in ../releases/"
- lane :makeReleases do
- sh("mkdir -p ../release")
- sh("rm -rf ../release/*")
- sh("rm -rf ../build")
- SignedRelease(flavor:"Generic")
- sh("mv ../build/outputs/apk/generic/release/*.apk ../release/")
- sh("rename 'generic-release' 'nextcloud' ../release/generic-release*")
- SignedRelease(flavor:"Gplay")
- sh("cp ../build/outputs/apk/gplay/release/*.apk ../release/")
- end
- desc "Create GPlay release"
- lane :createGplayRelease do |options|
- SignedRelease(flavor:"Gplay")
- sh("mv ../build/outputs/apk/gplay/release/*.apk ../release/")
- end
- desc "Create Generic release"
- lane :createGenericRelease do |options|
- SignedRelease(flavor:"Generic")
- sh("mv ../build/outputs/apk/generic/release/*.apk ../release/")
- end
- desc "Create Dev release"
- lane :createDevRelease do |options|
- SignedRelease(flavor:"VersionDev")
- sh("mv ../build/outputs/apk/versionDev/release/*.apk ../release/")
- end
- desc "Beautify phone for screenshots: set time, remove other icons, no charging"
- lane :beautifyPhone do
- sh("adb shell settings put global sysui_demo_allowed 1")
- sh("adb shell am broadcast -a com.android.systemui.demo -e command clock -e hhmm 1200")
- sh("adb shell am broadcast -a com.android.systemui.demo -e command network -e mobile show -e level 4 -e datatype false")
- sh("adb shell am broadcast -a com.android.systemui.demo -e command notifications -e visible false")
- sh("adb shell am broadcast -a com.android.systemui.demo -e command battery -e plugged false -e level 100")
- end
- # to install
- # bundle exec fastlane add_plugin huawei_appgallery_connect
- # bundle install --path build/vendor/bundle
- private_lane :uploadToHuawei_Final do |options|
- huawei_appgallery_connect(
- client_id: ENV["FASTLANE_NEXTCLOUD_HUAWEI_CLIENT_ID"],
- client_secret: ENV["FASTLANE_NEXTCLOUD_HUAWEI_CLIENT_SECRET"],
- app_id: ENV["FASTLANE_NEXTCLOUD_HUAWEI_APP_ID"],
- apk_path: "release/nextcloud-" + options["versionCode"] + ".apk",
- submit_for_review: true,
- )
- end
- ## private lanes
- desc "Build debug and test APK for screenshots"
- private_lane :build_for_screengrab do
- build_android_app(
- task: 'assemble',
- flavor: 'Generic',
- build_type: 'Debug'
- )
- APK_LOCATION = lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].select{ |i| i[/00/] }[0]
- build_android_app(
- task: 'assemble',
- flavor: 'Generic',
- build_type: 'DebugAndroidTest'
- )
- TEST_APK_LOCATION = lane_context[SharedValues::GRADLE_ALL_APK_OUTPUT_PATHS].select{ |i| i[/androidTest/] }[0]
- end
- private_lane :createChangelogPullRequest_RC do |options|
- sh("createChangelogPullRequestRC " + options["tag"] + " \"" + options["versionName"] + "\" " + options["versionCode"] + " \"" + options["branch"] + "\" ")
- end
- private_lane :createChangelogPullRequest_Final do |options|
- sh("createChangelogPullRequestFinal " + options["tag"] + " \"" + options["versionName"] + "\" " + options["versionCode"] + " \"" + options["branch"] + "\" ")
- end
- private_lane :checkIfAPKexists do |options|
- sh("if [ $(/bin/ls -1 ../release | wc -l) -ne 2 ]; then echo 'APKs do not exist ../release/; aborting!' ; exit 1 ;
- fi")
- end
- desc "compute version"
- private_lane :androidVersion do |options|
- File.open("../build.gradle","r") do |f|
- text = f.read
- # everything between Document and Authors
- major = text.match(/def versionMajor = ([0-9]*)$/)
- minor = text.match(/def versionMinor = ([0-9]*)$/)
- patch = text.match(/def versionPatch = ([0-9]*)$/)
- build = text.match(/def versionBuild = ([0-9]*).*$/)
- majorInt = major[1].to_i
- minorInt = minor[1].to_i
- patchInt = patch[1].to_i
- buildInt = build[1].to_i
- versionCode = majorInt * 10000000 + minorInt * 10000 + patchInt * 100 + buildInt
- if buildInt > 89
- name = major[1] + "." + minor[1] + "." + patch[1]
- tag = "stable-" + major[1] + "." + minor[1] + "." + patch[1]
- branch = "stable-" + major[1] + "." + minor[1]
- elsif buildInt > 50
- name = major[1] + "." + minor[1] + "." + patch[1] + " RC" + (buildInt - 50).to_s
- tag = "rc-" + major[1] + "." + minor[1] + "." + patch[1] + "-" + format('%02d', (buildInt - 50))
- branch = "stable-" + major[1] + "." + minor[1]
- else
- name = major[1] + "." + minor[1] + "." + patch[1] + " Alpha " + format('%02d', (buildInt + 1))
- tag = "/"
- branch = "stable-" + major[1] + "." + minor[1]
- end
- print "VersionCode: " + versionCode.to_s + "\n"
- print "Name: " + name + "\n"
- print "Tag: " + tag + "\n"
- print "Branch: " + branch + "\n"
- print "\ndisable IPv6 to upload to Gplay!!!\n"
- answer = prompt(text: "is this okay?", boolean: true)
- if !answer
- exit
- end
- { "versionCode" => versionCode.to_s, "versionName" => name, "tag" => tag, "branch" => branch }
- end
- end
- desc "check if library is set correctly"
- private_lane :checkLibrary_RC do
- sh(" if [ $(egrep 'androidLibraryVersion.*master.*' ../build.gradle -c) -eq 1 ] ; then echo 'Library is set to master tag; aborting!' ; exit 1 ; fi")
- end
- desc "check if library is set correctly: must NOT contain master nor rc"
- private_lane :checkLibrary_Final do
- sh(" if [ $(grep 'androidLibraryVersion' ../build.gradle | egrep 'master|rc' -c) -eq 1 ] ; then echo 'Library is still set to rc tag; aborting!' ; exit 1 ; fi")
- end
- desc "check if screenshots exists and exit"
- private_lane :checkIfScreenshotsExist do
- sh(" if [ -e metadata/android/*/images ] ; then echo 'Screenshots in fastlane folder exist; aborting!' ; exit 1 ; fi")
- end
- private_lane :tag do |options|
- add_git_tag(
- tag: options["tag"],
- sign: true
- )
- push_git_tags(
- tag: options["tag"])
- end
- private_lane :disableLogger do
- sh("sed -i s'#<bool name=\"logger_enabled\">false</bool>#<bool name=\"logger_enabled\">true</bool>#' ../src/main/res/values/setup.xml")
- end
- private_lane :enableLogger do
- sh("sed -i s'#<bool name=\"logger_enabled\">true</bool>#<bool name=\"logger_enabled\">false</bool>#' ../src/main/res/values/setup.xml")
- end
- desc "Upload to play store"
- private_lane :uploadToPlaystore_RC do |options|
- upload_to_play_store(
- skip_upload_images: true,
- track: 'beta',
- apk: "release/gplay-release-" + options["versionCode"] + ".apk"
- )
- end
- desc "Upload to play store"
- private_lane :uploadToPlaystore_Final do |options|
- upload_to_play_store(
- skip_upload_images: true,
- apk: "release/gplay-release-" + options["versionCode"] + ".apk"
- )
- end
- private_lane :SignedRelease do |options|
- gradle(
- task: 'assemble',
- flavor: options[:flavor],
- build_type: 'Release',
- print_command: false,
- properties: {
- "android.injected.signing.store.file" => ENV["FASTLANE_NEXTCLOUD_STORE_FILE"],
- "android.injected.signing.store.password" => ENV["FASTLANE_NEXTCLOUD_STORE_PASSWORD"],
- "android.injected.signing.key.alias" => ENV["FASTLANE_NEXTCLOUD_KEY_ALIAS"],
- "android.injected.signing.key.password" => ENV["FASTLANE_NEXTCLOUD_KEY_PASSWORD"],
- }
- )
- end
- private_lane :createGithubRelease_RC do |options|
- set_github_release(
- repository_name: "nextcloud/android",
- api_token: ENV["FASTLANE_NEXTCLOUD_GITHUB_API_TOKEN"],
- name: options["versionName"],
- tag_name: options["tag"],
- is_prerelease: true,
- description: (File.read("metadata/android/en-US/changelogs/" + options["versionCode"] + ".txt") rescue "No changelog provided"),
- upload_assets: [ "release/gplay-release-" + options["versionCode"] + ".apk", "release/nextcloud-" +
- options["versionCode"] + ".apk" ]
- )
- end
- private_lane :createGithubRelease_Final do |options|
- set_github_release(
- repository_name: "nextcloud/android",
- api_token: ENV["FASTLANE_NEXTCLOUD_GITHUB_API_TOKEN"],
- name: options["versionName"],
- tag_name: options["tag"],
- description: (File.read("metadata/android/en-US/changelogs/" + options["versionCode"] + ".txt") rescue "No changelog provided"),
- upload_assets: [ "release/gplay-release-" + options["versionCode"] + ".apk", "release/nextcloud-" +
- options["versionCode"] + ".apk" ]
- )
- end
- private_lane :fdroidMergeRequest_RC do |options|
- sh("fdroidMergeRequestRC " + options["tag"] + " \"" + options["versionName"] + "\" " + options["versionCode"])
- end
- private_lane :fdroidMergeRequest_Final do |options|
- sh("fdroidMergeRequestFinal " + options["tag"] + " \"" + options["versionName"] + "\" " + options["versionCode"])
- end
- private_lane :checkChangelog do |options|
- sh(" if [ ! -e metadata/android/en-US/changelogs/" + options["versionCode"] + ".txt ] ; then echo 'Changelog fastlane/metadata/android/en-US/changelogs/" + options["versionCode"] + ".txt does not exist' ; exit 1 ; fi")
- sh(" if [ $(wc -m metadata/android/en-US/changelogs/" + options["versionCode"] + ".txt | cut -d' ' -f1) -ge 500 ] ; then echo 'Changlog more than 500 chars' ; exit 1 ; fi")
- end
|