mobile-wallet/.github/workflows/multi-platform-build-and-publish.yml
Sk Niyaj Ali f0d3d72e05
chore(actions): Migrated Android & iOS Workflows to use Fastlane (#1841)
* chore: Update web dependencies

Updated the following dependencies:
- Upgraded `enhanced-resolve` from 5.17.0 to 5.18.0
- Upgraded `karma` from 6.4.3 to 6.4.4
- Upgraded `kotlin-web-helpers` to 2.0.0
- Upgraded `mocha` from 10.7.0 to 10.7.3
- Upgraded `webpack` from 5.93.0 to 5.94.0
- Upgraded `ws` from 8.5.0 to 8.18.0

Removed the following dependencies:
- `@types/eslint`
- `@types/eslint-scope`

Also, updated the multi-platform build and publish workflow to use `niyajali/mifos-mobile-github-actions` instead of `openMF/mifos-mobile-github-actions`.

* ci: Update GitHub Actions workflow

This commit updates the GitHub Actions workflows to:

- Remove the pull request trigger from the `build-and-deploy-site` workflow. The workflow will now only be triggered manually or on a schedule.
- Add `build_ios` as an input to the `multi-platform-build-and-publish` workflow to control whether the iOS app should be built.
- Remove unused inputs from the `multi-platform-build-and-publish` workflow, including `publish_desktop` and `publish_web`.

* chore: Add Fastlane lanes and update workflows

This commit introduces new Fastlane lanes for Android and iOS:

- **Android:**
  - `assembleDebugApks`: Assembles debug APKs.
  - `assembleReleaseApks`: Assembles release APKs using a keystore.
  - `bundlePlayStoreRelease`: Bundles a Play Store release, including generating a version and release notes.
  - `deploy_on_firebase`: Deploys the release APK to Firebase App Distribution.
  - `buildAndSignApp`: A private lane to build and sign the app with provided keystore credentials.
  - `generateVersion`: Generates and sets version information.
  - `generateReleaseNotes`: Generates release notes from git commits.
- **iOS:**
  - `build_ios`: Builds the iOS app with optional configuration (defaults to Debug).
  - `increment_version`: Increments the build number using Firebase App Distribution's latest release.
  - `deploy_on_firebase`: Deploys the iOS app to Firebase App Distribution, including incrementing the build number.
  - `generateReleaseNotes`: Generates release notes from git commits.

It also updates the following workflows:

- **promote-to-production.yml**: Removes the manual trigger and workflow dispatch, making it only triggered by GitHub releases.
- **tag-weekly-release.yml**: Updates the cron schedule to run weekly.
- **multi-platform-build-and-publish.yml**: Switches back to using `openMF/mifos-mobile-github-actions` instead of `niyajali/mifos-mobile-github-actions`.

Additionally, it relocates the keystore to a `keystores` directory, updates the `build.gradle.kts` file to reflect this change, and adds necessary metadata for the Play Store. It also updates the `AppFile` to use the playStorePublishServiceCredentialsFile from the secrets directory and adds a `secrets` directory to the `.gitignore`.

* ci: Remove `publish_android` input from multi-platform workflow

This commit removes the `publish_android` input from the `multi-platform-build-and-publish` workflow.
This input was previously used to control whether the Android app should be published to the Play Store.
Since this functionality is no longer required, the input has been removed to simplify the workflow configuration.

* chore: Remove `repoName` param from `generateReleaseNotes` lane

This commit removes the `repoName` parameter from the `generateReleaseNotes` lane in the Fastfile. The `repoName` parameter is no longer needed as the lane now automatically determines the repository name.

This change simplifies the `generateReleaseNotes` lane and makes it more robust.
2024-12-30 22:24:06 -05:00

140 lines
5.5 KiB
YAML

# GitHub Actions Workflow for Kotlin Multi-Platform Application Deployment
#
# OVERVIEW:
# This workflow supports building and publishing applications across multiple platforms:
# - Android (APK/AAB)
# - iOS (IPA)
# - Desktop (EXE, MSI, DMG, DEB)
# - Web (GitHub Pages)
#
# PREREQUISITES:
# Ensure your project is configured with:
# - Gradle build system
# - Kotlin Multiplatform Project with Android, iOS, Desktop, and Web modules
# - Fastlane for deployment automation
# - Separate modules/package names for each platform
#
# REQUIRED SECRETS:
# Configure the following secrets in GitHub repository settings:
# - ORIGINAL_KEYSTORE_FILE: Base64 encoded Android release keystore
# - ORIGINAL_KEYSTORE_FILE_PASSWORD: Keystore password
# - ORIGINAL_KEYSTORE_ALIAS: Keystore alias
# - ORIGINAL_KEYSTORE_ALIAS_PASSWORD: Keystore alias password
# - UPLOAD_KEYSTORE_FILE: Base64 encoded Android release keystore
# - UPLOAD_KEYSTORE_FILE_PASSWORD: Keystore password
# - UPLOAD_KEYSTORE_ALIAS: Keystore alias
# - UPLOAD_KEYSTORE_ALIAS_PASSWORD: Keystore alias password
# - GOOGLESERVICES: Google Services configuration JSON
# - PLAYSTORECREDS: Play Store service account credentials
# - FIREBASECREDS: Firebase distribution credentials
# - NOTARIZATION_APPLE_ID: Apple ID for macOS app notarization
# - NOTARIZATION_PASSWORD: Notarization password
# - NOTARIZATION_TEAM_ID: Apple developer team ID
# WORKFLOW INPUTS:
# - release_type: 'internal' (default) or 'beta'
# - target_branch: Branch to use for release (default: 'dev')
# - android_package_name: Name of Android module
# - ios_package_name: Name of iOS module
# - desktop_package_name: Name of desktop module
# - web_package_name: Name of web module
# - publish_android: Enable/disable Android Play Store publishing
# - build_ios: Enable/disable iOS build
# - publish_ios: Enable/disable iOS App Store publishing
# USAGE:
# 1. Ensure all required secrets are configured
# 2. Customize package names in workflow inputs
# 3. Toggle platform-specific publishing flags
# 4. Trigger workflow manually or via GitHub Actions UI
# https://github.com/openMF/mifos-mobile-github-actions/blob/main/.github/workflows/multi-platform-build-and-publish.yaml
# ##############################################################################
# DON'T EDIT THIS FILE UNLESS NECESSARY #
# ##############################################################################
name: Multi-Platform Build and Publish
on:
workflow_dispatch:
inputs:
release_type:
type: choice
options:
- internal
- beta
default: internal
description: Release Type
target_branch:
type: string
default: 'dev'
description: 'Target branch for release'
build_ios:
type: boolean
default: false
description: Build iOS App
publish_ios:
type: boolean
default: false
description: Publish iOS App On App Store
permissions:
contents: write
id-token: write
pages: write
concurrency:
group: "reusable"
cancel-in-progress: false
jobs:
multi_platform_build_and_publish:
name: Multi-Platform Build and Publish
uses: openMF/mifos-mobile-github-actions/.github/workflows/multi-platform-build-and-publish.yaml@main
with:
release_type: ${{ inputs.release_type }}
target_branch: ${{ inputs.target_branch }}
android_package_name: 'mifospay-android' # <-- Change this to your android package name
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
build_ios: ${{ inputs.build_ios }}
publish_ios: ${{ inputs.publish_ios }}
secrets:
original_keystore_file: ${{ secrets.ORIGINAL_KEYSTORE_FILE }}
original_keystore_file_password: ${{ secrets.ORIGINAL_KEYSTORE_FILE_PASSWORD }}
original_keystore_alias: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS }}
original_keystore_alias_password: ${{ secrets.ORIGINAL_KEYSTORE_ALIAS_PASSWORD }}
upload_keystore_file: ${{ secrets.UPLOAD_KEYSTORE_FILE }}
upload_keystore_file_password: ${{ secrets.UPLOAD_KEYSTORE_FILE_PASSWORD }}
upload_keystore_alias: ${{ secrets.UPLOAD_KEYSTORE_ALIAS }}
upload_keystore_alias_password: ${{ secrets.UPLOAD_KEYSTORE_ALIAS_PASSWORD }}
notarization_apple_id: ${{ secrets.NOTARIZATION_APPLE_ID }}
notarization_password: ${{ secrets.NOTARIZATION_PASSWORD }}
notarization_team_id: ${{ secrets.NOTARIZATION_TEAM_ID }}
windows_signing_key: ${{ secrets.WINDOWS_SIGNING_KEY }}
windows_signing_password: ${{ secrets.WINDOWS_SIGNING_PASSWORD }}
windows_signing_certificate: ${{ secrets.WINDOWS_SIGNING_CERTIFICATE }}
macos_signing_key: ${{ secrets.MACOS_SIGNING_KEY }}
macos_signing_password: ${{ secrets.MACOS_SIGNING_PASSWORD }}
macos_signing_certificate: ${{ secrets.MACOS_SIGNING_CERTIFICATE }}
linux_signing_key: ${{ secrets.LINUX_SIGNING_KEY }}
linux_signing_password: ${{ secrets.LINUX_SIGNING_PASSWORD }}
linux_signing_certificate: ${{ secrets.LINUX_SIGNING_CERTIFICATE }}
google_services: ${{ secrets.GOOGLESERVICES }}
firebase_creds: ${{ secrets.FIREBASECREDS }}
playstore_creds: ${{ secrets.PLAYSTORECREDS }}
token: ${{ secrets.GITHUB_TOKEN }}