Skip to content

Commit 908e6cf

Browse files
authored
Merge branch 'dev' into transfer-fund-action
2 parents b1081e0 + 2e9ce3f commit 908e6cf

16 files changed

Lines changed: 2792 additions & 62 deletions

.github/CLAUDE.md

Lines changed: 714 additions & 0 deletions
Large diffs are not rendered by default.

.github/ci-gradle.properties

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Disable daemon for CI to avoid leftover processes
2+
org.gradle.daemon=false
3+
4+
# Run tasks in parallel where possible
5+
org.gradle.parallel=true
6+
7+
# Increase heap and metaspace for larger builds (macOS-latest has ~7 GB available)
8+
org.gradle.jvmargs=-Xmx7g
9+
10+
# Limit max workers to avoid memory pressure in CI
11+
org.gradle.workers.max=3
12+
13+
# Disable Kotlin incremental compilation in CI for clean, consistent builds
14+
kotlin.incremental=false
15+
16+
# Use in-process Kotlin compiler to avoid extra forked processes
17+
kotlin.compiler.execution.strategy=in-process
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# This workflow is designed to automate the process of building and deploying a Kotlin/JS web application to GitHub Pages.
2+
# It ensures that whenever changes are merged into the dev branch or when manually triggered, the web application is built,
3+
# packaged, and deployed to the GitHub Pages environment, making it accessible online.
4+
5+
# Key Features:
6+
# - Automated web application build using Kotlin/JS
7+
# - Deployment to GitHub Pages
8+
# - Supports configurable web project module name
9+
# - Manages deployment concurrency and environment settings
10+
# - Provides secure deployment with proper permissions
11+
12+
# Prerequisites:
13+
# - Kotlin Multiplatform/JS project configured with Gradle
14+
# - Web module set up for browser distribution
15+
# - Java 17 or compatible version
16+
# - GitHub Pages enabled in repository settings
17+
18+
# Workflow Configuration:
19+
# - Requires input of `web_package_name` to specify the web project module
20+
# - Uses Windows runner for build process
21+
# - Leverages GitHub Actions for build, pages configuration, and deployment
22+
23+
# Workflow Triggers:
24+
# - Can be manually called from other workflows
25+
# - Supports workflow_call for reusability across projects
26+
27+
# Deployment Process:
28+
# 1. Checkout repository code
29+
# 2. Set up Java development environment
30+
# 3. Build Kotlin/JS web application
31+
# 4. Configure GitHub Pages
32+
# 5. Upload built artifacts
33+
# 6. Deploy to GitHub Pages
34+
35+
# https://github.com/openMF/mifos-x-actionhub/blob/main/.github/workflows/build-and-deploy-site.yaml
36+
37+
# ##############################################################################
38+
# DON'T EDIT THIS FILE UNLESS NECESSARY #
39+
# ##############################################################################
40+
41+
name: Build And Deploy Web App
42+
43+
# Trigger conditions for the workflow
44+
on:
45+
workflow_dispatch:
46+
47+
# Concurrency settings to manage multiple workflow runs
48+
# This ensures orderly deployment to production environment
49+
concurrency:
50+
group: "web-pages"
51+
cancel-in-progress: false
52+
53+
permissions:
54+
contents: read # Read repository contents
55+
pages: write # Write to GitHub Pages
56+
id-token: write # Write authentication tokens
57+
pull-requests: write # Write to pull requests
58+
59+
jobs:
60+
build_and_deploy_web:
61+
name: Build And Deploy Web App
62+
uses: openMF/mifos-x-actionhub/.github/workflows/build-and-deploy-site.yaml@v1.0.11
63+
secrets: inherit
64+
with:
65+
web_package_name: 'cmp-web' # <-- Change with your web package name

.github/workflows/cache-cleanup.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ on:
77

88
jobs:
99
cleanup:
10-
uses: openMF/mifos-x-actionhub/.github/workflows/cache-cleanup.yaml@v1.0.0
10+
uses: openMF/mifos-x-actionhub/.github/workflows/cache-cleanup.yaml@v1.0.11
1111
with:
1212
cleanup_pr: ${{ github.event_name == 'pull_request' && github.event.repository.private == true }}
1313
cleanup_all: ${{ github.event_name == 'workflow_dispatch' }}

