Skip to content

fix(fastlane): incorporated iOS related changes from template - #2639

Merged
niyajali merged 23 commits into
openMF:devfrom
techsavvy185:fastlaneIOS
May 22, 2026
Merged

fix(fastlane): incorporated iOS related changes from template#2639
niyajali merged 23 commits into
openMF:devfrom
techsavvy185:fastlaneIOS

Conversation

@techsavvy185

@techsavvy185 techsavvy185 commented Mar 4, 2026

Copy link
Copy Markdown
Member

Fixes - Jira-#714

Please make sure these boxes are checked before submitting your pull request - thanks!

  • Run the static analysis check ./gradlew check or ci-prepush.sh to make sure you didn't break anything

  • If you have multiple commits please combine them into one commit by squashing them.

Summary by CodeRabbit

  • New Features

    • Added English (en-GB) locale support for iOS metadata and release notes
    • Introduced default age-rating configuration for App Store submissions
    • Improved iOS release flows with locale-aware release notes and privacy updates
    • Added multi-platform build & publish and site deployment workflows
  • Documentation

    • Added comprehensive CI/CD and Fastlane deployment guides
  • Chores

    • Added secrets template and CI Gradle tuning for CI environments

@techsavvy185
techsavvy185 requested a review from a team March 4, 2026 21:56
@coderabbitai

coderabbitai Bot commented Mar 4, 2026

Copy link
Copy Markdown

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds iOS primary locale support (en-GB), enhances Fastlane lanes for sanitization, CocoaPods, version/TestFlight and locale-aware metadata, introduces CI/CD workflows and documentation, updates Gemfile and CI Gradle settings, and overhauls secrets management with dynamic env-file resolution replacing committed secrets.env.

Changes

Cohort / File(s) Summary
iOS configuration
fastlane-config/ios_config.rb, fastlane-config/project_config.rb
Added primary_locale to iOS build config and changed localized App Store Connect metadata key from en-US to en-GB.
Fastlane lanes & helpers
fastlane/FastFile
Added sanitize_options(options), CocoaPods install steps, TestFlight/version bump logic, locale-aware metadata/release_notes paths using ios_config[:primary_locale], privacy plist updates, and app rating config plumbing.
Fastlane docs & metadata
fastlane/CLAUDE.md, fastlane/age_rating.json, fastlane/metadata/en-US/release_notes.txt
Added detailed Fastlane documentation, new age_rating.json default, and a release notes entry.
CI workflows & docs
.github/CLAUDE.md, .github/workflows/multi-platform-build-and-publish.yml, .github/workflows/build-and-deploy-site.yml, .github/workflows/pr-check.yml, .github/workflows/cache-cleanup.yaml, .github/workflows/promote-to-production.yml, .github/workflows/monthly-version-tag.yaml
Added multi-platform publish and site deploy workflows, updated workflow triggers and action references to v1.0.11, and added CI/CD reference documentation.
CI config & dependencies
.github/ci-gradle.properties, Gemfile
Added CI Gradle tuning (daemon disabled, parallel, increased heap, worker limits) and Ruby 3.3+ compatibility gems plus cocoapods.
Secrets management scripts & templates
keystore-manager.sh, secrets.env.template, secrets.env (deleted)
Major refactor: dynamic ENV_FILE resolution with --env-file, new print helpers, many new parse/encode/validate/update functions, expanded iOS/macOS/desktop secret handling; removed committed secrets.env and added secrets.env.template.
Misc tooling
keystore-manager.sh (details)
Introduced resolve_env_file, updated load_env_vars(env_file, show_message), encode_secrets_directory_files, update_secrets_env_with_files, validate_sync_result, plus CLI changes for sync/generate/encode/view/add/list/delete to use dynamic ENV_FILE.

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Poem

🐇 I nibble lines and hop with cheer,

en-GB hums a locale near,
Fastlane tidies, pods take flight,
secrets tuck themselves out of sight,
CI blooms pages in the night.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Docstring Coverage ✅ Passed Docstring coverage is 88.00% which is sufficient. The required threshold is 80.00%.
Title check ✅ Passed The title 'fix(fastlane): incorporated iOS related changes from template' directly corresponds to the main changeset, which incorporates iOS-related fastlane configuration and deployment enhancements.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Tip

💬 Introducing Slack Agent: The best way for teams to turn conversations into code.

Slack Agent is built on CodeRabbit's deep understanding of your code, so your team can collaborate across the entire SDLC without losing context.

  • Generate code and open pull requests
  • Plan features and break down work
  • Investigate incidents and troubleshoot customer tickets together
  • Automate recurring tasks and respond to alerts with triggers
  • Summarize progress and report instantly

Built for teams:

  • Shared memory across your entire org—no repeating context
  • Per-thread sandboxes to safely plan and execute work
  • Governance built-in—scoped access, auditability, and budget controls

One agent for your entire SDLC. Right inside Slack.

👉 Get started


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
fastlane/FastFile (1)

573-595: Extract duplicated version reconciliation logic into a shared helper.

The same “compare with latest TestFlight version and bump patch” block is duplicated in beta/release. This is a drift risk for future fixes.

Refactor sketch
+  private_lane :resolve_appstore_version do |options|
+    requested = options[:requested_version]
+    latest = options[:latest_testflight_version]
+    version = requested
+    if latest && !latest.to_s.empty?
+      begin
+        if Gem::Version.new(version) <= Gem::Version.new(latest)
+          parts = latest.split('.')
+          parts[-1] = (parts[-1].to_i + 1).to_s
+          version = parts.join('.')
+        end
+      rescue ArgumentError => e
+        UI.error("Version comparison failed: #{e.message}, using #{version}")
+      end
+    end
+    version
+  end

