1+ # GitHub Actions Workflow for Kotlin Multi-Platform Application Deployment
2+ #
3+ # OVERVIEW:
4+ # This workflow supports building and publishing applications across multiple platforms:
5+ # - Android (APK/AAB)
6+ # - iOS (IPA)
7+ # - Desktop (EXE, MSI, DMG, DEB)
8+ # - Web (GitHub Pages)
9+ #
10+ # PREREQUISITES:
11+ # Ensure your project is configured with:
12+ # - Gradle build system
13+ # - Kotlin Multiplatform Project with Android, iOS, Desktop, and Web modules
14+ # - Fastlane for deployment automation
15+ # - Separate modules/package names for each platform
16+ #
17+ # REQUIRED SECRETS:
18+ # Configure the following secrets in GitHub repository settings:
19+ # - ORIGINAL_KEYSTORE_FILE: Base64 encoded Android release keystore
20+ # - ORIGINAL_KEYSTORE_FILE_PASSWORD: Keystore password
21+ # - ORIGINAL_KEYSTORE_ALIAS: Keystore alias
22+ # - ORIGINAL_KEYSTORE_ALIAS_PASSWORD: Keystore alias password
23+
24+ # - UPLOAD_KEYSTORE_FILE: Base64 encoded Android release keystore
25+ # - UPLOAD_KEYSTORE_FILE_PASSWORD: Keystore password
26+ # - UPLOAD_KEYSTORE_ALIAS: Keystore alias
27+ # - UPLOAD_KEYSTORE_ALIAS_PASSWORD: Keystore alias password
28+
29+ # - GOOGLESERVICES: Google Services configuration JSON
30+ # - PLAYSTORECREDS: Play Store service account credentials
31+ # - FIREBASECREDS: Firebase distribution credentials
32+
33+ # - NOTARIZATION_APPLE_ID: Apple ID for macOS app notarization
34+ # - NOTARIZATION_PASSWORD: Notarization password
35+ # - NOTARIZATION_TEAM_ID: Apple developer team ID
36+
37+ # WORKFLOW INPUTS:
38+ # - release_type: 'internal' (default) or 'beta'
39+ # - target_branch: Branch to use for release (default: 'dev')
40+ # - android_package_name: Name of Android module
41+ # - ios_package_name: Name of iOS module
42+ # - desktop_package_name: Name of desktop module
43+ # - web_package_name: Name of web module
44+ # - publish_android: Enable/disable Android Play Store publishing
45+ # - build_ios: Enable/disable iOS build
46+ # - publish_ios: Enable/disable iOS App Store publishing
47+
48+ # USAGE:
49+ # 1. Ensure all required secrets are configured
50+ # 2. Customize package names in workflow inputs
51+ # 3. Toggle platform-specific publishing flags
52+ # 4. Trigger workflow manually or via GitHub Actions UI
53+
54+ # https://github.com/openMF/mifos-x-actionhub/blob/main/.github/workflows/multi-platform-build-and-publish.yaml
55+
56+ # ##############################################################################
57+ # DON'T EDIT THIS FILE UNLESS NECESSARY #
58+ # ##############################################################################
59+ name : Multi-Platform Build and Publish
60+
61+ on :
62+ workflow_dispatch :
63+ inputs :
64+ release_type :
65+ type : choice
66+ options :
67+ - internal
68+ - beta
69+ default : internal
70+ description : Release Type
71+
72+ target_branch :
73+ type : string
74+ default : ' development'
75+ description : ' Target branch for release'
76+
77+ distribute_ios_firebase :
78+ type : boolean
79+ default : false
80+ description : Distribute iOS App via Firebase App Distribution
81+
82+ distribute_ios_testflight :
83+ type : boolean
84+ default : false
85+ description : Distribute iOS App via TestFlight (App Store Connect)
86+
87+ distribute_ios_appstore :
88+ type : boolean
89+ default : false
90+ description : Distribute iOS App to Appstore
91+
92+ permissions :
93+ contents : write
94+ id-token : write
95+ pages : write
96+
97+ concurrency :
98+ group : " reusable"
99+ cancel-in-progress : false
100+
101+ jobs :
102+ multi_platform_build_and_publish :
103+ name : Multi-Platform Build and Publish
104+ uses :
openMF/mifos-x-actionhub/.github/workflows/[email protected] 105+ with :
106+ java-version : 21
107+ release_type : ${{ inputs.release_type }}
108+ target_branch : ${{ inputs.target_branch }}
109+ android_package_name : ' cmp-android'
110+ ios_package_name : ' cmp-ios'
111+ desktop_package_name : ' cmp-desktop'
112+ web_package_name : ' cmp-web'
113+ tester_groups : ' mifos-mobile-apps'
114+ app_identifier : ' org.mifos.mobile'
115+ git_url :
' [email protected] :openMF/ios-provisioning-profile.git' 116+ git_branch : ' mifos-mobile'
117+ match_type : ' adhoc'
118+ provisioning_profile_name : ' match AdHoc org.mifos.mobile'
119+ firebase_app_id : ' 1:728434912738:ios:ee2e0815a6915b351a1dbb'
120+ metadata_path : ' ./fastlane/metadata/ios'
121+ use_cocoapods : true # <-- Set to true if using CocoaPods integration for KMP
122+ shared_module : ' :cmp-shared' # <-- Gradle path to your shared KMP module (e.g., :shared)
123+ cmp_desktop_dir : ' cmp-desktop'
124+ keychain_name : signing.keychain-db # optional
125+ distribute_ios_firebase : ${{ inputs.distribute_ios_firebase }}
126+ distribute_ios_testflight : ${{ inputs.distribute_ios_testflight }}
127+ distribute_ios_appstore : ${{ inputs.distribute_ios_appstore }}
128+ secrets :
129+ original_keystore_file : ${{ secrets.ORIGINAL_KEYSTORE_FILE }}
130+ original_keystore_file_password : ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }}
131+ original_keystore_alias : ${{ secrets.ORIGINAL_KEYSTORE_ALIAS }}
132+ original_keystore_alias_password : ${{ secrets.ORIGINAL_KEYSTORE_ALIAS_PASSWORD }}
133+
134+ upload_keystore_file : ${{ secrets.UPLOAD_KEYSTORE_FILE }}
135+ upload_keystore_file_password : ${{ secrets.UPLOAD_KEYSTORE_FILE_PASSWORD }}
136+ upload_keystore_alias : ${{ secrets.UPLOAD_KEYSTORE_ALIAS }}
137+ upload_keystore_alias_password : ${{ secrets.UPLOAD_KEYSTORE_ALIAS_PASSWORD }}
138+
139+ notarization_apple_id : ${{ secrets.NOTARIZATION_APPLE_ID }}
140+ notarization_password : ${{ secrets.NOTARIZATION_PASSWORD }}
141+ notarization_team_id : ${{ secrets.NOTARIZATION_TEAM_ID }}
142+ keychain_password : ${{ secrets.KEYCHAIN_PASSWORD }}
143+ certificates_password : ${{ secrets.CERTIFICATES_PASSWORD }}
144+ mac_app_distribution_certificate_b64 : ${{ secrets.MAC_APP_DISTRIBUTION_CERTIFICATE_B64 }}
145+ mac_installer_distribution_certificate_b64 : ${{ secrets.MAC_INSTALLER_DISTRIBUTION_CERTIFICATE_B64 }}
146+ mac_embedded_provision_b64 : ${{ secrets.MAC_EMBEDDED_PROVISION_B64 }}
147+ mac_runtime_provision_b64 : ${{ secrets.MAC_RUNTIME_PROVISION_B64 }}
148+ appstore_key_id : ${{ secrets.APPSTORE_KEY_ID }}
149+ appstore_issuer_id : ${{ secrets.APPSTORE_ISSUER_ID }}
150+ appstore_auth_key : ${{ secrets.APPSTORE_AUTH_KEY }}
151+ match_password : ${{ secrets.MATCH_PASSWORD }}
152+ match_ssh_private_key : ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
153+
154+ windows_signing_key : ${{ secrets.WINDOWS_SIGNING_KEY }}
155+ windows_signing_password : ${{ secrets.WINDOWS_SIGNING_PASSWORD }}
156+ windows_signing_certificate : ${{ secrets.WINDOWS_SIGNING_CERTIFICATE }}
157+
158+ macos_signing_key : ${{ secrets.MACOS_SIGNING_KEY }}
159+ macos_signing_password : ${{ secrets.MACOS_SIGNING_PASSWORD }}
160+ macos_signing_certificate : ${{ secrets.MACOS_SIGNING_CERTIFICATE }}
161+
162+ linux_signing_key : ${{ secrets.LINUX_SIGNING_KEY }}
163+ linux_signing_password : ${{ secrets.LINUX_SIGNING_PASSWORD }}
164+ linux_signing_certificate : ${{ secrets.LINUX_SIGNING_CERTIFICATE }}
165+
166+ google_services : ${{ secrets.GOOGLESERVICES }}
167+ firebase_creds : ${{ secrets.FIREBASECREDS }}
168+ playstore_creds : ${{ secrets.PLAYSTORECREDS }}
169+ token : ${{ secrets.GITHUB_TOKEN }}
0 commit comments