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/multi-platform-build-and-publish.yaml@v1.0.1
105+ with :
106+ release_type : ${{ inputs.release_type }}
107+ target_branch : ${{ inputs.target_branch }}
108+ android_package_name : ' cmp-android' # <-- Change this to your android package name
109+ ios_package_name : ' cmp-ios' # <-- Change this to your ios package name
110+ desktop_package_name : ' cmp-desktop' # <-- Change this to your desktop package name
111+ web_package_name : ' cmp-web' # <-- Change this to your web package name
112+ tester_groups : ' mifos-mobile-apps' # <-- Change this to your Firebase tester group
113+ app_identifier : ' org.mifos.kmp.template'
114+ git_url : ' git@github.com:openMF/ios-provisioning-profile.git'
115+ git_branch : ' master'
116+ match_type : ' adhoc'
117+ provisioning_profile_name : ' match AdHoc org.mifos.kmp.template'
118+ firebase_app_id : ' 1:728434912738:ios:1d81f8e53ca7a6f31a1dbb'
119+ metadata_path : ' ./fastlane/metadata'
120+ distribute_ios_firebase : ${{ inputs.distribute_ios_firebase }}
121+ distribute_ios_testflight : ${{ inputs.distribute_ios_testflight }}
122+ distribute_ios_appstore : ${{ inputs.distribute_ios_appstore }}
123+ secrets :
124+ original_keystore_file : ${{ secrets.ORIGINAL_KEYSTORE_FILE }}
125+ original_keystore_file_password : ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }}
126+ original_keystore_alias : ${{ secrets.ORIGINAL_KEYSTORE_ALIAS }}
127+ original_keystore_alias_password : ${{ secrets.ORIGINAL_KEYSTORE_ALIAS_PASSWORD }}
128+
129+ upload_keystore_file : ${{ secrets.UPLOAD_KEYSTORE_FILE }}
130+ upload_keystore_file_password : ${{ secrets.UPLOAD_KEYSTORE_FILE_PASSWORD }}
131+ upload_keystore_alias : ${{ secrets.UPLOAD_KEYSTORE_ALIAS }}
132+ upload_keystore_alias_password : ${{ secrets.UPLOAD_KEYSTORE_ALIAS_PASSWORD }}
133+
134+ notarization_apple_id : ${{ secrets.NOTARIZATION_APPLE_ID }}
135+ notarization_password : ${{ secrets.NOTARIZATION_PASSWORD }}
136+ notarization_team_id : ${{ secrets.NOTARIZATION_TEAM_ID }}
137+ appstore_key_id : ${{ secrets.APPSTORE_KEY_ID }}
138+ appstore_issuer_id : ${{ secrets.APPSTORE_ISSUER_ID }}
139+ appstore_auth_key : ${{ secrets.APPSTORE_AUTH_KEY }}
140+ match_password : ${{ secrets.MATCH_PASSWORD }}
141+ match_ssh_private_key : ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
142+
143+ windows_signing_key : ${{ secrets.WINDOWS_SIGNING_KEY }}
144+ windows_signing_password : ${{ secrets.WINDOWS_SIGNING_PASSWORD }}
145+ windows_signing_certificate : ${{ secrets.WINDOWS_SIGNING_CERTIFICATE }}
146+
147+ macos_signing_key : ${{ secrets.MACOS_SIGNING_KEY }}
148+ macos_signing_password : ${{ secrets.MACOS_SIGNING_PASSWORD }}
149+ macos_signing_certificate : ${{ secrets.MACOS_SIGNING_CERTIFICATE }}
150+
151+ linux_signing_key : ${{ secrets.LINUX_SIGNING_KEY }}
152+ linux_signing_password : ${{ secrets.LINUX_SIGNING_PASSWORD }}
153+ linux_signing_certificate : ${{ secrets.LINUX_SIGNING_CERTIFICATE }}
154+
155+ google_services : ${{ secrets.GOOGLESERVICES }}
156+ firebase_creds : ${{ secrets.FIREBASECREDS }}
157+ playstore_creds : ${{ secrets.PLAYSTORECREDS }}
158+ token : ${{ secrets.GITHUB_TOKEN }}
0 commit comments