Files
Meshtastic-Android/fastlane/Fastfile

133 lines
3.8 KiB
Ruby

# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
# https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
# https://docs.fastlane.tools/plugins/available-plugins
#
# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane
default_platform(:android)
platform :android do
desc "Runs all the tests"
lane :test do
gradle(task: "test")
end
desc "Deploy a new version to the internal track on Google Play"
lane :internal do
begin
aab_path = build_google_release
upload_to_play_store(
track: 'internal',
aab: aab_path,
release_status: 'completed',
skip_upload_apk: true,
skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
rescue => exception
if exception.message.include?("Google Api Error: forbidden: A release with version code") && exception.message.include?("already exists for this track")
UI.message("This version code is already on the internal track. No action needed.")
else
raise exception
end
end
end
desc "Promote from internal track to the closed track on Google Play"
lane :closed do
upload_to_play_store(
track: 'internal',
track_promote_to: 'NewAlpha',
version_codes: [ENV["VERSION_CODE"].to_i],
release_status: 'completed',
skip_upload_apk: true,
skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
desc "Promote from internal track to the open track on Google Play"
lane :open do
upload_to_play_store(
track: 'internal',
track_promote_to: 'beta',
version_codes: [ENV["VERSION_CODE"].to_i],
release_status: 'draft',
skip_upload_apk: true,
skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
desc "Promote from internal track to the production track on Google Play"
lane :production do
upload_to_play_store(
track: 'internal',
track_promote_to: 'production',
version_codes: [ENV["VERSION_CODE"].to_i],
release_status: 'draft',
skip_upload_apk: true,
skip_upload_metadata: true,
skip_upload_changelogs: true,
skip_upload_images: true,
skip_upload_screenshots: true,
)
end
desc "Build the F-Droid release"
lane :fdroid_build do
gradle(
task: "clean assembleFdroidRelease",
properties: {
"android.injected.version.name" => ENV['VERSION_NAME'],
"android.injected.version.code" => ENV['VERSION_CODE']
}
)
end
desc "Get the highest version code from all Google Play tracks"
lane :get_highest_version_code do
require 'set'
all_codes = Set.new
tracks = ['internal', 'alpha', 'beta', 'production']
tracks.each do |track|
begin
codes = google_play_track_version_codes(track: track)
all_codes.merge(codes.map(&:to_i)) if codes
rescue => e
UI.message("Could not fetch version codes for track #{track}: #{e.message}")
end
end
highest = all_codes.max || 0
UI.message("Highest version code on Google Play: #{highest}")
File.write('highest_version_code.txt', highest.to_s)
end
private_lane :build_google_release do
gradle(
task: "clean bundleGoogleRelease assembleGoogleRelease",
print_command: false,
properties: {
"android.injected.version.name" => ENV['VERSION_NAME'],
"android.injected.version.code" => ENV['VERSION_CODE']
}
)
lane_context[SharedValues::GRADLE_AAB_OUTPUT_PATH]
end
end