.github/workflows/monthly-release.yaml renamed to .github/workflows/monthly-version-tag.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,5 +62,5 @@ concurrency:
6262
jobs:
6363
monthly_release:
6464
name: Tag Monthly Release
65-
uses: openMF/mifos-x-actionhub/.github/workflows/monthly-version-tag.yaml@v1.0.0
65+
uses: openMF/mifos-x-actionhub/.github/workflows/monthly-version-tag.yaml@v1.0.11
6666
secrets: inherit
Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
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: 'development')
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.11
105+
with:
106+
release_type: ${{ inputs.release_type }}
107+
target_branch: ${{ inputs.target_branch }}
108+
android_package_name: 'cmp-android'
109+
ios_package_name: 'cmp-ios'
110+
desktop_package_name: 'cmp-desktop'
111+
web_package_name: 'cmp-web'
112+
metadata_path: './fastlane/metadata'
113+
use_cocoapods: true
114+
shared_module: ':cmp-shared'
115+
distribute_ios_firebase: ${{ inputs.distribute_ios_firebase }}
116+
# When App Store is enabled, skip TestFlight — deliver() already uploads
117+
# the IPA to App Store Connect which makes the build available in TestFlight.
118+
# Running both in parallel causes version conflicts since the upstream
119+
# reusable workflow has no job dependency between the two.
120+
distribute_ios_testflight: ${{ inputs.distribute_ios_testflight && !inputs.distribute_ios_appstore }}
121+
distribute_ios_appstore: ${{ inputs.distribute_ios_appstore }}
122+
secrets:
123+
original_keystore_file: ${{ secrets.ORIGINAL_KEYSTORE_FILE }}
124+
original_keystore_file_password: ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }}
125+
original_keystore_alias: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS }}
126+
original_keystore_alias_password: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS_PASSWORD }}
127+
128+
upload_keystore_file: ${{ secrets.UPLOAD_KEYSTORE_FILE }}
129+
upload_keystore_file_password: ${{ secrets.UPLOAD_KEYSTORE_FILE_PASSWORD }}
130+
upload_keystore_alias: ${{ secrets.UPLOAD_KEYSTORE_ALIAS }}
131+
upload_keystore_alias_password: ${{ secrets.UPLOAD_KEYSTORE_ALIAS_PASSWORD }}
132+
133+
notarization_apple_id: ${{ secrets.NOTARIZATION_APPLE_ID }}
134+
notarization_password: ${{ secrets.NOTARIZATION_PASSWORD }}
135+
notarization_team_id: ${{ secrets.NOTARIZATION_TEAM_ID }}
136+
appstore_key_id: ${{ secrets.APPSTORE_KEY_ID }}
137+
appstore_issuer_id: ${{ secrets.APPSTORE_ISSUER_ID }}
138+
appstore_auth_key: ${{ secrets.APPSTORE_AUTH_KEY }}
139+
match_password: ${{ secrets.MATCH_PASSWORD }}
140+
match_ssh_private_key: ${{ secrets.MATCH_SSH_PRIVATE_KEY }}
141+
142+
windows_signing_key: ${{ secrets.WINDOWS_SIGNING_KEY }}
143+
windows_signing_password: ${{ secrets.WINDOWS_SIGNING_PASSWORD }}
144+
windows_signing_certificate: ${{ secrets.WINDOWS_SIGNING_CERTIFICATE }}
145+
146+
macos_signing_key: ${{ secrets.MACOS_SIGNING_KEY }}
147+
macos_signing_password: ${{ secrets.MACOS_SIGNING_PASSWORD }}
148+
macos_signing_certificate: ${{ secrets.MACOS_SIGNING_CERTIFICATE }}
149+
150+
linux_signing_key: ${{ secrets.LINUX_SIGNING_KEY }}
151+
linux_signing_password: ${{ secrets.LINUX_SIGNING_PASSWORD }}
152+
linux_signing_certificate: ${{ secrets.LINUX_SIGNING_CERTIFICATE }}
153+
154+
keychain_password: ${{ secrets.KEYCHAIN_PASSWORD }}
155+
certificates_password: ${{ secrets.CERTIFICATES_PASSWORD }}
156+
mac_app_distribution_certificate_b64: ${{ secrets.MAC_APP_DISTRIBUTION_CERTIFICATE_B64 }}
157+
mac_installer_distribution_certificate_b64: ${{ secrets.MAC_INSTALLER_DISTRIBUTION_CERTIFICATE_B64 }}
158+
mac_embedded_provision_b64: ${{ secrets.MAC_EMBEDDED_PROVISION_B64 }}
159+
mac_runtime_provision_b64: ${{ secrets.MAC_RUNTIME_PROVISION_B64 }}
160+
161+
google_services: ${{ secrets.GOOGLESERVICES }}
162+
firebase_creds: ${{ secrets.FIREBASECREDS }}
163+
playstore_creds: ${{ secrets.PLAYSTORECREDS }}
164+
token: ${{ secrets.GITHUB_TOKEN }}
165+
supabase_creds: ${{ secrets.SUPABASECREDS }}

.github/workflows/pr-check.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ name: PR Checks
6767
# Trigger conditions for the workflow
6868
on:
6969
push:
70-
branches: [ development ] # Runs on pushes to dev branch
70+
branches: [ dev, development ]
7171
pull_request:
72-
branches: [ development ] # Runs on pushes to dev branch
72+
branches: [ dev, development ] # Runs on pushes to dev branch
7373

7474
# Concurrency settings to prevent multiple simultaneous workflow runs
7575
concurrency:
@@ -91,3 +91,4 @@ jobs:
9191
build_ios: true # <-- Change to 'false' if you don't want to build iOS
9292
use_cocoapods: true
9393
shared_module: ':cmp-shared'
94+
java-version: '21'

.github/workflows/promote-to-production.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,6 @@ jobs:
7070
# Job to promote app from beta to production in Play Store
7171
play_promote_production:
7272
name: Promote Beta to Production Play Store
73-
uses: openMF/mifos-x-actionhub/.github/workflows/promote-to-production.yaml@v1.0.0
73+
uses: openMF/mifos-x-actionhub/.github/workflows/promote-to-production.yaml@v1.0.11
7474
secrets:
7575
playstore_creds: ${{ secrets.PLAYSTORECREDS }}

Gemfile.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ GEM
292292
terminal-notifier (2.0.0)
293293
terminal-table (3.0.2)
294294
unicode-display_width (>= 1.1.1, < 3)
295+
thread_safe (0.3.6)
295296
trailblazer-option (0.1.2)
296297
tty-cursor (0.7.1)
297298
tty-screen (0.8.2)

fastlane-config/ios_config.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ module IosConfig
2222
version_number: ProjectConfig::IOS[:version_number],
2323
metadata_path: ProjectConfig::IOS[:metadata_path],
2424
app_rating_config_path: ProjectConfig::IOS[:age_rating_config_path],
25+
primary_locale: ProjectConfig::IOS[:primary_locale],
2526

2627
# Shared (from IOS_SHARED)
2728
team_id: ProjectConfig::IOS_SHARED[:team_id],

0 commit comments

Comments
 (0)