Skip to content

Publish GiniBankSDKExample to Firebase Distribution #20

Publish GiniBankSDKExample to Firebase Distribution

Publish GiniBankSDKExample to Firebase Distribution #20

name: Publish GiniBankSDKExample to Firebase Distribution
on:
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-publish
cancel-in-progress: ${{ !contains(github.ref, 'refs/tags/')}}
jobs:
check:
uses: ./.github/workflows/bank-sdk.check.yml
secrets:
GINI_MOBILE_TEST_CLIENT_SECRET: ${{ secrets.GINI_MOBILE_TEST_CLIENT_SECRET }}
upload-version:
needs: check
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- uses: maxim-lobanov/[email protected]
with:
xcode-version: '15.3'
- name: Setup provisioning profile
env:
BUILD_CERTIFICATE_BASE64: ${{ secrets.GINI_DISTRIBUTION_CERTIFICATE }}
P12_PASSWORD: ${{ secrets.GINI_DISTRIBUTION_CERTIFICATE_SECRET }}
BUILD_PROVISION_PROFILE_BASE64: ${{ secrets.GINI_BANK_SDK_EXAMPLE_ADHOC_DISTRIBUTION_PROVISION_PROFILE }}
BUILD_PROVISION_PROFILE_EXTENSION_BASE64: ${{ secrets.GINI_BANK_SDK_EXTENSION_ADHOC_DISTRIBUTION_PROVISION_PROFILE }}
KEYCHAIN_PASSWORD: ${{ secrets.GINI_DISTRIBUTION_CERTIFICATE_SECRET }}
run: |
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
PP_PATH1=$RUNNER_TEMP/build_pp1.mobileprovision
PP_PATH2=$RUNNER_TEMP/build_pp2.mobileprovision
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# import certificate and provisioning profile from secrets
echo -n "$BUILD_CERTIFICATE_BASE64" | base64 --decode --output $CERTIFICATE_PATH
echo -n "$BUILD_PROVISION_PROFILE_BASE64" | base64 --decode --output $PP_PATH1
echo -n "$BUILD_PROVISION_PROFILE_EXTENSION_BASE64" | base64 --decode --output $PP_PATH2
# create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# import certificate to keychain
security import $CERTIFICATE_PATH -P "$P12_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security list-keychain -d user -s $KEYCHAIN_PATH
# apply provisioning profile
mkdir -p ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH1 ~/Library/MobileDevice/Provisioning\ Profiles
cp $PP_PATH2 ~/Library/MobileDevice/Provisioning\ Profiles
- name: Setup Manual Signing for Xcode project
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.2.0'
bundler-cache: true
- uses: maierj/[email protected]
with:
lane: 'setup_manual_signing'
options: >
{
"project_path":"BankSDK/GiniBankSDKExample/GiniBankSDKExample.xcodeproj",
"team_id":"JA825X8F7Z",
"target":"GiniBankSDKExample",
"target_extension": "GiniBankSDKShareExtension",
"bundle_identifier": "net.gini.banksdk.example",
"bundle_identifier_extension": "net.gini.banksdk.example.ShareExtension",
"profile_name": "Gini Bank SDK Example App Ad-Hoc Distribution",
"profile_name_extension" : "Gini Bank SDK Share Extension Ad-Hoc Distribution",
"entitlements_file_path": "GiniBankSDKExample/Example Swift.entitlements",
"entitlements_file_path_extension": "GiniBankSDKShareExtension/GiniBankSDKShareExtension.entitlements",
"ci": "true"
}
- name: Setup Credentials
run: |
plutil -replace client_id -string "gini-mobile-test" BankSDK/GiniBankSDKExample/GiniBankSDKExample/Credentials.plist
plutil -replace client_password -string "${{ secrets.GINI_MOBILE_TEST_CLIENT_SECRET }}" BankSDK/GiniBankSDKExample/GiniBankSDKExample/Credentials.plist
- name: Archiving project
run: |
xcodebuild clean archive \
-workspace GiniMobile.xcworkspace \
-scheme "GiniBankSDKExample" \
-archivePath ./GiniBankSDKExample.xcarchive \
-configuration Release \
-destination generic/platform=iOS \
CODE_SIGN_IDENTITY="Apple Distribution" \
CODE_SIGNING_REQUIRED=NO \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGN_STYLE=Manual \
DEVELOPMENT_TEAM=JA825X8F7Z
- name: Exporting .ipa
run: |
xcodebuild \
-exportArchive \
-archivePath GiniBankSDKExample.xcarchive \
-exportPath . \
-exportOptionsPlist ExportOptions.plist \
-destination "generic/platform=iOS" \
CODE_SIGNING_REQUIRED=YES \
ONLY_ACTIVE_ARCH=NO \
CODE_SIGN_STYLE=Manual
- name: Check file existence
uses: andstor/file-existence-action@v3
with:
files: "*.ipa"
fail: true
- name: Install Node.js 20.x
uses: actions/setup-node@v4
with:
node-version: 20
- run: npm install -g [email protected]
shell: bash
- name: Distribute bank-sdk example ipa to Firebase App Distribution
id: distribute
run: |
chmod +x .github/publish_to_firebase.sh
.github/publish_to_firebase.sh
shell: bash
env:
INPUT_APPID: ${{ secrets.GINI_BANK_SDK_EXAMPLE_APP_FIREBASE_ID }}
INPUT_SERVICECREDENTIALSFILECONTENT: ${{ secrets.FIREBASE_CREDENTIAL_FILE_CONTENT }}
INPUT_FILE: GiniBankSDKExample.ipa
INPUT_GROUPS: testers
INPUT_RELEASENOTES: |
${{ format('{{ {0} {1} }}', github.ref, github.sha) }}
${{ github.event.head_commit.message }}
- name: Extract Jira ticket
id: extract_jira_ticket
run: |
commit_message=$(git log -1 --pretty=%B)
jira_ticket=$(echo "$commit_message" | sed -n '2p')
echo "JIRA_TICKET_NAME=${jira_ticket}" >> $GITHUB_ENV
- name: Login to jira
if: ${{ env.JIRA_TICKET_NAME != null }}
uses: justin-jhg/gajira-login@v1
env:
JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}
JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_KEY }}
- name: Comment on issue
if: ${{ env.JIRA_TICKET_NAME != null }}
uses: atlassian/gajira-comment@v3
with:
issue: ${{ env.JIRA_TICKET_NAME }}
comment: Build bank example app ${{ steps.distribute.outputs.FIREBASE_CONSOLE_URI }}