Also applies to: 699-720

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@fastlane/FastFile` around lines 573 - 595, Extract the duplicated "compare
with latest TestFlight version and bump patch" logic into a single helper method
(e.g., reconcile_version_with_testflight) that accepts the candidate version and
latest_version and returns the final version; move the Gem::Version comparison,
parts[-1] patch increment, UI.important bump message and the rescue
ArgumentError UI.error handling into that helper, then replace both inline
blocks in the beta and release lanes with a call to
reconcile_version_with_testflight(version, latest_version) before calling
increment_version_number (xcodeproj: ios_config[:project_path], version_number:
version); ensure the helper preserves the same behavior and messages and returns
the original candidate when comparison or parsing fails.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@fastlane/FastFile`:
- Around line 809-810: Before calling deliver in FastFile, add a pre-check that
verifies ios_config[:app_rating_config_path] exists and is a readable file and
fail fast with a clear error if not; locate the deliver invocation and validate
the value of ios_config[:app_rating_config_path] (and/or add this check into
validate_config) and raise a user-friendly error (e.g., via UI.user_error or
abort) when the path is nil, missing, or not a file so deliver is only called
with a valid age-rating config path.

---

Nitpick comments:
In `@fastlane/FastFile`:
- Around line 573-595: Extract the duplicated "compare with latest TestFlight
version and bump patch" logic into a single helper method (e.g.,
reconcile_version_with_testflight) that accepts the candidate version and
latest_version and returns the final version; move the Gem::Version comparison,
parts[-1] patch increment, UI.important bump message and the rescue
ArgumentError UI.error handling into that helper, then replace both inline
blocks in the beta and release lanes with a call to
reconcile_version_with_testflight(version, latest_version) before calling
increment_version_number (xcodeproj: ios_config[:project_path], version_number:
version); ensure the helper preserves the same behavior and messages and returns
the original candidate when comparison or parsing fails.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0adff8be-2324-42a4-8c45-0a2702700584

📥 Commits

Reviewing files that changed from the base of the PR and between c95348f and ddfbc32.

📒 Files selected for processing (4)
  • fastlane-config/ios_config.rb
  • fastlane-config/project_config.rb
  • fastlane/FastFile
  • fastlane/age_rating.json

Comment thread fastlane/FastFile
Comment on lines +809 to +810
# Age rating declarations (lootBox, parentalControls, advertising, etc.)
app_rating_config_path: ios_config[:app_rating_config_path]

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify age-rating file existence and validation logic
echo "=== Searching for age_rating files ==="
fd -a 'age_rating.json' 2>/dev/null || echo "No age_rating.json found"

echo ""
echo "=== Searching for validation and configuration references ==="
rg -n -C3 'validate_config|required_files|age_rating_config_path|app_rating_config_path' fastlane-config/project_config.rb fastlane/FastFile 2>/dev/null || echo "Search may have failed - files might not exist"

echo ""
echo "=== Checking if fastlane/FastFile exists and examining lines 809-815 ==="
if [ -f fastlane/FastFile ]; then
  echo "File exists. Reading context around lines 809-815:"
  sed -n '800,820p' fastlane/FastFile
else
  echo "fastlane/FastFile not found"
fi

echo ""
echo "=== Checking project_config validation ==="
if [ -f fastlane-config/project_config.rb ]; then
  echo "File exists. Searching for validation methods:"
  rg -n 'def.*valid|def.*required|def.*check' fastlane-config/project_config.rb
else
  echo "fastlane-config/project_config.rb not found"
fi

Repository: openMF/mifos-x-field-officer-app

Length of output: 3426


🏁 Script executed:

#!/bin/bash
# Check for any validation between validate_config call and deliver call
echo "=== Looking for validate_config call and subsequent validation ==="
rg -n -B5 -A15 'validate_config' fastlane/FastFile

echo ""
echo "=== Checking full validate_config implementation ==="
sed -n '262,290p' fastlane-config/project_config.rb

Repository: openMF/mifos-x-field-officer-app

Length of output: 1334


🏁 Script executed:

#!/bin/bash
# Search for where validate_config is called and look for any other validations
echo "=== Searching for validate_config call in FastFile ==="
rg -n 'validate_config' fastlane/FastFile

echo ""
echo "=== Looking at the deploy lane structure around line 810 ==="
sed -n '750,815p' fastlane/FastFile

echo ""
echo "=== Check if app_rating_config_path is used anywhere else ==="
rg -n 'app_rating_config_path' fastlane/
</parameter>

Repository: openMF/mifos-x-field-officer-app

Length of output: 3650


Add pre-check for age-rating config file before deliver call.

Line 810 passes ios_config[:app_rating_config_path] to deliver() without validation. The validate_config method does not check this file, so a missing or invalid path will cause a downstream Fastlane error instead of failing fast with a clear message.

