chore(fastlane): Refactor Fastlane configuration and workflows (#1846)

This commit is contained in:
Sk Niyaj Ali 2025-02-04 21:57:16 +05:30 committed by GitHub
parent fb7a12e807
commit 46b2e129d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
12 changed files with 456 additions and 99 deletions

View File

@ -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:

View File

@ -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",
},

View 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 }}

View File

@ -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)

View File

@ -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)

View 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

View 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

View File

@ -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

View File

@ -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.

View 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

View File

@ -0,0 +1 @@
Merge branch 'openMF:dev' into dev

View File

@ -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&apos;&#10;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&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:229:in `chdir&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:229:in `execute_action&apos;&#10;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&apos;&#10;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&apos;&#10;FastFile:204:in `block (2 levels) in parsing_binding&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/lane.rb:41:in `call&apos;&#10;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&apos;&#10;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&apos;&#10;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&apos;&#10;FastFile:113:in `block (2 levels) in parsing_binding&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/lane.rb:41:in `call&apos;&#10;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&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:45:in `chdir&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/runner.rb:45:in `execute&apos;&#10;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&apos;&#10;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&apos;&#10;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&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/command.rb:187:in `call&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/command.rb:157:in `run&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/runner.rb:444:in `run_active_command&apos;&#10;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!&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/commander-4.6.0/lib/commander/delegates.rb:18:in `run!&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/commands_generator.rb:363:in `run&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/fastlane/lib/fastlane/commands_generator.rb:43:in `start&apos;&#10;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&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/gems/fastlane-2.226.0/bin/fastlane:23:in `&lt;top (required)&gt;&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/bin/fastlane:32:in `load&apos;&#10;C:/Users/niyaj/.local/share/gem/ruby/3.3.0/bin/fastlane:32:in `&lt;main&gt;&apos;&#10;&#10;Unexpected error: #&lt;Faraday::ConnectionFailed wrapped=#&lt;Socket::ResolutionError: Failed to open TCP connection to www.googleapis.com:443 (getaddrinfo: No such host is known. )&gt;&gt;" />
</testcase>