Skip to content

Release to Staging v2.9.28 - 2026-08-07 #347

Release to Staging v2.9.28 - 2026-08-07

Release to Staging v2.9.28 - 2026-08-07 #347

Workflow file for this run

name: KMP CI
permissions:
contents: read
on:
pull_request:
types: [opened, synchronize, reopened, labeled]
paths:
- "packages/kmp-sdk/**"
- "packages/kmp-sdk-test-app/**"
- "packages/kmp-minipay-sample/**"
- ".github/workflows/kmp-ci.yml"
- ".github/actions/**"
- ".github/CI_FORCE_RUN"
push:
branches: [dev, staging, main]
paths:
- "packages/kmp-sdk/**"
- "packages/kmp-sdk-test-app/**"
- "packages/kmp-minipay-sample/**"
- ".github/workflows/kmp-ci.yml"
- ".github/actions/**"
- ".github/CI_FORCE_RUN"
jobs:
# ── KMP SDK ──────────────────────────────────────────────
kmp-sdk-tests:
runs-on: ubuntu-latest
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :shared:jvmTest
- uses: actions/upload-artifact@v4
if: always()
with:
name: kmp-sdk-test-results
path: packages/kmp-sdk/shared/build/reports/tests/
kmp-sdk-android-build:
runs-on: ubuntu-latest
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :shared:assembleDebug
kmp-sdk-ios-framework:
if: |
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'push' && contains(fromJSON('["refs/heads/staging","refs/heads/main"]'), github.ref)) ||
(github.event_name == 'pull_request' && contains(fromJSON('["staging","main"]'), github.base_ref)) ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'test-ios'))
runs-on: namespace-profile-apple-silicon-6cpu
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
kmp-sdk-ios-test:
if: |
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'push' && contains(fromJSON('["refs/heads/staging","refs/heads/main"]'), github.ref)) ||
(github.event_name == 'pull_request' && contains(fromJSON('["staging","main"]'), github.base_ref)) ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'test-ios'))
runs-on: namespace-profile-apple-silicon-6cpu
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :shared:iosSimulatorArm64Test
# ── KMP Test App ─────────────────────────────────────────
kmp-test-app-tests:
runs-on: ubuntu-latest
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk-test-app
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :composeApp:testDebugUnitTest
- uses: actions/upload-artifact@v4
if: always()
with:
name: kmp-test-app-test-results
path: packages/kmp-sdk-test-app/composeApp/build/reports/tests/
kmp-test-app-android-build:
runs-on: ubuntu-latest
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk-test-app
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :composeApp:assembleDebug
kmp-test-app-ios-build:
if: |
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'push' && contains(fromJSON('["refs/heads/staging","refs/heads/main"]'), github.ref)) ||
(github.event_name == 'pull_request' && contains(fromJSON('["staging","main"]'), github.base_ref)) ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'test-ios'))
runs-on: namespace-profile-apple-silicon-6cpu
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-sdk-test-app
steps:
- uses: actions/checkout@v4
- name: Generate token for private dependencies
uses: ./.github/actions/generate-github-token
id: github-token
with:
app-id: ${{ vars.GH_WORKFLOWS_CROSS_ACCESS_ID }}
private-key: ${{ secrets.GH_WORKFLOWS_CROSS_ACCESS_KEY }}
configure-netrc: "true"
- name: Configure git for HTTPS dependency fetch
run: git config --global url."https://github.com/".insteadOf "git@github.com:"
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Build KMP framework for iOS
working-directory: packages/kmp-sdk
run: ./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
- name: Install CocoaPods dependencies
working-directory: packages/kmp-sdk-test-app/iosApp
run: pod install
- name: Find iOS Simulator
id: sim
uses: ./.github/actions/find-ios-simulator
- name: Build iOS app
working-directory: packages/kmp-sdk-test-app/iosApp
run: |
xcodebuild -workspace iosApp.xcworkspace \
-scheme iosApp \
-sdk iphonesimulator \
-destination "id=${{ steps.sim.outputs.id }}" \
ONLY_ACTIVE_ARCH=YES \
build
# ── KMP Minipay Sample ──────────────────────────────────
kmp-minipay-android-build:
runs-on: ubuntu-latest
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-minipay-sample
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- run: ./gradlew :composeApp:assembleDebug
kmp-minipay-ios-build:
if: |
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'push' && contains(fromJSON('["refs/heads/staging","refs/heads/main"]'), github.ref)) ||
(github.event_name == 'pull_request' && contains(fromJSON('["staging","main"]'), github.base_ref)) ||
(github.event_name == 'pull_request' && contains(github.event.pull_request.labels.*.name, 'test-ios'))
runs-on: namespace-profile-apple-silicon-6cpu
timeout-minutes: 60
defaults:
run:
working-directory: packages/kmp-minipay-sample
steps:
- uses: actions/checkout@v4
- name: Generate token for private dependencies
uses: ./.github/actions/generate-github-token
id: github-token
with:
app-id: ${{ vars.GH_WORKFLOWS_CROSS_ACCESS_ID }}
private-key: ${{ secrets.GH_WORKFLOWS_CROSS_ACCESS_KEY }}
configure-netrc: "true"
- name: Configure git for HTTPS dependency fetch
run: git config --global url."https://github.com/".insteadOf "git@github.com:"
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
- uses: ./.github/actions/cache-gradle
- uses: gradle/actions/setup-gradle@v4
with:
cache-disabled: true
- name: Build KMP framework for iOS
working-directory: packages/kmp-sdk
run: ./gradlew :shared:linkDebugFrameworkIosSimulatorArm64
- name: Find iOS Simulator
id: sim
uses: ./.github/actions/find-ios-simulator
- name: Resolve SPM dependencies
working-directory: packages/kmp-minipay-sample/iosApp
run: |
xcodebuild -project iosApp.xcodeproj \
-resolvePackageDependencies
- name: Build iOS app
working-directory: packages/kmp-minipay-sample/iosApp
run: |
xcodebuild -project iosApp.xcodeproj \
-scheme iosApp \
-sdk iphonesimulator \
-destination "id=${{ steps.sim.outputs.id }}" \
ONLY_ACTIVE_ARCH=YES \
ARCHS=arm64 \
SWIFT_ENABLE_EXPLICIT_MODULES=NO \
build