Suggested guard
+      unless File.exist?(ios_config[:app_rating_config_path])
+        UI.user_error!("Missing age rating config: #{ios_config[:app_rating_config_path]}")
+      end
+
       deliver(
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@fastlane/FastFile` around lines 809 - 810, Before calling deliver in
FastFile, add a pre-check that verifies ios_config[:app_rating_config_path]
exists and is a readable file and fail fast with a clear error if not; locate
the deliver invocation and validate the value of
ios_config[:app_rating_config_path] (and/or add this check into validate_config)
and raise a user-friendly error (e.g., via UI.user_error or abort) when the path
is nil, missing, or not a file so deliver is only called with a valid age-rating
config path.

@biplab1

biplab1 commented Mar 5, 2026

Copy link
Copy Markdown
Contributor

@techsavvy185 Can you please tell us the steps taken and references followed to implement this PR?

@techsavvy185

Copy link
Copy Markdown
Member Author

@biplab1 I took this PR from the KMP template for reference and basically changed the files accordingly.
openMF/kmp-project-template@29bfa56#diff-d02dc2d9e2d5535dcae8c50f13cd3191f43aa43bcb222f75b07b92002d3f1886

@biplab1

biplab1 commented Mar 5, 2026

Copy link
Copy Markdown
Contributor

@techsavvy185 You had to refer a PR from the mifos-pay (mobile-wallet) as mentioned in the ticket. Please check.

@techsavvy185

Copy link
Copy Markdown
Member Author

@biplab1 I have made all the changes according to that PR. I, however, am not sure about the keystore files. Could you please guide me on that one?

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 13

🧹 Nitpick comments (1)
Gemfile (1)

6-12: Optional: keep Gemfile gems alphabetically ordered.

This avoids Bundler/OrderedGems warnings and keeps diffs cleaner.

♻️ Proposed ordering
 gem "abbrev"
 gem "base64"
 gem "mutex_m"
 gem "bigdecimal"

-gem "fastlane"
 gem "cocoapods"
+gem "fastlane"
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Gemfile` around lines 6 - 12, The Gemfile gem list is not alphabetically
ordered; reorder the gem entries (e.g., "abbrev", "base64", "bigdecimal",
"fastlane", "mutex_m", "cocoapods") so they are sorted alphabetically to satisfy
Bundler/OrderedGems and keep diffs clean—update the Gemfile to place each gem
line in lexicographic order and save the file.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/ci-gradle.properties:
- Around line 1-17: The CI-only Gradle properties in
.github/ci-gradle.properties (e.g., org.gradle.daemon, org.gradle.parallel,
org.gradle.jvmargs, org.gradle.workers.max, kotlin.incremental,
kotlin.compiler.execution.strategy) are never applied because workflows don't
load that file; update the GitHub workflow(s) that call the reusable external
workflow to explicitly pass these settings to Gradle—either export them as
environment variables (e.g., GRADLE_OPTS or ORG_GRADLE_PROJECT_* for each
property) or append -D flags to the Gradle command (e.g.,
-Dorg.gradle.daemon=false -Dkotlin.incremental=false etc.); alternatively,
modify the reusable workflow input interface so callers can submit CI Gradle
settings and ensure the workflow applies those to the Gradle invocation.

In @.github/CLAUDE.md:
- Around line 553-560: The table's numeric counts don't match the listed
secrets: e.g. the "Firebase" row shows count `3` but lists only `FIREBASECREDS`
and `GOOGLESERVICES`, and the `Total: 30+ secrets` doesn't match the sum of
category counts; update the table so each category count (Firebase, Play Store,
iOS, Desktop, Shared) exactly matches the number of secret names shown (or add
any missing secret names), and then recalculate and replace the "Total" value
with the correct exact sum (remove "30+" unless that is accurate), ensuring
consistency between the numeric counts and the listed secret identifiers like
FIREBASECREDS, GOOGLESERVICES, PLAYSTORECREDS, APPSTORE_KEY_ID,
MACOS_SIGNING_CERTIFICATE, GITHUB_TOKEN, etc.
- Line 570: Update the docs to match the filename expected by the keystore
manager: change the table entry that currently lists `Auth_key.p8` to
`AuthKey.p8` so it aligns with the filename used in `keystore-manager.sh` and
ensures `APPSTORE_AUTH_KEY` is encoded correctly; specifically, update the
string in the CLAUDE.md table to `AuthKey.p8` wherever `Auth_key.p8` appears and
verify consistency with the `keystore-manager.sh` mapping for
`APPSTORE_AUTH_KEY`.
- Around line 26-34: The markdown code fence showing the architecture diagram
uses an unlabeled triple-backtick block; change the opening fence from ``` to
```text so the block is language-tagged (e.g., replace the opening ``` before
"Local Workflows (.github/workflows/)" with ```text) while leaving the closing
``` unchanged to satisfy markdownlint MD040.

In @.github/workflows/build-and-deploy-site.yml:
- Around line 2-3: The workflow header comment claims deployments on merges to
dev but the workflow only has workflow_dispatch; either update the comment to
indicate manual trigger only or add a push trigger for the dev branch so they
match—specifically edit the file's top comment and the YAML triggers: either
change the on: section to include push: branches: [dev] alongside
workflow_dispatch (or replace workflow_dispatch) or reword the top comment to
state that the workflow is manual (workflow_dispatch) only; ensure you reference
the workflow_dispatch trigger and the push branches: dev configuration when
making the change.

In @.github/workflows/multi-platform-build-and-publish.yml:
- Line 113: The workflow is enabling CocoaPods with the use_cocoapods: true flag
but the repo lacks a Podfile or Kotlin CocoaPods plugin; remove or set
use_cocoapods to false in the workflow (or guard it behind a conditional) so the
iOS release job doesn't try to run CocoaPods, and if CocoaPods is actually
required add a Podfile or enable the Kotlin CocoaPods plugin in the project;
look for the use_cocoapods key in the workflow and update it accordingly.

In @.github/workflows/pr-check.yml:
- Line 92: The workflow enables CocoaPods (use_cocoapods: true) while the repo
has no Podfile and no CocoaPods plugin configured, which will break the iOS/KMP
build when build_ios: true is set; change use_cocoapods to false in the PR check
workflow to disable CocoaPods, or if CocoaPods is required add a Podfile and the
cocoapods Gradle plugin (the plugin named "cocoapods" and any Podfile entries)
to the Kotlin Multiplatform build so the iOS step and build_ios: true are
consistent.

In `@fastlane/CLAUDE.md`:
- Around line 33-41: Multiple fenced code blocks in CLAUDE.md are missing
language identifiers and trigger MD040; update each triple-backtick block (the
one containing "GitHub Actions ↓ ... App Store", the block with
"-Pandroid.injected.signing.*" properties, and the "fastlane-config/" tree
block, plus the other occurrences at lines 86-91 and 504-517) by adding a
language token such as "text" immediately after the opening ``` so they become
```text to silence MD040 and preserve formatting.
- Line 4: The header "Total Lanes: 12 (7 Android + 5 iOS)" is inconsistent with
the document body which lists 8 Android lanes and 5 iOS lanes; update the header
to reflect the correct totals (change it to "Total Lanes: 13 (8 Android + 5
iOS)") or adjust the body so counts match—edit the header text shown in the line
containing "Total Lanes:" to match the actual lane counts documented.

In `@fastlane/metadata/en-US/release_notes.txt`:
- Line 1: The release notes were updated in fastlane/metadata/en-US but the
project primary locale is set to en-GB and the iOS release lane (FastFile
release lane) writes to the primary locale path built from the project_config
primary locale; move the changes from fastlane/metadata/en-US/release_notes.txt
into fastlane/metadata/en-GB/release_notes.txt (or change the primary locale in
project_config.rb to en-US if that is the intended target) so the FastFile
release lane picks up the updated notes.
- Line 2: Remove the Git trailer line starting with "Co-authored-by:" from the
release notes so only user-facing content remains; open release_notes.txt,
delete the line that begins with "Co-authored-by:" (and any other commit-trailer
lines such as "Signed-off-by:" or similar if present), and ensure the final file
contains only the intended App Store release note text.

In `@keystore-manager.sh`:
- Around line 585-586: Update the stale "Looking for:" hint string in
keystore-manager.sh so it lists the newly supported macOS artifacts; locate the
echo that prints "${YELLOW}Looking for:
firebaseAppDistributionServiceCredentialsFile.json, google-services.json,
playStorePublishServiceCredentialsFile.json, AuthKey.p8, match_ci_key${NC}" and
expand it to include the mac_* cert/profile filenames (e.g., mac_cert*,
mac_profile*, mac_* keys) so the message accurately reflects all supported
files.
- Around line 98-105: The prompt inside resolve_env_file() that reads user input
when both secrets_dir_exists and root_exists are true can hang in
non-interactive environments; before calling read (the case handling for
"choice"), add a non-interactive guard: check if stdin is a TTY (e.g. [ -t 0 ])
or honor a NONINTERACTIVE/CI env var and if false/non-interactive, skip the
prompt and choose the default (option 1) or emit a clear message and return an
error code; otherwise proceed to the existing read prompt and case branch.
Ensure you reference resolve_env_file(), the read -r -p prompt and the case
"$choice" block so the change is applied exactly around that prompt.

---

Nitpick comments:
In `@Gemfile`:
- Around line 6-12: The Gemfile gem list is not alphabetically ordered; reorder
the gem entries (e.g., "abbrev", "base64", "bigdecimal", "fastlane", "mutex_m",
"cocoapods") so they are sorted alphabetically to satisfy Bundler/OrderedGems
and keep diffs clean—update the Gemfile to place each gem line in lexicographic
order and save the file.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 0a1735bd-84ce-4db7-b99c-c252a9006adb

📥 Commits

Reviewing files that changed from the base of the PR and between ddfbc32 and 7dc51d2.

⛔ Files ignored due to path filters (1)
  • Gemfile.lock is excluded by !**/*.lock
📒 Files selected for processing (15)
  • .github/CLAUDE.md
  • .github/ci-gradle.properties
  • .github/workflows/build-and-deploy-site.yml
  • .github/workflows/cache-cleanup.yaml
  • .github/workflows/monthly-release.yaml
  • .github/workflows/multi-platform-build-and-publish.yml
  • .github/workflows/pr-check.yml
  • .github/workflows/promote-to-production.yml
  • Gemfile
  • fastlane/CLAUDE.md
  • fastlane/age_rating.json
  • fastlane/metadata/en-US/release_notes.txt
  • keystore-manager.sh
  • secrets.env
  • secrets.env.template
💤 Files with no reviewable changes (1)
  • secrets.env
🚧 Files skipped from review as they are similar to previous changes (1)
  • fastlane/age_rating.json

Comment thread .github/ci-gradle.properties
Comment thread .github/CLAUDE.md
Comment on lines +26 to +34
```
Local Workflows (.github/workflows/)
Reusable Workflows (mifos-x-actionhub/.github/workflows/)
Custom Actions (mifos-x-actionhub-*/)
Fastlane Lanes (fastlane/Fastfile)
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add a language tag to the architecture code fence.

This currently triggers markdownlint MD040.

🧹 Proposed fix
-```
+```text
 Local Workflows (.github/workflows/)
     ↓
 Reusable Workflows (mifos-x-actionhub/.github/workflows/)
     ↓
 Custom Actions (mifos-x-actionhub-*/)
     ↓
 Fastlane Lanes (fastlane/Fastfile)
</details>

<!-- suggestion_start -->

<details>
<summary>📝 Committable suggestion</summary>

> ‼️ **IMPORTANT**
> Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

```suggestion

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 26-26: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/CLAUDE.md around lines 26 - 34, The markdown code fence showing the
architecture diagram uses an unlabeled triple-backtick block; change the opening
fence from ``` to ```text so the block is language-tagged (e.g., replace the
opening ``` before "Local Workflows (.github/workflows/)" with ```text) while
leaving the closing ``` unchanged to satisfy markdownlint MD040.

Comment thread .github/CLAUDE.md
Comment thread .github/CLAUDE.md Outdated
Comment on lines +2 to +3
# It ensures that whenever changes are merged into the dev branch or when manually triggered, the web application is built,
# packaged, and deployed to the GitHub Pages environment, making it accessible online.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Workflow description and trigger behavior are inconsistent.

Line [2]-Line [3] claims deployment on merges to dev, but Line [45]-Line [46] configures manual trigger only (workflow_dispatch). Please align either comments or triggers.

Documentation-only correction example
-# It ensures that whenever changes are merged into the dev branch or when manually triggered, the web application is built,
-# packaged, and deployed to the GitHub Pages environment, making it accessible online.
+# It can be manually triggered to build, package, and deploy the web application
+# to the GitHub Pages environment.

Also applies to: 45-46

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/build-and-deploy-site.yml around lines 2 - 3, The workflow
header comment claims deployments on merges to dev but the workflow only has
workflow_dispatch; either update the comment to indicate manual trigger only or
add a push trigger for the dev branch so they match—specifically edit the file's
top comment and the YAML triggers: either change the on: section to include
push: branches: [dev] alongside workflow_dispatch (or replace workflow_dispatch)
or reword the top comment to state that the workflow is manual
(workflow_dispatch) only; ensure you reference the workflow_dispatch trigger and
the push branches: dev configuration when making the change.

Comment thread fastlane/CLAUDE.md
Comment on lines +33 to +41
```
GitHub Actions
Custom Actions (inflate secrets, call Fastlane)
Fastlane Lanes (build, sign, upload)
Firebase / Play Store / TestFlight / App Store
```

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add language identifiers to fenced code blocks.

These blocks currently trigger MD040 warnings.

🧹 Proposed fix
-```
+```text
 GitHub Actions
     ↓
 Custom Actions (inflate secrets, call Fastlane)
     ↓
 Fastlane Lanes (build, sign, upload)
     ↓
 Firebase / Play Store / TestFlight / App Store
  • -Pandroid.injected.signing.store.file=keystores/release_keystore.keystore
    -Pandroid.injected.signing.store.password=xxx
    -Pandroid.injected.signing.key.alias=xxx
    -Pandroid.injected.signing.key.password=xxx
    

- +text
fastlane-config/
├── project_config.rb # Master configuration (ANDROID, IOS, IOS_SHARED)
├── android_config.rb # Android-specific helpers
└── ios_config.rb # iOS-specific helpers
...

Also applies to: 86-91, 504-517

🧰 Tools
🪛 markdownlint-cli2 (0.21.0)

[warning] 33-33: Fenced code blocks should have a language specified

(MD040, fenced-code-language)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@fastlane/CLAUDE.md` around lines 33 - 41, Multiple fenced code blocks in
CLAUDE.md are missing language identifiers and trigger MD040; update each
triple-backtick block (the one containing "GitHub Actions ↓ ... App Store", the
block with "-Pandroid.injected.signing.*" properties, and the "fastlane-config/"
tree block, plus the other occurrences at lines 86-91 and 504-517) by adding a
language token such as "text" immediately after the opening ``` so they become
```text to silence MD040 and preserve formatting.

@@ -0,0 +1,2 @@
fix(fastlane): Incorporated iOS related changes from template. (#2639)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Verify configured iOS primary locale and release-notes path resolution.
rg -n "primary_locale|localized_build_info|metadata_path|release_notes" fastlane-config fastlane/FastFile
fd release_notes.txt fastlane/metadata -t f

Repository: openMF/mifos-x-field-officer-app

Length of output: 1943


🏁 Script executed:

#!/bin/bash
# Check if en-GB release_notes.txt exists and list all locale directories
ls -la fastlane/metadata/
fd release_notes.txt fastlane/metadata

Repository: openMF/mifos-x-field-officer-app

Length of output: 336


Update release notes in the correct locale directory.

The primary locale is configured as en-GB (fastlane-config/project_config.rb:77), but this PR updates fastlane/metadata/en-US/release_notes.txt. The iOS release lane (FastFile:750) constructs the release notes path using the configured primary locale and will write to fastlane/metadata/en-GB/release_notes.txt. Updates to the en-US directory will be ignored during the iOS release process. Move the changes to fastlane/metadata/en-GB/release_notes.txt or update the primary locale if en-US is the intended target.

🧰 Tools
🪛 LanguageTool

[grammar] ~1-~1: Use a hyphen to join words.
Context: fix(fastlane): Incorporated iOS related changes from template. (#2639) C...

(QB_NEW_EN_HYPHEN)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@fastlane/metadata/en-US/release_notes.txt` at line 1, The release notes were
updated in fastlane/metadata/en-US but the project primary locale is set to
en-GB and the iOS release lane (FastFile release lane) writes to the primary
locale path built from the project_config primary locale; move the changes from
fastlane/metadata/en-US/release_notes.txt into
fastlane/metadata/en-GB/release_notes.txt (or change the primary locale in
project_config.rb to en-US if that is the intended target) so the FastFile
release lane picks up the updated notes.

@@ -0,0 +1,2 @@
fix(fastlane): Incorporated iOS related changes from template. (#2639)
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com> No newline at end of file

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Remove Git trailer from user-facing release notes.

Line 2 (Co-authored-by: ...) is commit metadata and should not be published as App Store release notes.

✂️ Proposed fix
 fix(fastlane): Incorporated iOS related changes from template. (`#2639`)
-Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@fastlane/metadata/en-US/release_notes.txt` at line 2, Remove the Git trailer
line starting with "Co-authored-by:" from the release notes so only user-facing
content remains; open release_notes.txt, delete the line that begins with
"Co-authored-by:" (and any other commit-trailer lines such as "Signed-off-by:"
or similar if present), and ensure the final file contains only the intended App
Store release note text.

Comment thread keystore-manager.sh
Comment thread keystore-manager.sh

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

♻️ Duplicate comments (1)
.github/workflows/multi-platform-build-and-publish.yml (1)

113-113: ⚠️ Potential issue | 🟠 Major

Disable CocoaPods until the repo is actually wired for it.

Still seeing the same blocker here. The reusable workflow only expects use_cocoapods: true when the shared module is integrated into the iOS app through CocoaPods / pod install; if that wiring is still absent in this repo, keeping Line 113 enabled will keep the iOS release path on a setup it cannot satisfy. (github.com)

#!/bin/bash
set -euo pipefail

echo "=== Podfiles ==="
fd -HI '^Podfile$' .

echo
echo "=== Kotlin CocoaPods configuration ==="
rg -n 'kotlin\("native\.cocoapods"\)|\bcocoapods\s*\{' -g '!**/Pods/**' .
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/multi-platform-build-and-publish.yml at line 113, The
workflow sets use_cocoapods: true which enables CocoaPods in the reusable job
but this repo isn’t wired for CocoaPods; change the use_cocoapods value in the
multi-platform-build-and-publish.yml workflow (the use_cocoapods: true setting)
to false or remove that key so the reusable workflow won’t attempt a pod
install; update the single occurrence of use_cocoapods in the file and re-run
the provided Podfile/CocoaPods detection commands to verify no Podfile/CocoaPods
config is expected.
🧹 Nitpick comments (2)
.github/workflows/multi-platform-build-and-publish.yml (2)

104-104: Pin the reusable workflow to an immutable SHA.

This job hands an external reusable workflow signing keys, store credentials, and GITHUB_TOKEN. GitHub’s security guidance recommends pinning reusable workflows to a full-length commit SHA, because tags like v1.0.11 are mutable. (docs.github.com)

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/multi-platform-build-and-publish.yml at line 104, The
reusable workflow invocation using "uses:
openMF/mifos-x-actionhub/.github/workflows/multi-platform-build-and-publish.yaml@v1.0.11"
must be pinned to an immutable commit SHA; update that uses reference to the
full 40-character commit SHA for the external repo (replace "@v1.0.11" with
"@<full-commit-sha>"). Locate the uses line in the workflow (the string starting
with
openMF/mifos-x-actionhub/.github/workflows/multi-platform-build-and-publish.yaml)
and fetch the corresponding commit SHA from the external repository (via git or
the GitHub UI) before replacing the ref so the workflow points to the exact
commit.

17-52: The setup header is already out of sync with the actual workflow.

The "REQUIRED SECRETS" block stops at notarization even though this job later forwards App Store Connect, Match, desktop signing, keychain/provisioning, Supabase, and token secrets. The "WORKFLOW INPUTS" block also mentions flags like build_ios and publish_ios that are not exposed by workflow_dispatch. I’d either update this header or trim it down to a single source of truth so future edits don’t keep drifting.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/multi-platform-build-and-publish.yml around lines 17 - 52,
The header comments ("REQUIRED SECRETS" and "WORKFLOW INPUTS") are out of sync
with the actual workflow_dispatch and job steps; update them to match the real
secrets and inputs used (add the App Store Connect/FASTLANE/MATCH/desktop
signing/keychain/provisioning/Supabase/token secrets that the job forwards and
remove mentions of inputs like build_ios/publish_ios that are not declared in
workflow_dispatch), or replace the long lists with a single line pointing to the
canonical source (the workflow_dispatch inputs and job/step envs) to avoid
drift; ensure the header names "REQUIRED SECRETS" and "WORKFLOW INPUTS" and any
example variables in the comment match the actual variables used later in the
file.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@keystore-manager.sh`:
- Around line 605-606: update_secrets_env_with_files() currently no-ops if
$ENV_FILE is missing which lets encode_secrets_directory_files() encode file
secrets without persisting them; change the flow so $ENV_FILE is
created/populated before any encoding: add an ensure_env_file_exists() step (or
have update_secrets_env_with_files() bootstrap $ENV_FILE from
secrets.env.template when absent) and call it before
encode_secrets_directory_files() and before the logic around the current
file-creation block (the code around the 684-688/2028-2036 areas) so file
secrets are saved on first run.
- Around line 68-69: The script uses Bash 4+ features (declare -A
IOS_STRING_SECRETS and declare -g) which break on macOS stock Bash 3; add a
startup guard that checks BASH_VERSINFO (or $BASH_VERSION) and if the major
version is less than 4 (or less than 4.2 if you need declare -g semantics)
either exit with a clear error asking the user to run the script with a newer
Bash, or implement a fallback path that avoids associative arrays and global
declare usage (e.g., use plain variables, prefixed names, or temporary files)
for the places referencing IOS_STRING_SECRETS and the locations using declare
-g; update all spots noted (symbols: IOS_STRING_SECRETS, any uses of declare -g)
to follow the chosen approach.
- Around line 489-491: The sed replacement breaks when values contain double
quotes or the chosen delimiter; create two helpers—escape_for_env(value) that
returns a value with backslashes and double quotes escaped for dotenv (so it can
be wrapped safely in double quotes), and escape_for_sed(value) that escapes
backslash, ampersand and the sed delimiter (|) for use in the replacement
portion. Replace the current escaped_value assignment with:
tmp_env=$(escape_for_env "$value"); escaped_value=$(escape_for_sed "$tmp_env");
then use sed as before: sed -i.bak "s|^${key}=.*|${key}=\"${escaped_value}\"|"
"$SECRETS_FILE". Apply the same helper usage to the other sed invocations that
build replacements (the occurrences that currently perform sed -i.bak
"s|^...|...|") so all env-file quoting and sed-delimiter cases are handled.

---

Duplicate comments:
In @.github/workflows/multi-platform-build-and-publish.yml:
- Line 113: The workflow sets use_cocoapods: true which enables CocoaPods in the
reusable job but this repo isn’t wired for CocoaPods; change the use_cocoapods
value in the multi-platform-build-and-publish.yml workflow (the use_cocoapods:
true setting) to false or remove that key so the reusable workflow won’t attempt
a pod install; update the single occurrence of use_cocoapods in the file and
re-run the provided Podfile/CocoaPods detection commands to verify no
Podfile/CocoaPods config is expected.

---

Nitpick comments:
In @.github/workflows/multi-platform-build-and-publish.yml:
- Line 104: The reusable workflow invocation using "uses:
openMF/mifos-x-actionhub/.github/workflows/multi-platform-build-and-publish.yaml@v1.0.11"
must be pinned to an immutable commit SHA; update that uses reference to the
full 40-character commit SHA for the external repo (replace "@v1.0.11" with
"@<full-commit-sha>"). Locate the uses line in the workflow (the string starting
with
openMF/mifos-x-actionhub/.github/workflows/multi-platform-build-and-publish.yaml)
and fetch the corresponding commit SHA from the external repository (via git or
the GitHub UI) before replacing the ref so the workflow points to the exact
commit.
- Around line 17-52: The header comments ("REQUIRED SECRETS" and "WORKFLOW
INPUTS") are out of sync with the actual workflow_dispatch and job steps; update
them to match the real secrets and inputs used (add the App Store
Connect/FASTLANE/MATCH/desktop signing/keychain/provisioning/Supabase/token
secrets that the job forwards and remove mentions of inputs like
build_ios/publish_ios that are not declared in workflow_dispatch), or replace
the long lists with a single line pointing to the canonical source (the
workflow_dispatch inputs and job/step envs) to avoid drift; ensure the header
names "REQUIRED SECRETS" and "WORKFLOW INPUTS" and any example variables in the
comment match the actual variables used later in the file.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 464af1d4-3e88-4663-8443-0b017bf2ba8c

📥 Commits

Reviewing files that changed from the base of the PR and between 7dc51d2 and 620b17d.

📒 Files selected for processing (4)
  • .github/workflows/monthly-version-tag.yaml
  • .github/workflows/multi-platform-build-and-publish.yml
  • keystore-manager.sh
  • keystores/original_keystore.keystore

Comment thread keystore-manager.sh
Comment on lines +68 to +69
# Global associative array for iOS string secrets
declare -A IOS_STRING_SECRETS

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🌐 Web query:

Does the default /bin/bash shipped with macOS support associative arrays (declare -A) and declare -g? Which Bash version is bundled by default?

💡 Result:

No.

  • Associative arrays (declare -A): Not supported by the /bin/bash that ships with macOS, because macOS still bundles Bash 3.2.x, and declare -A (associative arrays) was introduced in Bash 4. [1]
  • Global declarations (declare -g): Not supported in macOS’s default /bin/bash either, because declare -g was added in Bash 4.2. [2]

Which Bash version is bundled by default?
macOS ships GNU Bash 3.2.57(1)-release as /bin/bash (commonly cited as the bundled version, including on modern macOS releases for compatibility/licensing reasons). [3]

Sources
[1] Bash Hackers Wiki (arrays; notes declare -A introduced with Bash 4) (bash-hackers.gabe565.com)
[2] Greg’s Wiki / Wooledge BashFAQ (notes Bash 4.2 adds declare -g) (mywiki.wooledge.org)
[3] The Register (macOS ships bash 3.2.57(1)) (theregister.com)

Citations:


Script fails on stock macOS: declare -A and declare -g require Bash 4+, but /bin/bash on macOS is Bash 3.2.x.

The default /bin/bash on macOS is version 3.2.57(1), which predates Bash 4 and does not support associative arrays (declare -A, introduced in Bash 4) or global declarations (declare -g, added in Bash 4.2). The script will abort on any macOS system using the stock shell unless a newer Bash is installed and explicitly used.

Applies to lines 68–69, 425, 540, 617, and 967.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@keystore-manager.sh` around lines 68 - 69, The script uses Bash 4+ features
(declare -A IOS_STRING_SECRETS and declare -g) which break on macOS stock Bash
3; add a startup guard that checks BASH_VERSINFO (or $BASH_VERSION) and if the
major version is less than 4 (or less than 4.2 if you need declare -g semantics)
either exit with a clear error asking the user to run the script with a newer
Bash, or implement a fallback path that avoids associative arrays and global
declare usage (e.g., use plain variables, prefixed names, or temporary files)
for the places referencing IOS_STRING_SECRETS and the locations using declare
-g; update all spots noted (symbols: IOS_STRING_SECRETS, any uses of declare -g)
to follow the chosen approach.

Comment thread keystore-manager.sh
Comment thread keystore-manager.sh
@biplab1

biplab1 commented Mar 11, 2026

Copy link
Copy Markdown
Contributor

@techsavvy185 Please resolve the merge conflicts.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
.github/workflows/pr-check.yml (1)

72-72: Fix the stale trigger comment.

Line 72 now filters pull_request targets for both dev and development, but the inline comment still says "pushes to dev branch". Updating or dropping it will keep the workflow docs aligned with the actual trigger.

Proposed fix
-    branches: [ dev, development ]  # Runs on pushes to dev branch
+    branches: [ dev, development ]  # Runs for PRs targeting dev or development
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/pr-check.yml at line 72, Update the stale inline comment
next to the YAML key branches: [ dev, development ] so it accurately describes
the trigger (this workflow filters pull_request targets for both dev and
development) or remove the comment entirely; locate the comment adjacent to the
branches entry in pr-check.yml and replace "Runs on pushes to dev branch" with a
concise phrase like "Runs on pull requests targeting dev and development" (or
simply delete the comment).
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Nitpick comments:
In @.github/workflows/pr-check.yml:
- Line 72: Update the stale inline comment next to the YAML key branches: [ dev,
development ] so it accurately describes the trigger (this workflow filters
pull_request targets for both dev and development) or remove the comment
entirely; locate the comment adjacent to the branches entry in pr-check.yml and
replace "Runs on pushes to dev branch" with a concise phrase like "Runs on pull
requests targeting dev and development" (or simply delete the comment).

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: cb942d3f-91f5-44d8-9743-5535c3560a9f

📥 Commits

Reviewing files that changed from the base of the PR and between 620b17d and a01a152.

📒 Files selected for processing (1)
  • .github/workflows/pr-check.yml

Comment thread .github/workflows/multi-platform-build-and-publish.yml Outdated
@biplab1 biplab1 changed the title fix(fastlane): Incorporated iOS related changes from template. fix(fastlane): Incorporated iOS related changes from template Mar 16, 2026
Comment thread .github/workflows/multi-platform-build-and-publish.yml

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

♻️ Duplicate comments (1)
.github/workflows/multi-platform-build-and-publish.yml (1)

113-113: ⚠️ Potential issue | 🟠 Major

Disable CocoaPods for now to avoid iOS lane failure.

Line 113 still sets use_cocoapods: true, but this has already been flagged and requested to be set false. Keep it disabled until Podfile/CocoaPods config is actually present.

Proposed fix
-      use_cocoapods: true
+      use_cocoapods: false
#!/bin/bash
set -euo pipefail

echo "=== Check workflow setting ==="
rg -nP '^\s*use_cocoapods:\s*' .github/workflows/multi-platform-build-and-publish.yml

echo "=== Check Podfile presence ==="
fd -HI '^Podfile$' || true

echo "=== Check Kotlin CocoaPods DSL/plugin usage ==="
rg -nP 'kotlin\("native\.cocoapods"\)|^\s*cocoapods\s*\{' -g '*.kts' -g '*.gradle' || true
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/multi-platform-build-and-publish.yml at line 113, Update
the GitHub Actions workflow to disable CocoaPods by changing the use_cocoapods
setting from true to false; locate the use_cocoapods entry in the
multi-platform-build-and-publish workflow (look for the symbol use_cocoapods)
and set it to false so iOS lanes don’t attempt Pod operations until
Podfile/CocoaPods config is added.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/multi-platform-build-and-publish.yml:
- Around line 37-47: The workflow comment block in
.github/workflows/multi-platform-build-and-publish.yml is stale: it lists inputs
publish_android, build_ios, and publish_ios that are not defined under
workflow_dispatch; update the documentation to match the actual
workflow_dispatch inputs (remove the three obsolete entries or add the
corresponding workflow_dispatch inputs if they are intended features). Locate
the block containing the commented "WORKFLOW INPUTS" and the referenced symbols
publish_android, build_ios, publish_ios and either delete those lines or add the
missing inputs under workflow_dispatch so the docs and inputs stay in sync.

---

Duplicate comments:
In @.github/workflows/multi-platform-build-and-publish.yml:
- Line 113: Update the GitHub Actions workflow to disable CocoaPods by changing
the use_cocoapods setting from true to false; locate the use_cocoapods entry in
the multi-platform-build-and-publish workflow (look for the symbol
use_cocoapods) and set it to false so iOS lanes don’t attempt Pod operations
until Podfile/CocoaPods config is added.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 684cd846-f106-4a8d-b8df-e22e43a84228

📥 Commits

Reviewing files that changed from the base of the PR and between a01a152 and 233faaf.

📒 Files selected for processing (1)
  • .github/workflows/multi-platform-build-and-publish.yml

Comment on lines +37 to +47
# WORKFLOW INPUTS:
# - release_type: 'internal' (default) or 'beta'
# - target_branch: Branch to use for release (default: 'development')
# - 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

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Workflow input documentation block is stale.

Lines 44–47 describe publish_android, build_ios, and publish_ios, but those inputs are not defined under workflow_dispatch. This is misleading for release operators.

Proposed doc-only correction
-# - publish_android: Enable/disable Android Play Store publishing
-# - build_ios: Enable/disable iOS build
-# - publish_ios: Enable/disable iOS App Store publishing
+# - distribute_ios_firebase: Enable/disable iOS Firebase App Distribution
+# - distribute_ios_testflight: Enable/disable iOS TestFlight distribution
+# - distribute_ios_appstore: Enable/disable iOS App Store distribution
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/multi-platform-build-and-publish.yml around lines 37 - 47,
The workflow comment block in
.github/workflows/multi-platform-build-and-publish.yml is stale: it lists inputs
publish_android, build_ios, and publish_ios that are not defined under
workflow_dispatch; update the documentation to match the actual
workflow_dispatch inputs (remove the three obsolete entries or add the
corresponding workflow_dispatch inputs if they are intended features). Locate
the block containing the commented "WORKFLOW INPUTS" and the referenced symbols
publish_android, build_ios, publish_ios and either delete those lines or add the
missing inputs under workflow_dispatch so the docs and inputs stay in sync.

Comment thread .github/workflows/pr-check.yml
Comment thread keystore-manager.sh
@biplab1

biplab1 commented Mar 17, 2026

Copy link
Copy Markdown
Contributor

@techsavvy185 Please don't add usernames to commit messages.

Comment thread .github/CLAUDE.md Outdated
Comment thread .github/CLAUDE.md Outdated
Comment thread .github/CLAUDE.md Outdated
Comment thread .github/CLAUDE.md Outdated
Comment thread .github/CLAUDE.md Outdated
@techsavvy185

Copy link
Copy Markdown
Member Author

@biplab1 Actually I didn't add it myself, I just clicked apply suggestion and clicked on. I'll take care of it from the next time onwards.

@biplab1

biplab1 commented Mar 20, 2026

Copy link
Copy Markdown
Contributor

@techsavvy185 Can you please confirm about the Gemfile.lock - was it auto-generated or you had used it from the reference project? If it was auto-generated then please add it back.

@techsavvy185

Copy link
Copy Markdown
Member Author

@biplab1 it wasn't autogenerated I edited it using the other project and saw your review on the Mifos mobile pr hence removed it.

@biplab1

biplab1 commented Mar 23, 2026

Copy link
Copy Markdown
Contributor

@techsavvy185 Please generate the Gemfile.Lock and add it in this PR.

@biplab1 biplab1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert these changes I had requested earlier since the cocoapods wasn't setup, however, there is another PR (#2654) in progress which aims to implement it. So, in order to avoid any conflicts, let's keep it as it was.

Comment thread .github/workflows/pr-check.yml Outdated
Comment thread .github/workflows/multi-platform-build-and-publish.yml Outdated
biplab1
biplab1 previously approved these changes Mar 24, 2026

@biplab1 biplab1 left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. This can be merged.

@niyajali niyajali left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Recheck everything and each file from template and mifos-pay project and make sure

Comment thread secrets.env
@biplab1 biplab1 changed the title fix(fastlane): Incorporated iOS related changes from template fix(fastlane): incorporated iOS related changes from template Apr 13, 2026

@niyajali niyajali left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the keystores/original_keystore.keystore file shouldn't be copied.

@sonarqubecloud

sonarqubecloud Bot commented May 7, 2026

Copy link
Copy Markdown

Comment thread fastlane-config/project_config.rb Outdated
Comment thread fastlane-config/project_config.rb Outdated
@sonarqubecloud

Copy link
Copy Markdown

@niyajali
niyajali merged commit 2e9ce3f into openMF:dev May 22, 2026
10 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants