Files
AndroidJava/dash-wallet/fastlane/Fastfile
T
coco 7846a45f2c a
2026-07-03 15:47:27 +08:00

202 lines
5.0 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
# For Google Play
desc "Build and upload for pre-launch report"
lane :publish do |options|
build(options)
upload(options)
end
desc "Upload for pre-launch report"
lane :upload do |options|
filename = "#{ENV['PWD']}/wallet/build/outputs/apk/prod/release/wallet-prod-release.apk"
if !File.exist? "#{filename}"
UI.user_error!("Missing apk. Run 'publish' lane to build and upload")
end
supply(apk: filename, track: 'internal')
end
desc "Promote to production track with 0.2 rollout by default"
lane :promote do |options|
rollout=options[:rollout]
if rollout.nil?
rollout='0.2'
end
versions = google_play_track_version_codes(track: "internal")
version_code = versions[0]
supply(
track: 'internal',
track_promote_to: "production",
rollout: rollout,
version_code: version_code
)
end
desc "Increase rollout"
lane :increase do |options|
rollout=options[:rollout]
if rollout.nil?
UI.user_error!("Rollout must be specified")
end
versions = google_play_track_version_codes(track: "internal")
version_code = versions[0]
supply(
track: 'production',
rollout: rollout,
version_code: version_code
)
end
# For CI
desc "Runs tests"
lane :test do |options|
flavor=options[:flavor].capitalize
type=options[:type].capitalize
gradle(task: "test#{flavor}#{type}UnitTest")
end
desc "Build and distribute with Firebase"
lane :build_distribute do |options|
build(options)
distribute(options)
end
desc "Submit apk to Firebase Distribution"
lane :distribute do |options|
app_id=options[:appid]
group=options[:testgroup]
comment=options[:comment]
firebase_app_distribution(
app: app_id,
service_credentials_file: "#{ENV['PWD']}/.deploy/app-distribution-key.json",
release_notes: comment,
groups: group
)
end
# Common lanes
desc "Build apk"
lane :build do |options|
explore_db(options)
[
"#{ENV['PWD']}/service.properties",
"#{ENV['PWD']}/local.properties",
"#{ENV['PWD']}/wallet/google-services.json",
"#{ENV['PWD']}/wallet/assets/explore/explore.db"
].each do |filename|
if !File.exist? "#{filename}"
UI.user_error!("Missing #{filename}")
end
if File.zero? "#{filename}"
UI.user_error!("File is empty #{filename}")
end
end
if is_ci
flavor=options[:flavor].capitalize
type=options[:type].capitalize
storepass=options[:storepass]
versioncode=options[:versioncode]
gradle(
task: "clean assemble#{flavor}#{type}",
properties: {
"android.injected.signing.store.file" => "#{ENV['PWD']}/.deploy/keystore.jks",
"android.injected.signing.store.password" => storepass,
"android.injected.signing.key.alias" => "dash_wallet",
"android.injected.signing.key.password" => storepass,
"versionCode" => versioncode.to_i,
},
print_command: false
)
else
storepass=options[:storepass]
keypass=options[:keypass]
if storepass.nil? || keypass.nil?
UI.user_error!("Keystore pass or key pass is not specified")
end
gradle(
task: "clean assembleProdRelease",
properties: {
"android.injected.signing.store.file" => "#{ENV['PWD']}/.deploy/dash-wallet.keystore",
"android.injected.signing.store.password" => storepass,
"android.injected.signing.key.alias" => "android-apps",
"android.injected.signing.key.password" => keypass
},
print_command: false
)
end
end
desc "Download explore.db"
lane :explore_db do |options|
assets_path = "#{ENV['PWD']}/wallet/assets/"
target_file_name = "explore/explore.db"
target_file_path = "#{assets_path}#{target_file_name}"
begin
File.delete(target_file_path)
rescue Errno::ENOENT
end
flavor=options[:flavor]
project_id = "dash-wallet-firebase"
key_file = "#{ENV['PWD']}/.deploy/gc-storage-service-account.json"
bucket_name = "dash-wallet-firebase.appspot.com"
file_name = "explore/explore-v4.db"
if flavor == "prod" || flavor.nil?
puts "Downloading the production database"
else
file_name = "explore/explore-v4-testnet.db"
puts "Downloading the test database"
end
require "google/cloud/storage"
# Explicitly use service account credentials by specifying the private key
# file.
storage = Google::Cloud::Storage.new project: project_id, keyfile: key_file
# Make an authenticated API request
storage.buckets.each do |bucket|
puts bucket.name
end
bucket = storage.bucket bucket_name, skip_lookup: true
file = bucket.file file_name
timestamp = file.updated_at.strftime("%Q")
file.download target_file_path
puts "Downloaded #{file.name} to #{target_file_path}"
end
end