mirror of
https://github.com/openMF/mobile-wallet.git
synced 2026-02-06 13:36:53 +00:00
chore(fastlane): Refactor Fastlane configuration and workflows (#1846)
This commit is contained in:
parent
fb7a12e807
commit
46b2e129d2
@ -71,7 +71,7 @@ on:
|
||||
|
||||
target_branch:
|
||||
type: string
|
||||
default: 'dev'
|
||||
default: 'development'
|
||||
description: 'Target branch for release'
|
||||
|
||||
build_ios:
|
||||
@ -104,7 +104,7 @@ jobs:
|
||||
ios_package_name: 'mifospay-ios' # <-- Change this to your ios package name
|
||||
desktop_package_name: 'mifospay-desktop' # <-- Change this to your desktop package name
|
||||
web_package_name: 'mifospay-web' # <-- Change this to your web package name
|
||||
tester_groups: 'mobile-wallet-testing' # <-- Change this to your Firebase tester group
|
||||
tester_groups: 'mifos-mobile-testers' # <-- Change this to your Firebase tester group
|
||||
build_ios: ${{ inputs.build_ios }}
|
||||
publish_ios: ${{ inputs.publish_ios }}
|
||||
secrets:
|
||||
|
||||
2
.github/workflows/tag-weekly-release.yml
vendored
2
.github/workflows/tag-weekly-release.yml
vendored
@ -107,7 +107,7 @@ jobs:
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
workflow_id: 'multi-platform-build-and-publish.yml',
|
||||
ref: 'dev',
|
||||
ref: 'development',
|
||||
inputs: {
|
||||
"release_type": "beta",
|
||||
},
|
||||
|
||||
43
.github/workflows/upload-demo-app-on-firebase.yaml
vendored
Normal file
43
.github/workflows/upload-demo-app-on-firebase.yaml
vendored
Normal file
@ -0,0 +1,43 @@
|
||||
name: Upload Demo App on Firebase
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tester_groups:
|
||||
description: 'Comma-separated list of tester groups'
|
||||
required: true
|
||||
default: 'mifos-mobile-testers'
|
||||
type: string
|
||||
|
||||
pull_request:
|
||||
types: [ labeled ]
|
||||
branches:
|
||||
- 'development'
|
||||
- 'master'
|
||||
|
||||
concurrency:
|
||||
group: firebase-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
upload_demo_app_on_firebase:
|
||||
name: Upload Demo App on Firebase
|
||||
runs-on: macos-latest
|
||||
if: github.event.label.name == 'firebase-test-on' || github.event_name == 'workflow_dispatch'
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: ☁️ Deploy Android App on Firebase
|
||||
uses: openMF/kmp-android-firebase-publish-action@v1.0.0
|
||||
with:
|
||||
release_type: 'demo'
|
||||
android_package_name: 'mifospay-android'
|
||||
keystore_file: ${{ secrets.ORIGINAL_KEYSTORE_FILE }}
|
||||
keystore_password: ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }}
|
||||
keystore_alias: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS }}
|
||||
keystore_alias_password: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS_PASSWORD }}
|
||||
google_services: ${{ secrets.GOOGLESERVICES }}
|
||||
firebase_creds: ${{ secrets.FIREBASECREDS }}
|
||||
tester_groups: ${{ inputs.tester_groups }}
|
||||
8
Gemfile
8
Gemfile
@ -1,8 +1,12 @@
|
||||
source "https://rubygems.org"
|
||||
|
||||
ruby File.read(".ruby-version").strip
|
||||
begin
|
||||
ruby File.read(".ruby-version").strip
|
||||
rescue Errno::ENOENT
|
||||
ruby "3.3.5" # Default version if .ruby-version doesn't exist
|
||||
end
|
||||
|
||||
gem "fastlane"
|
||||
|
||||
plugins_path = File.join(File.dirname(__FILE__), 'fastlane', 'Pluginfile')
|
||||
plugins_path = File.join(File.dirname(__FILE__), "fastlane", "Pluginfile")
|
||||
eval_gemfile(plugins_path) if File.exist?(plugins_path)
|
||||
24
Gemfile.lock
24
Gemfile.lock
@ -10,8 +10,8 @@ GEM
|
||||
artifactory (3.0.17)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.3.0)
|
||||
aws-partitions (1.1023.0)
|
||||
aws-sdk-core (3.214.0)
|
||||
aws-partitions (1.1035.0)
|
||||
aws-sdk-core (3.215.0)
|
||||
aws-eventstream (~> 1, >= 1.3.0)
|
||||
aws-partitions (~> 1, >= 1.992.0)
|
||||
aws-sigv4 (~> 1.9)
|
||||
@ -19,11 +19,11 @@ GEM
|
||||
aws-sdk-kms (1.96.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sdk-s3 (1.176.1)
|
||||
aws-sdk-s3 (1.177.0)
|
||||
aws-sdk-core (~> 3, >= 3.210.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.5)
|
||||
aws-sigv4 (1.10.1)
|
||||
aws-sigv4 (1.11.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
babosa (1.0.4)
|
||||
base64 (0.2.0)
|
||||
@ -58,8 +58,8 @@ GEM
|
||||
faraday-em_synchrony (1.0.0)
|
||||
faraday-excon (1.1.0)
|
||||
faraday-httpclient (1.0.1)
|
||||
faraday-multipart (1.0.4)
|
||||
multipart-post (~> 2)
|
||||
faraday-multipart (1.1.0)
|
||||
multipart-post (~> 2.0)
|
||||
faraday-net_http (1.0.2)
|
||||
faraday-net_http_persistent (1.2.0)
|
||||
faraday-patron (1.0.0)
|
||||
@ -67,7 +67,7 @@ GEM
|
||||
faraday-retry (1.0.3)
|
||||
faraday_middleware (1.2.1)
|
||||
faraday (~> 1.0)
|
||||
fastimage (2.3.1)
|
||||
fastimage (2.4.0)
|
||||
fastlane (2.226.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.8, < 3.0.0)
|
||||
@ -110,7 +110,7 @@ GEM
|
||||
xcodeproj (>= 1.13.0, < 2.0.0)
|
||||
xcpretty (~> 0.4.0)
|
||||
xcpretty-travis-formatter (>= 0.0.3, < 2.0.0)
|
||||
fastlane-plugin-firebase_app_distribution (0.9.1)
|
||||
fastlane-plugin-firebase_app_distribution (0.10.0)
|
||||
google-apis-firebaseappdistribution_v1 (~> 0.3.0)
|
||||
google-apis-firebaseappdistribution_v1alpha (~> 0.2.0)
|
||||
fastlane-plugin-increment_build_number (0.0.4)
|
||||
@ -162,8 +162,8 @@ GEM
|
||||
domain_name (~> 0.5)
|
||||
httpclient (2.8.3)
|
||||
jmespath (1.6.2)
|
||||
json (2.9.0)
|
||||
jwt (2.9.3)
|
||||
json (2.9.1)
|
||||
jwt (2.10.1)
|
||||
base64
|
||||
mini_magick (4.13.2)
|
||||
mini_mime (1.1.5)
|
||||
@ -174,7 +174,7 @@ GEM
|
||||
nkf (0.2.0)
|
||||
optparse (0.6.0)
|
||||
os (1.1.4)
|
||||
plist (3.7.1)
|
||||
plist (3.7.2)
|
||||
public_suffix (6.0.1)
|
||||
rake (13.2.1)
|
||||
representable (3.2.0)
|
||||
@ -185,7 +185,7 @@ GEM
|
||||
rexml (3.4.0)
|
||||
rouge (3.28.0)
|
||||
ruby2_keywords (0.0.5)
|
||||
rubyzip (2.3.2)
|
||||
rubyzip (2.4.1)
|
||||
security (0.1.5)
|
||||
signet (0.19.0)
|
||||
addressable (~> 2.8)
|
||||
|
||||
23
fastlane-config/android_config.rb
Normal file
23
fastlane-config/android_config.rb
Normal file
@ -0,0 +1,23 @@
|
||||
module FastlaneConfig
|
||||
module AndroidConfig
|
||||
STORE_CONFIG = {
|
||||
default_store_file: "release_keystore.keystore",
|
||||
default_store_password: "Mifospay",
|
||||
default_key_alias: "key0",
|
||||
default_key_password: "Mifos@123"
|
||||
}
|
||||
|
||||
FIREBASE_CONFIG = {
|
||||
firebase_prod_app_id: "1:64530857057:android:f8d67b786db1b844",
|
||||
firebase_demo_app_id: "1:728434912738:android:48ccd9153349f31e1a1dbb",
|
||||
firebase_service_creds_file: "secrets/firebaseAppDistributionServiceCredentialsFile.json",
|
||||
firebase_groups: "mifos-mobile-testers"
|
||||
}
|
||||
|
||||
BUILD_PATHS = {
|
||||
prod_apk_path: "mifospay-android/build/outputs/apk/prod/release/mifospay-android-prod-release.apk",
|
||||
demo_apk_path: "mifospay-android/build/outputs/apk/demo/release/mifospay-android-demo-release.apk",
|
||||
prod_aab_path: "mifospay-android/build/outputs/bundle/prodRelease/mifospay-android-prod-release.aab"
|
||||
}
|
||||
end
|
||||
end
|
||||
15
fastlane-config/ios_config.rb
Normal file
15
fastlane-config/ios_config.rb
Normal file
@ -0,0 +1,15 @@
|
||||
module FastlaneConfig
|
||||
module IosConfig
|
||||
FIREBASE_CONFIG = {
|
||||
firebase_app_id: "1:728434912738:ios:86a7badfaed88b841a1dbb",
|
||||
firebase_service_creds_file: "secrets/firebaseAppDistributionServiceCredentialsFile.json",
|
||||
firebase_groups: "mifos-mobile-testers"
|
||||
}
|
||||
|
||||
BUILD_CONFIG = {
|
||||
project_path: "mifospay-ios/iosApp.xcodeproj",
|
||||
scheme: "iosApp",
|
||||
output_directory: "mifospay-ios/build"
|
||||
}
|
||||
end
|
||||
end
|
||||
@ -1,3 +1,9 @@
|
||||
project_dir = File.expand_path('..', Dir.pwd)
|
||||
|
||||
require_relative File.join(project_dir, 'fastlane-config', 'android_config')
|
||||
require_relative File.join(project_dir, 'fastlane-config', 'ios_config')
|
||||
require_relative './config/config_helpers'
|
||||
|
||||
default_platform(:android)
|
||||
|
||||
platform :android do
|
||||
@ -10,10 +16,7 @@ platform :android do
|
||||
|
||||
desc "Assemble Release APK"
|
||||
lane :assembleReleaseApks do |options|
|
||||
options[:storeFile] ||= "release_keystore.keystore"
|
||||
options[:storePassword] ||= "Mifospay"
|
||||
options[:keyAlias] ||= "key0"
|
||||
options[:keyPassword] ||= "Mifos@123"
|
||||
signing_config = FastlaneConfig.get_android_signing_config(options)
|
||||
|
||||
# Generate version
|
||||
generateVersion = generateVersion()
|
||||
@ -21,73 +24,120 @@ platform :android do
|
||||
buildAndSignApp(
|
||||
taskName: "assemble",
|
||||
buildType: "Release",
|
||||
storeFile: options[:storeFile],
|
||||
storePassword: options[:storePassword],
|
||||
keyAlias: options[:keyAlias],
|
||||
keyPassword: options[:keyPassword],
|
||||
**signing_config
|
||||
)
|
||||
end
|
||||
|
||||
desc "Bundle Play Store release"
|
||||
lane :bundlePlayStoreRelease do |options|
|
||||
options[:storeFile] ||= "release_keystore.keystore"
|
||||
options[:storePassword] ||= "Mifospay"
|
||||
options[:keyAlias] ||= "key0"
|
||||
options[:keyPassword] ||= "Mifos@123"
|
||||
desc "Bundle Release APK"
|
||||
lane :bundleReleaseApks do |options|
|
||||
signing_config = FastlaneConfig.get_android_signing_config(options)
|
||||
|
||||
# Generate version
|
||||
generateVersion = generateVersion()
|
||||
|
||||
# Generate Release Note
|
||||
releaseNotes = generateReleaseNotes()
|
||||
|
||||
# Write the generated release notes to default.txt
|
||||
buildConfigPath = "metadata/android/en-GB/changelogs/default.txt"
|
||||
File.write(buildConfigPath, releaseNotes)
|
||||
|
||||
buildAndSignApp(
|
||||
taskName: "bundle",
|
||||
buildType: "Release",
|
||||
storeFile: options[:storeFile],
|
||||
storePassword: options[:storePassword],
|
||||
keyAlias: options[:keyAlias],
|
||||
keyPassword: options[:keyPassword],
|
||||
**signing_config
|
||||
)
|
||||
end
|
||||
|
||||
desc "Publish Release Play Store artifacts to Firebase App Distribution"
|
||||
lane :deploy_on_firebase do |options|
|
||||
options[:apkFile] ||= "mifospay-android/build/outputs/apk/prod/release/mifospay-android-prod-release.apk"
|
||||
options[:serviceCredsFile] ||= "secrets/firebaseAppDistributionServiceCredentialsFile.json"
|
||||
options[:groups] ||= "mifos-wallet-testers"
|
||||
desc "Publish Release Artifacts to Firebase App Distribution"
|
||||
lane :deployReleaseApkOnFirebase do |options|
|
||||
signing_config = FastlaneConfig.get_android_signing_config(options)
|
||||
firebase_config = FastlaneConfig.get_firebase_config(:android, :prod)
|
||||
build_paths = FastlaneConfig::AndroidConfig::BUILD_PATHS
|
||||
|
||||
# Generate version
|
||||
generateVersion = generateVersion(
|
||||
platform: "firebase",
|
||||
**firebase_config
|
||||
)
|
||||
|
||||
# Generate Release Note
|
||||
releaseNotes = generateReleaseNotes()
|
||||
releaseNotes = generateReleaseNote()
|
||||
|
||||
buildAndSignApp(
|
||||
taskName: "assembleProd",
|
||||
buildType: "Release",
|
||||
**signing_config
|
||||
)
|
||||
|
||||
firebase_app_distribution(
|
||||
app: "1:64530857057:android:f8d67b786db1b844",
|
||||
app: firebase_config[:appId],
|
||||
android_artifact_type: "APK",
|
||||
android_artifact_path: options[:apkFile],
|
||||
service_credentials_file: options[:serviceCredsFile],
|
||||
groups: options[:groups],
|
||||
release_notes: "#{releaseNotes}",
|
||||
android_artifact_path: build_paths[:prod_apk_path],
|
||||
service_credentials_file: firebase_config[:serviceCredsFile],
|
||||
groups: firebase_config[:groups],
|
||||
release_notes: releaseNotes
|
||||
)
|
||||
end
|
||||
|
||||
desc "Publish Demo Artifacts to Firebase App Distribution"
|
||||
lane :deployDemoApkOnFirebase do |options|
|
||||
signing_config = FastlaneConfig.get_android_signing_config(options)
|
||||
firebase_config = FastlaneConfig.get_firebase_config(:android, :demo)
|
||||
build_paths = FastlaneConfig::AndroidConfig::BUILD_PATHS
|
||||
|
||||
# Generate version
|
||||
generateVersion = generateVersion(
|
||||
platform: "firebase",
|
||||
**firebase_config
|
||||
)
|
||||
|
||||
# Generate Release Note
|
||||
releaseNotes = generateReleaseNote()
|
||||
|
||||
buildAndSignApp(
|
||||
taskName: "assembleDemo",
|
||||
buildType: "Release",
|
||||
**signing_config
|
||||
)
|
||||
|
||||
firebase_app_distribution(
|
||||
app: firebase_config[:appId],
|
||||
android_artifact_type: "APK",
|
||||
android_artifact_path: build_paths[:demo_apk_path],
|
||||
service_credentials_file: firebase_config[:serviceCredsFile],
|
||||
groups: firebase_config[:groups],
|
||||
release_notes: releaseNotes
|
||||
)
|
||||
end
|
||||
|
||||
desc "Deploy internal tracks to Google Play"
|
||||
lane :deploy_internal do |options|
|
||||
options[:aabFile] ||= "mifospay-android/build/outputs/bundle/prodRelease/mifospay-android-prod-release.aab"
|
||||
lane :deployInternal do |options|
|
||||
signing_config = FastlaneConfig.get_android_signing_config(options)
|
||||
build_paths = FastlaneConfig::AndroidConfig::BUILD_PATHS
|
||||
|
||||
# Generate version
|
||||
generateVersion = generateVersion(platform: "playstore")
|
||||
|
||||
# Generate Release Note
|
||||
releaseNotes = generateReleaseNote()
|
||||
|
||||
# Write the generated release notes to default.txt
|
||||
buildConfigPath = "metadata/android/en-GB/changelogs/default.txt"
|
||||
FileUtils.mkdir_p(File.dirname(buildConfigPath))
|
||||
File.write(buildConfigPath, releaseNotes)
|
||||
|
||||
buildAndSignApp(
|
||||
taskName: "bundleProd",
|
||||
buildType: "Release",
|
||||
**signing_config
|
||||
)
|
||||
|
||||
upload_to_play_store(
|
||||
track: 'internal',
|
||||
aab: options[:aabFile],
|
||||
aab: build_paths[:prod_aab_path],
|
||||
skip_upload_metadata: true,
|
||||
skip_upload_images: true,
|
||||
skip_upload_screenshots: true,
|
||||
skip_upload_apk: true,
|
||||
)
|
||||
end
|
||||
|
||||
desc "Promote internal tracks to beta on Google Play"
|
||||
lane :promote_to_beta do
|
||||
lane :promoteToBeta do
|
||||
upload_to_play_store(
|
||||
track: 'internal',
|
||||
track_promote_to: 'beta',
|
||||
@ -138,31 +188,135 @@ platform :android do
|
||||
)
|
||||
end
|
||||
|
||||
desc "Generate Version"
|
||||
lane :generateVersion do
|
||||
# Generate version file
|
||||
desc "Generate Version for different platforms"
|
||||
lane :generateVersion do |options|
|
||||
platform = (options[:platform] || 'git').downcase
|
||||
|
||||
# Generate version file for all platforms
|
||||
gradle(tasks: ["versionFile"])
|
||||
|
||||
# Set version from file
|
||||
ENV['VERSION'] = File.read("../version.txt").strip
|
||||
# Set version from file with fallback
|
||||
version = File.read("../version.txt").strip rescue "1.0.0"
|
||||
ENV['VERSION'] = version
|
||||
|
||||
# Calculate and set version code
|
||||
commit_count = `git rev-list --count HEAD`.to_i
|
||||
tag_count = `git tag | grep -v beta | wc -l`.to_i
|
||||
ENV['VERSION_CODE'] = ((commit_count + tag_count) << 1).to_s
|
||||
case platform
|
||||
when 'playstore'
|
||||
prod_codes = google_play_track_version_codes(track: 'production')
|
||||
beta_codes = google_play_track_version_codes(track: 'beta')
|
||||
latest_code = (prod_codes + beta_codes).max || 1
|
||||
ENV['VERSION_CODE'] = (latest_code + 1).to_s
|
||||
|
||||
when 'firebase'
|
||||
begin
|
||||
latest_release = firebase_app_distribution_get_latest_release(
|
||||
app: options[:appId],
|
||||
service_credentials_file: options[:serviceCredsFile]
|
||||
)
|
||||
latest_build_version = latest_release ? latest_release[:buildVersion].to_i : 0
|
||||
ENV['VERSION_CODE'] = (latest_build_version + 1).to_s
|
||||
rescue => e
|
||||
UI.error("Error generating Firebase version: #{e.message}")
|
||||
raise e
|
||||
end
|
||||
|
||||
when 'git'
|
||||
# Calculate version code from git history
|
||||
commit_count = `git rev-list --count HEAD`.to_i
|
||||
ENV['VERSION_CODE'] = (commit_count << 1).to_s
|
||||
else
|
||||
UI.user_error!("Unsupported platform: #{platform}. Supported platforms are: playstore, firebase, git")
|
||||
end
|
||||
|
||||
# Output the results
|
||||
UI.success("Generated version for #{platform}")
|
||||
UI.success("Set VERSION=#{ENV['VERSION']} VERSION_CODE=#{ENV['VERSION_CODE']}")
|
||||
version
|
||||
end
|
||||
|
||||
desc "Generate release notes"
|
||||
lane :generateReleaseNotes do |options|
|
||||
branchName = `git rev-parse --abbrev-ref HEAD`.chomp()
|
||||
lane :generateReleaseNote do |options|
|
||||
releaseNotes = changelog_from_git_commits(
|
||||
commits_count: 1,
|
||||
)
|
||||
releaseNotes
|
||||
end
|
||||
|
||||
desc "Generate full release notes from specified tag or latest release tag"
|
||||
lane :generateFullReleaseNote do |options|
|
||||
def get_latest_tag
|
||||
latest = `git describe --tags --abbrev=0`.strip
|
||||
return latest unless latest.empty?
|
||||
|
||||
latest = `git tag --sort=-creatordate`.split("\n").first
|
||||
return latest unless latest.nil? || latest.empty?
|
||||
|
||||
nil
|
||||
end
|
||||
|
||||
from_tag = options[:fromTag] || get_latest_tag
|
||||
UI.message "Using tag: #{from_tag || 'No tags found. Getting all commits...'}"
|
||||
|
||||
commits = if from_tag && !from_tag.empty?
|
||||
`git log #{from_tag}..HEAD --pretty=format:"%B"`.split("\n")
|
||||
else
|
||||
`git log --pretty=format:"%B"`.split("\n")
|
||||
end
|
||||
|
||||
categories = process_commits(commits)
|
||||
format_release_notes(categories)
|
||||
end
|
||||
|
||||
private_lane :process_commits do |commits|
|
||||
notes = {
|
||||
"breaking" => [], "feat" => [], "fix" => [],
|
||||
"perf" => [], "refactor" => [], "style" => [],
|
||||
"docs" => [], "test" => [], "build" => [],
|
||||
"ci" => [], "chore" => [], "other" => []
|
||||
}
|
||||
|
||||
commits.each do |commit|
|
||||
next if commit.empty? || commit.start_with?("Co-authored-by:", "Merge")
|
||||
|
||||
if commit.include?("BREAKING CHANGE:") || commit.include?("!")
|
||||
notes["breaking"] << commit.sub(/^[^:]+:\s*/, "")
|
||||
elsif commit =~ /^(feat|fix|perf|refactor|style|docs|test|build|ci|chore)(\(.+?\))?:/
|
||||
notes[$1] << commit.sub(/^[^:]+:\s*/, "")
|
||||
else
|
||||
notes["other"] << commit
|
||||
end
|
||||
end
|
||||
notes
|
||||
end
|
||||
|
||||
private_lane :format_release_notes do |categories|
|
||||
sections = {
|
||||
"breaking" => "💥 Breaking Changes",
|
||||
"feat" => "🚀 New Features",
|
||||
"fix" => "🐛 Bug Fixes",
|
||||
"perf" => "⚡ Performance Improvements",
|
||||
"refactor" => "♻️ Refactoring",
|
||||
"style" => "💅 Style Changes",
|
||||
"docs" => "📚 Documentation",
|
||||
"test" => "🧪 Tests",
|
||||
"build" => "📦 Build System",
|
||||
"ci" => "👷 CI Changes",
|
||||
"chore" => "🔧 Maintenance",
|
||||
"other" => "📝 Other Changes"
|
||||
}
|
||||
|
||||
notes = ["# Release Notes", "\nRelease date: #{Time.now.strftime('%d-%m-%Y')}"]
|
||||
|
||||
sections.each do |type, title|
|
||||
next if categories[type].empty?
|
||||
notes << "\n## #{title}"
|
||||
categories[type].each { |commit| notes << "\n- #{commit}" }
|
||||
end
|
||||
|
||||
UI.message "Generated Release Notes:"
|
||||
UI.message notes.join("\n")
|
||||
notes.join("\n")
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
platform :ios do
|
||||
@ -170,59 +324,60 @@ platform :ios do
|
||||
lane :build_ios do |options|
|
||||
# Set default configuration if not provided
|
||||
options[:configuration] ||= "Debug"
|
||||
ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG
|
||||
|
||||
# automatic code signing
|
||||
update_code_signing_settings(
|
||||
use_automatic_signing: true,
|
||||
path: "mifospay-ios/iosApp.xcodeproj"
|
||||
path: ios_config[:project_path]
|
||||
)
|
||||
|
||||
build_ios_app(
|
||||
project: "mifospay-ios/iosApp.xcodeproj",
|
||||
scheme: "iosApp",
|
||||
# Set configuration to debug for now
|
||||
project: ios_config[:project_path],
|
||||
scheme: ios_config[:scheme],
|
||||
configuration: options[:configuration],
|
||||
skip_codesigning: "true",
|
||||
output_directory: "mifospay-ios/build",
|
||||
output_directory: ios_config[:output_directory],
|
||||
skip_archive: "true"
|
||||
)
|
||||
end
|
||||
|
||||
lane :increment_version do |options|
|
||||
options[:serviceCredsFile] ||= "secrets/firebaseAppDistributionServiceCredentialsFile.json"
|
||||
firebase_config = FastlaneConfig.get_firebase_config(:ios)
|
||||
ios_config = FastlaneConfig::IosConfig::BUILD_CONFIG
|
||||
|
||||
latest_release = firebase_app_distribution_get_latest_release(
|
||||
app: "1:728434912738:ios:86a7badfaed88b841a1dbb",
|
||||
service_credentials_file: options[:serviceCredsFile]
|
||||
app: firebase_config[:appId],
|
||||
service_credentials_file: options[:serviceCredsFile] || firebase_config[:serviceCredsFile]
|
||||
)
|
||||
|
||||
increment_build_number(
|
||||
xcodeproj: "mifospay-ios/iosApp.xcodeproj",
|
||||
xcodeproj: ios_config[:project_path],
|
||||
build_number: latest_release[:buildVersion].to_i + 1
|
||||
)
|
||||
end
|
||||
|
||||
desc "Upload iOS application to Firebase App Distribution"
|
||||
lane :deploy_on_firebase do |options|
|
||||
options[:serviceCredsFile] ||= "secrets/firebaseAppDistributionServiceCredentialsFile.json"
|
||||
options[:groups] ||= "mifos-wallet-testers"
|
||||
firebase_config = FastlaneConfig.get_firebase_config(:ios)
|
||||
|
||||
increment_version()
|
||||
increment_version(serviceCredsFile: firebase_config[:serviceCredsFile])
|
||||
build_ios()
|
||||
releaseNotes = generateReleaseNotes()
|
||||
release = firebase_app_distribution(
|
||||
app: "1:728434912738:ios:86a7badfaed88b841a1dbb",
|
||||
service_credentials_file: options[:serviceCredsFile],
|
||||
release_notes_file: "#{releaseNotes}",
|
||||
groups: options[:groups]
|
||||
)
|
||||
releaseNotes = generateReleaseNote()
|
||||
|
||||
firebase_app_distribution(
|
||||
app: firebase_config[:appId],
|
||||
service_credentials_file: firebase_config[:serviceCredsFile],
|
||||
release_notes: releaseNotes,
|
||||
groups: firebase_config[:groups]
|
||||
)
|
||||
end
|
||||
|
||||
desc "Generate release notes"
|
||||
lane :generateReleaseNotes do
|
||||
lane :generateReleaseNote do
|
||||
branchName = `git rev-parse --abbrev-ref HEAD`.chomp()
|
||||
releaseNotes = changelog_from_git_commits(
|
||||
commits_count: 1,
|
||||
)
|
||||
releaseNotes
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -15,18 +15,58 @@ For _fastlane_ installation instructions, see [Installing _fastlane_](https://do
|
||||
|
||||
## Android
|
||||
|
||||
### android deploy_internal
|
||||
### android assembleDebugApks
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_internal
|
||||
[bundle exec] fastlane android assembleDebugApks
|
||||
```
|
||||
|
||||
Assemble debug APKs.
|
||||
|
||||
### android assembleReleaseApks
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android assembleReleaseApks
|
||||
```
|
||||
|
||||
Assemble Release APK
|
||||
|
||||
### android bundleReleaseApks
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android bundleReleaseApks
|
||||
```
|
||||
|
||||
Bundle Release APK
|
||||
|
||||
### android deployReleaseApkOnFirebase
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deployReleaseApkOnFirebase
|
||||
```
|
||||
|
||||
Publish Release Artifacts to Firebase App Distribution
|
||||
|
||||
### android deployDemoApkOnFirebase
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deployDemoApkOnFirebase
|
||||
```
|
||||
|
||||
Publish Demo Artifacts to Firebase App Distribution
|
||||
|
||||
### android deployInternal
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deployInternal
|
||||
```
|
||||
|
||||
Deploy internal tracks to Google Play
|
||||
|
||||
### android promote_to_beta
|
||||
### android promoteToBeta
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android promote_to_beta
|
||||
[bundle exec] fastlane android promoteToBeta
|
||||
```
|
||||
|
||||
Promote internal tracks to beta on Google Play
|
||||
@ -39,13 +79,29 @@ Promote internal tracks to beta on Google Play
|
||||
|
||||
Promote beta tracks to production on Google Play
|
||||
|
||||
### android deploy_on_firebase
|
||||
### android generateVersion
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android deploy_on_firebase
|
||||
[bundle exec] fastlane android generateVersion
|
||||
```
|
||||
|
||||
Upload Android application to Firebase App Distribution
|
||||
Generate Version for different platforms
|
||||
|
||||
### android generateReleaseNote
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android generateReleaseNote
|
||||
```
|
||||
|
||||
Generate release notes
|
||||
|
||||
### android generateFullReleaseNote
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane android generateFullReleaseNote
|
||||
```
|
||||
|
||||
Generate full release notes from specified tag or latest release tag
|
||||
|
||||
----
|
||||
|
||||
@ -60,6 +116,14 @@ Upload Android application to Firebase App Distribution
|
||||
|
||||
Build iOS application
|
||||
|
||||
### ios increment_version
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane ios increment_version
|
||||
```
|
||||
|
||||
|
||||
|
||||
### ios deploy_on_firebase
|
||||
|
||||
```sh
|
||||
@ -68,6 +132,14 @@ Build iOS application
|
||||
|
||||
Upload iOS application to Firebase App Distribution
|
||||
|
||||
### ios generateReleaseNote
|
||||
|
||||
```sh
|
||||
[bundle exec] fastlane ios generateReleaseNote
|
||||
```
|
||||
|
||||
Generate release notes
|
||||
|
||||
----
|
||||
|
||||
This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run.
|
||||
|
||||
32
fastlane/config/config_helpers.rb
Normal file
32
fastlane/config/config_helpers.rb
Normal file
@ -0,0 +1,32 @@
|
||||
require_relative '../../fastlane-config/android_config'
|
||||
require_relative '../../fastlane-config/ios_config'
|
||||
|
||||
module FastlaneConfig
|
||||
# Move methods directly into FastlaneConfig module instead of nested Helpers module
|
||||
def self.get_android_signing_config(options = {})
|
||||
{
|
||||
storeFile: options[:store_file] || ENV['ANDROID_STORE_FILE'] || AndroidConfig::STORE_CONFIG[:default_store_file],
|
||||
storePassword: options[:store_password] || ENV['ANDROID_STORE_PASSWORD'] || AndroidConfig::STORE_CONFIG[:default_store_password],
|
||||
keyAlias: options[:key_alias] || ENV['ANDROID_KEY_ALIAS'] || AndroidConfig::STORE_CONFIG[:default_key_alias],
|
||||
keyPassword: options[:key_password] || ENV['ANDROID_KEY_PASSWORD'] || AndroidConfig::STORE_CONFIG[:default_key_password]
|
||||
}
|
||||
end
|
||||
|
||||
def self.get_firebase_config(platform, type = :prod)
|
||||
case platform
|
||||
when :android
|
||||
app_id = type == :prod ? AndroidConfig::FIREBASE_CONFIG[:firebase_prod_app_id] : AndroidConfig::FIREBASE_CONFIG[:firebase_demo_app_id]
|
||||
{
|
||||
appId: ENV['FIREBASE_ANDROID_APP_ID'] || app_id,
|
||||
serviceCredsFile: ENV['FIREBASE_SERVICE_CREDS_FILE'] || AndroidConfig::FIREBASE_CONFIG[:firebase_service_creds_file],
|
||||
groups: ENV['FIREBASE_GROUPS'] || AndroidConfig::FIREBASE_CONFIG[:firebase_groups]
|
||||
}
|
||||
when :ios
|
||||
{
|
||||
appId: ENV['FIREBASE_IOS_APP_ID'] || IosConfig::FIREBASE_CONFIG[:firebase_app_id],
|
||||
serviceCredsFile: ENV['FIREBASE_SERVICE_CREDS_FILE'] || IosConfig::FIREBASE_CONFIG[:firebase_service_creds_file],
|
||||
groups: ENV['FIREBASE_GROUPS'] || IosConfig::FIREBASE_CONFIG[:firebase_groups]
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -0,0 +1 @@
|
||||
Merge branch 'openMF:dev' into dev
|
||||
@ -5,12 +5,24 @@
|
||||
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.0018934">
|
||||
<testcase classname="fastlane.lanes" name="0: default_platform" time="0.0018372">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="1: firebase_app_distribution" time="5.1405671">
|
||||
<testcase classname="fastlane.lanes" name="1: Switch to android generateVersion lane" time="0.0019743">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="2: versionFile" time="13.2378888">
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
<testcase classname="fastlane.lanes" name="3: google_play_track_version_codes" time="5.5812812">
|
||||
|
||||
<failure message="C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/actions/actions_helper.rb:67:in `execute_action' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:255:in `block in execute_action' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:229:in `chdir' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:229:in `execute_action' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:157:in `trigger_action_by_name' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing' FastFile:204:in `block (2 levels) in parsing_binding' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/lane.rb:41:in `call' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:204:in `try_switch_to_lane' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:146:in `trigger_action_by_name' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/fast_file.rb:159:in `method_missing' FastFile:113:in `block (2 levels) in parsing_binding' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/lane.rb:41:in `call' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:49:in `block in execute' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:45:in `chdir' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:45:in `execute' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/lane_manager.rb:46:in `cruise_lane' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/command_line_handler.rb:34:in `handle' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/commands_generator.rb:110:in `block (2 levels) in run' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane_core/lib/fastlane_core/ui/fastlane_runner.rb:124:in `run!' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/commands_generator.rb:363:in `run' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/commands_generator.rb:43:in `start' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/cli_tools_distributor.rb:123:in `take_off' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/bin/fastlane:23:in `<top (required)>' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/bin/fastlane:32:in `load' C:/Users/niyaj/.local/share/gem/ruby/3.3.0/bin/fastlane:32:in `<main>' Unexpected error: #<Faraday::ConnectionFailed wrapped=#<Socket::ResolutionError: Failed to open TCP connection to www.googleapis.com:443 (getaddrinfo: No such host is known. )>>" />
|
||||
|
||||
</testcase>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user